OSDN Git Service

ld/
authoramodra <amodra>
Sun, 29 Jul 2007 12:33:37 +0000 (12:33 +0000)
committeramodra <amodra>
Sun, 29 Jul 2007 12:33:37 +0000 (12:33 +0000)
* ldlang.c (lang_insert_orphan): When searching through linker
script to place an orphan, don't stop on statements that appear
outside of SECTIONS.
* emultempl/elf32.em (output_rel_find): Prefer read-only alloc
sections over read/write alloc sections.
ld/testsuite/
* ld-elf/weak-dyn-1.rd: Adjust.

ld/ChangeLog
ld/emultempl/elf32.em
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/weak-dyn-1.rd

index 5741a84..6671254 100644 (file)
@@ -1,3 +1,11 @@
+2007-07-29  Alan Modra  <amodra@bigpond.net.au>
+
+       * ldlang.c (lang_insert_orphan): When searching through linker
+       script to place an orphan, don't stop on statements that appear
+       outside of SECTIONS.
+       * emultempl/elf32.em (output_rel_find): Prefer read-only alloc
+       sections over read/write alloc sections.
+
 2007-07-28  Jakub Jelinek  <jakub@redhat.com>
 
        * scripttempl/elf.sc: Add .note.gnu.build-id.
index 6261e1d..b82e087 100644 (file)
@@ -1567,6 +1567,7 @@ output_rel_find (asection *sec, int isdyn)
   lang_output_section_statement_type *lookup;
   lang_output_section_statement_type *last = NULL;
   lang_output_section_statement_type *last_alloc = NULL;
+  lang_output_section_statement_type *last_ro_alloc = NULL;
   lang_output_section_statement_type *last_rel = NULL;
   lang_output_section_statement_type *last_rel_alloc = NULL;
   int rela = sec->name[4] == 'a';
@@ -1601,7 +1602,11 @@ output_rel_find (asection *sec, int isdyn)
       last = lookup;
       if (lookup->bfd_section != NULL
          && (lookup->bfd_section->flags & SEC_ALLOC) != 0)
-       last_alloc = lookup;
+       {
+         last_alloc = lookup;
+         if ((lookup->bfd_section->flags & SEC_READONLY) != 0)
+           last_ro_alloc = lookup;
+       }
     }
 
   if (last_rel_alloc)
@@ -1610,6 +1615,9 @@ output_rel_find (asection *sec, int isdyn)
   if (last_rel)
     return last_rel;
 
+  if (last_ro_alloc)
+    return last_ro_alloc;
+
   if (last_alloc)
     return last_alloc;
 
index ecc0dad..decfc5f 100644 (file)
@@ -1654,13 +1654,14 @@ lang_insert_orphan (asection *s,
                    case lang_output_section_statement_enum:
                      if (assign != NULL)
                        where = assign;
+                     break;
                    case lang_input_statement_enum:
                    case lang_address_statement_enum:
                    case lang_target_statement_enum:
                    case lang_output_statement_enum:
                    case lang_group_statement_enum:
                    case lang_afile_asection_pair_statement_enum:
-                     break;
+                     continue;
                    }
                  break;
                }
index 9e58f02..ffa18f0 100644 (file)
@@ -1,3 +1,7 @@
+2007-07-29  Alan Modra  <amodra@bigpond.net.au>
+
+       * ld-elf/weak-dyn-1.rd: Adjust.
+
 2007-07-25  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * ld-cdtest/cdtest-foo.cc (strncpy): Fix parameter name.
index 169abd8..ab5e0ba 100644 (file)
@@ -1,3 +1,3 @@
 #...
-0+800000 .* foo.*
+.* foo.*
 #pass