mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-08 11:26:01 +02:00
* Generate proper Dwarf-debuginfo for DW_AT_vtable_elem_location, containing
a Dwarf-block that evaluates the location of a method within the vmt. The vmtindex as it was used is is only used by older GCC versions and does not work with a Pascal VMT. git-svn-id: trunk@19253 -
This commit is contained in:
parent
79f54fb31a
commit
ce01b15c49
@ -2044,7 +2044,7 @@ implementation
|
||||
procentry : string;
|
||||
cc : Tdwarf_calling_convention;
|
||||
st : tsymtable;
|
||||
vmtindexnr : pint;
|
||||
vmtoffset : pint;
|
||||
in_currentunit : boolean;
|
||||
begin
|
||||
{ only write debug info for procedures defined in the current module,
|
||||
@ -2128,10 +2128,12 @@ implementation
|
||||
{ Element number in the vmt (needs to skip stuff coming before the
|
||||
actual method addresses in the vmt, so we use vmtmethodoffset()
|
||||
and then divide by sizeof(pint)). }
|
||||
vmtindexnr:=tobjectdef(def.owner.defowner).vmtmethodoffset(def.extnumber) div sizeof(pint);
|
||||
append_attribute(DW_AT_vtable_elem_location,DW_FORM_block1,[1+LengthUleb128(vmtindexnr)]);
|
||||
vmtoffset:=tobjectdef(def.owner.defowner).vmtmethodoffset(def.extnumber);
|
||||
append_attribute(DW_AT_vtable_elem_location,DW_FORM_block1,[3+LengthUleb128(vmtoffset)]);
|
||||
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address)));
|
||||
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_constu)));
|
||||
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.Create_uleb128bit(vmtindexnr));
|
||||
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.Create_uleb128bit(vmtoffset));
|
||||
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_plus)));
|
||||
end;
|
||||
|
||||
{ accessibility: public/private/protected }
|
||||
|
Loading…
Reference in New Issue
Block a user