* completed ret-in-para support for dwarf (result was already

accessible since previous patch via the "result" name)

git-svn-id: trunk@6558 -
This commit is contained in:
Jonas Maebe 2007-02-19 13:00:22 +00:00
parent 46755aaec0
commit 59f3041e67

View File

@ -1605,11 +1605,12 @@ implementation
procedure TDebugInfoDwarf.appendprocdef(pd:tprocdef); procedure TDebugInfoDwarf.appendprocdef(pd:tprocdef);
var var
procendlabel : tasmlabel; procendlabel : tasmlabel;
funcrettype : tasmsymbol;
mangled_length : longint; mangled_length : longint;
procentry : String; p : pchar;
p : pchar; procentry : string;
hs : string; dreg : byte;
begin begin
if assigned(pd.procstarttai) then if assigned(pd.procstarttai) then
begin begin
@ -1640,27 +1641,35 @@ implementation
append_labelentry(DW_AT_low_pc,current_asmdata.RefAsmSymbol(procentry)); append_labelentry(DW_AT_low_pc,current_asmdata.RefAsmSymbol(procentry));
append_labelentry(DW_AT_high_pc,procendlabel); append_labelentry(DW_AT_high_pc,procendlabel);
(*
if assigned(pd.funcretsym) and if assigned(pd.funcretsym) and
(tabstractnormalvarsym(pd.funcretsym).refs>0) then (tabstractnormalvarsym(pd.funcretsym).refs>0) then
begin begin
if tabstractnormalvarsym(pd.funcretsym).localloc.loc=LOC_REFERENCE then if tabstractnormalvarsym(pd.funcretsym).localloc.loc=LOC_REFERENCE then
begin 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 if paramanager.ret_in_param(pd.returndef,pd.proccalloption) then
hs:='X*' funcrettype:=def_dwarf_ref_lab(pd.returndef)
else else
hs:='X'; funcrettype:=def_dwarf_lab(pd.returndef);
templist.concat(Tai_stab.create(stab_stabs,strpnew(
'"'+pd.procsym.name+':'+hs+def_stab_number(pd.returndef)+'",'+ append_entry(DW_TAG_formal_parameter,false,[
tostr(N_tsym)+',0,0,'+tostr(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset)))); DW_AT_name,DW_FORM_string,pd.procsym.name+#0,
if (m_result in current_settings.modeswitches) then {
templist.concat(Tai_stab.create(stab_stabs,strpnew( DW_AT_decl_file,DW_FORM_data1,0,
'"RESULT:'+hs+def_stab_number(pd.returndef)+'",'+ DW_AT_decl_line,DW_FORM_data1,
tostr(N_tsym)+',0,0,'+tostr(tabstractnormalvarsym(pd.funcretsym).localloc.reference.offset)))); }
{ 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;
end; end;
*)
finish_entry; finish_entry;
(* (*