mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-11 14:49:28 +02:00
FpDebug: fix new registers as watch result / get text, instead of read-int / add unique reg-nums
This commit is contained in:
parent
f36d862b98
commit
836e23ff27
@ -57,28 +57,6 @@ type
|
||||
deFailed);
|
||||
TFPDCompareStepInfo = (dcsiNewLine, dcsiSameLine, dcsiNoLineInfo, dcsiZeroLine);
|
||||
|
||||
{ TDbgRegisterValue }
|
||||
|
||||
TDbgRegisterValue = class
|
||||
private
|
||||
FDwarfIdx: cardinal;
|
||||
FName: string;
|
||||
FNumValue: TDBGPtr;
|
||||
FSize: byte;
|
||||
FStrValue: string;
|
||||
public
|
||||
constructor Create(const AName: String);
|
||||
procedure Assign(ASource: TDbgRegisterValue);
|
||||
function HasEqualVal(AnOther: TDbgRegisterValue): Boolean;
|
||||
procedure SetValue(ANumValue: TDBGPtr; const AStrValue: string; ASize: byte; ADwarfIdx: cardinal);
|
||||
procedure Setx86EFlagsValue(ANumValue: TDBGPtr);
|
||||
property Name: string read FName;
|
||||
property NumValue: TDBGPtr read FNumValue;
|
||||
property StrValue: string read FStrValue;
|
||||
property Size: byte read FSize;
|
||||
property DwarfIdx: cardinal read FDwarfIdx;
|
||||
end;
|
||||
|
||||
TGDbgRegisterValueList = specialize TFPGObjectList<TDbgRegisterValue>;
|
||||
|
||||
{ TDbgRegisterValueList }
|
||||
@ -163,6 +141,7 @@ type
|
||||
function ReadRegister(ARegNum: Cardinal; out AValue: TDbgPtr; AContext: TFpDbgLocationContext): Boolean; override;
|
||||
function RegisterSize(ARegNum: Cardinal): Integer; override;
|
||||
function RegisterNumber(ARegName: String; out ARegNum: Cardinal): Boolean; override;
|
||||
function GetRegister(const ARegNum: Cardinal; AContext: TFpDbgLocationContext): TDbgRegisterValue; override;
|
||||
|
||||
function WriteRegister(ARegNum: Cardinal; const AValue: TDbgPtr; AContext: TFpDbgLocationContext): Boolean; override;
|
||||
end;
|
||||
@ -2043,6 +2022,41 @@ begin
|
||||
ARegNum := ARegister.DwarfIdx;
|
||||
end;
|
||||
|
||||
function TDbgMemReader.GetRegister(const ARegNum: Cardinal; AContext: TFpDbgLocationContext
|
||||
): TDbgRegisterValue;
|
||||
var
|
||||
ARegister: TDbgRegisterValue;
|
||||
StackFrame: Integer;
|
||||
AFrame: TDbgCallstackEntry;
|
||||
CtxThread: TDbgThread;
|
||||
begin
|
||||
// TODO: Thread with ID
|
||||
result := nil;
|
||||
CtxThread := GetDbgThread(AContext);
|
||||
if CtxThread = nil then
|
||||
exit;
|
||||
|
||||
if AContext <> nil then // TODO: Always true?
|
||||
StackFrame := AContext.StackFrame
|
||||
else
|
||||
StackFrame := 0;
|
||||
if StackFrame = 0 then
|
||||
begin
|
||||
Result:=CtxThread.RegisterValueList.FindRegisterByDwarfIndex(ARegNum);
|
||||
end
|
||||
else
|
||||
begin
|
||||
CtxThread.PrepareCallStackEntryList(StackFrame+1);
|
||||
if CtxThread.CallStackEntryList.Count <= StackFrame then
|
||||
exit;
|
||||
AFrame := CtxThread.CallStackEntryList[StackFrame];
|
||||
if AFrame <> nil then
|
||||
Result:=AFrame.RegisterValueList.FindRegisterByDwarfIndex(ARegNum)
|
||||
else
|
||||
Result:=nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TDbgRegisterValueList }
|
||||
|
||||
function TDbgRegisterValueList.GetDbgRegister(AName: string
|
||||
@ -2119,65 +2133,6 @@ begin
|
||||
Result := GetDbgRegister(AnName);
|
||||
end;
|
||||
|
||||
{ TDbgRegisterValue }
|
||||
|
||||
constructor TDbgRegisterValue.Create(const AName: String);
|
||||
begin
|
||||
FName:=AName;
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.Assign(ASource: TDbgRegisterValue);
|
||||
begin
|
||||
FDwarfIdx := ASource.FDwarfIdx;
|
||||
FName := ASource.FName;
|
||||
FNumValue := ASource.FNumValue;
|
||||
FSize := ASource.FSize;
|
||||
FStrValue := ASource.FStrValue;
|
||||
end;
|
||||
|
||||
function TDbgRegisterValue.HasEqualVal(AnOther: TDbgRegisterValue): Boolean;
|
||||
begin
|
||||
Result :=
|
||||
(FNumValue = AnOther.FNumValue) and
|
||||
(FSize = AnOther.FSize) and
|
||||
(FStrValue = AnOther.FStrValue);
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.SetValue(ANumValue: TDBGPtr;
|
||||
const AStrValue: string; ASize: byte; ADwarfIdx: cardinal);
|
||||
begin
|
||||
FStrValue:=AStrValue;
|
||||
FNumValue:=ANumValue;
|
||||
FSize:=ASize;
|
||||
FDwarfIdx:=ADwarfIdx;
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.Setx86EFlagsValue(ANumValue: TDBGPtr);
|
||||
var
|
||||
FlagS: string;
|
||||
begin
|
||||
FlagS := '';
|
||||
if ANumValue and (1 shl 0) <> 0 then FlagS := FlagS + 'CF ';
|
||||
if ANumValue and (1 shl 2) <> 0 then FlagS := FlagS + 'PF ';
|
||||
if ANumValue and (1 shl 4) <> 0 then FlagS := FlagS + 'AF ';
|
||||
if ANumValue and (1 shl 6) <> 0 then FlagS := FlagS + 'ZF ';
|
||||
if ANumValue and (1 shl 7) <> 0 then FlagS := FlagS + 'SF ';
|
||||
if ANumValue and (1 shl 8) <> 0 then FlagS := FlagS + 'TF ';
|
||||
if ANumValue and (1 shl 9) <> 0 then FlagS := FlagS + 'IF ';
|
||||
if ANumValue and (1 shl 10) <> 0 then FlagS := FlagS + 'DF ';
|
||||
if ANumValue and (1 shl 11) <> 0 then FlagS := FlagS + 'OF ';
|
||||
if (ANumValue shr 12) and 3 <> 0 then FlagS := FlagS + 'IOPL=' + IntToStr((ANumValue shr 12) and 3);
|
||||
if ANumValue and (1 shl 14) <> 0 then FlagS := FlagS + 'NT ';
|
||||
if ANumValue and (1 shl 16) <> 0 then FlagS := FlagS + 'RF ';
|
||||
if ANumValue and (1 shl 17) <> 0 then FlagS := FlagS + 'VM ';
|
||||
if ANumValue and (1 shl 18) <> 0 then FlagS := FlagS + 'AC ';
|
||||
if ANumValue and (1 shl 19) <> 0 then FlagS := FlagS + 'VIF ';
|
||||
if ANumValue and (1 shl 20) <> 0 then FlagS := FlagS + 'VIP ';
|
||||
if ANumValue and (1 shl 21) <> 0 then FlagS := FlagS + 'ID ';
|
||||
|
||||
SetValue(ANumValue, trim(FlagS),4,Cardinal(-1));
|
||||
end;
|
||||
|
||||
{ TDbgAsmInstruction }
|
||||
|
||||
function TDbgAsmInstruction.IsCallInstruction: boolean;
|
||||
|
@ -836,32 +836,34 @@ begin
|
||||
FRegisterValueList.DbgRegisterAutoCreate['gs'].SetValue(FUserRegs.regs64[gs], IntToStr(FUserRegs.regs64[gs]),8,47);
|
||||
|
||||
if FFpRegsAvail then begin
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 0*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 1*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 2*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 3*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 4*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 5*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 6*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 7*4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 0*4])^),10,500);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 1*4])^),10,501);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 2*4])^),10,502);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 3*4])^),10,503);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 4*4])^),10,504);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 5*4])^),10,505);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 6*4])^),10,506);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FFpRegs.st_space[ 7*4])^),10,507);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl'].SetValue(FFpRegs.cwd, IntToStr(FFpRegs.cwd),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat'].SetValue(FFpRegs.swd, IntToStr(FFpRegs.swd),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftwd'].SetValue(FFpRegs.twd, IntToStr(FFpRegs.twd),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fop'].SetValue(FFpRegs.fop, IntToStr(FFpRegs.fop),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fcs'].SetValue(FFpRegs.fcs, IntToStr(FFpRegs.fcs),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fip'].SetValue(FFpRegs.fip, IntToStr(FFpRegs.fip),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['foo'].SetValue(FFpRegs.foo, IntToStr(FFpRegs.foo),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fos'].SetValue(FFpRegs.fos, IntToStr(FFpRegs.fos),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl'].SetValue(FFpRegs.cwd, IntToStr(FFpRegs.cwd),2,510);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat'].SetValue(FFpRegs.swd, IntToStr(FFpRegs.swd),2,511);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftwd'].SetValue(FFpRegs.twd, IntToStr(FFpRegs.twd),2,512);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fop'].SetValue(FFpRegs.fop, IntToStr(FFpRegs.fop),2,513);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fcs'].SetValue(FFpRegs.fcs, IntToStr(FFpRegs.fcs),4,514);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fip'].SetValue(FFpRegs.fip, IntToStr(FFpRegs.fip),4,515);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['foo'].SetValue(FFpRegs.foo, IntToStr(FFpRegs.foo),4,516);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fos'].SetValue(FFpRegs.fos, IntToStr(FFpRegs.fos),4,517);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[0*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[1*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[2*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[3*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[4*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[5*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[6*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[7*4])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[0*4])^),16,600);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[1*4])^),16,601);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[2*4])^),16,602);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[3*4])^),16,603);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[4*4])^),16,604);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[5*4])^),16,605);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[6*4])^),16,606);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7' ].SetValue(0, XmmToString(PM128A(@FFpRegs.xmm_space[7*4])^),16,607);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['mxcsr'].SetValue(FFpRegs.fos, IntToStr(FFpRegs.mxcsr),4,620);
|
||||
|
||||
end;
|
||||
end;
|
||||
|
@ -466,7 +466,7 @@ end;
|
||||
|
||||
function XmmToString(xmm: M128A): String;
|
||||
begin
|
||||
Result := format('D: %s, %s | S: %s, %s, %s, %s | I64: %s, %s | I32: %s, %s, %s, %s | I16: %s, %s, %s, %s, %s, %s, %s, %s | I8: %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s', [
|
||||
Result := format('{"D": [%s, %s], "S": [%s, %s, %s, %s], "I64": [%s, %s], "I32": [%s, %s, %s, %s], "I16": [%s, %s, %s, %s, %s, %s, %s, %s], "I8": [%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s]}', [
|
||||
FloatToStr(PDouble(@xmm+0)^), FloatToStr(PDouble(@xmm+8)^),
|
||||
|
||||
FloatToStr(PSingle(@xmm+0)^), FloatToStr(PSingle(@xmm+4)^),
|
||||
|
@ -1756,36 +1756,36 @@ begin
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fs'].SetValue(SegFs, IntToStr(SegFs),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['gs'].SetValue(SegGs, IntToStr(SegGs),4,0);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[ 0])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[10])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[20])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[30])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[40])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[50])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[60])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[70])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[ 0])^),10,500);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[10])^),10,501);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[20])^),10,502);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[30])^),10,503);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[40])^),10,504);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[50])^),10,505);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[60])^),10,506);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[70])^),10,507);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FloatSave.ControlWord, IntToStr(FloatSave.ControlWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FloatSave.StatusWord, IntToStr(FloatSave.StatusWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FloatSave.TagWord, IntToStr(FloatSave.TagWord),1,0);
|
||||
//FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FloatSave.ErrorOpcode, IntToStr(FloatSave.ErrorOpcode),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FloatSave.ErrorOffset, IntToStr(FloatSave.ErrorOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FloatSave.ErrorSelector, IntToStr(FloatSave.ErrorSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FloatSave.DataOffset, IntToStr(FloatSave.DataOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FloatSave.DataSelector, IntToStr(FloatSave.DataSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fCr0NpxSt'].SetValue(FloatSave.Cr0NpxState, IntToStr(FloatSave.Cr0NpxState),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FloatSave.ControlWord, IntToStr(FloatSave.ControlWord),2,510);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FloatSave.StatusWord, IntToStr(FloatSave.StatusWord),2,511);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FloatSave.TagWord, IntToStr(FloatSave.TagWord),1,512);
|
||||
//FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FloatSave.ErrorOpcode, IntToStr(FloatSave.ErrorOpcode),2,513);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FloatSave.ErrorOffset, IntToStr(FloatSave.ErrorOffset),4,514);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FloatSave.ErrorSelector, IntToStr(FloatSave.ErrorSelector),2,515);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FloatSave.DataOffset, IntToStr(FloatSave.DataOffset),4,516);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FloatSave.DataSelector, IntToStr(FloatSave.DataSelector),2,517);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fCr0NpxSt'].SetValue(FloatSave.Cr0NpxState, IntToStr(FloatSave.Cr0NpxState),4,518);
|
||||
|
||||
if not FFailed_CONTEXT_EXTENDED_REGISTERS then begin
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[10*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[11*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[12*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[13*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[14*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[15*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[16*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[17*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[10*16])^),16,600);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[11*16])^),16,601);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[12*16])^),16,602);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[13*16])^),16,603);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[14*16])^),16,604);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[15*16])^),16,605);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[16*16])^),16,606);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[17*16])^),16,607);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(PDWORD(@ExtendedRegisters[24])^, IntToStr(PDWORD(@ExtendedRegisters[24])^),16,4);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(PDWORD(@ExtendedRegisters[24])^, IntToStr(PDWORD(@ExtendedRegisters[24])^),4,620);
|
||||
end;
|
||||
end;
|
||||
{$else}
|
||||
@ -1813,37 +1813,37 @@ begin
|
||||
|
||||
// TODO: 64bit extended is not 10 byte // currently downgrading to double
|
||||
{$IF FPC_Fullversion>30202}
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[ 0])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[10])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[20])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[30])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[40])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[50])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[60])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[70])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[ 0])^),10,500);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[10])^),10,501);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[20])^),10,502);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[30])^),10,503);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[40])^),10,504);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[50])^),10,505);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[60])^),10,506);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FloatSave.RegisterArea[70])^),10,507);
|
||||
{$ENDIF}
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FloatSave.ControlWord, IntToStr(FloatSave.ControlWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FloatSave.StatusWord, IntToStr(FloatSave.StatusWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FloatSave.TagWord, IntToStr(FloatSave.TagWord),1,0);
|
||||
//FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FloatSave.ErrorOpcode, IntToStr(FloatSave.ErrorOpcode),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FloatSave.ErrorOffset, IntToStr(FloatSave.ErrorOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FloatSave.ErrorSelector, IntToStr(FloatSave.ErrorSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FloatSave.DataOffset, IntToStr(FloatSave.DataOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FloatSave.DataSelector, IntToStr(FloatSave.DataSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fCr0NpxSt'].SetValue(FloatSave.Cr0NpxState, IntToStr(FloatSave.Cr0NpxState),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FloatSave.ControlWord, IntToStr(FloatSave.ControlWord),2,510);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FloatSave.StatusWord, IntToStr(FloatSave.StatusWord),2,511);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FloatSave.TagWord, IntToStr(FloatSave.TagWord),1,512);
|
||||
//FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FloatSave.ErrorOpcode, IntToStr(FloatSave.ErrorOpcode),2,513);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FloatSave.ErrorOffset, IntToStr(FloatSave.ErrorOffset),4,514);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FloatSave.ErrorSelector, IntToStr(FloatSave.ErrorSelector),2,515);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FloatSave.DataOffset, IntToStr(FloatSave.DataOffset),4,516);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FloatSave.DataSelector, IntToStr(FloatSave.DataSelector),2,517);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fCr0NpxSt'].SetValue(FloatSave.Cr0NpxState, IntToStr(FloatSave.Cr0NpxState),4,518);
|
||||
|
||||
if not FFailed_CONTEXT_EXTENDED_REGISTERS then begin
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[10*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[11*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[12*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[13*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[14*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[15*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[16*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[17*16])^),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[10*16])^),16,600);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[11*16])^),16,601);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[12*16])^),16,602);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[13*16])^),16,603);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[14*16])^),16,604);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[15*16])^),16,605);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[16*16])^),16,606);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7'].SetValue(0, XmmToString(PM128A(@ExtendedRegisters[17*16])^),16,607);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(PDWORD(@ExtendedRegisters[24])^, IntToStr(PDWORD(@ExtendedRegisters[24])^),16,4);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(PDWORD(@ExtendedRegisters[24])^, IntToStr(PDWORD(@ExtendedRegisters[24])^),4,620);
|
||||
end;
|
||||
end
|
||||
else
|
||||
@ -1879,44 +1879,44 @@ begin
|
||||
|
||||
// TODO: 64bit extended is not 10 byte // currently downgrading to double
|
||||
{$IF FPC_Fullversion>30202}
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[0])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[1])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[2])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[3])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[4])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[5])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[6])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[7])^),10,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st0'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[0])^),10,500);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st1'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[1])^),10,501);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st2'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[2])^),10,502);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st3'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[3])^),10,503);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st4'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[4])^),10,504);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st5'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[5])^),10,505);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st6'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[6])^),10,506);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['st7'].SetValue(0, FloatToStr(PExtended(@FltSave.FloatRegisters[7])^),10,507);
|
||||
{$ENDIF}
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FltSave.ControlWord, IntToStr(FltSave.ControlWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FltSave.StatusWord, IntToStr(FltSave.StatusWord),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FltSave.TagWord, IntToStr(FltSave.TagWord),1,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FltSave.ErrorOpcode, IntToStr(FltSave.ErrorOpcode),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FltSave.ErrorOffset, IntToStr(FltSave.ErrorOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FltSave.ErrorSelector, IntToStr(FltSave.ErrorSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FltSave.DataOffset, IntToStr(FltSave.DataOffset),4,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FltSave.DataSelector, IntToStr(FltSave.DataSelector),2,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fctrl' ].SetValue(FltSave.ControlWord, IntToStr(FltSave.ControlWord),2,510);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fstat' ].SetValue(FltSave.StatusWord, IntToStr(FltSave.StatusWord),2,511);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['ftag' ].SetValue(FltSave.TagWord, IntToStr(FltSave.TagWord),1,512);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOp' ].SetValue(FltSave.ErrorOpcode, IntToStr(FltSave.ErrorOpcode),2,513);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrOff'].SetValue(FltSave.ErrorOffset, IntToStr(FltSave.ErrorOffset),4,514);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fErrSel'].SetValue(FltSave.ErrorSelector, IntToStr(FltSave.ErrorSelector),2,515);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatOff'].SetValue(FltSave.DataOffset, IntToStr(FltSave.DataOffset),4,516);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['fDatSel'].SetValue(FltSave.DataSelector, IntToStr(FltSave.DataSelector),2,517);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0' ].SetValue(0, XmmToString(FltSave.XmmRegisters[0]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1' ].SetValue(0, XmmToString(FltSave.XmmRegisters[1]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2' ].SetValue(0, XmmToString(FltSave.XmmRegisters[2]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3' ].SetValue(0, XmmToString(FltSave.XmmRegisters[3]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4' ].SetValue(0, XmmToString(FltSave.XmmRegisters[4]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5' ].SetValue(0, XmmToString(FltSave.XmmRegisters[5]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6' ].SetValue(0, XmmToString(FltSave.XmmRegisters[6]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7' ].SetValue(0, XmmToString(FltSave.XmmRegisters[7]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm8' ].SetValue(0, XmmToString(FltSave.XmmRegisters[8]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm9' ].SetValue(0, XmmToString(FltSave.XmmRegisters[9]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm10'].SetValue(0, XmmToString(FltSave.XmmRegisters[10]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm11'].SetValue(0, XmmToString(FltSave.XmmRegisters[11]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm12'].SetValue(0, XmmToString(FltSave.XmmRegisters[12]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm13'].SetValue(0, XmmToString(FltSave.XmmRegisters[13]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm14'].SetValue(0, XmmToString(FltSave.XmmRegisters[14]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm15'].SetValue(0, XmmToString(FltSave.XmmRegisters[15]),16,0);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm0' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 0]),16,600);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm1' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 1]),16,601);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm2' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 2]),16,602);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm3' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 3]),16,603);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm4' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 4]),16,604);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm5' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 5]),16,605);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm6' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 6]),16,606);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm7' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 7]),16,607);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm8' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 8]),16,608);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm9' ].SetValue(0, XmmToString(FltSave.XmmRegisters[ 9]),16,609);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm10'].SetValue(0, XmmToString(FltSave.XmmRegisters[10]),16,610);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm11'].SetValue(0, XmmToString(FltSave.XmmRegisters[11]),16,611);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm12'].SetValue(0, XmmToString(FltSave.XmmRegisters[12]),16,612);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm13'].SetValue(0, XmmToString(FltSave.XmmRegisters[13]),16,613);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm14'].SetValue(0, XmmToString(FltSave.XmmRegisters[14]),16,614);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['Xmm15'].SetValue(0, XmmToString(FltSave.XmmRegisters[15]),16,615);
|
||||
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(FltSave.MxCsr, IntToStr(FltSave.MxCsr),16,4);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsrM'].SetValue(FltSave.MxCsr_Mask, IntToStr(FltSave.MxCsr_Mask),16,4);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsr'].SetValue(FltSave.MxCsr, IntToStr(FltSave.MxCsr),4,620);
|
||||
FRegisterValueList.DbgRegisterAutoCreate['MxCsrM'].SetValue(FltSave.MxCsr_Mask, IntToStr(FltSave.MxCsr_Mask),4,621);
|
||||
|
||||
end;
|
||||
{$endif}
|
||||
|
@ -78,6 +78,28 @@ type
|
||||
|
||||
TFpDbgMemModel = class;
|
||||
|
||||
{ TDbgRegisterValue }
|
||||
|
||||
TDbgRegisterValue = class
|
||||
private
|
||||
FDwarfIdx: cardinal;
|
||||
FName: string;
|
||||
FNumValue: TDBGPtr;
|
||||
FSize: byte;
|
||||
FStrValue: string;
|
||||
public
|
||||
constructor Create(const AName: String);
|
||||
procedure Assign(ASource: TDbgRegisterValue);
|
||||
function HasEqualVal(AnOther: TDbgRegisterValue): Boolean;
|
||||
procedure SetValue(ANumValue: TDBGPtr; const AStrValue: string; ASize: byte; ADwarfIdx: cardinal);
|
||||
procedure Setx86EFlagsValue(ANumValue: TDBGPtr);
|
||||
property Name: string read FName;
|
||||
property NumValue: TDBGPtr read FNumValue;
|
||||
property StrValue: string read FStrValue;
|
||||
property Size: byte read FSize;
|
||||
property DwarfIdx: cardinal read FDwarfIdx;
|
||||
end;
|
||||
|
||||
{ TFpDbgLocationContext }
|
||||
|
||||
TFpDbgLocationContext = class;
|
||||
@ -185,6 +207,8 @@ type
|
||||
|
||||
function ReadString(const ALocation: TFpDbgMemLocation; ALen: Int64; out AValue: RawByteString; AnIgnoreMaxStringLen: boolean = False): Boolean;
|
||||
function ReadWString(const ALocation: TFpDbgMemLocation; ALen: Int64; out AValue: WideString; AnIgnoreMaxStringLen: boolean = False): Boolean;
|
||||
|
||||
function GetRegister(const ARegNum: Cardinal): TDbgRegisterValue;
|
||||
end;
|
||||
|
||||
|
||||
@ -207,6 +231,7 @@ type
|
||||
function WriteRegister(ARegNum: Cardinal; const AValue: TDbgPtr; AContext: TFpDbgLocationContext): Boolean; virtual; abstract;
|
||||
function RegisterSize(ARegNum: Cardinal): Integer; virtual; abstract;
|
||||
function RegisterNumber(ARegName: String; out ARegNum: Cardinal): Boolean; virtual; abstract;
|
||||
function GetRegister(const ARegNum: Cardinal; AContext: TFpDbgLocationContext): TDbgRegisterValue; virtual; abstract;
|
||||
// Registernum from name
|
||||
end;
|
||||
|
||||
@ -989,6 +1014,65 @@ begin
|
||||
WriteStr(Result, AReadDataType);
|
||||
end;
|
||||
|
||||
{ TDbgRegisterValue }
|
||||
|
||||
constructor TDbgRegisterValue.Create(const AName: String);
|
||||
begin
|
||||
FName:=AName;
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.Assign(ASource: TDbgRegisterValue);
|
||||
begin
|
||||
FDwarfIdx := ASource.FDwarfIdx;
|
||||
FName := ASource.FName;
|
||||
FNumValue := ASource.FNumValue;
|
||||
FSize := ASource.FSize;
|
||||
FStrValue := ASource.FStrValue;
|
||||
end;
|
||||
|
||||
function TDbgRegisterValue.HasEqualVal(AnOther: TDbgRegisterValue): Boolean;
|
||||
begin
|
||||
Result :=
|
||||
(FNumValue = AnOther.FNumValue) and
|
||||
(FSize = AnOther.FSize) and
|
||||
(FStrValue = AnOther.FStrValue);
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.SetValue(ANumValue: TDBGPtr;
|
||||
const AStrValue: string; ASize: byte; ADwarfIdx: cardinal);
|
||||
begin
|
||||
FStrValue:=AStrValue;
|
||||
FNumValue:=ANumValue;
|
||||
FSize:=ASize;
|
||||
FDwarfIdx:=ADwarfIdx;
|
||||
end;
|
||||
|
||||
procedure TDbgRegisterValue.Setx86EFlagsValue(ANumValue: TDBGPtr);
|
||||
var
|
||||
FlagS: string;
|
||||
begin
|
||||
FlagS := '';
|
||||
if ANumValue and (1 shl 0) <> 0 then FlagS := FlagS + 'CF ';
|
||||
if ANumValue and (1 shl 2) <> 0 then FlagS := FlagS + 'PF ';
|
||||
if ANumValue and (1 shl 4) <> 0 then FlagS := FlagS + 'AF ';
|
||||
if ANumValue and (1 shl 6) <> 0 then FlagS := FlagS + 'ZF ';
|
||||
if ANumValue and (1 shl 7) <> 0 then FlagS := FlagS + 'SF ';
|
||||
if ANumValue and (1 shl 8) <> 0 then FlagS := FlagS + 'TF ';
|
||||
if ANumValue and (1 shl 9) <> 0 then FlagS := FlagS + 'IF ';
|
||||
if ANumValue and (1 shl 10) <> 0 then FlagS := FlagS + 'DF ';
|
||||
if ANumValue and (1 shl 11) <> 0 then FlagS := FlagS + 'OF ';
|
||||
if (ANumValue shr 12) and 3 <> 0 then FlagS := FlagS + 'IOPL=' + IntToStr((ANumValue shr 12) and 3);
|
||||
if ANumValue and (1 shl 14) <> 0 then FlagS := FlagS + 'NT ';
|
||||
if ANumValue and (1 shl 16) <> 0 then FlagS := FlagS + 'RF ';
|
||||
if ANumValue and (1 shl 17) <> 0 then FlagS := FlagS + 'VM ';
|
||||
if ANumValue and (1 shl 18) <> 0 then FlagS := FlagS + 'AC ';
|
||||
if ANumValue and (1 shl 19) <> 0 then FlagS := FlagS + 'VIF ';
|
||||
if ANumValue and (1 shl 20) <> 0 then FlagS := FlagS + 'VIP ';
|
||||
if ANumValue and (1 shl 21) <> 0 then FlagS := FlagS + 'ID ';
|
||||
|
||||
SetValue(ANumValue, trim(FlagS),4,Cardinal(-1));
|
||||
end;
|
||||
|
||||
{ TFpDbgLocationContext }
|
||||
|
||||
function TFpDbgLocationContext.GetLastMemError: TFpError;
|
||||
@ -1208,6 +1292,11 @@ begin
|
||||
AValue := ''
|
||||
end;
|
||||
|
||||
function TFpDbgLocationContext.GetRegister(const ARegNum: Cardinal): TDbgRegisterValue;
|
||||
begin
|
||||
Result := MemManager.MemReader.GetRegister(ARegNum, Self);
|
||||
end;
|
||||
|
||||
{ TFpDbgMemLimits }
|
||||
|
||||
procedure TFpDbgMemLimits.SetMaxMemReadSize(AValue: QWord);
|
||||
|
@ -3189,6 +3189,7 @@ var
|
||||
RNum: Cardinal;
|
||||
RSize: Integer;
|
||||
RVal: QWord;
|
||||
Reg: TDbgRegisterValue;
|
||||
begin
|
||||
Result := nil;
|
||||
if FScope = nil then
|
||||
@ -3198,12 +3199,16 @@ begin
|
||||
exit;
|
||||
|
||||
RSize := FScope.MemManager.RegisterSize(RNum);
|
||||
if RSize > 8 then
|
||||
exit;
|
||||
if not FScope.LocationContext.ReadUnsignedInt(RegisterLoc(RNum), SizeVal(RSize), RVal) then
|
||||
exit;
|
||||
|
||||
Result := TFpValueConstNumber.Create(RVal, False);
|
||||
if (RSize <= 8) and
|
||||
FScope.LocationContext.ReadUnsignedInt(RegisterLoc(RNum), SizeVal(RSize), RVal)
|
||||
then begin
|
||||
Result := TFpValueConstNumber.Create(RVal, False);
|
||||
end
|
||||
else begin
|
||||
Reg := FScope.LocationContext.GetRegister(RNum);
|
||||
if Reg <> nil then
|
||||
Result := TFpValueConstString.Create(Reg.StrValue);
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TFpPascalExpression.Create(ATextExpression: String; AScope: TFpDbgSymbolScope;
|
||||
|
Loading…
Reference in New Issue
Block a user