mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-14 04:00:51 +02:00
FP Debugger: fix range checks / do not use arbitrary large static arrays (gdb dislikes the debuginfo)
git-svn-id: trunk@58399 -
This commit is contained in:
parent
d1d1d58a04
commit
23d5c0bdc7
@ -55,8 +55,7 @@ uses
|
||||
FpDbgLoader;
|
||||
|
||||
type
|
||||
PnlistArray = ^TnlistArray;
|
||||
TnlistArray = array[0..maxSmallint] of nlist;
|
||||
PnlistArray = ^nlist; // ^array[0..infinite] of nlist;
|
||||
|
||||
const
|
||||
// Symbol-map section name
|
||||
@ -198,13 +197,13 @@ begin
|
||||
SymbolCount := PDbgImageSectionEx(p)^.Sect.Size div sizeof(nlist);
|
||||
for i := 0 to SymbolCount-1 do
|
||||
begin
|
||||
if (SymbolArr^[i].n_type and $e0)<>0 then
|
||||
if (SymbolArr[i].n_type and $e0)<>0 then
|
||||
// This is a stabs-entry. Ignore.
|
||||
Continue;
|
||||
if (SymbolArr^[i].n_type and $0e)=$e then
|
||||
if (SymbolArr[i].n_type and $0e)=$e then
|
||||
begin
|
||||
// Section-index is ignored for now...
|
||||
AfpSymbolInfo.AddObject(pchar(SymbolStr+SymbolArr^[i].n_un.n_strx), TObject(PtrUInt(SymbolArr^[i].n_value)));
|
||||
AfpSymbolInfo.AddObject(pchar(SymbolStr+SymbolArr[i].n_un.n_strx), TObject(PtrUInt(SymbolArr[i].n_value)));
|
||||
end
|
||||
end;
|
||||
end;
|
||||
@ -583,20 +582,20 @@ begin
|
||||
case state of
|
||||
dtsEnd:
|
||||
begin
|
||||
if SymbolArr^[i].n_type = N_SO then
|
||||
if SymbolArr[i].n_type = N_SO then
|
||||
begin
|
||||
if assigned(DwarfDebugMap) then
|
||||
DwarfDebugMap.Free;
|
||||
DwarfDebugMap := TAppleDwarfDebugMap.Create;
|
||||
DwarfDebugMap.Dir := pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
DwarfDebugMap.Dir := pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
state := dtsDir;
|
||||
end;
|
||||
end;
|
||||
dtsDir:
|
||||
begin
|
||||
if SymbolArr^[i].n_type = N_SO then
|
||||
if SymbolArr[i].n_type = N_SO then
|
||||
begin
|
||||
DwarfDebugMap.SourceFile:=pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
DwarfDebugMap.SourceFile:=pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
inc(state);
|
||||
end
|
||||
else
|
||||
@ -604,27 +603,27 @@ begin
|
||||
end;
|
||||
dtsSource:
|
||||
begin
|
||||
if SymbolArr^[i].n_type = N_OSO then
|
||||
if SymbolArr[i].n_type = N_OSO then
|
||||
begin
|
||||
DwarfDebugMap.ObjectFile:=pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
DwarfDebugMap.ObjFileAge:=SymbolArr^[i].n_value;
|
||||
DwarfDebugMap.ObjectFile:=pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
DwarfDebugMap.ObjFileAge:=SymbolArr[i].n_value;
|
||||
inc(state);
|
||||
end;
|
||||
end;
|
||||
dtsObjectFile:
|
||||
begin
|
||||
if (SymbolArr^[i].n_type = N_BNSYM) then
|
||||
if (SymbolArr[i].n_type = N_BNSYM) then
|
||||
begin
|
||||
inc(state);
|
||||
end
|
||||
else if (SymbolArr^[i].n_type = N_STSYM) then
|
||||
else if (SymbolArr[i].n_type = N_STSYM) then
|
||||
begin
|
||||
AddressMap.NewAddr:=SymbolArr^[i].n_value;
|
||||
AddressMap.NewAddr:=SymbolArr[i].n_value;
|
||||
AddressMap.OrgAddr:=0;
|
||||
AddressMap.Length:=0;
|
||||
DwarfDebugMap.GlobalList.Add(pchar(SymbolStr+SymbolArr^[i].n_un.n_strx), AddressMap);
|
||||
DwarfDebugMap.GlobalList.Add(pchar(SymbolStr+SymbolArr[i].n_un.n_strx), AddressMap);
|
||||
end
|
||||
else if (SymbolArr^[i].n_type = N_SO) and (SymbolArr^[i].n_sect=1) then
|
||||
else if (SymbolArr[i].n_type = N_SO) and (SymbolArr[i].n_sect=1) then
|
||||
begin
|
||||
state := dtsEnd;
|
||||
SubFiles.AddObject(DwarfDebugMap.ObjectFile, DwarfDebugMap);
|
||||
@ -633,24 +632,24 @@ begin
|
||||
end;
|
||||
dtsProc:
|
||||
begin
|
||||
if (SymbolArr^[i].n_type = N_FUN) and (SymbolArr^[i].n_sect=1) then
|
||||
if (SymbolArr[i].n_type = N_FUN) and (SymbolArr[i].n_sect=1) then
|
||||
begin
|
||||
AddressMap.NewAddr:=SymbolArr^[i].n_value;
|
||||
ProcName:=pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
AddressMap.NewAddr:=SymbolArr[i].n_value;
|
||||
ProcName:=pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
inc(state);
|
||||
end;
|
||||
end;
|
||||
dtsProcLen:
|
||||
begin
|
||||
if (SymbolArr^[i].n_type = N_FUN) and (SymbolArr^[i].n_sect=0) then
|
||||
if (SymbolArr[i].n_type = N_FUN) and (SymbolArr[i].n_sect=0) then
|
||||
begin
|
||||
AddressMap.Length:=SymbolArr^[i].n_value;
|
||||
AddressMap.Length:=SymbolArr[i].n_value;
|
||||
inc(state);
|
||||
end;
|
||||
end;
|
||||
dtsProcEnd:
|
||||
begin
|
||||
if (SymbolArr^[i].n_type = N_ENSYM) and (SymbolArr^[i].n_sect=1) then
|
||||
if (SymbolArr[i].n_type = N_ENSYM) and (SymbolArr[i].n_sect=1) then
|
||||
begin
|
||||
DwarfDebugMap.GlobalList.Add(ProcName, AddressMap);
|
||||
state := dtsObjectFile;
|
||||
@ -684,25 +683,25 @@ begin
|
||||
SymbolCount := PDbgImageSectionEx(p)^.Sect.Size div sizeof(nlist);
|
||||
for i := 0 to SymbolCount-1 do
|
||||
begin
|
||||
if SymbolArr^[i].n_type = N_SECT then
|
||||
if SymbolArr[i].n_type = N_SECT then
|
||||
begin
|
||||
s := pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
s := pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
ind := MainDwarfDebugMap.GlobalList.Find(s);
|
||||
if assigned(ind) then
|
||||
begin
|
||||
AddressMap:=MainDwarfDebugMap.GlobalList.Items[s];
|
||||
AddressMap.OrgAddr:=SymbolArr^[i].n_value;
|
||||
AddressMap.OrgAddr:=SymbolArr[i].n_value;
|
||||
AddressMapList.Add(AddressMap);
|
||||
end;
|
||||
end;
|
||||
if SymbolArr^[i].n_type = N_SECT+N_EXT then
|
||||
if SymbolArr[i].n_type = N_SECT+N_EXT then
|
||||
begin
|
||||
s := pchar(SymbolStr+SymbolArr^[i].n_un.n_strx);
|
||||
s := pchar(SymbolStr+SymbolArr[i].n_un.n_strx);
|
||||
ind := MainDwarfDebugMap.GlobalList.Find(s);
|
||||
if assigned(ind) then
|
||||
begin
|
||||
AddressMap:=MainDwarfDebugMap.GlobalList.Items[s];
|
||||
AddressMap.OrgAddr:=SymbolArr^[i].n_value;
|
||||
AddressMap.OrgAddr:=SymbolArr[i].n_value;
|
||||
AddressMapList.Add(AddressMap);
|
||||
end;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user