gas/
authorJan Beulich <jbeulich@novell.com>
Wed, 28 Sep 2005 14:44:25 +0000 (14:44 +0000)
committerJan Beulich <jbeulich@novell.com>
Wed, 28 Sep 2005 14:44:25 +0000 (14:44 +0000)
2005-09-28  Jan Beulich  <jbeulich@novell.com>

* config/tc-i386.h (x86_cons_fix_new): Declare unconditionally.
(TC_CONS_FIX_NEW): Define unconditionally.
(x86_pe_cons_fix_new): Remove.
* config/tc-i386.c (signed_cons): New.
(md_pseudo_table): Add slong.
(x86_cons_fix_new): Declare unconditionally.
(x86_pe_cons_fix_new): Merge into x86_cons_fix_new.
(tc_gen_reloc): Also consider BFD_RELOC_X86_64_32S for gotpc
conversion.

gas/testsuite/
2005-09-28  Jan Beulich  <jbeulich@novell.com>

* gas/i386/reloc64.s: Also test .slong.
* gas/i386/reloc64.l: Adjust.
* gas/i386/reloc64.d: Adjust.

gas/ChangeLog
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/reloc64.d
gas/testsuite/gas/i386/reloc64.l
gas/testsuite/gas/i386/reloc64.s

index de17088f7d6c17f618af4ba8e5120927777e76d5..b513b57892461834ae7d81cc1093b6040294e875 100644 (file)
@@ -1,3 +1,15 @@
+2005-09-28  Jan Beulich  <jbeulich@novell.com>
+
+       * config/tc-i386.h (x86_cons_fix_new): Declare unconditionally.
+       (TC_CONS_FIX_NEW): Define unconditionally.
+       (x86_pe_cons_fix_new): Remove.
+       * config/tc-i386.c (signed_cons): New.
+       (md_pseudo_table): Add slong.
+       (x86_cons_fix_new): Declare unconditionally.
+       (x86_pe_cons_fix_new): Merge into x86_cons_fix_new.
+       (tc_gen_reloc): Also consider BFD_RELOC_X86_64_32S for gotpc
+       conversion.
+
 2005-09-28  Arnold Metselaar  <arnold.metselaar@planet.nl>
 
        * app.c (do_scrub_chars <LEX_IS_SYMBOL_COMPONENT>): Check for full
index 3820b19abec224b2a03c9b88fa1b69a4b9c842ba..8f229cfb354a4d25dc1ae02bb3127ede8046b717 100644 (file)
@@ -80,6 +80,7 @@ static void set_cpu_arch PARAMS ((int));
 #ifdef TE_PE
 static void pe_directive_secrel PARAMS ((int));
 #endif
+static void signed_cons PARAMS ((int));
 static char *output_invalid PARAMS ((int c));
 static int i386_operand PARAMS ((char *operand_string));
 static int i386_intel_operand PARAMS ((char *operand_string, int got_a_float));
@@ -461,6 +462,7 @@ const pseudo_typeS md_pseudo_table[] =
   {"dfloat", float_cons, 'd'},
   {"tfloat", float_cons, 'x'},
   {"value", cons, 2},
+  {"slong", signed_cons, 4},
   {"noopt", s_ignore, 0},
   {"optim", s_ignore, 0},
   {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
@@ -3764,6 +3766,32 @@ output_imm (insn_start_frag, insn_start_off)
     }
 }
 \f
+/* x86_cons_fix_new is called via the expression parsing code when a
+   reloc is needed.  We use this hook to get the correct .got reloc.  */
+static enum bfd_reloc_code_real got_reloc = NO_RELOC;
+static int cons_sign = -1;
+
+void
+x86_cons_fix_new (fragS *frag,
+     unsigned int off,
+     unsigned int len,
+     expressionS *exp)
+{
+  enum bfd_reloc_code_real r = reloc (len, 0, cons_sign, got_reloc);
+
+  got_reloc = NO_RELOC;
+
+#ifdef TE_PE
+  if (exp->X_op == O_secrel)
+    {
+      exp->X_op = O_symbol;
+      r = BFD_RELOC_32_SECREL;
+    }
+#endif
+
+  fix_new_exp (frag, off, len, exp, 0, r);
+}
+
 #if (!defined (OBJ_ELF) && !defined (OBJ_MAYBE_ELF)) || defined (LEX_AT)
 # define lex_got(reloc, adjust, types) NULL
 #else
