* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Return
authorAlan Modra <amodra@gmail.com>
Mon, 13 Aug 2001 10:56:21 +0000 (10:56 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 13 Aug 2001 10:56:21 +0000 (10:56 +0000)
`true' for SEC_EXCLUDE sections so that the generic code doesn't
needlessly create an output_section_statement.  Treat a correctly
named output_section_statement with NULL bfd_section as compatible.

ld/ChangeLog
ld/emultempl/elf32.em

index 3b0724f54c3df047758afc8a94fcee2a5cb0507e..45cb574e3e022d3a955f85ab229073ddb917108c 100644 (file)
@@ -1,3 +1,10 @@
+2001-08-13  Alan Modra  <amodra@bigpond.net.au>
+
+       * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Return
+       `true' for SEC_EXCLUDE sections so that the generic code doesn't
+       needlessly create an output_section_statement.  Treat a correctly
+       named output_section_statement with NULL bfd_section as compatible.
+
 2001-08-13  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * emultempl/generic.em: Support EXTRA_EM_FILE.
index fff17f6a62d90793eb6ae91f398aeb8e1ab6aaf0..d6d472928e48c12eb100b9626f998fa03dc71aa3 100644 (file)
@@ -1079,11 +1079,12 @@ gld${EMULATION_NAME}_place_orphan (file, s)
       os = lang_output_section_find (secname);
 
       if (os != NULL
-         && os->bfd_section != NULL
-         && ((s->flags ^ os->bfd_section->flags)
-             & (SEC_LOAD | SEC_ALLOC)) == 0)
+         && (os->bfd_section == NULL
+             || ((s->flags ^ os->bfd_section->flags)
+                 & (SEC_LOAD | SEC_ALLOC)) == 0))
        {
-         /* We have already placed a section with this name.  */
+         /* We already have an output section statement with this
+            name, and its bfd section has compatible flags.  */
          wild_doit (&os->children, s, os, file);
          return true;
        }
@@ -1112,7 +1113,7 @@ gld${EMULATION_NAME}_place_orphan (file, s)
 (hold.os != NULL || (hold.os = lang_output_section_find (name)) != NULL)
 
   if (s->flags & SEC_EXCLUDE)
-    return false;
+    return true;
 
   place = NULL;
   if ((s->flags & SEC_ALLOC) == 0)