2013-05-30 Paul Brook <paul@codesourcery.com>
authorCatherine Moore <clm@redhat.com>
Thu, 30 May 2013 20:27:21 +0000 (20:27 +0000)
committerCatherine Moore <clm@redhat.com>
Thu, 30 May 2013 20:27:21 +0000 (20:27 +0000)
bfd/
* bfd-in2.h: Regenerate.
* elf32-mips.c (elf_mips_eh_howto): New.
(bfd_elf32_bfd_reloc_type_lookup ): Support BFD_RELOC_MIPS_EH.
(bfd_elf32_bfd_reloc_name_lookup): Likewise.
(mips_elf32_rtype_to_howto): Support R_MIPS_EH.
* elf64-mips.c (elf_mips_eh_howto): New.
(bfd_elf64_bfd_reloc_type_lookup): Support BFD_RELOC_MIPS_EH.
(bfd_elf64_bfd_reloc_name_lookup): Likewise.
(mips_elf64_rtype_to_howto): Support R_MIPS_EH.
* libbfd.h: Regenerate.
* reloc.c (BFD_RELOC_MIPS_EH): New.

gas/
* config/tc-mips.c (md_apply_fix): Support BFD_RELOC_MIPS_EH.

include/elf
* mips.h (R_MIPS_EH): New.

bfd/ChangeLog
bfd/bfd-in2.h
bfd/elf32-mips.c
bfd/elf64-mips.c
bfd/elfn32-mips.c
bfd/libbfd.h
bfd/reloc.c
gas/ChangeLog
gas/config/tc-mips.c
include/elf/ChangeLog
include/elf/mips.h

index d1ec430d1c3c2b9cc14db611b1c11c60a4053827..d148669a15b9b58f0363b62e1b73b039d33763ba 100644 (file)
@@ -1,3 +1,17 @@
+2013-05-30  Paul Brook  <paul@codesourcery.com>
+
+       * bfd-in2.h: Regenerate.
+       * elf32-mips.c (elf_mips_eh_howto): New.
+       (bfd_elf32_bfd_reloc_type_lookup ): Support BFD_RELOC_MIPS_EH.
+       (bfd_elf32_bfd_reloc_name_lookup): Likewise.
+       (mips_elf32_rtype_to_howto): Support R_MIPS_EH.
+       * elf64-mips.c (elf_mips_eh_howto): New.
+       (bfd_elf64_bfd_reloc_type_lookup): Support BFD_RELOC_MIPS_EH.
+       (bfd_elf64_bfd_reloc_name_lookup): Likewise.
+       (mips_elf64_rtype_to_howto): Support R_MIPS_EH.
+       * libbfd.h: Regenerate.
+       * reloc.c (BFD_RELOC_MIPS_EH): New.
+
 2013-05-29  Nick Clifton  <nickc@redhat.com>
 
        * dwarf2.c (struct dwarf2_debug): Add fields for handling
index efc1a550520287d9f787b19e40ae1553a840fb4e..f5b98c5a1aff3008e9abd4e2c0558e200202ae26 100644 (file)
@@ -2937,6 +2937,7 @@ to compensate for the borrow when the low bits are added.  */
   BFD_RELOC_MICROMIPS_TLS_TPREL_HI16,
   BFD_RELOC_MIPS_TLS_TPREL_LO16,
   BFD_RELOC_MICROMIPS_TLS_TPREL_LO16,
+  BFD_RELOC_MIPS_EH,
 
 
 /* MIPS ELF relocations (VxWorks and PLT extensions).  */
index 54ae641c2ea308a5e5fb655b4aad0b6dd0a2b639..c3c58c65160e07f7894117832dbc739e97d6b453 100644 (file)
@@ -1538,6 +1538,22 @@ static reloc_howto_type elf_mips_jump_slot_howto =
         0x0,                   /* dst_mask */
         FALSE);                /* pcrel_offset */
 
+/* Used in EH tables.  */
+static reloc_howto_type elf_mips_eh_howto =
+  HOWTO (R_MIPS_EH,            /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        _bfd_mips_elf_generic_reloc, /* special_function */
+        "R_MIPS_EH",           /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE);                /* pcrel_offset */
+
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
 
@@ -2010,6 +2026,8 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code)
       return &elf_mips_copy_howto;
     case BFD_RELOC_MIPS_JUMP_SLOT:
       return &elf_mips_jump_slot_howto;
