ld lang_statement_union lists

Alan Modra amodra@bigpond.net.au
Sun Aug 19 19:10:00 GMT 2001


This patch removes "next" from lang_statement_union, which is just an
alias for "header.next".  I'm doing this because I remember being
confused at one time (I confuse easily ;-) ), over the fact that
output statements and input statements have a "next" pointer distinct
from header.next to link just those statement types.  More importantly,
this allows lang_statement_header_type to change, possibly moving it's
next pointer, without running into trouble with the alias.

ld/ChangeLog
	* ldlang.c: When traversing lang_statement_union_type lists,
	consistently use "header.next" rather than "next".
	* mpw-eppcmac.c: Likewise.
	* emultempl/beos.em: Likewise.
	* emultempl/hppaelf.em: Likewise.
	* emultempl/pe.em: Likewise.
	* ldlang.h (union lang_statement_union): Remove "next" field.

-- 
Alan Modra

Index: ld/ldlang.h
===================================================================
RCS file: /cvs/src/src/ld/ldlang.h,v
retrieving revision 1.13
diff -u -p -r1.13 ldlang.h
--- ldlang.h	2001/08/18 14:54:26	1.13
+++ ldlang.h	2001/08/20 01:23:55
@@ -290,7 +290,6 @@ typedef struct {
 
 typedef union lang_statement_union {
   lang_statement_header_type header;
-  union lang_statement_union *next;
   lang_wild_statement_type wild_statement;
   lang_data_statement_type data_statement;
   lang_reloc_statement_type reloc_statement;
Index: ld/ldlang.c
===================================================================
RCS file: /cvs/src/src/ld/ldlang.c,v
retrieving revision 1.59
diff -u -p -r1.59 ldlang.c
--- ldlang.c	2001/08/20 01:21:06	1.59
+++ ldlang.c	2001/08/20 01:23:55
@@ -377,7 +377,7 @@ lang_for_each_statement_worker (func, s)
      void (*func) PARAMS ((lang_statement_union_type *));
      lang_statement_union_type *s;
 {
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       func (s);
 
@@ -1259,7 +1259,7 @@ wild_sort (wild, sec, file, section)
     return NULL;
 
   section_name = bfd_get_section_name (file->the_bfd, section);
-  for (l = wild->children.head; l != NULL; l = l->next)
+  for (l = wild->children.head; l != NULL; l = l->header.next)
     {
       lang_input_section_type *ls;
 
@@ -1389,14 +1389,14 @@ output_section_callback (ptr, sec, secti
 	 be NULL.  */
       if (list.head != NULL)
 	{
-	  ASSERT (list.head->next == NULL);
+	  ASSERT (list.head->header.next == NULL);
 
 	  for (pp = &ptr->children.head;
 	       *pp != before;
-	       pp = &(*pp)->next)
+	       pp = &(*pp)->header.next)
 	    ASSERT (*pp != NULL);
 
-	  list.head->next = *pp;
+	  list.head->header.next = *pp;
 	  *pp = list.head;
 	}
     }
@@ -1906,7 +1906,7 @@ open_input_bfds (s, force)
      lang_statement_union_type *s;
      boolean force;
 {
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       switch (s->header.type)
 	{
@@ -1967,8 +1967,8 @@ open_input_bfds (s, force)
 
 	      if (add.head != NULL)
 		{
-		  *add.tail = s->next;
-		  s->next = add.head;
+		  *add.tail = s->header.next;
+		  s->header.next = add.head;
 		}
 	    }
 	  break;
@@ -2062,7 +2062,7 @@ map_input_to_output_sections (s, target,
      const char *target;
      lang_output_section_statement_type *output_section_statement;
 {
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       switch (s->header.type)
 	{
@@ -2513,7 +2513,7 @@ print_statement_list (s, os)
   while (s != NULL)
     {
       print_statement (s, os);
-      s = s->next;
+      s = s->header.next;
     }
 }
 
@@ -2619,7 +2619,7 @@ dprint_statement (s, n)
       while (s && --n >= 0)
 	{
 	  print_statement (s, abs_output_section);
-	  s = s->next;
+	  s = s->header.next;
 	}
     }
 
@@ -2832,7 +2832,7 @@ lang_size_sections (s, output_section_st
 						ldfile_output_machine);
 
   /* Size up the sections from their constituent parts.  */
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       switch (s->header.type)
 	{
@@ -2855,7 +2855,7 @@ lang_size_sections (s, output_section_st
 		asection *input;
 
 		if (os->children.head == NULL
-		    || os->children.head->next != NULL
+		    || os->children.head->header.next != NULL
 		    || os->children.head->header.type != lang_input_section_enum)
 		  einfo (_("%P%X: Internal error on COFF shared library section %s\n"),
 			 os->name);
@@ -3197,7 +3197,7 @@ lang_do_assignments (s, output_section_s
   unsigned opb = bfd_arch_mach_octets_per_byte (ldfile_output_architecture,
 						ldfile_output_machine);
 
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       switch (s->header.type)
 	{
@@ -4006,7 +4006,7 @@ static void
 lang_gc_sections_1 (s)
      lang_statement_union_type *s;
 {
-  for (; s != (lang_statement_union_type *) NULL; s = s->next)
+  for (; s != (lang_statement_union_type *) NULL; s = s->header.next)
     {
       switch (s->header.type)
 	{
Index: ld/mpw-eppcmac.c
===================================================================
RCS file: /cvs/src/src/ld/mpw-eppcmac.c,v
retrieving revision 1.4
diff -u -p -r1.4 mpw-eppcmac.c
--- mpw-eppcmac.c	2001/05/02 16:42:55	1.4
+++ mpw-eppcmac.c	2001/08/20 01:23:56
@@ -572,13 +572,13 @@ gldppcmacos_before_allocation ()
       if (os == NULL)
 	einfo (_("%P%F: can't find output section %s\n"),
 	       sec->output_section->name);
-      for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->next)
+      for (pls = &os->children.head; *pls != NULL; pls = &(*pls)->header.next)
 	{
 	  if ((*pls)->header.type == lang_input_section_enum
 	      && (*pls)->input_section.section == sec)
 	    {
 	      is = (lang_input_section_type *) *pls;
-	      *pls = (*pls)->next;
+	      *pls = (*pls)->header.next;
 	      break;
 	    }
 	  if ((*pls)->header.type == lang_wild_statement_enum)
@@ -587,13 +587,13 @@ gldppcmacos_before_allocation ()
 
 	      for (pwls = &(*pls)->wild_statement.children.head;
 		   *pwls != NULL;
-		   pwls = &(*pwls)->next)
+		   pwls = &(*pwls)->header.next)
 		{
 		  if ((*pwls)->header.type == lang_input_section_enum
 		      && (*pwls)->input_section.section == sec)
 		    {
 		      is = (lang_input_section_type *) *pwls;
-		      *pwls = (*pwls)->next;
+		      *pwls = (*pwls)->header.next;
 		      break;
 		    }
 		}
Index: ld/emultempl/beos.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/beos.em,v
retrieving revision 1.12
diff -u -p -r1.12 beos.em
--- beos.em	2001/08/14 02:01:31	1.12
+++ beos.em	2001/08/20 01:23:56
@@ -554,7 +554,7 @@ sort_sections_1 (startptr, next_after, c
   vec = ((lang_statement_union_type **)
 	 xmalloc (count * sizeof (lang_statement_union_type *)));
 
-  for (p = *startptr, i = 0; i < count; i++, p = p->next)
+  for (p = *startptr, i = 0; i < count; i++, p = p->header.next)
     vec[i] = p;
 
   qsort (vec, count, sizeof (vec[0]), sort_func);
@@ -587,7 +587,7 @@ static void
 sort_sections (s)
      lang_statement_union_type *s;
 {
-  for (; s ; s = s->next)
+  for (; s ; s = s->header.next)
     switch (s->header.type)
       {
       case lang_output_section_statement_enum:
@@ -625,7 +625,7 @@ sort_sections (s)
 			  for (end = start, count = 0;
 			       end && (end->header.type
 				       == lang_input_section_enum);
-			       end = end->next)
+			       end = end->header.next)
 			    count++;
 
 			  p = sort_sections_1 (p, end, count,
@@ -652,7 +652,7 @@ sort_sections (s)
 		      lang_statement_union_type *end;
 		      int count;
 
-		      for (end = *p, count = 0; end; end = end->next)
+		      for (end = *p, count = 0; end; end = end->header.next)
 			{
 			  if (end->header.type != lang_input_section_enum)
 			    abort ();
@@ -772,7 +772,7 @@ gld${EMULATION_NAME}_place_orphan (file,
 
   ps[0] = '\$';
   ps[1] = 0;
-  for (l = os->children.head; l; l = l->next)
+  for (l = os->children.head; l; l = l->header.next)
     if (l->header.type == lang_wild_statement_enum)
       {
 	struct wildcard_list *sec;
Index: ld/emultempl/hppaelf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/hppaelf.em,v
retrieving revision 1.14
diff -u -p -r1.14 hppaelf.em
--- hppaelf.em	2001/08/20 01:21:08	1.14
+++ hppaelf.em	2001/08/20 01:23:57
@@ -106,7 +106,7 @@ hook_in_stub (info, lp)
   lang_statement_union_type *l;
   boolean ret;
 
-  for (; (l = *lp) != NULL; lp = &l->next)
+  for (; (l = *lp) != NULL; lp = &l->header.next)
     {
       switch (l->header.type)
 	{
Index: ld/emultempl/pe.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/pe.em,v
retrieving revision 1.48
diff -u -p -r1.48 pe.em
--- pe.em	2001/08/20 00:22:41	1.48
+++ pe.em	2001/08/20 01:23:59
@@ -1703,7 +1703,7 @@ gld_${EMULATION_NAME}_place_orphan (file
 	   sections.  */
 
 	found_dollar = false;
-	for ( ; *pl != NULL; pl = &(*pl)->next)
+	for ( ; *pl != NULL; pl = &(*pl)->header.next)
 	  {
 	    lang_input_section_type *ls;
 	    const char *lname;
@@ -1730,7 +1730,7 @@ gld_${EMULATION_NAME}_place_orphan (file
 
     if (add_child.head != NULL)
       {
-	add_child.head->next = *pl;
+	add_child.head->header.next = *pl;
 	*pl = add_child.head;
       }
   }



More information about the Binutils mailing list