* elf-bfd.h (elf_backend_data): Add a "rela_plts_and_copies_p" field.
	* elfxx-target.h (elf_backend_rela_plts_and_copies_p): New macro.
	(elfNN_bed): Use it.
	* elf.c (_bfd_elf_get_synthetic_symtab): Use rela_plts_and_copies_p
	instead of default_use_rela_p to choose between ".rel.plt" and
	".rela.plt".
	* elflink.c (_bfd_elf_create_dynamic_sections): Use
	rela_plts_and_copies_p instead of default_use_rela_p to choose
	between ".rel.plt" and ".rela.plt", and between ".rel.bss" and
	".rela.bss".
This commit is contained in:
Richard Sandiford 2008-08-07 20:04:32 +00:00
parent d5eaccd71d
commit d35fd65983
5 changed files with 23 additions and 3 deletions

View File

@ -1,3 +1,16 @@
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
* elf-bfd.h (elf_backend_data): Add a "rela_plts_and_copies_p" field.
* elfxx-target.h (elf_backend_rela_plts_and_copies_p): New macro.
(elfNN_bed): Use it.
* elf.c (_bfd_elf_get_synthetic_symtab): Use rela_plts_and_copies_p
instead of default_use_rela_p to choose between ".rel.plt" and
".rela.plt".
* elflink.c (_bfd_elf_create_dynamic_sections): Use
rela_plts_and_copies_p instead of default_use_rela_p to choose
between ".rel.plt" and ".rela.plt", and between ".rel.bss" and
".rela.bss".
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
* elf-bfd.h (MIPS_ELF_TDATA): New elf_object_id.

View File

@ -1189,6 +1189,9 @@ struct elf_backend_data
section. */
unsigned default_use_rela_p : 1;
/* True if PLT and copy relocations should be RELA by default. */
unsigned rela_plts_and_copies_p : 1;
/* Set if RELA relocations for a relocatable link can be handled by
generic code. Backends that set this flag need do nothing in the
backend relocate_section routine for relocatable linking. */

View File

@ -8809,7 +8809,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd,
relplt_name = bed->relplt_name;
if (relplt_name == NULL)
relplt_name = bed->default_use_rela_p ? ".rela.plt" : ".rel.plt";
relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt";
relplt = bfd_get_section_by_name (abfd, relplt_name);
if (relplt == NULL)
return 0;

View File

@ -309,7 +309,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
}
s = bfd_make_section_with_flags (abfd,
(bed->default_use_rela_p
(bed->rela_plts_and_copies_p
? ".rela.plt" : ".rel.plt"),
flags | SEC_READONLY);
if (s == NULL
@ -347,7 +347,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
if (! info->shared)
{
s = bfd_make_section_with_flags (abfd,
(bed->default_use_rela_p
(bed->rela_plts_and_copies_p
? ".rela.bss" : ".rel.bss"),
flags | SEC_READONLY);
if (s == NULL

View File

@ -555,6 +555,9 @@
#ifndef elf_backend_default_use_rela_p
#define elf_backend_default_use_rela_p !USE_REL
#endif
#ifndef elf_backend_rela_plts_and_copies_p
#define elf_backend_rela_plts_and_copies_p elf_backend_default_use_rela_p
#endif
#ifndef elf_backend_rela_normal
#define elf_backend_rela_normal 0
@ -718,6 +721,7 @@ static struct elf_backend_data elfNN_bed =
elf_backend_may_use_rel_p,
elf_backend_may_use_rela_p,
elf_backend_default_use_rela_p,
elf_backend_rela_plts_and_copies_p,
elf_backend_rela_normal,
elf_backend_sign_extend_vma,
elf_backend_want_got_plt,