+    case BFD_RELOC_MIPS_EH:
+      return &elf_mips_eh_howto;
     }
 }
 
@@ -2055,6 +2073,8 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     return &elf_mips_copy_howto;
   if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
     return &elf_mips_jump_slot_howto;
+  if (strcasecmp (elf_mips_eh_howto.name, r_name) == 0)
+    return &elf_mips_eh_howto;
 
   return NULL;
 }
@@ -2079,6 +2099,8 @@ mips_elf32_rtype_to_howto (unsigned int r_type,
       return &elf_mips_copy_howto;
     case R_MIPS_JUMP_SLOT:
       return &elf_mips_jump_slot_howto;
+    case R_MIPS_EH:
+      return &elf_mips_eh_howto;
     default:
       if (r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max)
        return &elf_micromips_howto_table_rel[r_type - R_MICROMIPS_min];
index e6920997601b5acefd3c929f34f9f350e5e8447a..a0c5cc59d3922a134fac7f58ff31cac405f162c0 100644 (file)
@@ -2671,6 +2671,23 @@ static reloc_howto_type elf_mips_jump_slot_howto =
         0x0,                   /* src_mask */
         0x0,                   /* dst_mask */
         FALSE);                /* pcrel_offset */
+
+/* Used in EH tables.  */
+static reloc_howto_type elf_mips_eh_howto =
+  HOWTO (R_MIPS_EH,            /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        _bfd_mips_elf_generic_reloc, /* special_function */
+        "R_MIPS_EH",           /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE);                /* pcrel_offset */
+
 \f
 /* Swap in a MIPS 64-bit Rel reloc.  */
 
@@ -3276,6 +3293,8 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
       return &elf_mips_gnu_vtentry_howto;
     case BFD_RELOC_32_PCREL:
       return &elf_mips_gnu_pcrel32;
+    case BFD_RELOC_MIPS_EH:
+      return &elf_mips_eh_howto;
     case BFD_RELOC_MIPS_COPY:
       return &elf_mips_copy_howto;
     case BFD_RELOC_MIPS_JUMP_SLOT:
@@ -3325,6 +3344,8 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     return &elf_mips_gnu_rela16_s2;
   if (strcasecmp (elf_mips_gnu_pcrel32.name, r_name) == 0)
     return &elf_mips_gnu_pcrel32;
+  if (strcasecmp (elf_mips_eh_howto.name, r_name) == 0)
+    return &elf_mips_eh_howto;
   if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0)
     return &elf_mips_copy_howto;
   if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
@@ -3351,6 +3372,8 @@ mips_elf64_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p)
        return &elf_mips_gnu_rel16_s2;
     case R_MIPS_PC32:
       return &elf_mips_gnu_pcrel32;
+    case R_MIPS_EH:
+      return &elf_mips_eh_howto;
     case R_MIPS_COPY:
       return &elf_mips_copy_howto;
     case R_MIPS_JUMP_SLOT:
index 131de33fe2926542cf6c0e28fe3c8d7bfd10ced3..2daf79e87517e95bda9259e40a56eec6b244cdd5 100644 (file)
@@ -2636,6 +2636,23 @@ static reloc_howto_type elf_mips_jump_slot_howto =
         0x0,                   /* src_mask */
         0x0,                   /* dst_mask */
         FALSE);                /* pcrel_offset */
+
+/* Used in EH tables.  */
+static reloc_howto_type elf_mips_eh_howto =
+  HOWTO (R_MIPS_EH,            /* type */
+        0,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        32,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        _bfd_mips_elf_generic_reloc, /* special_function */
+        "R_MIPS_EH",           /* name */
+        TRUE,                  /* partial_inplace */
+        0xffffffff,            /* src_mask */
+        0xffffffff,            /* dst_mask */
+        FALSE);                /* pcrel_offset */
+
 \f
 /* Set the GP value for OUTPUT_BFD.  Returns FALSE if this is a
    dangerous relocation.  */
@@ -3092,6 +3109,8 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
       return &elf_mips_gnu_vtentry_howto;
     case BFD_RELOC_32_PCREL:
       return &elf_mips_gnu_pcrel32;
