mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-01 23:00:27 +02:00
FpDebug: Dwarf location-parser, allow to deref a register-location. See merge-request !28
This commit is contained in:
parent
805c9e3169
commit
0a7f1b1da9
@ -2122,6 +2122,13 @@ var
|
||||
SetError(fpErrLocationParserNoAddressOnStack);
|
||||
end;
|
||||
|
||||
function AssertAddressOrRegOnStack: Boolean; inline;
|
||||
begin
|
||||
Result := (FStack.PeekKind in [mlfTargetMem, mlfSelfMem, mlfConstantDeref, mlfTargetRegister]);
|
||||
if not Result then
|
||||
SetError(fpErrLocationParserNoAddressOnStack);
|
||||
end;
|
||||
|
||||
function AssertMinCount(ACnt: Integer): Boolean; inline;
|
||||
begin
|
||||
Result := FStack.Count >= ACnt;
|
||||
@ -2198,7 +2205,7 @@ begin
|
||||
FStack.Push(FCU.ReadTargetAddressFromDwarfSection(CurData, True)); // always mlfTargetMem;
|
||||
end;
|
||||
DW_OP_deref: begin
|
||||
if not AssertAddressOnStack then exit;
|
||||
if not AssertAddressOrRegOnStack then exit;
|
||||
EntryP := FStack.PeekForDeref;
|
||||
if not ReadAddressFromMemory(EntryP^, AddrSize, NewLoc) then exit;
|
||||
EntryP^ := NewLoc; // mlfTargetMem;
|
||||
@ -2213,7 +2220,7 @@ begin
|
||||
EntryP^ := NewLoc; // mlfTargetMem;
|
||||
end;
|
||||
DW_OP_deref_size: begin
|
||||
if not AssertAddressOnStack then exit;
|
||||
if not AssertAddressOrRegOnStack then exit;
|
||||
EntryP := FStack.PeekForDeref;
|
||||
if not ReadAddressFromMemory(EntryP^, ReadUnsignedFromExpression(CurData, 1), NewLoc) then exit;
|
||||
EntryP^ := NewLoc; // mlfTargetMem;
|
||||
|
Loading…
Reference in New Issue
Block a user