From 23d5c0bdc76936096109ab4e2440f7be67d542dc Mon Sep 17 00:00:00 2001 From: martin Date: Sun, 24 Jun 2018 22:56:20 +0000 Subject: [PATCH] FP Debugger: fix range checks / do not use arbitrary large static arrays (gdb dislikes the debuginfo) git-svn-id: trunk@58399 - --- components/fpdebug/fpimgreadermacho.pas | 57 ++++++++++++------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/components/fpdebug/fpimgreadermacho.pas b/components/fpdebug/fpimgreadermacho.pas index 2080007507..868c6b7d4d 100644 --- a/components/fpdebug/fpimgreadermacho.pas +++ b/components/fpdebug/fpimgreadermacho.pas @@ -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;