@@ -3871,22 +3899,6 @@ lex_got (enum bfd_reloc_code_real *reloc,
   return NULL;
 }
 
-/* x86_cons_fix_new is called via the expression parsing code when a
-   reloc is needed.  We use this hook to get the correct .got reloc.  */
-static enum bfd_reloc_code_real got_reloc = NO_RELOC;
-
-void
-x86_cons_fix_new (frag, off, len, exp)
-     fragS *frag;
-     unsigned int off;
-     unsigned int len;
-     expressionS *exp;
-{
-  enum bfd_reloc_code_real r = reloc (len, 0, -1, got_reloc);
-  got_reloc = NO_RELOC;
-  fix_new_exp (frag, off, len, exp, 0, r);
-}
-
 void
 x86_cons (exp, size)
      expressionS *exp;
@@ -3922,26 +3934,15 @@ x86_cons (exp, size)
 }
 #endif
 
-#ifdef TE_PE
-
-void
-x86_pe_cons_fix_new (frag, off, len, exp)
-     fragS *frag;
-     unsigned int off;
-     unsigned int len;
-     expressionS *exp;
+static void signed_cons (int size)
 {
-  enum bfd_reloc_code_real r = reloc (len, 0, -1, NO_RELOC);
-
-  if (exp->X_op == O_secrel)
-    {
-      exp->X_op = O_symbol;
-      r = BFD_RELOC_32_SECREL;
-    }
-
-  fix_new_exp (frag, off, len, exp, 0, r);
+  if (flag_code == CODE_64BIT)
+    cons_sign = 1;
+  cons (size);
+  cons_sign = -1;
 }
 
+#ifdef TE_PE
 static void
 pe_directive_secrel (dummy)
      int dummy ATTRIBUTE_UNUSED;
@@ -3961,7 +3962,6 @@ pe_directive_secrel (dummy)
   input_line_pointer--;
   demand_empty_rest_of_line ();
 }
-
 #endif
 
 static int i386_immediate PARAMS ((char *));
@@ -5565,7 +5565,9 @@ tc_gen_reloc (section, fixp)
       break;
     }
 
