mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 19:09:16 +02:00
+ wasm internal object reader: create symbols for SYMTAB_EVENT entries in the symbol table
This commit is contained in:
parent
09accffd28
commit
962b36a6e8
@ -4350,7 +4350,61 @@ implementation
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
SYMTAB_EVENT,
|
SYMTAB_EVENT:
|
||||||
|
begin
|
||||||
|
if (SymFlags and WASM_SYM_UNDEFINED)<>0 then
|
||||||
|
begin
|
||||||
|
if not TagTypes[SymIndex].IsImport then
|
||||||
|
begin
|
||||||
|
InputError('WASM_SYM_UNDEFINED set on a SYMTAB_EVENT symbol, that is not an import');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
if (SymFlags and WASM_SYM_EXPLICIT_NAME)<>0 then
|
||||||
|
begin
|
||||||
|
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(SymName));
|
||||||
|
objsym.bind:=AB_EXTERNAL;
|
||||||
|
objsym.typ:=AT_WASM_EXCEPTION_TAG;
|
||||||
|
objsym.objsection:=nil;
|
||||||
|
objsym.offset:=0;
|
||||||
|
objsym.size:=1;
|
||||||
|
objsym.LinkingData.ImportModule:=TagTypes[SymIndex].ImportModName;
|
||||||
|
objsym.LinkingData.ImportName:=TagTypes[SymIndex].ImportName;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if GlobalTypes[SymIndex].ImportModName = 'env' then
|
||||||
|
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(GlobalTypes[SymIndex].ImportName))
|
||||||
|
else
|
||||||
|
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(GlobalTypes[SymIndex].ImportModName + '.' + GlobalTypes[SymIndex].ImportName));
|
||||||
|
objsym.bind:=AB_EXTERNAL;
|
||||||
|
objsym.typ:=AT_WASM_EXCEPTION_TAG;
|
||||||
|
objsym.objsection:=nil;
|
||||||
|
objsym.offset:=0;
|
||||||
|
objsym.size:=1;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if TagTypes[SymIndex].IsImport then
|
||||||
|
begin
|
||||||
|
InputError('WASM_SYM_UNDEFINED not set on a SYMTAB_EVENT symbol, that is an import');
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
objsym:=TWasmObjSymbol(ObjData.CreateSymbol(SymName));
|
||||||
|
objsym.bind:=AB_GLOBAL;
|
||||||
|
objsym.typ:=AT_WASM_EXCEPTION_TAG;
|
||||||
|
objsym.objsection:=ObjData.createsection('.wasm_tags.n_'+SymName,1,[oso_Data,oso_load],true);
|
||||||
|
if objsym.objsection.Size=0 then
|
||||||
|
objsym.objsection.WriteZeros(1);
|
||||||
|
if (SymFlags and WASM_SYM_EXPLICIT_NAME)=0 then
|
||||||
|
TWasmObjSection(objsym.objsection).MainFuncSymbol:=objsym;
|
||||||
|
objsym.offset:=0;
|
||||||
|
objsym.size:=1;
|
||||||
|
end;
|
||||||
|
objsym.LinkingData.FuncType:=TWasmFuncType.Create(FFuncTypes[TagTypes[SymIndex].TagTypeIdx]);
|
||||||
|
objsym.LinkingData.IsExported:=TagTypes[SymIndex].IsExported;
|
||||||
|
objsym.LinkingData.ExportName:=TagTypes[SymIndex].ExportName;
|
||||||
|
end;
|
||||||
SYMTAB_TABLE:
|
SYMTAB_TABLE:
|
||||||
{TODO};
|
{TODO};
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user