diff --git a/compiler/x86/cgx86.pas b/compiler/x86/cgx86.pas index 1cde985369..3259561a05 100644 --- a/compiler/x86/cgx86.pas +++ b/compiler/x86/cgx86.pas @@ -351,6 +351,11 @@ unit cgx86; add_hreg: boolean; {$endif not x86_64} begin + { make_simple_ref() may have already been called earlier, and in that + case make sure we don't perform the PIC-simplifications twice } + if (ref.refaddr in [addr_pic,addr_pic_no_got]) then + exit; + {$ifdef x86_64} { Only 32bit is allowed } if ((ref.offsethigh(longint))) then @@ -397,7 +402,7 @@ unit cgx86; if (ref.base<>NR_NO) or (ref.index<>NR_NO) then begin - reference_reset_symbol(href,ref.symbol,0,sizeof(pint)); + reference_reset_symbol(href,ref.symbol,0,ref.alignment); hreg:=getaddressregister(list); href.refaddr:=addr_pic_no_got; href.base:=NR_RIP; @@ -413,7 +418,7 @@ unit cgx86; end else begin - reference_reset_symbol(href,ref.symbol,0,sizeof(pint)); + reference_reset_symbol(href,ref.symbol,0,ref.alignment); hreg:=getaddressregister(list); href.refaddr:=addr_pic; href.base:=NR_RIP;