ソースを参照

+ introduced TObjData.SymbolPairDefine, to allow custom handling of symbol
pairs in the internal object writer

Nikolay Nikolov 3 年 前
コミット
83f2f7bf37
4 ファイル変更14 行追加2 行削除
  1. 2 0
      compiler/aasmbase.pas
  2. 0 2
      compiler/aasmtai.pas
  3. 6 0
      compiler/assemble.pas
  4. 6 0
      compiler/ogbase.pas

+ 2 - 0
compiler/aasmbase.pas

@@ -78,6 +78,8 @@ interface
          info alt_dbgline and alt_dbgfile, etc. }
        TAsmLabelType = (alt_jump,alt_addr,alt_data,alt_dbgline,alt_dbgfile,alt_dbgtype,alt_dbgframe,alt_eh_begin,alt_eh_end);
 
+       TSymbolPairKind = (spk_set, spk_set_global, spk_thumb_set, spk_localentry);
+
     const
        asmlabeltypeprefix : array[TAsmLabeltype] of string[2] = ('j','a','d','l','f','t','c','eb','ee');
        asmsymbindname : array[TAsmsymbind] of string[23] = ('none', 'external','common',

+ 0 - 2
compiler/aasmtai.pas

@@ -432,8 +432,6 @@ interface
           ash_pushnv,ash_savenv
         );
 
-      TSymbolPairKind = (spk_set, spk_set_global, spk_thumb_set, spk_localentry);
-
 
     const
       regallocstr : array[tregalloctype] of string[10]=('allocated','released','sync','resized','used');

+ 6 - 0
compiler/assemble.pas

@@ -1790,6 +1790,9 @@ Implementation
                       internalerror(2009090804); ;}
                  ObjData.SymbolDefine(Tai_symbol(hp).sym);
                end;
+             ait_symbolpair :
+               with tai_symbolpair(hp) do
+                 ObjData.SymbolPairDefine(kind,sym^,value^);
              ait_label :
                ObjData.SymbolDefine(Tai_label(hp).labsym);
              ait_string :
@@ -1951,6 +1954,9 @@ Implementation
                  objsym:=ObjData.SymbolRef(Tai_symbol_end(hp).sym);
                  objsym.size:=ObjData.CurrObjSec.Size-objsym.offset;
                end;
+             ait_symbolpair:
+               with tai_symbolpair(hp) do
+                 ObjData.SymbolPairDefine(kind,sym^,value^);
              ait_label :
                ObjData.SymbolDefine(Tai_label(hp).labsym);
              ait_string :

+ 6 - 0
compiler/ogbase.pas

@@ -435,6 +435,7 @@ interface
        function  symboldefine(const aname:string;abind:TAsmsymbind;atyp:Tasmsymtype):TObjSymbol;
        function  symbolref(asmsym:TAsmSymbol):TObjSymbol;
        function  symbolref(const aname:string):TObjSymbol;
+       procedure symbolpairdefine(akind: TSymbolPairKind;const asym, avalue: string);virtual;
        procedure ResetCachedAsmSymbols;
        { Allocation }
        procedure alloc(len:TObjSectionOfs);
@@ -1546,6 +1547,11 @@ implementation
       end;
 
 
+    procedure TObjData.symbolpairdefine(akind: TSymbolPairKind; const asym, avalue: string);
+      begin
+      end;
+
+
     procedure TObjData.ResetCachedAsmSymbols;
       var
         i  : longint;