mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 02:27:56 +02:00
* some smartlinking fixes for ppc64
* disable generation of TOC entries for constants for now git-svn-id: trunk@2548 -
This commit is contained in:
parent
f86ee115d8
commit
88ebc549a6
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user