From c293d0b7299101e93228925ad239f2472c316c02 Mon Sep 17 00:00:00 2001 From: Nikolay Nikolov Date: Wed, 27 Dec 2023 15:14:21 +0200 Subject: [PATCH] + partially implemented the creation of symbols for SYMTAB_FUNCTION entries --- compiler/ogwasm.pas | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/compiler/ogwasm.pas b/compiler/ogwasm.pas index 54fae21152..0c0b4dee00 100644 --- a/compiler/ogwasm.pas +++ b/compiler/ogwasm.pas @@ -3296,7 +3296,38 @@ implementation objsym.offset:=SymOffset; objsym.size:=SymSize; end; - byte(SYMTAB_FUNCTION), + byte(SYMTAB_FUNCTION): + if (SymFlags and WASM_SYM_UNDEFINED)<>0 then + begin + if not FuncTypes[SymIndex].IsImport then + begin + InputError('WASM_SYM_UNDEFINED set on a SYMTAB_FUNCTION symbol, that is not an import'); + exit; + end; + if (SymFlags and WASM_SYM_EXPLICIT_NAME)<>0 then + begin + Writeln('Alias: ', SymName, ' -> ', FuncTypes[SymIndex].ImportModName, '.', FuncTypes[SymIndex].ImportName); + {todo...} + end + else + begin + objsym:=ObjData.CreateSymbol(FuncTypes[SymIndex].ImportName); + objsym.bind:=AB_EXTERNAL; + objsym.typ:=AT_FUNCTION; + objsym.objsection:=nil; + objsym.offset:=0; + objsym.size:=0; + end; + end + else + begin + if FuncTypes[SymIndex].IsImport then + begin + InputError('WASM_SYM_UNDEFINED not set on a SYMTAB_FUNCTION symbol, that is an import'); + exit; + end; + {todo...} + end; byte(SYMTAB_GLOBAL), byte(SYMTAB_SECTION), byte(SYMTAB_EVENT),