x86-64 bootstrap fails on mainline
Andreas Jaeger
aj@suse.de
Tue May 28 23:21:00 GMT 2002
Richard Henderson <rth@redhat.com> writes:
> On Fri, May 24, 2002 at 08:46:15AM +0200, Andreas Jaeger wrote:
>> 45 cmpq $0, __cxa_finalize@GOTPCREL(%RIP)(%rip)
>> 89 cmpq $0, _Jv_RegisterClasses@GOTPCREL(%RIP)(%rip)
>
> Try this.
Thanks, this gets me beyond the problem, I'm currently building the
stage2 compiler.
> Longer term I suggest that the x86-64 port use some UNSPEC_PCREL
> relocation marker every place it intends one.
Honza, can you have a look, please?
Andreas
>
>
> r~
>
>
> * config/i386/i386.c (output_pic_addr_const): Lowercase rip.
> (print_operand_address): Only add rip for symbolic addresses
> for which we do not have another relocation type.
>
> Index: i386.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v
> retrieving revision 1.410
> diff -c -p -d -u -r1.410 i386.c
> --- i386.c 28 May 2002 20:27:45 -0000 1.410
> +++ i386.c 29 May 2002 01:20:18 -0000
> @@ -5822,7 +5822,7 @@ output_pic_addr_const (file, x, code)
> fputs ("@GOTOFF", file);
> break;
> case UNSPEC_GOTPCREL:
> - fputs ("@GOTPCREL(%RIP)", file);
> + fputs ("@GOTPCREL(%rip)", file);
> break;
> case UNSPEC_GOTTPOFF:
> fputs ("@GOTTPOFF", file);
> @@ -6615,7 +6615,13 @@ print_operand_address (file, addr)
> output_addr_const (file, addr);
>
> /* Use one byte shorter RIP relative addressing for 64bit mode. */
> - if (GET_CODE (disp) != CONST_INT && TARGET_64BIT)
> + if (TARGET_64BIT
> + && (GET_CODE (addr) == SYMBOL_REF
> + || GET_CODE (addr) == LABEL_REF
> + || (GET_CODE (addr) == CONST
> + && GET_CODE (XEXP (addr, 0)) == PLUS
> + && GET_CODE (XEXP (XEXP (addr, 0), 0)) == SYMBOL_REF
> + && GET_CODE (XEXP (XEXP (addr, 0), 1)) == CONST_INT)))
> fputs ("(%rip)", file);
> }
> else
>
--
Andreas Jaeger
SuSE Labs aj@suse.de
private aj@arthur.inka.de
http://www.suse.de/~aj
More information about the Gcc-bugs
mailing list