forked from Imagelibrary/binutils-gdb
Set SEC_ELF_REVERSE_COPY earlier
For the sake of DT_RELR. bfd/ * elflink.c (elf_link_input_bfd): Don't set SEC_ELF_REVERSE_COPY here. Move sanity checks to reverse copying code. ld/ * ldlang.c (lang_add_section): Set SEC_ELF_REVERSE_COPY for .ctors/.dtors in .init_array/.fini_array.
This commit is contained in:
10
ld/ldlang.c
10
ld/ldlang.c
@@ -2701,6 +2701,16 @@ lang_add_section (lang_statement_list_type *ptr,
|
||||
output->block_value = 128;
|
||||
}
|
||||
|
||||
/* When a .ctors section is placed in .init_array it must be copied
|
||||
in reverse order. Similarly for .dtors. Set that up. */
|
||||
if (bfd_get_flavour (link_info.output_bfd) == bfd_target_elf_flavour
|
||||
&& ((startswith (section->name, ".ctors")
|
||||
&& strcmp (output->bfd_section->name, ".init_array") == 0)
|
||||
|| (startswith (section->name, ".dtors")
|
||||
&& strcmp (output->bfd_section->name, ".fini_array") == 0))
|
||||
&& (section->name[6] == 0 || section->name[6] == '.'))
|
||||
section->flags |= SEC_ELF_REVERSE_COPY;
|
||||
|
||||
if (section->alignment_power > output->bfd_section->alignment_power)
|
||||
output->bfd_section->alignment_power = section->alignment_power;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user