diff --git a/ld/ChangeLog b/ld/ChangeLog index 49fb2e8899..2f2c9b5c11 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2005-03-16 David Heine + Bob Wilson + + * ldlang.c (IGNORE_SECTION): Remove check for zero size. + (lang_check_section_addresses): Ignore zero size sections here. + 2005-03-16 H.J. Lu * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Remove diff --git a/ld/ldlang.c b/ld/ldlang.c index 72545c29f4..dc805a3555 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -3300,8 +3300,7 @@ size_input_section ((s->flags & SEC_NEVER_LOAD) != 0 \ || (s->flags & SEC_ALLOC) == 0 \ || ((s->flags & SEC_THREAD_LOCAL) != 0 \ - && (s->flags & SEC_LOAD) == 0) \ - || s->size == 0) + && (s->flags & SEC_LOAD) == 0)) /* Check to see if any allocated sections overlap with other allocated sections. This can happen if a linker script specifies the output @@ -3318,7 +3317,7 @@ lang_check_section_addresses (void) asection *os; /* Ignore sections which are not loaded or which have no contents. */ - if (IGNORE_SECTION (s)) + if (IGNORE_SECTION (s) || s->size == 0) continue; /* Once we reach section 's' stop our seach. This prevents two @@ -3332,7 +3331,7 @@ lang_check_section_addresses (void) bfd_vma os_end; /* Only consider loadable sections with real contents. */ - if (IGNORE_SECTION (os)) + if (IGNORE_SECTION (os) || os->size == 0) continue; /* We must check the sections' LMA addresses not their diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 43b78bcae1..6bdd0f8065 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-03-16 David Heine + Bob Wilson + + * ld-scripts/empty-orphan.d, ld-scripts/empty-orphan.exp, + ld-scripts/empty-orphan.s, ld-scripts/emtpy-orphan.t: New test. + 2005-03-16 H.J. Lu * ld-cris/hiddef1.d: Updated for empty section removal. diff --git a/ld/testsuite/ld-scripts/empty-orphan.d b/ld/testsuite/ld-scripts/empty-orphan.d new file mode 100644 index 0000000000..1a48cac447 --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-orphan.d @@ -0,0 +1,3 @@ +#source: empty-orphan.s +#ld: -T empty-orphan.t +#error: no memory region specified for loadable section diff --git a/ld/testsuite/ld-scripts/empty-orphan.exp b/ld/testsuite/ld-scripts/empty-orphan.exp new file mode 100644 index 0000000000..cd2a94ff13 --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-orphan.exp @@ -0,0 +1,27 @@ +# Make sure orphan sections do not lead to huge output files. +# By David Heine, Tensilica, Inc. +# Copyright 2005 +# Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# PHDRS is only meaningful for ELF. +if ![is_elf_format] { + return +} + +set testname "empty-orphan" + +run_dump_test empty-orphan diff --git a/ld/testsuite/ld-scripts/empty-orphan.s b/ld/testsuite/ld-scripts/empty-orphan.s new file mode 100644 index 0000000000..c8fe675a2f --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-orphan.s @@ -0,0 +1,4 @@ + .section .orphan_data, "a" + # empty but defined + .section .data + .word 0x1111 diff --git a/ld/testsuite/ld-scripts/empty-orphan.t b/ld/testsuite/ld-scripts/empty-orphan.t new file mode 100644 index 0000000000..efed7617df --- /dev/null +++ b/ld/testsuite/ld-scripts/empty-orphan.t @@ -0,0 +1,21 @@ +MEMORY +{ + default_mem : ORIGIN = 0x0, LENGTH = 0x100000 + text_mem : ORIGIN = 0x60000000, LENGTH = 0x100 + data_mem : ORIGIN = 0x70000000, LENGTH = 0x100 +} + +PHDRS +{ + default_phdr PT_LOAD; + text_phdr PT_LOAD; + data_phdr PT_LOAD; +} + +SECTIONS +{ + .text : { *(.text) } > text_mem : text_phdr + .data : { *(.data) } > data_mem : data_phdr + .bss : { *(.bss) } > data_mem : data_phdr + /* .orphan_data is an orphan */ +}