FIXME for merging of e_flags and .gnu.attributes
Code in the linker, present before the addition of .gnu.attributes support, results in shared libraries not being considered by BFD when merging e_flags and .gnu.attributes from input files to the output. That doesn't seem correct to me, but I don't know enough about all the various ABIs to change the behaviour with any confidence. So this patch merely punts on dynamic objects in merge_private_bfd_data target functions, with a FIXME for maintainer attention. I haven't excluded shared libraries from being considered where the target merge_private_bfd_data (a) already has code dealing with shared libraries, or (b) where that function just sets the output to the most constraining arch/mach combination and other fairly trivial merges, or (c) when the target has no shared library linker support. In (a) are: arc, arm, aarch64, riscv, sparc. In (b) are: bpf, cris, csky, m32r, m68k, mn10300, nios2, tilegx, tilepro, vax, visium, xtensa. In (c) are: bpf, cr16, h8300, iq2000, m32c, m68hc11, m68hc12, mcore, mep, msp430, mt, rl78, rx, v850. PR 25882 * elf32-bfin.c (elf32_bfin_merge_private_bfd_data): Add FIXME. * elf32-frv.c (frv_elf_merge_private_bfd_data): Likewise. * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Likewise. * elf32-nds32.c (nds32_elf_merge_private_bfd_data): Likewise. * elf32-score.c (s3_elf32_score_merge_private_bfd_data): Likewise. * elf32-score7.c (s7_elf32_score_merge_private_bfd_data): Likewise. * elf32-sh.c (sh_elf_merge_private_data): Likewise. * elf32-tic6x.c (elf32_tic6x_merge_attributes): Likewise. * elf64-ia64-vms.c (elf64_ia64_merge_private_bfd_data): Likewise. * elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): Likewise.
This commit is contained in:
parent
91ed9b71fa
commit
6b728d3286
@ -1,3 +1,17 @@
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25882
|
||||
* elf32-bfin.c (elf32_bfin_merge_private_bfd_data): Add FIXME.
|
||||
* elf32-frv.c (frv_elf_merge_private_bfd_data): Likewise.
|
||||
* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Likewise.
|
||||
* elf32-nds32.c (nds32_elf_merge_private_bfd_data): Likewise.
|
||||
* elf32-score.c (s3_elf32_score_merge_private_bfd_data): Likewise.
|
||||
* elf32-score7.c (s7_elf32_score_merge_private_bfd_data): Likewise.
|
||||
* elf32-sh.c (sh_elf_merge_private_data): Likewise.
|
||||
* elf32-tic6x.c (elf32_tic6x_merge_attributes): Likewise.
|
||||
* elf64-ia64-vms.c (elf64_ia64_merge_private_bfd_data): Likewise.
|
||||
* elfnn-ia64.c (elfNN_ia64_merge_private_bfd_data): Likewise.
|
||||
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25882
|
||||
|
@ -4755,6 +4755,10 @@ elf32_bfin_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
flagword old_flags, new_flags;
|
||||
bfd_boolean error = FALSE;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
new_flags = elf_elfheader (ibfd)->e_flags;
|
||||
old_flags = elf_elfheader (obfd)->e_flags;
|
||||
|
||||
|
@ -6344,6 +6344,10 @@ frv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
char new_opt[80];
|
||||
char old_opt[80];
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
new_opt[0] = old_opt[0] = '\0';
|
||||
new_flags = elf_elfheader (ibfd)->e_flags;
|
||||
old_flags = elf_elfheader (obfd)->e_flags;
|
||||
|
@ -6817,6 +6817,10 @@ nds32_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
flagword out_fpu_config;
|
||||
flagword in_fpu_config;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
/* TODO: Revise to use object-attributes instead. */
|
||||
if (!nds32_check_vec_size (ibfd))
|
||||
return FALSE;
|
||||
|
@ -4021,6 +4021,10 @@ s3_elf32_score_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
if (!_bfd_generic_verify_endian_match (ibfd, info))
|
||||
return FALSE;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
in_flags = elf_elfheader (ibfd)->e_flags;
|
||||
out_flags = elf_elfheader (obfd)->e_flags;
|
||||
|
||||
|
@ -3826,6 +3826,10 @@ s7_elf32_score_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
if (!_bfd_generic_verify_endian_match (ibfd, info))
|
||||
return FALSE;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
in_flags = elf_elfheader (ibfd)->e_flags;
|
||||
out_flags = elf_elfheader (obfd)->e_flags;
|
||||
|
||||
|
@ -6028,6 +6028,10 @@ sh_elf_merge_private_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
{
|
||||
bfd *obfd = info->output_bfd;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
|
@ -3724,6 +3724,10 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
|
||||
int i;
|
||||
int array_align_in, array_align_out, array_expect_in, array_expect_out;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
if (!elf_known_obj_attributes_proc (obfd)[0].i)
|
||||
{
|
||||
/* This is the first object. Copy the attributes. */
|
||||
|
@ -4233,6 +4233,10 @@ elf64_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
flagword in_flags;
|
||||
bfd_boolean ok = TRUE;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
/* Don't even pretend to support mixed-format linking. */
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
|
@ -4744,6 +4744,10 @@ elfNN_ia64_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
flagword in_flags;
|
||||
bfd_boolean ok = TRUE;
|
||||
|
||||
/* FIXME: What should be checked when linking shared libraries? */
|
||||
if ((ibfd->flags & DYNAMIC) != 0)
|
||||
return TRUE;
|
||||
|
||||
if (!is_ia64_elf (ibfd) || !is_ia64_elf (obfd))
|
||||
return TRUE;
|
||||
|
||||
|
@ -15767,6 +15767,7 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
|
||||
/* Check to see if the input BFD actually contains any sections. If not,
|
||||
then it has no attributes, and its flags may not have been initialized
|
||||
either, but it cannot actually cause any incompatibility. */
|
||||
/* FIXME: This excludes any input shared library from consideration. */
|
||||
for (sec = ibfd->sections; sec != NULL; sec = sec->next)
|
||||
{
|
||||
/* Ignore synthetic sections and empty .text, .data and .bss sections
|
||||
|
Loading…
Reference in New Issue
Block a user