mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-08 07:46:03 +02:00
* fix buggy stabs offset calculation
git-svn-id: trunk@20144 -
This commit is contained in:
parent
20cacb7a51
commit
5d82eaa628
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user