PR25882, .gnu.attributes are not checked for shared libraries

This allows backend merge_private_bfd_data to examine shared library
e_flags and/or .gnu.attributes.  ARM and PowerPC have done so when
using ld.gold for a long time.

(The tic6x change below is dead code due to the earlier FIXME,
but this is probably one of the changes needed there.)

	PR 25882
bfd/
	* elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
	Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
ld/
	* ldlang.c (lang_check): Call bfd_merge_private_bfd_data for
	shared libraries.
This commit is contained in:
Alan Modra 2020-05-01 15:23:17 +09:30
parent 6b728d3286
commit a8acd6eeb6
4 changed files with 20 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2020-05-01 Alan Modra <amodra@gmail.com>
PR 25882
* elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
2020-05-01 Alan Modra <amodra@gmail.com>
PR 25882

View File

@ -3866,6 +3866,9 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
case Tag_ABI_PIC:
case Tag_ABI_PID:
/* Don't transfer these tags from dynamic objects. */
if ((ibfd->flags & DYNAMIC) != 0)
continue;
if (out_attr[i].i > in_attr[i].i)
out_attr[i].i = in_attr[i].i;
break;

View File

@ -1,3 +1,9 @@
2020-05-01 Alan Modra <amodra@gmail.com>
PR 25882
* ldlang.c (lang_check): Call bfd_merge_private_bfd_data for
shared libraries.
2020-05-01 Alan Modra <amodra@gmail.com>
* po/BLD-POTFILES.in: Regenerate.

View File

@ -6938,11 +6938,12 @@ lang_check (void)
bfd_printable_name (input_bfd), input_bfd,
bfd_printable_name (link_info.output_bfd));
}
else if (bfd_count_sections (input_bfd))
{
/* If the input bfd has no contents, it shouldn't set the
private data of the output bfd. */
/* If the input bfd has no contents, it shouldn't set the
private data of the output bfd. */
else if ((input_bfd->flags & DYNAMIC) != 0
|| bfd_count_sections (input_bfd) != 0)
{
bfd_error_handler_type pfn = NULL;
/* If we aren't supposed to warn about mismatched input