diff --git a/rtl/inc/exeinfo.pp b/rtl/inc/exeinfo.pp index 673dc80d26..5d7e74f1bf 100644 --- a/rtl/inc/exeinfo.pp +++ b/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;