Przeglądaj źródła

+ pointer to vmt for classes and objects with a vmt

git-svn-id: trunk@6544 -
Jonas Maebe 18 lat temu
rodzic
commit
42b58affc7
1 zmienionych plików z 19 dodań i 0 usunięć
  1. 19 0
      compiler/dbgdwarf.pas

+ 19 - 0
compiler/dbgdwarf.pas

@@ -2602,6 +2602,25 @@ implementation
                 append_labelentry_ref(DW_AT_type,def_dwarf_lab(def.childof));
               finish_entry;
             end;
+          if (oo_has_vmt in def.objectoptions) and
+             (not assigned(def.childof) or
+              not(oo_has_vmt in def.childof.objectoptions)) then
+            begin
+              { vmt field }
+              append_entry(DW_TAG_member,false,[
+                  DW_AT_artificial,DW_FORM_flag,true,
+                  DW_AT_name,DW_FORM_string,'_vptr$'+def.objname^+#0,
+                  DW_AT_data_member_location,DW_FORM_block1,1+lengthuleb128(def.vmt_offset)
+              ]);
+              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_uleb128bit(def.vmt_offset));
+              { should be changed into a pointer to a function returning an }
+              { int and with TAG_unspecified_parameters                     }
+              if (voidpointertype.dbg_state=dbg_state_unused) then
+                voidpointertype.dbg_state:=dbg_state_used;
+              append_labelentry_ref(DW_AT_type,def_dwarf_lab(voidpointertype));
+              finish_entry;
+            end;
 
           def.symtable.symList.ForEachCall(@enum_membersyms_callback,nil);
           finish_children;