This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: PR binutils/1991: objcopy does not update sh_link correctly
- From: "H. J. Lu" <hjl at lucon dot org>
- To: binutils at sources dot redhat dot com
- Date: Wed, 7 Dec 2005 10:51:11 -0800
- Subject: PATCH: PR binutils/1991: objcopy does not update sh_link correctly
elf_linked_to_section always points to the input section. We didn't
handle objcopy correctly. This patch fixes it.
H.J.
---
2005-12-07 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/1991
* elf.c (assign_section_numbers): Properly handle SHF_LINK_ORDER
for objcopy.
--- bfd/elf.c.link-order 2005-11-04 11:38:00.000000000 -0800
+++ bfd/elf.c 2005-12-07 10:33:35.000000000 -0800
@@ -3053,10 +3053,10 @@ assign_section_numbers (bfd *abfd, struc
s = elf_linked_to_section (sec);
if (s)
{
+ /* elf_linked_to_section points to the input section. */
if (link_info != NULL)
{
- /* For linker, elf_linked_to_section points to the
- input section. */
+ /* Check discarded linkonce section. */
if (elf_discarded_section (s))
{
asection *kept;
@@ -3074,9 +3074,26 @@ assign_section_numbers (bfd *abfd, struc
}
s = kept;
}
+ }
+ if (link_info != NULL)
+ {
+ /* Handle linker. */
s = s->output_section;
BFD_ASSERT (s != NULL);
}
+ else
+ {
+ /* Handle objcopy. */
+ if (s->output_section == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%B: sh_link of section `%A' points to removed section `%A' of `%B'"),
+ abfd, d->this_hdr.bfd_section, s, s->owner);
+ bfd_set_error (bfd_error_bad_value);
+ return FALSE;
+ }
+ s = s->output_section;
+ }
d->this_hdr.sh_link = elf_section_data (s)->this_idx;
}
else