This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 1/4] [ARC] Generate DT_RELACOUNT
- From: Cupertino Miranda <Cupertino dot Miranda at synopsys dot com>
- To: "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: Nick Clifton <nickc at redhat dot com>, Francois Bedard <Francois dot Bedard at synopsys dot com>, Claudiu Zissulescu <Claudiu dot Zissulescu at synopsys dot com>
- Date: Mon, 13 Jun 2016 10:54:56 +0000
- Subject: [PATCH 1/4] [ARC] Generate DT_RELACOUNT
- Authentication-results: sourceware.org; auth=none
Hi,
Added support for DT_RELACOUNT enabling faster dynamic relative relocs
on Linux.
Best regards,
Cupertino
bfd/ChangeLog:
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.
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
--
1.9.1