mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-15 05:59:30 +02:00
* the 'addr' and 'baseaddr' parameters of exeinfo.GetModuleByAddr changed to
far pointers on i8086 * the 'addr' parameter of lnfodwrf.OpenDwarf changed to codepointer git-svn-id: trunk@39055 -
This commit is contained in:
parent
443980b7ac
commit
abe61d0daa
@ -56,7 +56,11 @@ function FindExeSection(var e:TExeFile;const secname:string;var secofs,seclen:lo
|
||||
function CloseExeFile(var e:TExeFile):boolean;
|
||||
function ReadDebugLink(var e:TExeFile;var dbgfn:string):boolean;
|
||||
|
||||
{$ifdef CPUI8086}
|
||||
procedure GetModuleByAddr(addr: farpointer; var baseaddr: farpointer; var filename: string);
|
||||
{$else CPUI8086}
|
||||
procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string);
|
||||
{$endif CPUI8086}
|
||||
|
||||
implementation
|
||||
|
||||
@ -119,7 +123,11 @@ uses
|
||||
|
||||
{$else}
|
||||
|
||||
{$ifdef CPUI8086}
|
||||
procedure GetModuleByAddr(addr: farpointer; var baseaddr: farpointer; var filename: string);
|
||||
{$else CPUI8086}
|
||||
procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string);
|
||||
{$endif CPUI8086}
|
||||
begin
|
||||
baseaddr:= nil;
|
||||
{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
|
||||
|
@ -232,13 +232,33 @@ type
|
||||
var
|
||||
base, limit : TFilePos;
|
||||
index : TFilePos;
|
||||
baseaddr : pointer;
|
||||
baseaddr : {$ifdef cpui8086}farpointer{$else}pointer{$endif};
|
||||
filename,
|
||||
dbgfn : string;
|
||||
lastfilename: string; { store last processed file }
|
||||
lastopendwarf: Boolean; { store last result of processing a file }
|
||||
|
||||
function OpenDwarf(addr : pointer) : boolean;
|
||||
{$ifdef cpui8086}
|
||||
function tofar(fp: FarPointer): FarPointer; inline;
|
||||
begin
|
||||
tofar:=fp;
|
||||
end;
|
||||
|
||||
function tofar(cp: NearCsPointer): FarPointer; inline;
|
||||
begin
|
||||
tofar:=Ptr(CSeg,Word(cp));
|
||||
end;
|
||||
|
||||
function tofar(cp: NearPointer): FarPointer; inline;
|
||||
begin
|
||||
tofar:=Ptr(DSeg,Word(cp));
|
||||
end;
|
||||
{$else cpui8086}
|
||||
type
|
||||
tofar=Pointer;
|
||||
{$endif cpui8086}
|
||||
|
||||
function OpenDwarf(addr : codepointer) : boolean;
|
||||
begin
|
||||
// False by default
|
||||
OpenDwarf:=false;
|
||||
@ -247,7 +267,7 @@ begin
|
||||
filename := '';
|
||||
|
||||
// Get filename by address using GetModuleByAddr
|
||||
GetModuleByAddr(addr,baseaddr,filename);
|
||||
GetModuleByAddr(tofar(addr),baseaddr,filename);
|
||||
{$ifdef DEBUG_LINEINFO}
|
||||
writeln(stderr,filename,' Baseaddr: ',hexstr(ptruint(baseaddr),sizeof(baseaddr)*2));
|
||||
{$endif DEBUG_LINEINFO}
|
||||
@ -1230,7 +1250,7 @@ begin
|
||||
source := '';
|
||||
GetLineInfo:=false;
|
||||
|
||||
if not OpenDwarf(pointer(addr)) then
|
||||
if not OpenDwarf(codepointer(addr)) then
|
||||
exit;
|
||||
|
||||
addr := addr - e.processaddress;
|
||||
|
Loading…
Reference in New Issue
Block a user