From 81ce978095632bc7267c1aba0c1d5e85cadbc6f5 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 7 Dec 2005 19:21:44 +0000 Subject: [PATCH] 2005-12-07 H.J. Lu Andreas Schwab PR binutils/1991 * elf.c (assign_section_numbers): Always use the output section when setting up sh_link for SHF_LINK_ORDER. --- bfd/ChangeLog | 7 +++++++ bfd/elf.c | 21 +++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e34e2dba2..3051cdc3f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2005-12-07 H.J. Lu + Andreas Schwab + + PR binutils/1991 + * elf.c (assign_section_numbers): Always use the output section + when setting up sh_link for SHF_LINK_ORDER. + 2005-12-07 Thiemo Seufer H.J. Lu diff --git a/bfd/elf.c b/bfd/elf.c index ea86c3ef8..644ac6d65 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -3053,10 +3053,10 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) 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, struct bfd_link_info *link_info) } 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 -- 2.11.4.GIT