Prechádzať zdrojové kódy

* fixed "set of enumeration" for gdb 6.7/6.8

git-svn-id: trunk@10603 -
Jonas Maebe 17 rokov pred
rodič
commit
07b3e11e2b
1 zmenil súbory, kde vykonal 17 pridanie a 1 odobranie
  1. 17 1
      compiler/dbgdwarf.pas

+ 17 - 1
compiler/dbgdwarf.pas

@@ -2749,6 +2749,8 @@ implementation
       end;
 
     procedure TDebugInfoDwarf2.appenddef_set(list:TAsmList;def: tsetdef);
+      var
+        lab: tasmlabel;
       begin
         if (ds_dwarf_sets in current_settings.debugswitches) then
           begin
@@ -2764,7 +2766,21 @@ implementation
                 DW_AT_byte_size,DW_FORM_data2,def.size
                 ]);
             if assigned(def.elementdef) then
-              append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef));
+              begin
+                if (def.elementdef.typ=enumdef) then
+                  begin
+                    { gdb 6.7 - 6.8 is broken for regular enum sets }
+                    current_asmdata.getaddrlabel(lab);
+                    append_labelentry_ref(DW_AT_type,lab);
+                    finish_entry;
+                    current_asmdata.asmlists[al_dwarf_info].concat(tai_symbol.create(lab,0));
+                    append_entry(DW_TAG_subrange_type,false,[
+                      DW_AT_lower_bound,DW_FORM_sdata,tenumdef(def.elementdef).minval,
+                      DW_AT_upper_bound,DW_FORM_sdata,tenumdef(def.elementdef).maxval
+                      ]);
+                  end;
+                append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.elementdef))
+              end
           end
         else
           begin