(_place_orphan): Use an already existing section name if that section does not
authorNick Clifton <nickc@redhat.com>
Fri, 23 Jul 2004 16:32:53 +0000 (16:32 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 23 Jul 2004 16:32:53 +0000 (16:32 +0000)
have any flags set.

ld/ChangeLog
ld/emultempl/elf32.em
ld/ldlang.c

index 25aa0a05a94ca0e57d1b516cb594ce99852ba1bd..16ff5a6ec061d92f4fdac2a18372dbfb2014e7b8 100644 (file)
@@ -1,3 +1,8 @@
+2004-07-23  Nick Clifton  <nickc@redhat.com>
+
+       * emultempl/elf32.em (_place_orphan): Use an already existing
+       section name if that section does not have any flags set.
+
 2004-07-21  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ldlang.c (already_linked_hash_entry): Removed.
index 469f0540f4f7f4c71b11434309c7d2d9b9782c39..1956fd545ddb252d42fd00897f03e7a6a2733251 100644 (file)
@@ -1175,8 +1175,10 @@ gld${EMULATION_NAME}_place_orphan (lang_input_statement_type *file, asection *s)
   lang_statement_union_type **os_tail;
   etree_type *load_base;
   int isdyn = 0;
+  asection *sec;
 
   secname = bfd_get_section_name (s->owner, s);
+
   if (! link_info.relocatable
       && link_info.combreloc
       && (s->flags & SEC_ALLOC)
@@ -1260,8 +1262,12 @@ gld${EMULATION_NAME}_place_orphan (lang_input_statement_type *file, asection *s)
 
   /* Choose a unique name for the section.  This will be needed if the
      same section name appears in the input file with different
-     loadable or allocatable characteristics.  */
-  if (bfd_get_section_by_name (output_bfd, secname) != NULL)
+     loadable or allocatable characteristics.  But if the section
+     already exists but does not have any flags set, then it has been
+     been created by the linker, probably as a result of a --section-start
+     command line switch.  */
+  if ((sec = bfd_get_section_by_name (output_bfd, secname)) != NULL
+      && bfd_get_section_flags (output_bfd, sec) != 0)
     {
       secname = bfd_get_unique_section_name (output_bfd, secname, &count);
       if (secname == NULL)
index 6cc05a67cf26abf2d87dc600e55de69d3e95872e..8c6ebaf3c80f5679d7989f371d9a4b729f510461 100644 (file)
@@ -612,6 +612,7 @@ lang_output_section_find_1 (const char *const name, int constraint)
   for (u = lang_output_section_statement.head; u != NULL; u = lookup->next)
     {
       lookup = &u->output_section_statement;
+      
       if (strcmp (name, lookup->name) == 0
          && lookup->constraint != -1
          && (constraint == 0 || constraint == lookup->constraint))