mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 12:29:14 +02:00
- removed cg.g_indirect_sym_load() calls from pass_generate_code; this
routine is called from tcgppcgen.fixref()/tcgx86.make_simple_ref() when necessary git-svn-id: trunk@20789 -
This commit is contained in:
parent
7c0469e1fd
commit
452414e1a7
@ -286,20 +286,7 @@ implementation
|
|||||||
staticvarsym :
|
staticvarsym :
|
||||||
begin
|
begin
|
||||||
gvs:=tstaticvarsym(symtableentry);
|
gvs:=tstaticvarsym(symtableentry);
|
||||||
if ([vo_is_dll_var,vo_is_external] * gvs.varoptions <> []) then
|
|
||||||
begin
|
|
||||||
{ assume external variables use the default alignment }
|
|
||||||
location.reference.alignment:=gvs.vardef.alignment;
|
|
||||||
location.reference.base := cg.g_indirect_sym_load(current_asmdata.CurrAsmList,tstaticvarsym(symtableentry).mangledname,
|
|
||||||
vo_is_weak_external in gvs.varoptions);
|
|
||||||
if (location.reference.base <> NR_NO) then
|
|
||||||
exit;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
location.reference.alignment:=var_align(gvs.vardef.alignment);
|
location.reference.alignment:=var_align(gvs.vardef.alignment);
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
if (vo_is_dll_var in gvs.varoptions) then
|
if (vo_is_dll_var in gvs.varoptions) then
|
||||||
{ DLL variable }
|
{ DLL variable }
|
||||||
@ -536,12 +523,6 @@ implementation
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
pd:=tprocdef(tprocsym(symtableentry).ProcdefList[0]);
|
pd:=tprocdef(tprocsym(symtableentry).ProcdefList[0]);
|
||||||
if (po_external in pd.procoptions) then
|
|
||||||
location.reference.base :=
|
|
||||||
cg.g_indirect_sym_load(current_asmdata.CurrAsmList,pd.mangledname,
|
|
||||||
po_weakexternal in pd.procoptions);
|
|
||||||
{!!!!! Be aware, work on virtual methods too }
|
|
||||||
if (location.reference.base = NR_NO) then
|
|
||||||
if not(po_weakexternal in pd.procoptions) then
|
if not(po_weakexternal in pd.procoptions) then
|
||||||
location.reference.symbol:=current_asmdata.RefAsmSymbol(procdef.mangledname)
|
location.reference.symbol:=current_asmdata.RefAsmSymbol(procdef.mangledname)
|
||||||
else
|
else
|
||||||
|
@ -432,22 +432,9 @@ implementation
|
|||||||
classes can be changed without breaking programs compiled against
|
classes can be changed without breaking programs compiled against
|
||||||
earlier versions)
|
earlier versions)
|
||||||
}
|
}
|
||||||
hreg:=cg.g_indirect_sym_load(current_asmdata.CurrAsmList,vs.mangledname,false);
|
|
||||||
{ TODO: clean up. g_indirect_sym_load cannot perform
|
|
||||||
a plain load for targets that don't need an indirect load
|
|
||||||
because it's also used in ncgld, but this is not very nice...
|
|
||||||
}
|
|
||||||
if (hreg=NR_NO) then
|
|
||||||
begin
|
|
||||||
sym:=current_asmdata.RefAsmSymbol(vs.mangledname);
|
sym:=current_asmdata.RefAsmSymbol(vs.mangledname);
|
||||||
reference_reset_symbol(tmpref,sym,0,sizeof(pint));
|
reference_reset_symbol(tmpref,sym,0,sizeof(pint));
|
||||||
location.reference.index:=cg.getaddressregister(current_asmdata.CurrAsmList);
|
location.reference.index:=cg.getaddressregister(current_asmdata.CurrAsmList);
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
reference_reset_base(tmpref,hreg,0,sizeof(pint));
|
|
||||||
location.reference.index:=hreg;
|
|
||||||
end;
|
|
||||||
cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,tmpref,location.reference.index);
|
cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_ADDR,OS_ADDR,tmpref,location.reference.index);
|
||||||
{ always packrecords C -> natural alignment }
|
{ always packrecords C -> natural alignment }
|
||||||
location.reference.alignment:=vs.vardef.alignment;
|
location.reference.alignment:=vs.vardef.alignment;
|
||||||
|
Loading…
Reference in New Issue
Block a user