* elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL.
authorJan Hubicka <jh@suse.cz>
Mon, 12 Feb 2001 16:47:15 +0000 (16:47 +0000)
committerJan Hubicka <jh@suse.cz>
Mon, 12 Feb 2001 16:47:15 +0000 (16:47 +0000)
* tc-i386.c (i386_displacement): Fix handling of
BFD_RELOC_X86_64_GOTPCREL.
(i386_validate_fix): Likewise.

bfd/ChangeLog
bfd/elf64-x86-64.c
gas/ChangeLog
gas/config/tc-i386.c

index f9cc7a8b2c99f5b3347d12e4a296799baa606d84..199e4859ee58d5a125589a100a6cc14b9fb424d3 100644 (file)
@@ -1,3 +1,7 @@
+Mon Feb 12 17:46:24 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+       * elf64-x86-64.c (x86_64_elf_howto): Fix name of R_X86_64_GOTPCREL.
+
 2001-02-11  H.J. Lu  <hjl@gnu.org>
 
        * elflink.h (elf_bfd_final_link): Use file_align for STMTAB
index 27a97a29ef0739554008bb8f3092a9f3e133e1b4..70da7f73f506337a4717b155dd1bf71dc1d3473a 100644 (file)
@@ -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),
index 33d440a5abe8e100ff795940209dd3f0e679131b..5f73872eb5e0a4e2d9851e9adcf251580f85f3fe 100644 (file)
@@ -1,3 +1,9 @@
+Mon Feb 12 17:45:50 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+       * tc-i386.c (i386_displacement): Fix handling of
+       BFD_RELOC_X86_64_GOTPCREL.
+       (i386_validate_fix): Likewise.
+
 2001-02-12  Philip Blundell  <pb@futuretv.com>
 
        * config/tc-arm.c (do_ldst): Improve warnings for unpredictable
index f1e700631d58779aa32b09a983a6a2cc8b5fb2ab..c6e288e6941cfca8f8a82926e9a89678f2594826 100644 (file)
@@ -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;
     }
 }