Debugger: Add writable property to ValueLocation.
Value{Piece}Location:
- Add member to indicate whether the current location, respectively
all its pieces are in locations where they can theoretically be
modified.
This commit is contained in:
@@ -47,14 +47,16 @@ ValuePieceLocation::Normalize(bool bigEndian)
|
|||||||
|
|
||||||
ValueLocation::ValueLocation()
|
ValueLocation::ValueLocation()
|
||||||
:
|
:
|
||||||
fBigEndian(false)
|
fBigEndian(false),
|
||||||
|
fWritable(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ValueLocation::ValueLocation(bool bigEndian)
|
ValueLocation::ValueLocation(bool bigEndian)
|
||||||
:
|
:
|
||||||
fBigEndian(bigEndian)
|
fBigEndian(bigEndian),
|
||||||
|
fWritable(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,6 +214,7 @@ ValueLocation::SetTo(const ValueLocation& other, uint64 bitOffset,
|
|||||||
void
|
void
|
||||||
ValueLocation::Clear()
|
ValueLocation::Clear()
|
||||||
{
|
{
|
||||||
|
fWritable = false;
|
||||||
fPieces.clear();
|
fPieces.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,6 +230,11 @@ ValueLocation::AddPiece(const ValuePieceLocation& piece)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fPieces.size() == 1)
|
||||||
|
fWritable = piece.writable;
|
||||||
|
else
|
||||||
|
fWritable = fWritable && piece.writable;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,16 @@ struct ValuePieceLocation {
|
|||||||
// significant bit)
|
// significant bit)
|
||||||
value_piece_location_type type;
|
value_piece_location_type type;
|
||||||
void* value; // used for storing implicit values
|
void* value; // used for storing implicit values
|
||||||
|
bool writable; // indicates if the piece is in a
|
||||||
|
// location in the target team
|
||||||
|
// where it can be modified
|
||||||
|
|
||||||
|
|
||||||
ValuePieceLocation()
|
ValuePieceLocation()
|
||||||
:
|
:
|
||||||
type(VALUE_PIECE_LOCATION_INVALID),
|
type(VALUE_PIECE_LOCATION_INVALID),
|
||||||
value(NULL)
|
value(NULL),
|
||||||
|
writable(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,12 +101,14 @@ struct ValuePieceLocation {
|
|||||||
{
|
{
|
||||||
type = VALUE_PIECE_LOCATION_MEMORY;
|
type = VALUE_PIECE_LOCATION_MEMORY;
|
||||||
this->address = address;
|
this->address = address;
|
||||||
|
this->writable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetToRegister(uint32 reg)
|
void SetToRegister(uint32 reg)
|
||||||
{
|
{
|
||||||
type = VALUE_PIECE_LOCATION_REGISTER;
|
type = VALUE_PIECE_LOCATION_REGISTER;
|
||||||
this->reg = reg;
|
this->reg = reg;
|
||||||
|
this->writable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSize(target_size_t size)
|
void SetSize(target_size_t size)
|
||||||
@@ -128,6 +134,7 @@ struct ValuePieceLocation {
|
|||||||
SetSize(size);
|
SetSize(size);
|
||||||
type = VALUE_PIECE_LOCATION_IMPLICIT;
|
type = VALUE_PIECE_LOCATION_IMPLICIT;
|
||||||
value = valueData;
|
value = valueData;
|
||||||
|
writable = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,6 +160,7 @@ public:
|
|||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
bool IsBigEndian() const { return fBigEndian; }
|
bool IsBigEndian() const { return fBigEndian; }
|
||||||
|
bool IsWritable() const { return fWritable; }
|
||||||
|
|
||||||
bool AddPiece(const ValuePieceLocation& piece);
|
bool AddPiece(const ValuePieceLocation& piece);
|
||||||
|
|
||||||
@@ -170,6 +178,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
PieceVector fPieces;
|
PieceVector fPieces;
|
||||||
bool fBigEndian;
|
bool fBigEndian;
|
||||||
|
bool fWritable;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user