mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-09 02:26:06 +02:00
* fixed constant symbol handling for dwarf
git-svn-id: trunk@2536 -
This commit is contained in:
parent
9b4ce0a501
commit
379617e90b
@ -191,6 +191,10 @@ interface
|
||||
private
|
||||
currabbrevnumber : longint;
|
||||
|
||||
{ collect all defs in one list so we can reset them easily }
|
||||
nextdefnumber : longint;
|
||||
defnumberlist : tlist;
|
||||
|
||||
writing_def_dwarf : boolean;
|
||||
|
||||
{ use this defs to create info for variants and file handles }
|
||||
@ -437,6 +441,10 @@ implementation
|
||||
if def.dwarf_lab=nil then
|
||||
begin
|
||||
objectlibrary.getdatalabel(def.dwarf_lab);
|
||||
if nextdefnumber>=defnumberlist.count then
|
||||
defnumberlist.count:=nextdefnumber+250;
|
||||
defnumberlist[nextdefnumber]:=def;
|
||||
inc(nextdefnumber);
|
||||
end;
|
||||
result:=def.dwarf_lab;
|
||||
end;
|
||||
@ -1600,7 +1608,7 @@ implementation
|
||||
DW_AT_name,DW_FORM_string,sym.name+#0
|
||||
]);
|
||||
{ for string constants, consttype isn't set because they have no real type }
|
||||
if sym.consttyp<>conststring then
|
||||
if not(sym.consttyp in [conststring,constresourcestring]) then
|
||||
append_labelentry_ref(DW_AT_type,def_dwarf_lab(sym.consttype.def));
|
||||
asmlist[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_AT_const_value)));
|
||||
case sym.consttyp of
|
||||
@ -1610,11 +1618,27 @@ implementation
|
||||
asmlist[al_dwarf_info].concat(tai_string.create(strpas(pchar(sym.value.valueptr))));
|
||||
asmlist[al_dwarf_info].concat(tai_const.create_8bit(0));
|
||||
end;
|
||||
constset,
|
||||
constwstring,
|
||||
constguid,
|
||||
constresourcestring:
|
||||
{ ignore for now }
|
||||
;
|
||||
constord:
|
||||
begin
|
||||
asmlist[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_sdata)));
|
||||
asmlist[al_dwarf_info].concat(tai_const.create_sleb128bit(sym.value.valueord));
|
||||
end;
|
||||
constnil:
|
||||
begin
|
||||
{$ifdef cpu64bit}
|
||||
asmlist[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data8)));
|
||||
asmlist[al_dwarf_info].concat(tai_const.create_64bit(0));
|
||||
{$else cpu64bit}
|
||||
asmlist[al_dwarf_abbrev].concat(tai_const.create_uleb128bit(ord(DW_FORM_data4)));
|
||||
asmlist[al_dwarf_info].concat(tai_const.create_32bit(0));
|
||||
{$endif cpu64bit}
|
||||
end;
|
||||
constpointer:
|
||||
begin
|
||||
{$ifdef cpu64bit}
|
||||
@ -1651,7 +1675,7 @@ implementation
|
||||
end;
|
||||
end;
|
||||
else
|
||||
internalerror(200601291);
|
||||
internalerror(200601292);
|
||||
end;
|
||||
finish_entry;
|
||||
end;
|
||||
@ -1790,8 +1814,6 @@ implementation
|
||||
end;
|
||||
end;
|
||||
{
|
||||
if stabstr<>nil then
|
||||
list.concat(Tai_stab.create(stab_stabs,stabstr));
|
||||
{ For object types write also the symtable entries }
|
||||
if (sym.typ=typesym) and (ttypesym(sym).restype.def.deftype=objectdef) then
|
||||
write_symtable_syms(list,tobjectdef(ttypesym(sym).restype.def).symtable);
|
||||
@ -1864,6 +1886,7 @@ implementation
|
||||
var
|
||||
storefilepos : tfileposinfo;
|
||||
lenstartlabel : tasmlabel;
|
||||
i : longint;
|
||||
begin
|
||||
storefilepos:=aktfilepos;
|
||||
aktfilepos:=current_module.mainfilepos;
|
||||
@ -1871,6 +1894,9 @@ implementation
|
||||
currabbrevnumber:=0;
|
||||
writing_def_dwarf:=false;
|
||||
|
||||
nextdefnumber:=0;
|
||||
defnumberlist:=tlist.create;
|
||||
|
||||
vardatadef:=search_system_type('TVARDATA').restype.def;
|
||||
|
||||
{ not exported (FK)
|
||||
@ -1937,6 +1963,18 @@ implementation
|
||||
{ end of debug info table }
|
||||
asmlist[al_dwarf_info].concat(tai_const.create_8bit(0));
|
||||
asmlist[al_dwarf_info].concat(tai_symbol.createname('.Ledebug_info0',AT_DATA,0));
|
||||
{ reset all def labels }
|
||||
for i:=0 to defnumberlist.count-1 do
|
||||
begin
|
||||
if assigned(defnumberlist[i]) then
|
||||
begin
|
||||
tdef(defnumberlist[i]).dwarf_lab:=nil;
|
||||
tdef(defnumberlist[i]).dbg_state:=dbg_state_unused;
|
||||
end;
|
||||
end;
|
||||
|
||||
defnumberlist.free;
|
||||
defnumberlist:=nil;
|
||||
|
||||
aktfilepos:=storefilepos;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user