Pārlūkot izejas kodu

* completed ret-in-para support for dwarf (result was already
accessible since previous patch via the "result" name)

git-svn-id: trunk@6558 -

Jonas Maebe 18 gadi atpakaļ
vecāks
revīzija
59f3041e67
1 mainītis faili ar 25 papildinājumiem un 16 dzēšanām
  1. 25 16
      compiler/dbgdwarf.pas

+ 25 - 16
compiler/dbgdwarf.pas

@@ -1605,11 +1605,12 @@ implementation
 
     procedure TDebugInfoDwarf.appendprocdef(pd:tprocdef);
       var
-        procendlabel : tasmlabel;
+        procendlabel   : tasmlabel;
+        funcrettype    : tasmsymbol;
         mangled_length : longint;
-        procentry : String;
-        p : pchar;
-        hs : string;
+        p              : pchar;
+        procentry      : string;
+        dreg           : byte;
       begin
         if assigned(pd.procstarttai) then
           begin
@@ -1640,27 +1641,35 @@ implementation
             append_labelentry(DW_AT_low_pc,current_asmdata.RefAsmSymbol(procentry));
             append_labelentry(DW_AT_high_pc,procendlabel);
 
-            (*
             if assigned(pd.funcretsym) and
                (tabstractnormalvarsym(pd.funcretsym).refs>0) then
               begin
                 if tabstractnormalvarsym(pd.funcretsym).localloc.loc=LOC_REFERENCE then
                   begin
-{$warning Need to add gdb support for ret in param register calling}
+                    finish_entry;
+
                     if paramanager.ret_in_param(pd.returndef,pd.proccalloption) then
-                      hs:='X*'
+                      funcrettype:=def_dwarf_ref_lab(pd.returndef)
                     else
-                      hs:='X';
-                    templist.concat(Tai_stab.create(stab_stabs,strpnew(
-                       '"'+pd.procsym.name+':'+hs+def_stab_number(pd.returndef)+'",'+
-                       tostr(N_tsym)+',0,0,'+tostr(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset))));
-                    if (m_result in current_settings.modeswitches) then
-                      templist.concat(Tai_stab.create(stab_stabs,strpnew(
-                         '"RESULT:'+hs+def_stab_number(pd.returndef)+'",'+
-                         tostr(N_tsym)+',0,0,'+tostr(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset))));
+                      funcrettype:=def_dwarf_lab(pd.returndef);
+
+                    append_entry(DW_TAG_formal_parameter,false,[
+                      DW_AT_name,DW_FORM_string,pd.procsym.name+#0,
+                      {
+                      DW_AT_decl_file,DW_FORM_data1,0,
+                      DW_AT_decl_line,DW_FORM_data1,
+                      }
+                      { data continues below }
+                      DW_AT_location,DW_FORM_block1,1+Lengthsleb128(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset)
+                    ]);
+
+                    { append block data }
+                    dreg:=dwarf_reg(tabstractnormalvarsym(pd.funcretsym).localloc.reference.base);
+                    current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_breg0)+dreg));
+                    current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_sleb128bit(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset));
+                    append_labelentry_ref(DW_AT_type,funcrettype);
                   end;
               end;
-            *)
 
             finish_entry;
 (*