Browse Source

* define the __stack_pointer symbol in a different way, so it doesn't crash during linking

Nikolay Nikolov 1 year ago
parent
commit
2eae62a6e8
2 changed files with 14 additions and 6 deletions
  1. 10 6
      compiler/ogwasm.pas
  2. 4 0
      compiler/systems/t_wasi.pas

+ 10 - 6
compiler/ogwasm.pas

@@ -254,7 +254,7 @@ interface
         procedure GenerateLibraryImports(ImportLibraryList:TFPHashObjectList);override;
         procedure AfterUnusedSectionRemoval;override;
         procedure MemPos_ExeSection(const aname:string);override;
-        procedure Load_Start;override;
+        procedure Load_Symbol(const aname: string);override;
       end;
 
       { TWasmAssembler }
@@ -4485,13 +4485,17 @@ implementation
         inherited MemPos_ExeSection(aname);
       end;
 
-    procedure TWasmExeOutput.Load_Start;
+    procedure TWasmExeOutput.Load_Symbol(const aname: string);
       const
-        aname='__stack_pointer';
+        StackPointerSymStr='__stack_pointer';
       begin
-        inherited Load_Start;
-        internalObjData.createsection('*'+aname,0,[]);
-        internalObjData.SymbolDefine(aname,AB_GLOBAL,AT_WASM_GLOBAL);
+        if aname=StackPointerSymStr then
+          begin
+            internalObjData.createsection('*'+aname,0,[]);
+            internalObjData.SymbolDefine(aname,AB_GLOBAL,AT_WASM_GLOBAL);
+          end
+        else
+          inherited;
       end;
 
     procedure TWasmExeOutput.PrepareImports;

+ 4 - 0
compiler/systems/t_wasi.pas

@@ -297,6 +297,10 @@ begin
       LinkScript.Concat('READOBJECT ' + maybequoted(s));
   end;
 
+  LinkScript.Concat('EXESECTION .wasm_globals');
+  LinkScript.Concat('  SYMBOL __stack_pointer');
+  LinkScript.Concat('ENDEXESECTION');
+
   LinkScript.Concat('EXESECTION .text');
   LinkScript.Concat('  OBJSECTION .text.*');
   LinkScript.Concat('ENDEXESECTION');