* 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:
nickysn 2018-05-20 14:33:17 +00:00
parent 443980b7ac
commit abe61d0daa
2 changed files with 32 additions and 4 deletions

View File

@ -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}

View File

@ -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;