Selaa lähdekoodia

* 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 -

nickysn 7 vuotta sitten
vanhempi
commit
abe61d0daa
2 muutettua tiedostoa jossa 32 lisäystä ja 4 poistoa
  1. 8 0
      rtl/inc/exeinfo.pp
  2. 24 4
      rtl/inc/lnfodwrf.pp

+ 8 - 0
rtl/inc/exeinfo.pp

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

+ 24 - 4
rtl/inc/lnfodwrf.pp

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