2005-12-19 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 19 Dec 2005 15:06:40 +0000 (15:06 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 19 Dec 2005 15:06:40 +0000 (15:06 +0000)
PR ld/2065
* ldlang.c (output_statement_newfunc): Revert the change made on
2005-11-16.
(output_prev_sec_find): Likewsise.
* ldlang.h (lang_statement_list_type): Likewsise.

ld/ChangeLog
ld/ldlang.c
ld/ldlang.h

index bd68c9d70a0c4013f0f7d53d32bca58ba48c0250..52fd1d5e060f775929e7f6351dacb050e6aed13a 100644 (file)
@@ -1,3 +1,11 @@
+2005-12-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/2065
+       * ldlang.c (output_statement_newfunc): Revert the change made on
+       2005-11-16.
+       (output_prev_sec_find): Likewsise.
+       * ldlang.h (lang_statement_list_type): Likewsise.
+
 2005-12-16  Nathan Sidwell  <nathan@codesourcery.com>
 
        Second part of ms1 to mt renaming.
index 0e72ab851e56d8a7c907d8bc13b7091bfcdcb957..8ef48d13b9fb0e254f72c8dfdea7ba660380a07a 100644 (file)
@@ -912,8 +912,6 @@ output_statement_newfunc (struct bfd_hash_entry *entry,
                         (lang_statement_union_type *) &ret->os,
                         &ret->os.header.next);
 
-  ret->os.prev = &((*lang_output_section_statement.tail)
-                  ->output_section_statement);
   /* GCC's strict aliasing rules prevent us from just casting the
      address, so we store the pointer in a variable and cast that
      instead.  */
@@ -1292,15 +1290,20 @@ lang_output_section_find_by_flags (const asection *sec,
 static asection *
 output_prev_sec_find (lang_output_section_statement_type *os)
 {
+  asection *s = (asection *) NULL;
   lang_output_section_statement_type *lookup;
 
-  for (lookup = os->prev; lookup != NULL; lookup = lookup->prev)
+  for (lookup = &lang_output_section_statement.head->output_section_statement;
+       lookup != NULL;
+       lookup = lookup->next)
     {
       if (lookup->constraint == -1)
        continue;
+      if (lookup == os)
+       return s;
 
       if (lookup->bfd_section != NULL && lookup->bfd_section->owner != NULL)
-       return lookup->bfd_section;
+       s = lookup->bfd_section;
     }
 
   return NULL;
index cf5b01ff3d08ae5cb068430d2951be80239507d2..381bb0484cbf11bd3d76742909413ce0024d3cab 100644 (file)
@@ -130,7 +130,6 @@ typedef struct lang_output_section_statement_struct
   lang_statement_header_type header;
   lang_statement_list_type children;
   struct lang_output_section_statement_struct *next;
-  struct lang_output_section_statement_struct *prev;
   const char *name;
   asection *bfd_section;
   lang_memory_region_type *region;