|
@@ -95,7 +95,7 @@ implementation
|
|
|
constructor create(c:tobjectdef);
|
|
|
{ write the VMT to al_globals }
|
|
|
procedure writevmt;
|
|
|
- procedure writeinterfaceids;
|
|
|
+ procedure writeinterfaceids(list: TAsmList);
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -658,7 +658,7 @@ implementation
|
|
|
|
|
|
|
|
|
{ Write interface identifiers to the data section }
|
|
|
- procedure TVMTWriter.writeinterfaceids;
|
|
|
+ procedure TVMTWriter.writeinterfaceids(list: TAsmList);
|
|
|
var
|
|
|
i : longint;
|
|
|
s : string;
|
|
@@ -666,21 +666,21 @@ implementation
|
|
|
if assigned(_class.iidguid) then
|
|
|
begin
|
|
|
s:=make_mangledname('IID',_class.owner,_class.objname^);
|
|
|
- maybe_new_object_file(current_asmdata.asmlists[al_globals]);
|
|
|
- new_section(current_asmdata.asmlists[al_globals],sec_rodata,s,const_align(sizeof(pint)));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_symbol.Createname_global(s,AT_DATA,0));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_32bit(longint(_class.iidguid^.D1)));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_16bit(_class.iidguid^.D2));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_16bit(_class.iidguid^.D3));
|
|
|
+ maybe_new_object_file(list);
|
|
|
+ new_section(list,sec_rodata_norel,s,const_align(sizeof(pint)));
|
|
|
+ list.concat(Tai_symbol.Createname_global(s,AT_DATA,0));
|
|
|
+ list.concat(Tai_const.Create_32bit(longint(_class.iidguid^.D1)));
|
|
|
+ list.concat(Tai_const.Create_16bit(_class.iidguid^.D2));
|
|
|
+ list.concat(Tai_const.Create_16bit(_class.iidguid^.D3));
|
|
|
for i:=Low(_class.iidguid^.D4) to High(_class.iidguid^.D4) do
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_8bit(_class.iidguid^.D4[i]));
|
|
|
+ list.concat(Tai_const.Create_8bit(_class.iidguid^.D4[i]));
|
|
|
end;
|
|
|
- maybe_new_object_file(current_asmdata.asmlists[al_globals]);
|
|
|
+ maybe_new_object_file(list);
|
|
|
s:=make_mangledname('IIDSTR',_class.owner,_class.objname^);
|
|
|
- new_section(current_asmdata.asmlists[al_globals],sec_rodata,s,sizeof(pint));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_symbol.Createname_global(s,AT_DATA,0));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_const.Create_8bit(length(_class.iidstr^)));
|
|
|
- current_asmdata.asmlists[al_globals].concat(Tai_string.Create(_class.iidstr^));
|
|
|
+ new_section(list,sec_rodata_norel,s,sizeof(pint));
|
|
|
+ list.concat(Tai_symbol.Createname_global(s,AT_DATA,0));
|
|
|
+ list.concat(Tai_const.Create_8bit(length(_class.iidstr^)));
|
|
|
+ list.concat(Tai_string.Create(_class.iidstr^));
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -958,7 +958,7 @@ implementation
|
|
|
begin
|
|
|
vmtwriter:=TVMTWriter.create(tobjectdef(def));
|
|
|
if is_interface(tobjectdef(def)) then
|
|
|
- vmtwriter.writeinterfaceids;
|
|
|
+ vmtwriter.writeinterfaceids(current_asmdata.AsmLists[al_globals]);
|
|
|
if (oo_has_vmt in tobjectdef(def).objectoptions) then
|
|
|
vmtwriter.writevmt;
|
|
|
vmtwriter.free;
|