* generate realnames for syms in -gw3

git-svn-id: trunk@4833 -
This commit is contained in:
Marc Weustink 2006-10-08 16:27:03 +00:00
parent c64190bda3
commit 31090d8736

View File

@ -246,6 +246,7 @@ interface
procedure appenddef_formal(def:tformaldef); virtual; procedure appenddef_formal(def:tformaldef); virtual;
procedure appenddef_unineddef(def:tundefineddef); virtual; abstract; procedure appenddef_unineddef(def:tundefineddef); virtual; abstract;
procedure appendprocdef(pd:tprocdef); virtual;
procedure appendsym(sym:tsym); procedure appendsym(sym:tsym);
procedure appendsym_var(sym:tabstractnormalvarsym); virtual; procedure appendsym_var(sym:tabstractnormalvarsym); virtual;
@ -258,8 +259,8 @@ interface
procedure appendsym_absolute(sym:tabsolutevarsym); virtual; procedure appendsym_absolute(sym:tabsolutevarsym); virtual;
procedure appendsym_property(sym:tpropertysym); virtual; procedure appendsym_property(sym:tpropertysym); virtual;
procedure appendsym_proc(sym:tprocsym); virtual; procedure appendsym_proc(sym:tprocsym); virtual;
procedure appendprocdef(pd:tprocdef); virtual; function symname(sym:tsym): String; virtual;
procedure enum_membersyms_callback(p:Tnamedindexitem;arg:pointer); procedure enum_membersyms_callback(p:Tnamedindexitem;arg:pointer);
@ -305,6 +306,8 @@ interface
procedure appenddef_set(def:tsetdef); override; procedure appenddef_set(def:tsetdef); override;
procedure appenddef_unineddef(def:tundefineddef); override; procedure appenddef_unineddef(def:tundefineddef); override;
procedure appenddef_variant(def:tvariantdef); override; procedure appenddef_variant(def:tvariantdef); override;
function symname(sym:tsym): String; override;
public public
function dwarf_version: Word; override; function dwarf_version: Word; override;
end; end;
@ -622,7 +625,7 @@ end;
begin begin
if not assigned(def.typesym) then if not assigned(def.typesym) then
internalerror(200610011); internalerror(200610011);
def.dwarf_lab:=current_asmdata.RefAsmSymbol(make_mangledname('DBG',def.owner,def.typesym.name)); def.dwarf_lab:=current_asmdata.RefAsmSymbol(make_mangledname('DBG',def.owner,symname(def.typesym)));
def.dbg_state:=dbg_state_written; def.dbg_state:=dbg_state_written;
end end
else else
@ -633,7 +636,7 @@ end;
(def.owner.symtabletype=globalsymtable) and (def.owner.symtabletype=globalsymtable) and
(def.owner.iscurrentunit) then (def.owner.iscurrentunit) then
begin begin
def.dwarf_lab:=current_asmdata.DefineAsmSymbol(make_mangledname('DBG',def.owner,def.typesym.name),AB_GLOBAL,AT_DATA); def.dwarf_lab:=current_asmdata.DefineAsmSymbol(make_mangledname('DBG',def.owner,symname(def.typesym)),AB_GLOBAL,AT_DATA);
include(def.defoptions,df_has_dwarf_dbg_info); include(def.defoptions,df_has_dwarf_dbg_info);
end end
else else
@ -909,7 +912,7 @@ end;
{ we should generate a subrange type here } { we should generate a subrange type here }
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_signed, DW_AT_encoding,DW_FORM_data1,DW_ATE_signed,
DW_AT_byte_size,DW_FORM_data1,def.size DW_AT_byte_size,DW_FORM_data1,def.size
]) ])
@ -927,7 +930,7 @@ end;
{ we should generate a subrange type here } { we should generate a subrange type here }
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned, DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data1,def.size DW_AT_byte_size,DW_FORM_data1,def.size
]) ])
@ -1045,7 +1048,7 @@ end;
s80real: s80real:
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_float, DW_AT_encoding,DW_FORM_data1,DW_ATE_float,
DW_AT_byte_size,DW_FORM_data1,def.size DW_AT_byte_size,DW_FORM_data1,def.size
]) ])
@ -1058,7 +1061,7 @@ end;
{ we should use DW_ATE_signed_fixed, however it isn't supported yet by GDB (FK) } { we should use DW_ATE_signed_fixed, however it isn't supported yet by GDB (FK) }
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_signed, DW_AT_encoding,DW_FORM_data1,DW_ATE_signed,
DW_AT_byte_size,DW_FORM_data1,8 DW_AT_byte_size,DW_FORM_data1,8
]) ])
@ -1070,7 +1073,7 @@ end;
s64comp: s64comp:
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_signed, DW_AT_encoding,DW_FORM_data1,DW_ATE_signed,
DW_AT_byte_size,DW_FORM_data1,8 DW_AT_byte_size,DW_FORM_data1,8
]) ])
@ -1097,7 +1100,7 @@ end;
begin begin
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_enumeration_type,true,[ append_entry(DW_TAG_enumeration_type,true,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_data1,def.size DW_AT_byte_size,DW_FORM_data1,def.size
]) ])
else else
@ -1113,7 +1116,7 @@ end;
while assigned(hp) do while assigned(hp) do
begin begin
append_entry(DW_TAG_enumerator,false,[ append_entry(DW_TAG_enumerator,false,[
DW_AT_name,DW_FORM_string,hp.name+#0, DW_AT_name,DW_FORM_string,symname(hp)+#0,
DW_AT_const_value,DW_FORM_data4,hp.value DW_AT_const_value,DW_FORM_data4,hp.value
]); ]);
finish_entry; finish_entry;
@ -1146,7 +1149,7 @@ end;
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_array_type,true,[ append_entry(DW_TAG_array_type,true,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_udata,size, DW_AT_byte_size,DW_FORM_udata,size,
DW_AT_stride_size,DW_FORM_udata,elesize DW_AT_stride_size,DW_FORM_udata,elesize
]) ])
@ -1196,7 +1199,7 @@ end;
begin begin
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_structure_type,true,[ append_entry(DW_TAG_structure_type,true,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_udata,def.size DW_AT_byte_size,DW_FORM_udata,def.size
]) ])
else else
@ -1312,7 +1315,7 @@ end;
begin begin
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_subroutine_type,true,[ append_entry(DW_TAG_subroutine_type,true,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_prototyped,DW_FORM_flag,true DW_AT_prototyped,DW_FORM_flag,true
]) ])
else else
@ -1327,7 +1330,7 @@ end;
for i:=0 to def.paras.count-1 do for i:=0 to def.paras.count-1 do
begin begin
append_entry(DW_TAG_formal_parameter,false,[ append_entry(DW_TAG_formal_parameter,false,[
DW_AT_name,DW_FORM_string,tparavarsym(def.paras[i]).name+#0 DW_AT_name,DW_FORM_string,symname(tsym(def.paras[i]))+#0
]); ]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(tparavarsym(def.paras[i]).vartype.def)); append_labelentry_ref(DW_AT_type,def_dwarf_lab(tparavarsym(def.paras[i]).vartype.def));
finish_entry; finish_entry;
@ -1495,7 +1498,7 @@ end;
begin begin
current_asmdata.asmlists[al_dwarf_info].concat(tai_comment.Create(strpnew('Procdef '+pd.fullprocname(true)))); current_asmdata.asmlists[al_dwarf_info].concat(tai_comment.Create(strpnew('Procdef '+pd.fullprocname(true))));
append_entry(DW_TAG_subprogram,true, append_entry(DW_TAG_subprogram,true,
[DW_AT_name,DW_FORM_string,pd.procsym.name+#0 [DW_AT_name,DW_FORM_string,symname(pd.procsym)+#0
{ data continues below } { data continues below }
{ problem: base reg isn't known here { problem: base reg isn't known here
DW_AT_frame_base,DW_FORM_block1,1 DW_AT_frame_base,DW_FORM_block1,1
@ -1633,7 +1636,7 @@ end;
tag:=DW_TAG_variable; tag:=DW_TAG_variable;
append_entry(tag,false,[ append_entry(tag,false,[
DW_AT_name,DW_FORM_string,sym.name+#0, DW_AT_name,DW_FORM_string,symname(sym)+#0,
{ {
DW_AT_decl_file,DW_FORM_data1,0, DW_AT_decl_file,DW_FORM_data1,0,
DW_AT_decl_line,DW_FORM_data1, DW_AT_decl_line,DW_FORM_data1,
@ -1657,7 +1660,7 @@ end;
if sp_static in sym.symoptions then Exit; if sp_static in sym.symoptions then Exit;
append_entry(DW_TAG_member,false,[ append_entry(DW_TAG_member,false,[
DW_AT_name,DW_FORM_string,sym.name+#0, DW_AT_name,DW_FORM_string,symname(sym)+#0,
DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(sym.fieldoffset) DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(sym.fieldoffset)
]); ]);
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst))); current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus_uconst)));
@ -1670,7 +1673,7 @@ end;
procedure TDebugInfoDwarf.appendsym_const(sym:tconstsym); procedure TDebugInfoDwarf.appendsym_const(sym:tconstsym);
begin begin
append_entry(DW_TAG_constant,false,[ append_entry(DW_TAG_constant,false,[
DW_AT_name,DW_FORM_string,sym.name+#0 DW_AT_name,DW_FORM_string,symname(sym)+#0
]); ]);
{ for string constants, consttype isn't set because they have no real type } { for string constants, consttype isn't set because they have no real type }
if not(sym.consttyp in [conststring,constresourcestring]) then if not(sym.consttyp in [conststring,constresourcestring]) then
@ -1758,7 +1761,7 @@ end;
procedure TDebugInfoDwarf.appendsym_typedconst(sym: ttypedconstsym); procedure TDebugInfoDwarf.appendsym_typedconst(sym: ttypedconstsym);
begin begin
append_entry(DW_TAG_variable,false,[ append_entry(DW_TAG_variable,false,[
DW_AT_name,DW_FORM_string,sym.name+#0, DW_AT_name,DW_FORM_string,symname(sym)+#0,
{ {
DW_AT_decl_file,DW_FORM_data1,0, DW_AT_decl_file,DW_FORM_data1,0,
DW_AT_decl_line,DW_FORM_data1, DW_AT_decl_line,DW_FORM_data1,
@ -1798,7 +1801,7 @@ end;
procedure TDebugInfoDwarf.appendsym_type(sym: ttypesym); procedure TDebugInfoDwarf.appendsym_type(sym: ttypesym);
begin begin
append_entry(DW_TAG_typedef,false,[ append_entry(DW_TAG_typedef,false,[
DW_AT_name,DW_FORM_string,sym.name+#0 DW_AT_name,DW_FORM_string,symname(sym)+#0
]); ]);
append_labelentry_ref(DW_AT_type,def_dwarf_lab(sym.restype.def)); append_labelentry_ref(DW_AT_type,def_dwarf_lab(sym.restype.def));
finish_entry; finish_entry;
@ -1857,7 +1860,7 @@ end;
end; end;
append_entry(DW_TAG_variable,false,[ append_entry(DW_TAG_variable,false,[
DW_AT_name,DW_FORM_string,sym.name+#0, DW_AT_name,DW_FORM_string,symname(sym)+#0,
{ {
DW_AT_decl_file,DW_FORM_data1,0, DW_AT_decl_file,DW_FORM_data1,0,
DW_AT_decl_line,DW_FORM_data1, DW_AT_decl_line,DW_FORM_data1,
@ -1880,7 +1883,7 @@ end;
if sym.isdbgwritten then if sym.isdbgwritten then
exit; exit;
current_asmdata.asmlists[al_dwarf_info].concat(tai_comment.Create(strpnew('Symbol '+sym.name))); current_asmdata.asmlists[al_dwarf_info].concat(tai_comment.Create(strpnew('Symbol '+symname(sym))));
case sym.typ of case sym.typ of
globalvarsym : globalvarsym :
appendsym_var(tglobalvarsym(sym)); appendsym_var(tglobalvarsym(sym));
@ -2266,6 +2269,11 @@ end;
begin begin
end; end;
function TDebugInfoDwarf.symname(sym: tsym): String;
begin
result := sym.Name;
end;
procedure TDebugInfoDwarf.insertlineinfo(list:TAsmList); procedure TDebugInfoDwarf.insertlineinfo(list:TAsmList);
var var
@ -2421,7 +2429,7 @@ end;
file recs. are less than 1k so using data2 is enough } file recs. are less than 1k so using data2 is enough }
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_structure_type,false,[ append_entry(DW_TAG_structure_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_udata,def.size DW_AT_byte_size,DW_FORM_udata,def.size
]) ])
else else
@ -2508,7 +2516,7 @@ end;
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_base_type,false,[ append_entry(DW_TAG_base_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned, DW_AT_encoding,DW_FORM_data1,DW_ATE_unsigned,
DW_AT_byte_size,DW_FORM_data2,def.size DW_AT_byte_size,DW_FORM_data2,def.size
]) ])
@ -2552,7 +2560,7 @@ end;
begin begin
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_file_type,false,[ append_entry(DW_TAG_file_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_data2,def.size DW_AT_byte_size,DW_FORM_data2,def.size
]) ])
else else
@ -2577,7 +2585,7 @@ end;
begin begin
if assigned(def.objname) then if assigned(def.objname) then
append_entry(tag,true,[ append_entry(tag,true,[
DW_AT_name,DW_FORM_string,def.objname^+#0, DW_AT_name,DW_FORM_string,def.objrealname^+#0,
DW_AT_byte_size,DW_FORM_udata,def.size DW_AT_byte_size,DW_FORM_udata,def.size
]) ])
else else
@ -2671,7 +2679,7 @@ end;
begin begin
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_set_type,false,[ append_entry(DW_TAG_set_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0, DW_AT_name,DW_FORM_string,symname(def.typesym)+#0,
DW_AT_byte_size,DW_FORM_data2,def.size DW_AT_byte_size,DW_FORM_data2,def.size
]) ])
else else
@ -2688,7 +2696,7 @@ end;
{ ??? can a undefined def have a typename ? } { ??? can a undefined def have a typename ? }
if assigned(def.typesym) then if assigned(def.typesym) then
append_entry(DW_TAG_unspecified_type,false,[ append_entry(DW_TAG_unspecified_type,false,[
DW_AT_name,DW_FORM_string,def.typesym.name+#0 DW_AT_name,DW_FORM_string,symname(def.typesym)+#0
]) ])
else else
append_entry(DW_TAG_unspecified_type,false,[ append_entry(DW_TAG_unspecified_type,false,[
@ -2737,7 +2745,7 @@ end;
{ struct } { struct }
append_entry(DW_TAG_structure_type,true,[ append_entry(DW_TAG_structure_type,true,[
DW_AT_name,DW_FORM_string,'VARIANT'#0, DW_AT_name,DW_FORM_string,'Variant'#0,
DW_AT_byte_size,DW_FORM_udata,vardatadef.size DW_AT_byte_size,DW_FORM_udata,vardatadef.size
]); ]);
finish_entry; finish_entry;
@ -2785,6 +2793,12 @@ end;
Result:=3; Result:=3;
end; end;
function TDebugInfoDwarf3.symname(sym: tsym): String;
begin
Result:=sym.realname;
end;
{**************************************************************************** {****************************************************************************
****************************************************************************} ****************************************************************************}