+ implemented support for R_WASM_TABLE_INDEX_SLEB relocations

This commit is contained in:
Nikolay Nikolov 2021-09-26 06:22:41 +03:00
parent 9fa2e2934b
commit 7f5250bf46
3 changed files with 18 additions and 9 deletions

View File

@ -115,7 +115,7 @@ interface
{$ifdef WASM32}
RELOC_FUNCTION_INDEX_LEB,
RELOC_MEMORY_ADDR_LEB,
RELOC_MEMORY_ADDR_SLEB,
RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB,
RELOC_TYPE_INDEX_LEB,
{$endif WASM32}
{ Relative relocation }

View File

@ -550,7 +550,7 @@ implementation
writebytes(leb_zero,5);
end;
RELOC_MEMORY_ADDR_LEB,
RELOC_MEMORY_ADDR_SLEB:
RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB:
begin
if (Reloctype=RELOC_MEMORY_ADDR_LEB) and (Data<0) then
internalerror(2021092602);
@ -909,7 +909,7 @@ implementation
objsec.Data.seek(objrel.DataOffset);
WriteUleb5(objsec.Data,TWasmObjSymbol(objrel.symbol).ImportOrFuncIndex);
end;
RELOC_MEMORY_ADDR_SLEB:
RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB:
begin
if not assigned(objrel.symbol) then
internalerror(2021092605);
@ -984,15 +984,24 @@ implementation
WriteUleb(relout,TWasmObjSymbol(objrel.symbol).SymbolIndex);
WriteUleb(relout,0); { addend to add to the address }
end;
RELOC_MEMORY_ADDR_SLEB:
RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB:
begin
if not assigned(objrel.symbol) then
internalerror(2021092604);
Inc(relcount^);
WriteByte(relout,Ord(R_WASM_MEMORY_ADDR_SLEB));
WriteUleb(relout,objrel.DataOffset+objsec.FileSectionOfs);
WriteUleb(relout,TWasmObjSymbol(objrel.symbol).SymbolIndex);
WriteUleb(relout,0); { addend to add to the address }
if IsExternalFunction(objrel.symbol) or (objrel.symbol.typ=AT_FUNCTION) then
begin
WriteByte(relout,Ord(R_WASM_TABLE_INDEX_SLEB));
WriteUleb(relout,objrel.DataOffset+objsec.FileSectionOfs);
WriteUleb(relout,TWasmObjSymbol(objrel.symbol).SymbolIndex);
end
else
begin
WriteByte(relout,Ord(R_WASM_MEMORY_ADDR_SLEB));
WriteUleb(relout,objrel.DataOffset+objsec.FileSectionOfs);
WriteUleb(relout,TWasmObjSymbol(objrel.symbol).SymbolIndex);
WriteUleb(relout,0); { addend to add to the address }
end;
end;
RELOC_ABSOLUTE:
begin

View File

@ -1014,7 +1014,7 @@ uses
top_ref:
begin
if assigned(ref^.symbol) then
objdata.writeReloc(ref^.offset,5,ObjData.symbolref(ref^.symbol),RELOC_MEMORY_ADDR_SLEB)
objdata.writeReloc(ref^.offset,5,ObjData.symbolref(ref^.symbol),RELOC_MEMORY_ADDR_OR_TABLE_INDEX_SLEB)
else
begin
if assigned(ref^.symbol) or (ref^.base<>NR_NO) or (ref^.index<>NR_NO) then