|
@@ -246,6 +246,7 @@ interface
|
|
|
procedure appenddef_formal(def:tformaldef); virtual;
|
|
|
procedure appenddef_unineddef(def:tundefineddef); virtual; abstract;
|
|
|
|
|
|
+ procedure appendprocdef(pd:tprocdef); virtual;
|
|
|
|
|
|
procedure appendsym(sym:tsym);
|
|
|
procedure appendsym_var(sym:tabstractnormalvarsym); virtual;
|
|
@@ -258,8 +259,8 @@ interface
|
|
|
procedure appendsym_absolute(sym:tabsolutevarsym); virtual;
|
|
|
procedure appendsym_property(sym:tpropertysym); 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);
|
|
|
|
|
@@ -305,6 +306,8 @@ interface
|
|
|
procedure appenddef_set(def:tsetdef); override;
|
|
|
procedure appenddef_unineddef(def:tundefineddef); override;
|
|
|
procedure appenddef_variant(def:tvariantdef); override;
|
|
|
+
|
|
|
+ function symname(sym:tsym): String; override;
|
|
|
public
|
|
|
function dwarf_version: Word; override;
|
|
|
end;
|
|
@@ -622,7 +625,7 @@ end;
|
|
|
begin
|
|
|
if not assigned(def.typesym) then
|
|
|
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;
|
|
|
end
|
|
|
else
|
|
@@ -633,7 +636,7 @@ end;
|
|
|
(def.owner.symtabletype=globalsymtable) and
|
|
|
(def.owner.iscurrentunit) then
|
|
|
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);
|
|
|
end
|
|
|
else
|
|
@@ -909,7 +912,7 @@ end;
|
|
|
{ we should generate a subrange type here }
|
|
|
if assigned(def.typesym) then
|
|
|
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_byte_size,DW_FORM_data1,def.size
|
|
|
])
|
|
@@ -927,7 +930,7 @@ end;
|
|
|
{ we should generate a subrange type here }
|
|
|
if assigned(def.typesym) then
|
|
|
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_byte_size,DW_FORM_data1,def.size
|
|
|
])
|
|
@@ -1045,7 +1048,7 @@ end;
|
|
|
s80real:
|
|
|
if assigned(def.typesym) then
|
|
|
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_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) }
|
|
|
if assigned(def.typesym) then
|
|
|
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_byte_size,DW_FORM_data1,8
|
|
|
])
|
|
@@ -1070,7 +1073,7 @@ end;
|
|
|
s64comp:
|
|
|
if assigned(def.typesym) then
|
|
|
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_byte_size,DW_FORM_data1,8
|
|
|
])
|
|
@@ -1097,7 +1100,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -1113,7 +1116,7 @@ end;
|
|
|
while assigned(hp) do
|
|
|
begin
|
|
|
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
|
|
|
]);
|
|
|
finish_entry;
|
|
@@ -1146,7 +1149,7 @@ end;
|
|
|
|
|
|
if assigned(def.typesym) then
|
|
|
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_stride_size,DW_FORM_udata,elesize
|
|
|
])
|
|
@@ -1196,7 +1199,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -1312,7 +1315,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -1327,7 +1330,7 @@ end;
|
|
|
for i:=0 to def.paras.count-1 do
|
|
|
begin
|
|
|
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));
|
|
|
finish_entry;
|
|
@@ -1495,7 +1498,7 @@ end;
|
|
|
begin
|
|
|
current_asmdata.asmlists[al_dwarf_info].concat(tai_comment.Create(strpnew('Procdef '+pd.fullprocname(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 }
|
|
|
{ problem: base reg isn't known here
|
|
|
DW_AT_frame_base,DW_FORM_block1,1
|
|
@@ -1633,7 +1636,7 @@ end;
|
|
|
tag:=DW_TAG_variable;
|
|
|
|
|
|
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_line,DW_FORM_data1,
|
|
@@ -1657,7 +1660,7 @@ end;
|
|
|
if sp_static in sym.symoptions then Exit;
|
|
|
|
|
|
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)
|
|
|
]);
|
|
|
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);
|
|
|
begin
|
|
|
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 }
|
|
|
if not(sym.consttyp in [conststring,constresourcestring]) then
|
|
@@ -1758,7 +1761,7 @@ end;
|
|
|
procedure TDebugInfoDwarf.appendsym_typedconst(sym: ttypedconstsym);
|
|
|
begin
|
|
|
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_line,DW_FORM_data1,
|
|
@@ -1798,7 +1801,7 @@ end;
|
|
|
procedure TDebugInfoDwarf.appendsym_type(sym: ttypesym);
|
|
|
begin
|
|
|
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));
|
|
|
finish_entry;
|
|
@@ -1857,7 +1860,7 @@ end;
|
|
|
end;
|
|
|
|
|
|
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_line,DW_FORM_data1,
|
|
@@ -1880,7 +1883,7 @@ end;
|
|
|
if sym.isdbgwritten then
|
|
|
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
|
|
|
globalvarsym :
|
|
|
appendsym_var(tglobalvarsym(sym));
|
|
@@ -2266,6 +2269,11 @@ end;
|
|
|
begin
|
|
|
end;
|
|
|
|
|
|
+ function TDebugInfoDwarf.symname(sym: tsym): String;
|
|
|
+ begin
|
|
|
+ result := sym.Name;
|
|
|
+ end;
|
|
|
+
|
|
|
|
|
|
procedure TDebugInfoDwarf.insertlineinfo(list:TAsmList);
|
|
|
var
|
|
@@ -2421,7 +2429,7 @@ end;
|
|
|
file recs. are less than 1k so using data2 is enough }
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -2508,7 +2516,7 @@ end;
|
|
|
|
|
|
if assigned(def.typesym) then
|
|
|
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_byte_size,DW_FORM_data2,def.size
|
|
|
])
|
|
@@ -2552,7 +2560,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -2577,7 +2585,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.objname) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -2671,7 +2679,7 @@ end;
|
|
|
begin
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
])
|
|
|
else
|
|
@@ -2688,7 +2696,7 @@ end;
|
|
|
{ ??? can a undefined def have a typename ? }
|
|
|
if assigned(def.typesym) then
|
|
|
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
|
|
|
append_entry(DW_TAG_unspecified_type,false,[
|
|
@@ -2737,7 +2745,7 @@ end;
|
|
|
|
|
|
{ struct }
|
|
|
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
|
|
|
]);
|
|
|
finish_entry;
|
|
@@ -2785,6 +2793,12 @@ end;
|
|
|
Result:=3;
|
|
|
end;
|
|
|
|
|
|
+ function TDebugInfoDwarf3.symname(sym: tsym): String;
|
|
|
+ begin
|
|
|
+ Result:=sym.realname;
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
|
|
|
{****************************************************************************
|
|
|
****************************************************************************}
|