From 23df10780612d98ca2beed212e65680eb8d01c96 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Mon, 12 Feb 2001 16:47:15 +0000 Subject: [PATCH] * elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL. * tc-i386.c (i386_displacement): Fix handling of BFD_RELOC_X86_64_GOTPCREL. (i386_validate_fix): Likewise. --- bfd/ChangeLog | 4 ++++ bfd/elf64-x86-64.c | 2 +- gas/ChangeLog | 6 ++++++ gas/config/tc-i386.c | 20 ++++++++++++++++---- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f9cc7a8b2c9..199e4859ee5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +Mon Feb 12 17:46:24 CET 2001 Jan Hubicka + + * elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL. + 2001-02-11 H.J. Lu * elflink.h (elf_bfd_final_link): Use file_align for STMTAB diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 27a97a29ef0..70da7f73f50 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -45,7 +45,7 @@ static reloc_howto_type x86_64_elf_howto_table[] = HOWTO(R_X86_64_GLOB_DAT, 0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_GLOB_DAT",false,MINUS_ONE ,MINUS_ONE ,false), HOWTO(R_X86_64_RELATIVE ,0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_RELATIVE",false,MINUS_ONE ,MINUS_ONE ,false), HOWTO(R_X86_64_JUMP_SLOT,0,4,64,false,0,complain_overflow_bitfield,0,"R_X86_64_JUMP_SLOT",false,MINUS_ONE,MINUS_ONE ,false), - HOWTO(R_X86_64_GOTPCREL, 0,4,32,true, 0,complain_overflow_signed ,0, "R_X86_64_PCREL", false,0xffffffff,0xffffffff,true), + HOWTO(R_X86_64_GOTPCREL, 0,4,32,true, 0,complain_overflow_signed ,0, "R_X86_64_GOTPCREL",false,0xffffffff,0xffffffff,true), HOWTO(R_X86_64_32, 0,4,32,false,0,complain_overflow_unsigned,0, "R_X86_64_32", false,0xffffffff,0xffffffff,false), HOWTO(R_X86_64_32S, 0,4,32,false,0,complain_overflow_signed, 0, "R_X86_64_32S", false,0xffffffff,0xffffffff,false), HOWTO(R_X86_64_16, 0,1,16,false,0,complain_overflow_bitfield,0, "R_X86_64_16", false,0xffff ,0xffff, false), diff --git a/gas/ChangeLog b/gas/ChangeLog index 33d440a5abe..5f73872eb5e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +Mon Feb 12 17:45:50 CET 2001 Jan Hubicka + + * tc-i386.c (i386_displacement): Fix handling of + BFD_RELOC_X86_64_GOTPCREL. + (i386_validate_fix): Likewise. + 2001-02-12 Philip Blundell * config/tc-arm.c (do_ldst): Improve warnings for unpredictable diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index f1e700631d5..c6e288e6941 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -3436,7 +3436,10 @@ i386_displacement (disp_start, disp_end) assert (exp->X_op == O_symbol); exp->X_op = O_subtract; exp->X_op_symbol = GOT_symbol; - i.disp_reloc[this_operand] = BFD_RELOC_32; + if (i.disp_reloc[this_operand] == BFD_RELOC_X86_64_GOTPCREL) + i.disp_reloc[this_operand] = BFD_RELOC_32_PCREL; + else + i.disp_reloc[this_operand] = BFD_RELOC_32; } #endif @@ -4600,9 +4603,18 @@ i386_validate_fix (fixp) if (fixp->fx_subsy && fixp->fx_subsy == GOT_symbol) { /* GOTOFF relocation are nonsense in 64bit mode. */ - if (flag_code == CODE_64BIT) - abort (); - fixp->fx_r_type = BFD_RELOC_386_GOTOFF; + if (fixp->fx_r_type == BFD_RELOC_32_PCREL) + { + if (flag_code != CODE_64BIT) + abort (); + fixp->fx_r_type = BFD_RELOC_X86_64_GOTPCREL; + } + else + { + if (flag_code == CODE_64BIT) + abort (); + fixp->fx_r_type = BFD_RELOC_386_GOTOFF; + } fixp->fx_subsy = 0; } } -- 2.30.2