浏览代码

* simplified use_64bit_headers code to avoid if-statement blowups
when adding tf_dwarf_relative_addresses support

git-svn-id: trunk@6299 -

Jonas Maebe 18 年之前
父节点
当前提交
d99a616167
共有 1 个文件被更改,包括 30 次插入37 次删除
  1. 30 37
      compiler/dbgdwarf.pas

+ 30 - 37
compiler/dbgdwarf.pas

@@ -220,8 +220,14 @@ interface
         function get_file_index(afile: tinputfile): Integer;
         procedure write_symtable_syms(st:TSymtable);
       protected
+        procedure set_use_64bit_headers(state: boolean);
+
         // set if we should use 64bit headers (dwarf3 and up)
-        use_64bit_headers: Boolean;
+        _use_64bit_headers: Boolean;
+        property use_64bit_headers: Boolean read _use_64bit_headers write set_use_64bit_headers;
+        // set to ait_const32bit if use_64bit_headers is false, otherwise
+        // to ait_const64bit
+        offsetsymtype: taiconst_type;
         vardatadef: trecorddef;
         procedure append_entry(tag : tdwarf_tag;has_children : boolean;data : array of const);
         procedure append_labelentry(attr : tdwarf_attribute;sym : tasmsymbol);
@@ -603,6 +609,16 @@ implementation
                               TDebugInfoDwarf
 ****************************************************************************}
 
+    procedure TDebugInfoDwarf.set_use_64bit_headers(state: boolean);
+      begin
+         _use_64bit_headers:=state;
+         if not(state) then
+           offsetsymtype:=aitconst_32bit
+         else
+           offsetsymtype:=aitconst_64bit
+      end;
+
+
     function TDebugInfoDwarf.def_dwarf_lab(def:tdef) : tasmsymbol;
       begin
         { Keep track of used dwarf entries, this info is only usefull for dwarf entries
@@ -878,15 +894,10 @@ implementation
         }
         current_asmdata.asmlists[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(attr)));
         if use_64bit_headers then
-          begin
-            current_asmdata.asmlists[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data8)));
-            current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(aitconst_64bit,sym));
-          end
+          current_asmdata.asmlists[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data8)))
         else
-          begin
-            current_asmdata.asmlists[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data4)));
-            current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(aitconst_32bit,sym));
-          end;
+          current_asmdata.asmlists[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data4)));
+        current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(offsetsymtype,sym));
       end;
 
 
@@ -1966,14 +1977,9 @@ implementation
         { size }
         current_asmdata.getlabel(lbl,alt_dbgfile);
         if use_64bit_headers then
-          begin
-            linelist.concat(tai_const.create_32bit(longint($FFFFFFFF)));
-            linelist.concat(tai_const.create_rel_sym(aitconst_64bit,
-              lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_line0')));
-          end
-        else
-          linelist.concat(tai_const.create_rel_sym(aitconst_32bit,
-            lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_line0')));
+          linelist.concat(tai_const.create_32bit(longint($FFFFFFFF)));
+        linelist.concat(tai_const.create_rel_sym(offsetsymtype,
+          lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_line0')));
         linelist.concat(tai_label.create(lbl));
 
         { version }
@@ -1981,12 +1987,8 @@ implementation
 
         { header length }
         current_asmdata.getlabel(lbl,alt_dbgfile);
-        if use_64bit_headers then
-          linelist.concat(tai_const.create_rel_sym(aitconst_64bit,
-            lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'ehdebug_line0')))
-        else
-          linelist.concat(tai_const.create_rel_sym(aitconst_32bit,
-            lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'ehdebug_line0')));
+        linelist.concat(tai_const.create_rel_sym(offsetsymtype,
+          lbl,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'ehdebug_line0')));
         linelist.concat(tai_label.create(lbl));
 
         { minimum_instruction_length }
@@ -2151,25 +2153,16 @@ implementation
         current_asmdata.getlabel(lenstartlabel,alt_dbgfile);
         { size }
         if use_64bit_headers then
-          begin
-            current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_32bit(longint($FFFFFFFF)));
-            current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_rel_sym(aitconst_64bit,
-              lenstartlabel,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_info0')));
-          end
-        else
-          current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_rel_sym(aitconst_32bit,
-            lenstartlabel,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_info0')));
+          current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_32bit(longint($FFFFFFFF)));
+        current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_rel_sym(offsetsymtype,
+          lenstartlabel,current_asmdata.RefAsmSymbol(target_asm.labelprefix+'edebug_info0')));
 
         current_asmdata.asmlists[al_dwarf_info].concat(tai_label.create(lenstartlabel));
         { version }
         current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_16bit(dwarf_version));
         { abbrev table (=relative from section start)}
-        if use_64bit_headers then
-          current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(aitconst_64bit,
-            current_asmdata.RefAsmSymbol(target_asm.labelprefix+'debug_abbrev0')))
-        else
-          current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(aitconst_32bit,
-            current_asmdata.RefAsmSymbol(target_asm.labelprefix+'debug_abbrev0')));
+        current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_type_sym(offsetsymtype,
+          current_asmdata.RefAsmSymbol(target_asm.labelprefix+'debug_abbrev0')));
         { address size }
         current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(sizeof(aint)));