Browse Source

+ WebAssembly threads internal linker: create the __wasm_init_tls symbol's
special WebAssembly properties, such as FuncType

Nikolay Nikolov 1 year ago
parent
commit
44a5f6623b
1 changed files with 8 additions and 0 deletions
  1. 8 0
      compiler/ogwasm.pas

+ 8 - 0
compiler/ogwasm.pas

@@ -265,6 +265,7 @@ interface
         FWasmSections: array [TWasmSectionID] of tdynamicarray;
         FWasmCustomSections: array [TWasmCustomSectionType] of tdynamicarray;
         FStackPointerSym: TWasmObjSymbol;
+        FInitTlsFunctionSym: TWasmObjSymbol;
         FMinMemoryPages: Integer;
         procedure WriteWasmSection(wsid: TWasmSectionID);
         procedure WriteWasmSectionIfNotEmpty(wsid: TWasmSectionID);
@@ -5136,6 +5137,13 @@ implementation
             FStackPointerSym.LinkingData.GlobalInitializer.typ:=wbt_i32;
             FStackPointerSym.LinkingData.GlobalInitializer.init_i32:=0;
           end
+        else if (ts_wasm_threads in current_settings.targetswitches) and (aname='__wasm_init_tls') then
+          begin
+            internalObjData.createsection('*'+aname,0,[]);
+            FInitTlsFunctionSym:=TWasmObjSymbol(internalObjData.SymbolDefine(aname,AB_GLOBAL,AT_FUNCTION));
+            TWasmObjSection(FInitTlsFunctionSym.ObjSection).MainFuncSymbol:=FInitTlsFunctionSym;
+            FInitTlsFunctionSym.LinkingData.FuncType:=TWasmFuncType.Create([wbt_i32],[]);
+          end
         else
           inherited;
       end;