+ wasm internal object reader: support relocations for debug sections

This commit is contained in:
Nikolay Nikolov 2024-01-06 19:30:14 +02:00
parent dfdc4a4d78
commit 39c3d5d035

View File

@ -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;