ld/ChangeLog:
authorBob Wilson <bob.wilson@acm.org>
Thu, 17 Mar 2005 16:20:39 +0000 (16:20 +0000)
committerBob Wilson <bob.wilson@acm.org>
Thu, 17 Mar 2005 16:20:39 +0000 (16:20 +0000)
        * ldlang.c (IGNORE_SECTION): Remove check for zero size.
        (lang_check_section_addresses): Ignore zero size sections here.
ld/testsuite/ChangeLog:
        * ld-scripts/empty-orphan.d, ld-scripts/empty-orphan.exp,
        ld-scripts/empty-orphan.s, ld-scripts/emtpy-orphan.t: New test.

ld/ChangeLog
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-scripts/empty-orphan.d [new file with mode: 0644]
ld/testsuite/ld-scripts/empty-orphan.exp [new file with mode: 0644]
ld/testsuite/ld-scripts/empty-orphan.s [new file with mode: 0644]
ld/testsuite/ld-scripts/empty-orphan.t [new file with mode: 0644]

index 49fb2e8..2f2c9b5 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-16  David Heine  <dlheine@tensilica.com>
+           Bob Wilson  <bob.wilson@acm.org>
+
+       * ldlang.c (IGNORE_SECTION): Remove check for zero size.
+       (lang_check_section_addresses): Ignore zero size sections here.
+
 2005-03-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Remove
index 72545c2..dc805a3 100644 (file)
@@ -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
index 43b78bc..6bdd0f8 100644 (file)
@@ -1,3 +1,9 @@
+2005-03-16  David Heine  <dlheine@tensilica.com>
+           Bob Wilson  <bob.wilson@acm.org>
+
+       * 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  <hongjiu.lu@intel.com>
 
        * 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 (file)
index 0000000..1a48cac
--- /dev/null
@@ -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 (file)
index 0000000..cd2a94f
--- /dev/null
@@ -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 (file)
index 0000000..c8fe675
--- /dev/null
@@ -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 (file)
index 0000000..efed761
--- /dev/null
@@ -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 */
+}