Browse Source

+ webassembly internal linker: create separate exe sections for .rodata and .bss

Nikolay Nikolov 1 year ago
parent
commit
b361b41a86
2 changed files with 6 additions and 2 deletions
  1. 1 1
      compiler/ogwasm.pas
  2. 5 1
      compiler/systems/t_wasi.pas

+ 1 - 1
compiler/ogwasm.pas

@@ -4257,7 +4257,7 @@ implementation
       begin
       begin
         { WebAssembly is a Harvard architecture.
         { WebAssembly is a Harvard architecture.
           Data lives in a separate address space, so start addressing back from 0. }
           Data lives in a separate address space, so start addressing back from 0. }
-        if aname='.data' then
+        if aname='.rodata' then
           CurrMemPos:=0;
           CurrMemPos:=0;
         inherited MemPos_ExeSection(aname);
         inherited MemPos_ExeSection(aname);
       end;
       end;

+ 5 - 1
compiler/systems/t_wasi.pas

@@ -303,9 +303,13 @@ begin
   LinkScript.Concat('  OBJSECTION .text.*');
   LinkScript.Concat('  OBJSECTION .text.*');
   LinkScript.Concat('ENDEXESECTION');
   LinkScript.Concat('ENDEXESECTION');
 
 
-  LinkScript.Concat('EXESECTION .data');
+  LinkScript.Concat('EXESECTION .rodata');
   LinkScript.Concat('  OBJSECTION .rodata.*');
   LinkScript.Concat('  OBJSECTION .rodata.*');
+  LinkScript.Concat('ENDEXESECTION');
+  LinkScript.Concat('EXESECTION .data');
   LinkScript.Concat('  OBJSECTION .data.*');
   LinkScript.Concat('  OBJSECTION .data.*');
+  LinkScript.Concat('ENDEXESECTION');
+  LinkScript.Concat('EXESECTION .bss');
   LinkScript.Concat('  OBJSECTION .bss');
   LinkScript.Concat('  OBJSECTION .bss');
   LinkScript.Concat('ENDEXESECTION');
   LinkScript.Concat('ENDEXESECTION');