FpDebug: fix callstack eval, after CFI ended.

This commit is contained in:
Martin 2022-09-06 13:59:01 +02:00
parent f4e3f0e7e7
commit ae209a52a4

View File

@ -3002,7 +3002,7 @@ var
Address, FrameBase, LastFrameBase, Dummy: QWord; Address, FrameBase, LastFrameBase, Dummy: QWord;
Size, CountNeeded, IP, BP, CodeReadErrCnt, SP, i: integer; Size, CountNeeded, IP, BP, CodeReadErrCnt, SP, i: integer;
AnEntry, NewEntry: TDbgCallstackEntry; AnEntry, NewEntry: TDbgCallstackEntry;
R: TDbgRegisterValue; R, StackReg, FrameReg: TDbgRegisterValue;
nIP, nBP, nSP: String; nIP, nBP, nSP: String;
NextIdx: LongInt; NextIdx: LongInt;
OutSideFrame: Boolean; OutSideFrame: Boolean;
@ -3090,6 +3090,13 @@ begin
Break; Break;
FCallStackEntryList.Add(NewEntry); FCallStackEntryList.Add(NewEntry);
Address := NewEntry.AnAddress; Address := NewEntry.AnAddress;
StackReg := NewEntry.RegisterValueList.FindRegisterByDwarfIndex(SP);
FrameReg := NewEntry.RegisterValueList.FindRegisterByDwarfIndex(BP);
StackPtr := 0;
if (StackReg <> nil) and (FrameReg <> nil) then begin
StackPtr := StackReg.FNumValue;
FrameBase := FrameReg.FNumValue;
end;
AnEntry := NewEntry; AnEntry := NewEntry;
Dec(CountNeeded); Dec(CountNeeded);
inc(NextIdx); inc(NextIdx);
@ -3098,6 +3105,8 @@ begin
end end
else if (FrameBase <> 0) and (FrameBase > LastFrameBase) then else if (FrameBase <> 0) and (FrameBase > LastFrameBase) then
begin begin
if StackPtr = 0 then
break;
// CFI not available or contains unsupported structures. Fallback to // CFI not available or contains unsupported structures. Fallback to
// old fashioned stack-tracing. // old fashioned stack-tracing.
OutSideFrame := False; OutSideFrame := False;