소스 검색

+ create relocation objects for R_WASM_MEMORY_ADDR_LEB relocations in the wasm object reader

Nikolay Nikolov 1 년 전
부모
커밋
3e14d47b92
1개의 변경된 파일17개의 추가작업 그리고 0개의 파일을 삭제
  1. 17 0
      compiler/ogwasm.pas

+ 17 - 0
compiler/ogwasm.pas

@@ -3640,6 +3640,7 @@ implementation
         i, j, FirstDataSegmentIdx, SegI: Integer;
         CurrSec, ObjSec: TObjSection;
         BaseSectionOffset: UInt32;
+        ObjReloc: TWasmObjRelocation;
       begin
         FReader:=AReader;
         InputFileName:=AReader.FileName;
@@ -3849,6 +3850,22 @@ implementation
                       else
                         Writeln('Warning! No object symbol created for ', SymbolTable[RelocIndex].SymName);
                     end;
+                  R_WASM_MEMORY_ADDR_LEB:
+                    begin
+                      if RelocIndex>high(SymbolTable) then
+                        begin
+                          InputError('Symbol index in relocation too high');
+                          exit;
+                        end;
+                      if Assigned(SymbolTable[RelocIndex].ObjSym) then
+                        begin
+                          ObjReloc:=TWasmObjRelocation.CreateSymbol(RelocOffset-BaseSectionOffset,SymbolTable[RelocIndex].ObjSym,RELOC_MEMORY_ADDR_LEB);
+                          ObjReloc.Addend:=RelocAddend;
+                          ObjSec.ObjRelocations.Add(ObjReloc);
+                        end
+                      else
+                        Writeln('Warning! No object symbol created for ', SymbolTable[RelocIndex].SymName);
+                    end;
                 end;
               end;