[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
This commit is contained in:
Cupertino Miranda 2016-05-17 12:15:41 +02:00 committed by Claudiu Zissulescu
parent e46dd0f46b
commit 0f7f3789ca
2 changed files with 34 additions and 0 deletions

View File

@ -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

View File

@ -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