* config/tc-cris.c (cris_process_instruction): Handle
authorHans-Peter Nilsson <hp@axis.com>
Sat, 20 Dec 2008 00:27:35 +0000 (00:27 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Sat, 20 Dec 2008 00:27:35 +0000 (00:27 +0000)
BFD_RELOC_CRIS_32_IE, in the test whether the relocation fits.
(get_3op_or_dip_prefix_op): Handle TLS/PIC decoration for the
"double indirect" addressing mode.
(cris_get_reloc_suffix): Add entry for :IE for BFD_RELOC_CRIS_32_IE.
(cris_number_to_imm, tc_gen_reloc): Handle BFD_RELOC_CRIS_32_IE.

gas/ChangeLog
gas/config/tc-cris.c

index 6b06d757d4f21af01749730076e969bb86a2c77d..b41964a528c9783dc06c2ee791740bfe2ce5ab79 100644 (file)
@@ -1,3 +1,12 @@
+2008-12-20  Hans-Peter Nilsson  <hp@axis.com>
+
+       * config/tc-cris.c (cris_process_instruction): Handle
+       BFD_RELOC_CRIS_32_IE, in the test whether the relocation fits.
+       (get_3op_or_dip_prefix_op): Handle TLS/PIC decoration for the
+       "double indirect" addressing mode.
+       (cris_get_reloc_suffix): Add entry for :IE for BFD_RELOC_CRIS_32_IE.
+       (cris_number_to_imm, tc_gen_reloc): Handle BFD_RELOC_CRIS_32_IE.
+
 2008-12-08  H.J. Lu  <hongjiu.lu@intel.com>
 
        * config/tc-i386.c (build_modrm_byte): Remove an extra blank
index c64f786eb9590873eda7903347a15442df66ae0f..48e17be4507be26361087856c68987b0890ba6e3 100644 (file)
@@ -2208,6 +2208,7 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp,
                as_bad (out_insnp->reloc == BFD_RELOC_CRIS_32_GD
                        || out_insnp->reloc == BFD_RELOC_CRIS_32_TPREL
                        || out_insnp->reloc == BFD_RELOC_CRIS_16_TPREL
+                       || out_insnp->reloc == BFD_RELOC_CRIS_32_IE
                        ? _("TLS relocation size does not match operand size")
                        : _("PIC relocation size does not match operand size"));
            }
@@ -3045,6 +3046,10 @@ get_3op_or_dip_prefix_op (char **cPP, struct cris_prefix *prefixp)
       prefixp->kind = PREFIX_DIP;
       prefixp->opcode = DIP_OPCODE | (AUTOINCR_BIT << 8) | REG_PC;
       prefixp->reloc = BFD_RELOC_32;
+
+      /* For :GD and :IE, it makes sense to have TLS specifiers here.  */
+      if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR)
+       cris_get_reloc_suffix (cPP, &prefixp->reloc, &prefixp->expr);
     }
   else
     /* Neither '[' nor register nor expression.  We lose.  */
@@ -3489,6 +3494,7 @@ cris_get_reloc_suffix (char **cPP, bfd_reloc_code_real_type *relocp,
       TLSMAP ("GD", BFD_RELOC_CRIS_32_GD),
       PICTLSMAP ("DTPREL16", BFD_RELOC_CRIS_16_DTPREL),
       PICTLSMAP ("DTPREL", BFD_RELOC_CRIS_32_DTPREL),
+      TLSMAP ("IE", BFD_RELOC_CRIS_32_IE),
       PICTLSMAP ("TPOFFGOT16", BFD_RELOC_CRIS_16_GOT_TPREL),
       PICTLSMAP ("TPOFFGOT", BFD_RELOC_CRIS_32_GOT_TPREL),
       TLSMAP ("TPOFF16", BFD_RELOC_CRIS_16_TPREL),
@@ -3630,6 +3636,7 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
     case BFD_RELOC_CRIS_32_GOT_GD:
     case BFD_RELOC_CRIS_16_GOT_GD:
     case BFD_RELOC_CRIS_32_GD:
+    case BFD_RELOC_CRIS_32_IE:
     case BFD_RELOC_CRIS_32_DTPREL:
     case BFD_RELOC_CRIS_16_DTPREL:
     case BFD_RELOC_CRIS_32_GOT_TPREL:
@@ -3911,6 +3918,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP)
     case BFD_RELOC_CRIS_32_GOT_GD:
     case BFD_RELOC_CRIS_16_GOT_GD:
     case BFD_RELOC_CRIS_32_GD:
+    case BFD_RELOC_CRIS_32_IE:
     case BFD_RELOC_CRIS_32_DTPREL:
     case BFD_RELOC_CRIS_16_DTPREL:
     case BFD_RELOC_CRIS_32_GOT_TPREL: