mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 06:09:22 +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;
|
end;
|
||||||
|
|
||||||
const
|
const
|
||||||
StartPageSize = $1000;
|
PageSizeFill = $FFF;
|
||||||
|
|
||||||
var
|
var
|
||||||
DosHeader: TDosHeader;
|
DosHeader: TDosHeader;
|
||||||
@ -618,6 +618,9 @@ begin
|
|||||||
if E.Size > SizeOf (DosHeader) then
|
if E.Size > SizeOf (DosHeader) then
|
||||||
begin
|
begin
|
||||||
BlockRead (E.F, DosHeader, SizeOf (TDosHeader));
|
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
|
if E.Size > DosHeader.e_cparhdr shl 4 + SizeOf (TEmxHeader) then
|
||||||
begin
|
begin
|
||||||
Seek (E.F, DosHeader.e_cparhdr shl 4);
|
Seek (E.F, DosHeader.e_cparhdr shl 4);
|
||||||
@ -627,17 +630,28 @@ begin
|
|||||||
if (S4 = 'emx ') and
|
if (S4 = 'emx ') and
|
||||||
(E.Size > EmxHeader.AoutOfs + SizeOf (TAoutHeader)) then
|
(E.Size > EmxHeader.AoutOfs + SizeOf (TAoutHeader)) then
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF DEBUG_LINEINFO}
|
||||||
|
WriteLn (StdErr, 'EmxHeader.AoutOfs = ', EmxHeader.AoutOfs, '/', HexStr (pointer (EmxHeader.AoutOfs)));
|
||||||
|
{$ENDIF DEBUG_LINEINFO}
|
||||||
Seek (E.F, EmxHeader.AoutOfs);
|
Seek (E.F, EmxHeader.AoutOfs);
|
||||||
BlockRead (E.F, AoutHeader, SizeOf (TAoutHeader));
|
BlockRead (E.F, AoutHeader, SizeOf (TAoutHeader));
|
||||||
if AOutHeader.Magic = $10B then
|
{$IFDEF DEBUG_LINEINFO}
|
||||||
StabOfs := StartPageSize
|
WriteLn (StdErr, 'AoutHeader.Magic = ', AoutHeader.Magic);
|
||||||
else
|
{$ENDIF DEBUG_LINEINFO}
|
||||||
StabOfs := EmxHeader.AoutOfs + SizeOf (TAoutHeader);
|
{ if AOutHeader.Magic = $10B then}
|
||||||
StabOfs := StabOfs
|
StabOfs := (EmxHeader.AoutOfs or PageSizeFill) + 1
|
||||||
+ AoutHeader.TextSize
|
+ AoutHeader.TextSize
|
||||||
+ AoutHeader.DataSize
|
+ AoutHeader.DataSize
|
||||||
+ AoutHeader.TextRelocSize
|
+ AoutHeader.TextRelocSize
|
||||||
+ AoutHeader.DataRelocSize;
|
+ 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
|
if E.Size > StabOfs + AoutHeader.SymbSize then
|
||||||
OpenEMXaout := true;
|
OpenEMXaout := true;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user