This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Empty section removal broke MIPS
- From: Daniel Jacobowitz <drow at false dot org>
- To: binutils at sources dot redhat dot com
- Date: Wed, 13 Apr 2005 10:53:29 -0400
- Subject: Empty section removal broke MIPS
Assemble and link this with a mips64-linux toolchain:
.section .sbss
.align 3
.type bar, @object
.size bar, 0
bar:
.text
.align 2
.globl __start
.ent __start
.type __start, @function
__start:
j $31
.end __start
You'll get "nonrepresentable section on output". We try to output the local
symbol bar, even though we have removed its section. This patch appears to
work; tested mips64-linux-gnu via the binutils testsuite and by booting a
kernel linked with the new linker (the previous linker could not build a UP
Linux kernel).
There's some serious mojo wrong with the mips64 linker at the moment,
including an assertion fail at elfxx-mips.c:2466, and it looks like some of
the ld tests were not updated for empty for some sort of symbol removal.
I'll be back. Same failures without this patch.
OK to commit?
--
Daniel Jacobowitz
CodeSourcery, LLC
2005-04-13 Daniel Jacobowitz <dan@codesourcery.com>
* elflink.c (elf_link_input_bfd): Update check for removed sections.
Index: binutils/bfd/elflink.c
===================================================================
--- binutils.orig/bfd/elflink.c 2005-04-12 16:39:52.000000000 -0400
+++ binutils/bfd/elflink.c 2005-04-13 10:39:07.050398494 -0400
@@ -6869,6 +6869,11 @@ elf_link_input_bfd (struct elf_final_lin
&& (isec->flags & SEC_EXCLUDE) != 0)))
continue;
+ /* If the section is not in the output BFD's section list, it is not
+ being output. */
+ if (bfd_section_removed_from_list (output_bfd, isec->output_section))
+ continue;
+
/* Get the name of the symbol. */
name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
isym->st_name);