aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorCupertino Miranda <cmiranda@synopsys.com>2016-05-17 12:15:41 +0200
committerClaudiu Zissulescu <claziss@synopsys.com>2016-06-13 16:04:04 +0200
commit0f7f3789ca97ecaf0c4169c6d82e205f69fa0580 (patch)
tree12a0407a0444315fd69daacfed4804a9fd1d545e /bfd
parente46dd0f46b9a2ac2b07343b91c447620ede47d26 (diff)
downloadgdb-0f7f3789ca97ecaf0c4169c6d82e205f69fa0580.zip
gdb-0f7f3789ca97ecaf0c4169c6d82e205f69fa0580.tar.gz
gdb-0f7f3789ca97ecaf0c4169c6d82e205f69fa0580.tar.bz2
[ARC] Generate DT_RELACOUNT.
bfd/ 2016-06-13 Cupertino Miranda <cmiranda@synospsy.com> * elf32-arc.c (elf32_arc_reloc_type_class): Defined function to enable support for "-z combreloc" and DT_RELACOUNT. (elf_backend_reloc_type_class): Likewise
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-arc.c28
2 files changed, 34 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b9c3a73..9eb30ef 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2016-06-13 Cupertino Miranda <cmiranda@synospsy.com>
+
+ * elf32-arc.c (elf32_arc_reloc_type_class): Defined function to
+ enable support for "-z combreloc" and DT_RELACOUNT.
+ (elf_backend_reloc_type_class): Likewise
+
2016-06-11 H.J. Lu <hongjiu.lu@intel.com>
PR ld/20244
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index 08949c7..82b7687 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -2699,6 +2699,32 @@ elf_arc_size_dynamic_sections (bfd * output_bfd,
return TRUE;
}
+
+/* Classify dynamic relocs such that -z combreloc can reorder and combine
+ them. */
+static enum elf_reloc_type_class
+elf32_arc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ const asection *rel_sec ATTRIBUTE_UNUSED,
+ const Elf_Internal_Rela *rela)
+{
+ switch ((int) ELF32_R_TYPE (rela->r_info))
+ {
+ case R_ARC_RELATIVE:
+ return reloc_class_relative;
+ case R_ARC_JMP_SLOT:
+ return reloc_class_plt;
+ case R_ARC_COPY:
+ return reloc_class_copy;
+ /* TODO: Needed in future to support ifunc. */
+ /*
+ case R_ARC_IRELATIVE:
+ return reloc_class_ifunc;
+ */
+ default:
+ return reloc_class_normal;
+ }
+}
+
const struct elf_size_info arc_elf32_size_info =
{
sizeof (Elf32_External_Ehdr),
@@ -2801,6 +2827,8 @@ elf_arc_add_symbol_hook (bfd * abfd,
#define elf_backend_check_relocs elf_arc_check_relocs
#define elf_backend_create_dynamic_sections _bfd_elf_create_dynamic_sections
+#define elf_backend_reloc_type_class elf32_arc_reloc_type_class
+
#define elf_backend_adjust_dynamic_symbol elf_arc_adjust_dynamic_symbol
#define elf_backend_finish_dynamic_symbol elf_arc_finish_dynamic_symbol