mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 11:09:27 +02:00
+ wasm internal object reader: support relocations for debug sections
This commit is contained in:
parent
dfdc4a4d78
commit
39c3d5d035
@ -2453,7 +2453,7 @@ implementation
|
||||
{ meaning of first index: }
|
||||
{ table 0 is code relocs }
|
||||
{ table 1 is data relocs }
|
||||
{ tables 2.. are custom section relocs }
|
||||
{ tables 2.. are custom section relocs for debug sections }
|
||||
RelocationTable: array of array of record
|
||||
RelocType: Byte;
|
||||
RelocOffset: uint32;
|
||||
@ -2579,6 +2579,7 @@ implementation
|
||||
TargetSection, RelocCount: uint32;
|
||||
i: Integer;
|
||||
RelocTableIndex: Integer;
|
||||
ds: TWasmCustomDebugSectionType;
|
||||
begin
|
||||
Result:=False;
|
||||
if not ReadUleb32(TargetSection) then
|
||||
@ -2592,10 +2593,18 @@ implementation
|
||||
RelocTableIndex:=1
|
||||
else
|
||||
begin
|
||||
Writeln('Warning! Relocation section ignored!');
|
||||
Result:=True;
|
||||
//InputError('Relocation for custom sections not supported, yet');
|
||||
exit;
|
||||
RelocTableIndex:=-1;
|
||||
for ds:=Low(DebugSectionIndex) to High(DebugSectionIndex) do
|
||||
if DebugSectionIndex[ds]=TargetSection then
|
||||
begin
|
||||
RelocTableIndex:=2+(Ord(ds)-Ord(Low(TWasmCustomDebugSectionType)));
|
||||
break;
|
||||
end;
|
||||
if RelocTableIndex=-1 then
|
||||
begin
|
||||
InputError('Relocation found for a custom section, that is not supported');
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
if not ReadUleb32(RelocCount) then
|
||||
begin
|
||||
@ -3942,7 +3951,7 @@ implementation
|
||||
DataSegments:=nil;
|
||||
SymbolTable:=nil;
|
||||
RelocationTable:=nil;
|
||||
SetLength(RelocationTable,2);
|
||||
SetLength(RelocationTable,2+(Ord(High(TWasmCustomDebugSectionType))-Ord(Low(TWasmCustomDebugSectionType))+1));
|
||||
FuncTypes:=nil;
|
||||
FuncTypeImportsCount:=0;
|
||||
TableTypes:=nil;
|
||||
@ -4179,7 +4188,12 @@ implementation
|
||||
end;
|
||||
BaseSectionOffset:=DataSegments[SegI].DataSectionOffset;
|
||||
ObjSec:=TObjSection(ObjData.ObjSectionList[FirstDataSegmentIdx+SegI]);
|
||||
end
|
||||
end;
|
||||
2..2+(Ord(High(TWasmCustomDebugSectionType))-Ord(Low(TWasmCustomDebugSectionType))):
|
||||
begin
|
||||
BaseSectionOffset:=0;
|
||||
ObjSec:=ObjData.findsection(WasmCustomSectionName[TWasmCustomSectionType((j-2)+Ord(Low(TWasmCustomDebugSectionType)))]);
|
||||
end;
|
||||
else
|
||||
internalerror(2023122801);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user