Browse Source

+ create data symbols in the wasm object reader

Nikolay Nikolov 1 year ago
parent
commit
ee4d77b119
1 changed files with 33 additions and 0 deletions
  1. 33 0
      compiler/ogwasm.pas

+ 33 - 0
compiler/ogwasm.pas

@@ -3145,6 +3145,7 @@ implementation
         ModuleVersion: array [0..3] of Byte;
         i: Integer;
         CurrSec: TObjSection;
+        objsym: TObjSymbol;
       begin
         FReader:=AReader;
         InputFileName:=AReader.FileName;
@@ -3177,6 +3178,38 @@ implementation
               end;
         ReadSectionContent(ObjData);
 
+        for i:=low(SymbolTable) to high(SymbolTable) do
+          with SymbolTable[i] do
+            case SymKind of
+              byte(SYMTAB_DATA):
+                if (SymFlags and WASM_SYM_UNDEFINED)<>0 then
+                  begin
+                    objsym:=ObjData.CreateSymbol(SymName);
+                    objsym.bind:=AB_EXTERNAL;
+                    objsym.typ:=AT_DATA;
+                    objsym.objsection:=nil;
+                    objsym.offset:=0;
+                    objsym.size:=0;
+                  end
+                else
+                  begin
+                    objsym:=ObjData.CreateSymbol(SymName);
+                    objsym.bind:=AB_GLOBAL;
+                    objsym.typ:=AT_DATA;
+                    objsym.objsection:=TObjSection(ObjData.ObjSectionList[SymIndex]);
+                    objsym.offset:=SymOffset;
+                    objsym.size:=SymSize;
+                  end;
+              byte(SYMTAB_FUNCTION),
+              byte(SYMTAB_GLOBAL),
+              byte(SYMTAB_SECTION),
+              byte(SYMTAB_EVENT),
+              byte(SYMTAB_TABLE):
+                {TODO};
+              else
+                internalerror(2023122701);
+            end;
+
         Result:=True;
       end;