Pārlūkot izejas kodu

* fixed stabs debug info for webtbs/tw9766 again

git-svn-id: trunk@10602 -
Jonas Maebe 17 gadi atpakaļ
vecāks
revīzija
39fa81d40e
2 mainītis faili ar 8 papildinājumiem un 2 dzēšanām
  1. 4 1
      compiler/dbgbase.pas
  2. 4 1
      compiler/dbgstabs.pas

+ 4 - 1
compiler/dbgbase.pas

@@ -226,6 +226,9 @@ implementation
         { to avoid infinite loops }
         def.dbg_state := dbg_state_writing;
         beforeappenddef(list,def);
+        { queued defs have to be written later }
+        if (def.dbg_state=dbg_state_queued) then
+          exit;
         case def.typ of
           stringdef :
             appenddef_string(list,tstringdef(def));
@@ -394,7 +397,7 @@ implementation
         for i:=0 to st.DefList.Count-1 do
           begin
             def:=tdef(st.DefList[i]);
-            if (def.dbg_state=dbg_state_used) then
+            if (def.dbg_state in [dbg_state_used,dbg_state_queued]) then
               appenddef(list,def);
           end;
         case st.symtabletype of

+ 4 - 1
compiler/dbgstabs.pas

@@ -489,7 +489,10 @@ implementation
         { Here we maybe generate a type, so we have to use numberstring }
         if is_class(def) and
            tobjectdef(def).writing_class_record_dbginfo then
-          st:=def_stabstr_evaluate(def,'"'+symname+':$1$2=',[stabchar,def_stab_classnumber(tobjectdef(def))])
+          { in case of writing the class record structure, we always have to
+            use the class name (so it refers both to the struct and the
+            pointer to the struct), otherwise gdb crashes (see tests/webtbs/tw9766.pp) }
+          st:=def_stabstr_evaluate(def,'"{$sym_name}:$1$2=',[stabchar,def_stab_classnumber(tobjectdef(def))])
         else
           st:=def_stabstr_evaluate(def,'"'+symname+':$1$2=',[stabchar,def_stab_number(def)]);
         st:=st+ss;