Jelajahi Sumber

* fix buggy stabs offset calculation

git-svn-id: trunk@20144 -
Tomas Hajny 13 tahun lalu
induk
melakukan
5d82eaa628
1 mengubah file dengan 24 tambahan dan 10 penghapusan
  1. 24 10
      rtl/inc/exeinfo.pp

+ 24 - 10
rtl/inc/exeinfo.pp

@@ -599,7 +599,7 @@ type
   end;
 
 const
- StartPageSize = $1000;
+ PageSizeFill = $FFF;
 
 var
  DosHeader: TDosHeader;
@@ -618,6 +618,9 @@ begin
  if E.Size > SizeOf (DosHeader) then
  begin
   BlockRead (E.F, DosHeader, SizeOf (TDosHeader));
+{$IFDEF DEBUG_LINEINFO}
+  WriteLn (StdErr, 'DosHeader.E_CParHdr = ', DosHeader.E_cParHdr);
+{$ENDIF DEBUG_LINEINFO}
   if E.Size > DosHeader.e_cparhdr shl 4 + SizeOf (TEmxHeader) then
   begin
    Seek (E.F, DosHeader.e_cparhdr shl 4);
@@ -627,17 +630,28 @@ begin
    if (S4 = 'emx ') and
                        (E.Size > EmxHeader.AoutOfs + SizeOf (TAoutHeader)) then
    begin
+{$IFDEF DEBUG_LINEINFO}
+    WriteLn (StdErr, 'EmxHeader.AoutOfs = ', EmxHeader.AoutOfs, '/', HexStr (pointer (EmxHeader.AoutOfs)));
+{$ENDIF DEBUG_LINEINFO}
     Seek (E.F, EmxHeader.AoutOfs);
     BlockRead (E.F, AoutHeader, SizeOf (TAoutHeader));
-   if AOutHeader.Magic = $10B then
-     StabOfs := StartPageSize
-   else
-     StabOfs := EmxHeader.AoutOfs + SizeOf (TAoutHeader);
-   StabOfs := StabOfs
-                + AoutHeader.TextSize
-                + AoutHeader.DataSize
-                + AoutHeader.TextRelocSize
-                + AoutHeader.DataRelocSize;
+{$IFDEF DEBUG_LINEINFO}
+    WriteLn (StdErr, 'AoutHeader.Magic = ', AoutHeader.Magic);
+{$ENDIF DEBUG_LINEINFO}
+{    if AOutHeader.Magic = $10B then}
+    StabOfs := (EmxHeader.AoutOfs or PageSizeFill) + 1
+                 + AoutHeader.TextSize
+                 + AoutHeader.DataSize
+                 + AoutHeader.TextRelocSize
+                 + AoutHeader.DataRelocSize;
+{$IFDEF DEBUG_LINEINFO}
+    WriteLn (StdErr, 'AoutHeader.TextSize = ', AoutHeader.TextSize, '/', HexStr (pointer (AoutHeader.TextSize)));
+    WriteLn (StdErr, 'AoutHeader.DataSize = ', AoutHeader.DataSize, '/', HexStr (pointer (AoutHeader.DataSize)));
+    WriteLn (StdErr, 'AoutHeader.TextRelocSize = ', AoutHeader.TextRelocSize, '/', HexStr (pointer (AoutHeader.TextRelocSize)));
+    WriteLn (StdErr, 'AoutHeader.DataRelocSize = ', AoutHeader.DataRelocSize, '/', HexStr (pointer (AoutHeader.DataRelocSize)));
+    WriteLn (StdErr, 'AoutHeader.SymbSize = ', AoutHeader.SymbSize, '/', HexStr (pointer (AoutHeader.SymbSize)));
+    WriteLn (StdErr, 'StabOfs = ', StabOfs, '/', HexStr (pointer (StabOfs)));
+{$ENDIF DEBUG_LINEINFO}
     if E.Size > StabOfs + AoutHeader.SymbSize then
      OpenEMXaout := true;
    end;