+    case BFD_RELOC_MIPS_EH:
+      return &elf_mips_eh_howto;
     case BFD_RELOC_MIPS_COPY:
       return &elf_mips_copy_howto;
     case BFD_RELOC_MIPS_JUMP_SLOT:
@@ -3142,6 +3161,8 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
     return &elf_mips_gnu_rela16_s2;
   if (strcasecmp (elf_mips_gnu_pcrel32.name, r_name) == 0)
     return &elf_mips_gnu_pcrel32;
+  if (strcasecmp (elf_mips_eh_howto.name, r_name) == 0)
+    return &elf_mips_eh_howto;
   if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0)
     return &elf_mips_copy_howto;
   if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0)
@@ -3168,6 +3189,8 @@ mips_elf_n32_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p)
        return &elf_mips_gnu_rel16_s2;
     case R_MIPS_PC32:
       return &elf_mips_gnu_pcrel32;
+    case R_MIPS_EH:
+      return &elf_mips_eh_howto;
     case R_MIPS_COPY:
       return &elf_mips_copy_howto;
     case R_MIPS_JUMP_SLOT:
index c0006bfd0a12f64e6b6f50618ac56eec82904216..9450729062eac4c2625a469d4b1a0ba2513e9323 100644 (file)
@@ -1187,6 +1187,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_MICROMIPS_TLS_TPREL_HI16",
   "BFD_RELOC_MIPS_TLS_TPREL_LO16",
   "BFD_RELOC_MICROMIPS_TLS_TPREL_LO16",
+  "BFD_RELOC_MIPS_EH",
 
   "BFD_RELOC_MIPS_COPY",
   "BFD_RELOC_MIPS_JUMP_SLOT",
index d4d98f7857b617514516e873656a488f6687764a..4d57e23abc0056181178370744534a0ab19d7543 100644 (file)
@@ -2413,6 +2413,8 @@ ENUMX
   BFD_RELOC_MIPS_TLS_TPREL_LO16
 ENUMX
   BFD_RELOC_MICROMIPS_TLS_TPREL_LO16
+ENUMX
+  BFD_RELOC_MIPS_EH
 ENUMDOC
   MIPS ELF relocations.
 COMMENT
index eb53b16105f4d14f611e5640216f9ea2677aa7c9..ae07be8be1e0699451ebb78602a2c61a8fba2bc0 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-30  Paul Brook  <paul@codesourcery.com>
+
+       * config/tc-mips.c (md_apply_fix): Support BFD_RELOC_MIPS_EH.
+
 2013-05-29  Maciej W. Rozycki  <macro@codesourcery.com>
 
        * write.c (resolve_reloc_expr_symbols): On REL targets don't
index 1f16dc9cfeffee78f4ad0dd408154d48338cd7bc..02b3cf367a1ae29ce8e64e06557054030bf930a3 100644 (file)
@@ -15824,6 +15824,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
     case BFD_RELOC_MICROMIPS_GOT_LO16:
     case BFD_RELOC_MICROMIPS_CALL_HI16:
     case BFD_RELOC_MICROMIPS_CALL_LO16:
+    case BFD_RELOC_MIPS_EH:
       if (fixP->fx_done)
        {
          offsetT value;
index e7058f79b8569eb1f48240ef6247029cb8f85bcb..9be3cff6c91cda04319362524c1a65c41686bc32 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-30  Paul Brook  <paul@codesourcery.com>
+
+       * mips.h (R_MIPS_EH): New.
+
 2013-05-28  Yufeng Zhang  <yufeng.zhang@arm.com>
 
        * aarch64.h (R_AARCH64_TLSDESC_LD64_PREL19): Rename to ...
index 493bbfd215255c2d9e4394412bff4cdcbe9a2633..b5f7e1a898c99cb80eec01edc84c24597cc0d4f2 100644 (file)
@@ -155,6 +155,7 @@ START_RELOC_NUMBERS (elf_mips_reloc_type)
      mips-linux for exception-handling data.  GCC stopped using it in
      May, 2004, then started using it again for compact unwind tables.  */
   RELOC_NUMBER (R_MIPS_PC32, 248)
+  RELOC_NUMBER (R_MIPS_EH, 249)
   /* FIXME: this relocation is used internally by gas.  */
   RELOC_NUMBER (R_MIPS_GNU_REL16_S2, 250)
   /* These are GNU extensions to enable C++ vtable garbage collection.  */