* some smartlinking fixes for ppc64

* disable generation of TOC entries for constants for now

git-svn-id: trunk@2548 -
This commit is contained in:
tom_at_work 2006-02-12 20:37:24 +00:00
parent f86ee115d8
commit 88ebc549a6

View File

@ -685,8 +685,8 @@ begin
internalerror(2002090902);
{ if PIC or basic optimizations are enabled, and the number of instructions which would be
required to load the value is greater than 2, store (and later load) the value from there }
if (((cs_fastoptimize in aktglobalswitches) or (cs_create_pic in aktmoduleswitches)) and
(getInstructionLength(a) > 2)) then
if (false) {(((cs_fastoptimize in aktglobalswitches) or (cs_create_pic in aktmoduleswitches)) and
(getInstructionLength(a) > 2))} then
loadConstantPIC(list, size, a, reg)
else
loadConstantNormal(list, size, a, reg);
@ -1889,12 +1889,15 @@ function tcgppc.load_got_symbol(list: taasmoutput; symbol : string) : tregister;
var
l: tasmsymbol;
ref: treference;
symname : string;
begin
l:=objectlibrary.getasmsymbol(symbol+'$got');
maybe_new_object_file(asmlist[al_picdata]);
symname := '_$' + objectlibrary.name + '$got$' + symbol;
l:=objectlibrary.getasmsymbol(symname);
if not(assigned(l)) then begin
l:=objectlibrary.newasmsymbol(symbol+'$got',AB_LOCAL, AT_LABEL);
l:=objectlibrary.newasmsymbol(symname, AB_COMMON, AT_DATA);
asmlist[al_picdata].concat(tai_section.create(sec_toc, '.toc', 8));
asmlist[al_picdata].concat(tai_symbol.create(l,0));
asmlist[al_picdata].concat(tai_symbol.create_global(l,0));
asmlist[al_picdata].concat(tai_directive.create(asd_toc_entry, symbol + '[TC], ' + symbol));
end;
reference_reset_symbol(ref,l,0);
@ -2128,18 +2131,19 @@ procedure tcgppc.loadConstantPIC(list : taasmoutput; size : TCGSize; a : aint; r
var
l: tasmsymbol;
ref: treference;
symbol : string;
symname : string;
begin
symbol := 'toc$' + hexstr(a, sizeof(a)*2);
l:=objectlibrary.getasmsymbol(symbol);
maybe_new_object_file(asmlist[al_picdata]);
symname := '_$' + objectlibrary.name + '$toc$' + hexstr(a, sizeof(a)*2);
l:=objectlibrary.getasmsymbol(symname);
if not(assigned(l)) then begin
l:=objectlibrary.newasmsymbol(symbol,AB_LOCAL, AT_LABEL);
l:=objectlibrary.newasmsymbol(symname,AB_GLOBAL, AT_DATA);
asmlist[al_picdata].concat(tai_section.create(sec_toc, '.toc', 8));
asmlist[al_picdata].concat(tai_symbol.create(l,0));
asmlist[al_picdata].concat(tai_directive.create(asd_toc_entry, symbol + '[TC], ' + inttostr(a)));
asmlist[al_picdata].concat(tai_symbol.create_global(l,0));
asmlist[al_picdata].concat(tai_directive.create(asd_toc_entry, symname + '[TC], ' + inttostr(a)));
end;
reference_reset_symbol(ref,l,0);
ref.base := NR_R2;
ref.base := NR_R2;
ref.refaddr := addr_pic;
{$IFDEF EXTDEBUG}