mirror of https://gitlab.com/basile.b/dexed.git
set hwd eflags
This commit is contained in:
parent
b60c08b8a0
commit
8832ae387c
|
@ -134,7 +134,7 @@ type
|
||||||
procedure setInspectableRegister(index: TSegRegister; value: TCPUSegValue);
|
procedure setInspectableRegister(index: TSegRegister; value: TCPUSegValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TSetFlagEvent = procedure(reg: TFlag; val: boolean) of object;
|
TSetFlagEvent = procedure(val: PtrUint) of object;
|
||||||
|
|
||||||
TSetFprEvent = procedure(reg: TFpuRegister; val: extended) of object;
|
TSetFprEvent = procedure(reg: TFpuRegister; val: extended) of object;
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ type
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Makes a category for the local variables in an object inspector
|
// Makes a category for the local variables in an object inspector
|
||||||
TInspectableLocals= class(TPersistent)
|
TInspectableLocals = class(TPersistent)
|
||||||
private
|
private
|
||||||
fLocals: TStringList;
|
fLocals: TStringList;
|
||||||
fPropIndex: integer;
|
fPropIndex: integer;
|
||||||
|
@ -185,6 +185,7 @@ type
|
||||||
// Stores the registers content, to be displayable in an object inspector.
|
// Stores the registers content, to be displayable in an object inspector.
|
||||||
TInspectableCPU = class(TPersistent)
|
TInspectableCPU = class(TPersistent)
|
||||||
private
|
private
|
||||||
|
fFullFlags: PtrUint;
|
||||||
fFlags: TFlags;
|
fFlags: TFlags;
|
||||||
fSetFlagEvent: TSetFlagEvent;
|
fSetFlagEvent: TSetFlagEvent;
|
||||||
fGpr: TInspectableGPR;
|
fGpr: TInspectableGPR;
|
||||||
|
@ -200,7 +201,7 @@ type
|
||||||
constructor create(setGprEvent: TSetGprEvent; setSsrEvent: TSetSsrEvent;
|
constructor create(setGprEvent: TSetGprEvent; setSsrEvent: TSetSsrEvent;
|
||||||
setFlagEvent: TSetFlagEvent; setFprEvent: TSetFprEvent);
|
setFlagEvent: TSetFlagEvent; setFprEvent: TSetFprEvent);
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
procedure setInspectableFlags(value: word);
|
procedure setInspectableFlags(value: PtrUint);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Represents an item in the call stack
|
// Represents an item in the call stack
|
||||||
|
@ -371,7 +372,7 @@ type
|
||||||
procedure setGpr(reg: TCpuRegister; val: TCpuGprValue);
|
procedure setGpr(reg: TCpuRegister; val: TCpuGprValue);
|
||||||
procedure setFpr(reg: TFpuRegister; val: extended);
|
procedure setFpr(reg: TFpuRegister; val: extended);
|
||||||
procedure setSsr(reg: TSegRegister; val: TCPUSegValue);
|
procedure setSsr(reg: TSegRegister; val: TCPUSegValue);
|
||||||
procedure setFlag(reg: TFLAG; val: boolean);
|
procedure setFlag(val: PtrUint);
|
||||||
//
|
//
|
||||||
procedure projNew(project: ICECommonProject);
|
procedure projNew(project: ICECommonProject);
|
||||||
procedure projChanged(project: ICECommonProject);
|
procedure projChanged(project: ICECommonProject);
|
||||||
|
@ -774,10 +775,13 @@ begin
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TInspectableCPU.setInspectableFlags(value: word);
|
procedure TInspectableCPU.setInspectableFlags(value: PtrUint);
|
||||||
var
|
var
|
||||||
flg: TFlag;
|
flg: TFlag;
|
||||||
begin
|
begin
|
||||||
|
if fFullFlags = value then
|
||||||
|
exit;
|
||||||
|
fFullFlags:=value;
|
||||||
fFlags:= [];
|
fFlags:= [];
|
||||||
for flg in TFlag do
|
for flg in TFlag do
|
||||||
if (value and FlagValues[flg]) >= FlagValues[flg] then
|
if (value and FlagValues[flg]) >= FlagValues[flg] then
|
||||||
|
@ -791,11 +795,10 @@ begin
|
||||||
if fFlags = value then
|
if fFlags = value then
|
||||||
exit;
|
exit;
|
||||||
for flg in TFlag do
|
for flg in TFlag do
|
||||||
begin
|
|
||||||
if (flg in value) <> (flg in fFlags) then
|
if (flg in value) <> (flg in fFlags) then
|
||||||
fSetFlagEvent(flg, flg in value);
|
fFullFlags:= fFullFlags xor FlagValues[flg];
|
||||||
end;
|
|
||||||
fFlags := value;
|
fFlags := value;
|
||||||
|
fSetFlagEvent(fFullFlags);
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
|
@ -1617,7 +1620,7 @@ begin
|
||||||
end;
|
end;
|
||||||
flagOffset:
|
flagOffset:
|
||||||
begin
|
begin
|
||||||
fInspState.setInspectableFlags(word(val.AsInteger));
|
fInspState.setInspectableFlags({$IFDEF CPU64}val.AsInt64{$ELSE}val.AsInteger{$ENDIF});
|
||||||
end;
|
end;
|
||||||
segOffset..segOffset+5:
|
segOffset..segOffset+5:
|
||||||
begin
|
begin
|
||||||
|
@ -1641,7 +1644,6 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
// TODO-cGDB: get SSE registers
|
// TODO-cGDB: get SSE registers
|
||||||
// TODO-cGDB: get EFLAGS
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
stateViewer.RefreshPropertyValues;
|
stateViewer.RefreshPropertyValues;
|
||||||
|
@ -1883,17 +1885,13 @@ begin
|
||||||
gdbCommand(cmd);
|
gdbCommand(cmd);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEGdbWidget.setFlag(reg: TFLAG; val: boolean);
|
procedure TCEGdbWidget.setFlag(val: PtrUint);
|
||||||
const
|
const
|
||||||
// TODO-cGDB: set eflags from expr fails with "invalid cast"
|
spec = 'set $eflags = 0x%X';
|
||||||
spec: array[boolean] of string = (
|
|
||||||
'set $eflags &= ~0x%X',
|
|
||||||
'set $eflags |= 0x%X'
|
|
||||||
);
|
|
||||||
var
|
var
|
||||||
cmd: string;
|
cmd: string;
|
||||||
begin
|
begin
|
||||||
cmd := format(spec[val], [FlagValues[reg]]);
|
cmd := format(spec, [val]);
|
||||||
gdbCommand(cmd);
|
gdbCommand(cmd);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue