aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog14
-rw-r--r--bfd/bfd-in2.h1
-rw-r--r--bfd/elf32-mips.c22
-rw-r--r--bfd/elf64-mips.c23
-rw-r--r--bfd/elfn32-mips.c23
-rw-r--r--bfd/libbfd.h1
-rw-r--r--bfd/reloc.c2
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-mips.c1
-rw-r--r--include/elf/ChangeLog4
-rw-r--r--include/elf/mips.h1
11 files changed, 96 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d1ec430..d148669 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index efc1a55..f5b98c5 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -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). */
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index 54ae641..c3c58c6 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -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];
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index e692099..a0c5cc5 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -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 */
+
/* 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:
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index 131de33..2daf79e 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -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 */
+
/* 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:
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index c0006bf..9450729 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -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",
diff --git a/bfd/reloc.c b/bfd/reloc.c
index d4d98f7..4d57e23 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -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
diff --git a/gas/ChangeLog b/gas/ChangeLog
index eb53b16..ae07be8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 1f16dc9..02b3cf3 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -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;
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index e7058f7..9be3cff 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -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 ...
diff --git a/include/elf/mips.h b/include/elf/mips.h
index 493bbfd..b5f7e1a 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -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. */