-  if ((code == BFD_RELOC_32 || code == BFD_RELOC_32_PCREL)
+  if ((code == BFD_RELOC_32
+       || code == BFD_RELOC_32_PCREL
+       || code == BFD_RELOC_X86_64_32S)
       && GOT_symbol
       && fixp->fx_addsy == GOT_symbol)
     {
index ddfe297854ff8c10c24bdbe1473d5d36d049b5c6..bf537e06cfff916f94be66e809fb11372eb1e8dd 100644 (file)
@@ -390,17 +390,11 @@ arch_entry;
 #if (defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) && !defined (LEX_AT)
 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) x86_cons (EXP, NBYTES)
 extern void x86_cons PARAMS ((expressionS *, int));
+#endif
 
 #define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) x86_cons_fix_new(FRAG, OFF, LEN, EXP)
 extern void x86_cons_fix_new
   PARAMS ((fragS *, unsigned int, unsigned int, expressionS *));
-#endif
-
-#ifdef TE_PE
-#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) x86_pe_cons_fix_new(FRAG, OFF, LEN, EXP)
-extern void x86_pe_cons_fix_new
-  PARAMS ((fragS *, unsigned int, unsigned int, expressionS *));
-#endif
 
 #define DIFF_EXPR_OK    /* foo-. gets turned into PC relative relocs */
 
index 6e82c828d6d1fd17c785e41f013cfe41711aba51..dc7927a4c845a45129cddd1d4995652555427818 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-28  Jan Beulich  <jbeulich@novell.com>
+
+       * gas/i386/reloc64.s: Also test .slong.
+       * gas/i386/reloc64.l: Adjust.
+       * gas/i386/reloc64.d: Adjust.
+
 2005-09-21  Alan Modra  <amodra@bigpond.net.au>
 
        * gas/lns/lns.exp (lns-common-1): Don't run on targets without
index ae0879660ae1224d5e82245c977a001d92f8dc84..8503d23eeaef0d7f7951628f9bb06c8da2175adb 100644 (file)
@@ -65,6 +65,18 @@ Disassembly of section \.data:
 .*[    ]+R_X86_64_TLSLD[       ]+xtrn
 .*[    ]+R_X86_64_DTPOFF32[    ]+xtrn
 .*[    ]+R_X86_64_TPOFF32[     ]+xtrn
+.*[    ]+R_X86_64_32S[         ]+xtrn
+.*[    ]+R_X86_64_PC32[        ]+xtrn
+.*[    ]+R_X86_64_GOT32[       ]+xtrn
+.*[    ]+R_X86_64_GOTPCREL[    ]+xtrn
+.*[    ]+R_X86_64_GOTPC32[     ]+_GLOBAL_OFFSET_TABLE_
+.*[    ]+R_X86_64_GOTPC32[     ]+_GLOBAL_OFFSET_TABLE_
+.*[    ]+R_X86_64_PLT32[       ]+xtrn
+.*[    ]+R_X86_64_TLSGD[       ]+xtrn
+.*[    ]+R_X86_64_GOTTPOFF[    ]+xtrn
+.*[    ]+R_X86_64_TLSLD[       ]+xtrn
+.*[    ]+R_X86_64_DTPOFF32[    ]+xtrn
+.*[    ]+R_X86_64_TPOFF32[     ]+xtrn
 .*[    ]+R_X86_64_16[  ]+xtrn
 .*[    ]+R_X86_64_PC16[        ]+xtrn
 .*[    ]+R_X86_64_8[   ]+xtrn
index a72a4523316373a019f09c9a469a66d0eadd114a..62a762bc7e084ab1f3cdaae4a4da767fd200bf31 100644 (file)
 .*:138: Error: .*
 .*:139: Error: .*
 .*:146: Error: .*
-.*:159: Error: .*
 .*:160: Error: .*
-.*:161: Error: .*
-.*:164: Error: .*
-.*:165: Error: .*
-.*:166: Error: .*
-.*:167: Error: .*
-.*:168: Error: .*
-.*:169: Error: .*
 .*:173: Error: .*
 .*:174: Error: .*
 .*:175: Error: .*
 .*:181: Error: .*
 .*:182: Error: .*
 .*:183: Error: .*
+.*:187: Error: .*
+.*:188: Error: .*
+.*:189: Error: .*
+.*:192: Error: .*
+.*:193: Error: .*
+.*:194: Error: .*
+.*:195: Error: .*
+.*:196: Error: .*
+.*:197: Error: .*
index 9b93eb280758c559e89647d64cc63678edf8608c..1ae14ddcbea6aff9d1c35cb62dcbf6bd1cbafb1c 100644 (file)
@@ -154,6 +154,20 @@ bad        .long   xtrn@gotoff
        .long   xtrn@dtpoff
        .long   xtrn@tpoff
        
+       .slong  xtrn
+       .slong  xtrn - .
+       .slong  xtrn@got
+bad    .slong  xtrn@gotoff
+       .slong  xtrn@gotpcrel
+       .slong  _GLOBAL_OFFSET_TABLE_
+       .slong  _GLOBAL_OFFSET_TABLE_ - .
+       .slong  xtrn@plt
+       .slong  xtrn@tlsgd
+       .slong  xtrn@gottpoff
+       .slong  xtrn@tlsld
+       .slong  xtrn@dtpoff
+       .slong  xtrn@tpoff
+       
        .word   xtrn
        .word   xtrn - .
 bad    .word   xtrn@got