mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 12:39:24 +02:00
* specify AT_DATA in all references to the tobjectdef.vmt_mangledname symbol.
This fixes a lot of bugs, related to objects and classes in the i8086 medium memory model git-svn-id: trunk@25794 -
This commit is contained in:
parent
9b2b5a9565
commit
bf07fc077b
@ -2135,7 +2135,7 @@ implementation
|
||||
pd:=search_system_proc('fpc_check_object_ext');
|
||||
paramanager.getintparaloc(pd,1,cgpara1);
|
||||
paramanager.getintparaloc(pd,2,cgpara2);
|
||||
reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname),0,sizeof(pint));
|
||||
reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname,AT_DATA),0,sizeof(pint));
|
||||
if pd.is_pushleftright then
|
||||
begin
|
||||
a_load_reg_cgpara(list,OS_ADDR,reg,cgpara1);
|
||||
|
@ -1251,7 +1251,7 @@ implementation
|
||||
|
||||
{ send the vmt parameter }
|
||||
pd:=search_system_proc('fpc_catches');
|
||||
reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname),0,sizeof(pint));
|
||||
reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname,AT_DATA),0,sizeof(pint));
|
||||
paramanager.getintparaloc(pd,1,paraloc1);
|
||||
cg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,href2,paraloc1);
|
||||
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
||||
|
@ -215,7 +215,7 @@ implementation
|
||||
if left.nodetype=typen then
|
||||
begin
|
||||
hregister:=cg.getaddressregister(current_asmdata.CurrAsmList);
|
||||
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(tobjectdef(left.resultdef).vmt_mangledname),0,sizeof(pint));
|
||||
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(tobjectdef(left.resultdef).vmt_mangledname,AT_DATA),0,sizeof(pint));
|
||||
cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,href,hregister);
|
||||
end
|
||||
else
|
||||
|
@ -109,7 +109,7 @@ implementation
|
||||
if not is_objcclass(left.resultdef) then
|
||||
begin
|
||||
reference_reset_symbol(href,
|
||||
current_asmdata.RefAsmSymbol(tobjectdef(tclassrefdef(resultdef).pointeddef).vmt_mangledname),0,
|
||||
current_asmdata.RefAsmSymbol(tobjectdef(tclassrefdef(resultdef).pointeddef).vmt_mangledname,AT_DATA),0,
|
||||
sizeof(pint));
|
||||
cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,href,location.register);
|
||||
end
|
||||
|
@ -752,7 +752,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
|
||||
begin
|
||||
if not Tobjectdef(tclassrefdef(node.resultdef).pointeddef).is_related(tobjectdef(def.pointeddef)) then
|
||||
IncompatibleTypes(node.resultdef, def);
|
||||
list.concat(Tai_const.Create_sym(current_asmdata.RefAsmSymbol(Tobjectdef(tclassrefdef(node.resultdef).pointeddef).vmt_mangledname)));
|
||||
list.concat(Tai_const.Create_sym(current_asmdata.RefAsmSymbol(Tobjectdef(tclassrefdef(node.resultdef).pointeddef).vmt_mangledname,AT_DATA)));
|
||||
end;
|
||||
niln:
|
||||
list.concat(Tai_const.Create_sym(nil));
|
||||
@ -977,7 +977,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
|
||||
if (tinlinenode(node).left.nodetype=typen) then
|
||||
begin
|
||||
list.concat(Tai_const.createname(
|
||||
tobjectdef(tinlinenode(node).left.resultdef).vmt_mangledname,0));
|
||||
tobjectdef(tinlinenode(node).left.resultdef).vmt_mangledname,AT_DATA,0));
|
||||
end
|
||||
else
|
||||
Message(parser_e_illegal_expression);
|
||||
@ -1627,7 +1627,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
|
||||
begin
|
||||
for i:=1 to def.vmt_offset-objoffset do
|
||||
list.concat(tai_const.create_8bit(0));
|
||||
list.concat(tai_const.createname(def.vmt_mangledname,0));
|
||||
list.concat(tai_const.createname(def.vmt_mangledname,AT_DATA,0));
|
||||
{ this is more general }
|
||||
objoffset:=def.vmt_offset + sizeof(pint);
|
||||
vmtwritten:=true;
|
||||
@ -1656,7 +1656,7 @@ function get_next_varsym(def: tabstractrecorddef; const SymList:TFPHashObjectLis
|
||||
begin
|
||||
for i:=1 to def.vmt_offset-objoffset do
|
||||
list.concat(tai_const.create_8bit(0));
|
||||
list.concat(tai_const.createname(def.vmt_mangledname,0));
|
||||
list.concat(tai_const.createname(def.vmt_mangledname,AT_DATA,0));
|
||||
{ this is more general }
|
||||
objoffset:=def.vmt_offset + sizeof(pint);
|
||||
end;
|
||||
|
@ -495,7 +495,7 @@ procedure tx64tryexceptnode.pass_generate_code;
|
||||
InternalError(2011103101);
|
||||
{ TODO: make it done without using global label }
|
||||
current_asmdata.getglobaljumplabel(onlabel);
|
||||
hlist.concat(tai_const.create_rva_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname)));
|
||||
hlist.concat(tai_const.create_rva_sym(current_asmdata.RefAsmSymbol(tonnode(hnode).excepttype.vmt_mangledname,AT_DATA)));
|
||||
hlist.concat(tai_const.create_rva_sym(onlabel));
|
||||
cg.a_label(current_asmdata.CurrAsmList,onlabel);
|
||||
secondpass(hnode);
|
||||
|
Loading…
Reference in New Issue
Block a user