mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 13:59:29 +02:00
* generate realnames for syms in -gw3
git-svn-id: trunk@4833 -
This commit is contained in:
parent
c64190bda3
commit
31090d8736
@ -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;
|
||||
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
****************************************************************************}
|
||||
|
Loading…
Reference in New Issue
Block a user