Tidy input file ld variables

Alan Modra amodra@gmail.com
Mon Mar 5 22:41:00 GMT 2012


This moves a number of variables controlling input file handling into
a new "input_flags" variable, which is a struct of bitfields like the
flags in a lang_input_statement_type.  There should be no user visible
changes with this patch, except that now we restore the previous state
of -Bstatic/-Bdynamic after processing a command line script (one
given just like an object file, ie. not a -T script), along with
-whole-archive and various other flags.

	* ldlang.h (struct lang_input_statement_flags): New, extract from..
	(lang_input_statement_type): ..here.  New field "flags".
	(input_flags): Declare.
	(missing_file): Delete.
	* ldmain.h (whole_archive): Delete.
	(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
	* ld.h (ld_config_type <dynamic_link>): Delete.
	* ldmain.c (whole_archive): Delete.
	(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
	* ldlang.c (missing_file, ldlang_sysrooted_script): Delete.
	(input_flags): New variable.  Replace all uses of config.dynamic_link,
	missing_file, ldlang_sysrooted_script, whole_archive,
	add_DT_NEEDED_for_regular and add_DT_NEEDED_for_dynamic with fields
	from here.
	* ldfile.c: Likewise.
	* ldgram.y: Likewise.
	* ldmain.c: Likewise.
	* ldwrite.c: Likewise.
	* lexsup.c: Likewise.
	* plugin.c: Likewise.
	* emultempl/aix.em: Likewise.
	* emultempl/armelf.em: Likewise.
	* emultempl/elf32.em: Likewise.
	* emultempl/hppaelf.em: Likewise.
	* emultempl/linux.em: Likewise.
	* emultempl/pe.em: Likewise.
	* emultempl/pep.em: Likewise.
	* emultempl/ppc64elf.em: Likewise.
	* emultempl/scoreelf.em: Likewise.
	* emultempl/spuelf.em: Likewise.
	* emultempl/sunos.em: Likewise.
	* emultempl/vms.em: Likewise.
	* ldlang.c (new_afile): Use memset to init zero fields.
	(load_symbols): Simplify save and restore of flags around command
	file processing.
	* ldfile.c (is_sysrooted_pathname): Tidy.

Index: ld/ld.h
===================================================================
RCS file: /cvs/src/src/ld/ld.h,v
retrieving revision 1.53
diff -u -p -r1.53 ld.h
--- ld/ld.h	17 Feb 2012 14:09:56 -0000	1.53
+++ ld/ld.h	5 Mar 2012 12:04:21 -0000
@@ -250,9 +250,6 @@ typedef struct {
   bfd_boolean magic_demand_paged;
   bfd_boolean make_executable;
 
-  /* If TRUE, doing a dynamic link.  */
-  bfd_boolean dynamic_link;
-
   /* If TRUE, -shared is supported.  */
   /* ??? A better way to do this is perhaps to define this in the
      ld_emulation_xfer_struct since this is really a target dependent
Index: ld/ldfile.c
===================================================================
RCS file: /cvs/src/src/ld/ldfile.c,v
retrieving revision 1.64
diff -u -p -r1.64 ldfile.c
--- ld/ldfile.c	17 Feb 2012 14:09:57 -0000	1.64
+++ ld/ldfile.c	5 Mar 2012 12:04:21 -0000
@@ -72,27 +72,29 @@ static search_arch_type **search_arch_ta
 static bfd_boolean
 is_sysrooted_pathname (const char *name, bfd_boolean notsame)
 {
-  char * realname = ld_canon_sysroot ? lrealpath (name) : NULL;
+  char *realname;
   int len;
   bfd_boolean result;
 
-  if (! realname)
+  if (ld_canon_sysroot == NULL)
     return FALSE;
 
+  realname = lrealpath (name);
   len = strlen (realname);
+  result = FALSE;
+  if (len == ld_canon_sysroot_len)
+    result = !notsame;
+  else if (len > ld_canon_sysroot_len
+	   && IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len]))
+    {
+      result = TRUE;
+      realname[ld_canon_sysroot_len] = '\0';
+    }
 
-  if (((! notsame && len == ld_canon_sysroot_len)
-       || (len >= ld_canon_sysroot_len
-	   && IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len])
-	   && (realname[ld_canon_sysroot_len] = '\0') == '\0'))
-      && FILENAME_CMP (ld_canon_sysroot, realname) == 0)
-    result = TRUE;
-  else
-    result = FALSE;
-
-  if (realname)
-    free (realname);
+  if (result)
+    result = FILENAME_CMP (ld_canon_sysroot, realname) == 0;
 
+  free (realname);
   return result;
 }
 
@@ -164,7 +166,7 @@ ldfile_try_open_bfd (const char *attempt
      checks out compatible, do not exit early returning TRUE, or
      the plugins will not get a chance to claim the file.  */
 
-  if (entry->search_dirs_flag || !entry->dynamic)
+  if (entry->flags.search_dirs || !entry->flags.dynamic)
     {
       bfd *check;
 
@@ -178,7 +180,7 @@ ldfile_try_open_bfd (const char *attempt
 	  if (! bfd_check_format (check, bfd_object))
 	    {
 	      if (check == entry->the_bfd
-		  && entry->search_dirs_flag
+		  && entry->flags.search_dirs
 		  && bfd_get_error () == bfd_error_file_not_recognized
 		  && ! ldemul_unrecognized_file (entry))
 		{
@@ -274,7 +276,7 @@ ldfile_try_open_bfd (const char *attempt
 	      goto success;
 	    }
 
-	  if (!entry->dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
+	  if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
 	    {
 	      einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
 		     attempt);
@@ -283,7 +285,7 @@ ldfile_try_open_bfd (const char *attempt
 	      return FALSE;
 	    }
 
-	  if (entry->search_dirs_flag
+	  if (entry->flags.search_dirs
 	      && !bfd_arch_get_compatible (check, link_info.output_bfd,
 					   command_line.accept_unknown_input_arch)
 	      /* XCOFF archives can have 32 and 64 bit objects.  */
@@ -348,9 +350,9 @@ ldfile_open_file_search (const char *arc
 
   /* If this is not an archive, try to open it in the current
      directory first.  */
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     {
-      if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
+      if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
 	{
 	  char *name = concat (ld_sysroot, entry->filename,
 			       (const char *) NULL);
@@ -363,8 +365,9 @@ ldfile_open_file_search (const char *arc
 	}
       else if (ldfile_try_open_bfd (entry->filename, entry))
 	{
-	  entry->sysrooted = IS_ABSOLUTE_PATH (entry->filename)
-	    && is_sysrooted_pathname (entry->filename, TRUE);
+	  entry->flags.sysrooted
+	    = (IS_ABSOLUTE_PATH (entry->filename)
+	       && is_sysrooted_pathname (entry->filename, TRUE));
 	  return TRUE;
 	}
 
@@ -376,16 +379,16 @@ ldfile_open_file_search (const char *arc
     {
       char *string;
 
-      if (entry->dynamic && ! link_info.relocatable)
+      if (entry->flags.dynamic && ! link_info.relocatable)
 	{
 	  if (ldemul_open_dynamic_archive (arch, search, entry))
 	    {
-	      entry->sysrooted = search->sysrooted;
+	      entry->flags.sysrooted = search->sysrooted;
 	      return TRUE;
 	    }
 	}
 
-      if (entry->maybe_archive)
+      if (entry->flags.maybe_archive)
 	string = concat (search->name, slash, lib, entry->filename,
 			 arch, suffix, (const char *) NULL);
       else
@@ -395,7 +398,7 @@ ldfile_open_file_search (const char *arc
       if (ldfile_try_open_bfd (string, entry))
 	{
 	  entry->filename = string;
-	  entry->sysrooted = search->sysrooted;
+	  entry->flags.sysrooted = search->sysrooted;
 	  return TRUE;
 	}
 
@@ -416,7 +419,7 @@ ldfile_open_file (lang_input_statement_t
   if (entry->the_bfd != NULL)
     return;
 
-  if (! entry->search_dirs_flag)
+  if (! entry->flags.search_dirs)
     {
       if (ldfile_try_open_bfd (entry->filename, entry))
 	return;
@@ -427,8 +430,8 @@ ldfile_open_file (lang_input_statement_t
       else
 	einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
 
-      entry->missing_file = TRUE;
-      missing_file = TRUE;
+      entry->flags.missing_file = TRUE;
+      input_flags.missing_file = TRUE;
     }
   else
     {
@@ -454,18 +457,18 @@ ldfile_open_file (lang_input_statement_t
       /* If we have found the file, we don't need to search directories
 	 again.  */
       if (found)
-	entry->search_dirs_flag = FALSE;
+	entry->flags.search_dirs = FALSE;
       else
 	{
-	  if (entry->sysrooted
+	  if (entry->flags.sysrooted
 	       && ld_sysroot
 	       && IS_ABSOLUTE_PATH (entry->local_sym_name))
 	    einfo (_("%P: cannot find %s inside %s\n"),
 		   entry->local_sym_name, ld_sysroot);
 	  else
 	    einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
-	  entry->missing_file = TRUE;
-	  missing_file = TRUE;
+	  entry->flags.missing_file = TRUE;
+	  input_flags.missing_file = TRUE;
 	}
     }
 }
Index: ld/ldgram.y
===================================================================
RCS file: /cvs/src/src/ld/ldgram.y,v
retrieving revision 1.68
diff -u -p -r1.68 ldgram.y
--- ld/ldgram.y	17 Feb 2012 14:09:57 -0000	1.68
+++ ld/ldgram.y	5 Mar 2012 12:04:21 -0000
@@ -386,17 +386,20 @@ input_list:
 		{ lang_add_input_file($2,lang_input_file_is_l_enum,
 				 (char *)NULL); }
 	|	AS_NEEDED '('
-		  { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+		  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+		    input_flags.add_DT_NEEDED_for_regular = TRUE; }
 		     input_list ')'
-		  { add_DT_NEEDED_for_regular = $<integer>3; }
+		  { input_flags.add_DT_NEEDED_for_regular = $<integer>3; }
 	|	input_list ',' AS_NEEDED '('
-		  { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+		  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+		    input_flags.add_DT_NEEDED_for_regular = TRUE; }
 		     input_list ')'
-		  { add_DT_NEEDED_for_regular = $<integer>5; }
+		  { input_flags.add_DT_NEEDED_for_regular = $<integer>5; }
 	|	input_list AS_NEEDED '('
-		  { $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
+		  { $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
+		    input_flags.add_DT_NEEDED_for_regular = TRUE; }
 		     input_list ')'
-		  { add_DT_NEEDED_for_regular = $<integer>4; }
+		  { input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
 	;
 
 sections:
Index: ld/ldlang.c
===================================================================
RCS file: /cvs/src/src/ld/ldlang.c,v
retrieving revision 1.384
diff -u -p -r1.384 ldlang.c
--- ld/ldlang.c	22 Feb 2012 16:27:32 -0000	1.384
+++ ld/ldlang.c	5 Mar 2012 12:04:23 -0000
@@ -69,7 +69,6 @@ static struct bfd_hash_table lang_define
 static lang_statement_list_type *stat_save[10];
 static lang_statement_list_type **stat_save_ptr = &stat_save[0];
 static struct unique_sections *unique_section_list;
-static bfd_boolean ldlang_sysrooted_script = FALSE;
 
 /* Forward declarations.  */
 static void exp_init_os (etree_type *);
@@ -100,6 +99,7 @@ lang_statement_list_type file_chain = { 
 lang_statement_list_type input_file_chain;
 struct bfd_sym_chain entry_symbol = { NULL, NULL };
 const char *entry_section = ".text";
+struct lang_input_statement_flags input_flags;
 bfd_boolean entry_from_cmdline;
 bfd_boolean undef_from_cmdline;
 bfd_boolean lang_has_input_file = FALSE;
@@ -108,7 +108,6 @@ bfd_boolean lang_float_flag = FALSE;
 bfd_boolean delete_output_file_on_failure = FALSE;
 struct lang_phdr *lang_phdr_list;
 struct lang_nocrossrefs *nocrossref_list;
-bfd_boolean missing_file = FALSE;
 
  /* Functions that traverse the linker script and might evaluate
     DEFINED() need to increment this.  */
@@ -731,7 +730,7 @@ walk_wild_section (lang_wild_statement_t
 		   callback_t callback,
 		   void *data)
 {
-  if (file->just_syms_flag)
+  if (file->flags.just_syms)
     return;
 
   (*ptr->walk_wild_section_handler) (ptr, file, callback, data);
@@ -1046,6 +1045,8 @@ new_afile (const char *name,
 {
   lang_input_statement_type *p;
 
+  lang_has_input_file = TRUE;
+
   if (add_to_list)
     p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
   else
@@ -1056,9 +1057,13 @@ new_afile (const char *name,
       p->header.next = NULL;
     }
 
-  lang_has_input_file = TRUE;
+  memset (&p->the_bfd, 0,
+	  sizeof (*p) - offsetof (lang_input_statement_type, the_bfd));
   p->target = target;
-  p->sysrooted = FALSE;
+  p->flags.dynamic = input_flags.dynamic;
+  p->flags.add_DT_NEEDED_for_dynamic = input_flags.add_DT_NEEDED_for_dynamic;
+  p->flags.add_DT_NEEDED_for_regular = input_flags.add_DT_NEEDED_for_regular;
+  p->flags.whole_archive = input_flags.whole_archive;
 
   if (file_type == lang_input_file_is_l_enum
       && name[0] == ':' && name[1] != '\0')
@@ -1071,70 +1076,41 @@ new_afile (const char *name,
     {
     case lang_input_file_is_symbols_only_enum:
       p->filename = name;
-      p->maybe_archive = FALSE;
-      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = TRUE;
-      p->search_dirs_flag = FALSE;
+      p->flags.real = TRUE;
+      p->flags.just_syms = TRUE;
       break;
     case lang_input_file_is_fake_enum:
       p->filename = name;
-      p->maybe_archive = FALSE;
-      p->real = FALSE;
       p->local_sym_name = name;
-      p->just_syms_flag = FALSE;
-      p->search_dirs_flag = FALSE;
       break;
     case lang_input_file_is_l_enum:
-      p->maybe_archive = TRUE;
       p->filename = name;
-      p->real = TRUE;
       p->local_sym_name = concat ("-l", name, (const char *) NULL);
-      p->just_syms_flag = FALSE;
-      p->search_dirs_flag = TRUE;
+      p->flags.maybe_archive = TRUE;
+      p->flags.real = TRUE;
+      p->flags.search_dirs = TRUE;
       break;
     case lang_input_file_is_marker_enum:
       p->filename = name;
-      p->maybe_archive = FALSE;
-      p->real = FALSE;
       p->local_sym_name = name;
-      p->just_syms_flag = FALSE;
-      p->search_dirs_flag = TRUE;
+      p->flags.search_dirs = TRUE;
       break;
     case lang_input_file_is_search_file_enum:
-      p->sysrooted = ldlang_sysrooted_script;
       p->filename = name;
-      p->maybe_archive = FALSE;
-      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = FALSE;
-      p->search_dirs_flag = TRUE;
+      p->flags.real = TRUE;
+      p->flags.search_dirs = TRUE;
+      p->flags.sysrooted = input_flags.sysrooted;
       break;
     case lang_input_file_is_file_enum:
       p->filename = name;
-      p->maybe_archive = FALSE;
-      p->real = TRUE;
       p->local_sym_name = name;
-      p->just_syms_flag = FALSE;
-      p->search_dirs_flag = FALSE;
+      p->flags.real = TRUE;
       break;
     default:
       FAIL ();
     }
-  p->the_bfd = NULL;
-  p->next_real_file = NULL;
-  p->next = NULL;
-  p->dynamic = config.dynamic_link;
-  p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
-  p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
-  p->whole_archive = whole_archive;
-  p->loaded = FALSE;
-  p->missing_file = FALSE;
-#ifdef ENABLE_PLUGINS
-  p->claimed = FALSE;
-  p->claim_archive = FALSE;
-  p->reload = FALSE;
-#endif /* ENABLE_PLUGINS */
 
   lang_statement_append (&input_file_chain,
 			 (lang_statement_union_type *) p,
@@ -2012,7 +1988,7 @@ lang_map (void)
       asection *s;
 
       if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
-	  || file->just_syms_flag)
+	  || file->flags.just_syms)
 	continue;
 
       for (s = file->the_bfd->sections; s != NULL; s = s->next)
@@ -2234,7 +2210,7 @@ section_already_linked (bfd *abfd, asect
 
   /* If we are only reading symbols from this object, then we want to
      discard all sections.  */
-  if (entry->just_syms_flag)
+  if (entry->flags.just_syms)
     {
       bfd_link_just_syms (abfd, sec, &link_info);
       return;
@@ -2619,7 +2595,7 @@ lookup_name (const char *name)
 
   /* If we have already added this file, or this file is not real
      don't add this file.  */
-  if (search->loaded || !search->real)
+  if (search->flags.loaded || !search->flags.real)
     return search;
 
   if (! load_symbols (search, NULL))
@@ -2697,23 +2673,20 @@ load_symbols (lang_input_statement_type 
 {
   char **matching;
 
-  if (entry->loaded)
+  if (entry->flags.loaded)
     return TRUE;
 
   ldfile_open_file (entry);
 
   /* Do not process further if the file was missing.  */
-  if (entry->missing_file)
+  if (entry->flags.missing_file)
     return TRUE;
 
   if (! bfd_check_format (entry->the_bfd, bfd_archive)
       && ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
     {
       bfd_error_type err;
-      bfd_boolean save_ldlang_sysrooted_script;
-      bfd_boolean save_add_DT_NEEDED_for_regular;
-      bfd_boolean save_add_DT_NEEDED_for_dynamic;
-      bfd_boolean save_whole_archive;
+      struct lang_input_statement_flags save_flags;
 
       err = bfd_get_error ();
 
@@ -2739,30 +2712,26 @@ load_symbols (lang_input_statement_type 
       entry->the_bfd = NULL;
 
       /* Try to interpret the file as a linker script.  */
+      save_flags = input_flags;
       ldfile_open_command_file (entry->filename);
 
       push_stat_ptr (place);
-      save_ldlang_sysrooted_script = ldlang_sysrooted_script;
-      ldlang_sysrooted_script = entry->sysrooted;
-      save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
-      add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
-      save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
-      add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
-      save_whole_archive = whole_archive;
-      whole_archive = entry->whole_archive;
+      input_flags.sysrooted = entry->flags.sysrooted;
+      input_flags.add_DT_NEEDED_for_regular
+	= entry->flags.add_DT_NEEDED_for_regular;
+      input_flags.add_DT_NEEDED_for_dynamic
+	= entry->flags.add_DT_NEEDED_for_dynamic;
+      input_flags.whole_archive = entry->flags.whole_archive;
+      input_flags.dynamic = entry->flags.dynamic;
 
       ldfile_assumed_script = TRUE;
       parser_input = input_script;
-      /* We want to use the same -Bdynamic/-Bstatic as the one for
-	 ENTRY.  */
-      config.dynamic_link = entry->dynamic;
       yyparse ();
       ldfile_assumed_script = FALSE;
 
-      ldlang_sysrooted_script = save_ldlang_sysrooted_script;
-      add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
-      add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
-      whole_archive = save_whole_archive;
+      /* missing_file is sticky.  */
+      save_flags.missing_file |= input_flags.missing_file;
+      input_flags = save_flags;
       pop_stat_ptr ();
 
       return TRUE;
@@ -2782,7 +2751,7 @@ load_symbols (lang_input_statement_type 
 
     case bfd_object:
 #ifdef ENABLE_PLUGINS
-      if (!entry->reload)
+      if (!entry->flags.reload)
 #endif
 	ldlang_add_file (entry);
       if (trace_files || trace_file_tries)
@@ -2792,7 +2761,7 @@ load_symbols (lang_input_statement_type 
     case bfd_archive:
       check_excluded_libs (entry->the_bfd);
 
-      if (entry->whole_archive)
+      if (entry->flags.whole_archive)
 	{
 	  bfd *member = NULL;
 	  bfd_boolean loaded = TRUE;
@@ -2827,18 +2796,18 @@ load_symbols (lang_input_statement_type 
 		}
 	    }
 
-	  entry->loaded = loaded;
+	  entry->flags.loaded = loaded;
 	  return loaded;
 	}
       break;
     }
 
   if (bfd_link_add_symbols (entry->the_bfd, &link_info))
-    entry->loaded = TRUE;
+    entry->flags.loaded = TRUE;
   else
     einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
 
-  return entry->loaded;
+  return entry->flags.loaded;
 }
 
 /* Handle a wild statement.  S->FILENAME or S->SECTION_LIST or both
@@ -3022,7 +2991,7 @@ get_first_input_target (void)
   LANG_FOR_EACH_INPUT_STATEMENT (s)
     {
       if (s->header.type == lang_input_statement_enum
-	  && s->real)
+	  && s->flags.real)
 	{
 	  ldfile_open_file (s);
 
@@ -3255,7 +3224,7 @@ open_input_bfds (lang_statement_union_ty
 	  current_target = s->target_statement.target;
 	  break;
 	case lang_input_statement_enum:
-	  if (s->input_statement.real)
+	  if (s->input_statement.flags.real)
 	    {
 	      lang_statement_union_type **os_tail;
 	      lang_statement_list_type add;
@@ -3271,22 +3240,22 @@ open_input_bfds (lang_statement_union_ty
 		  && ((mode & OPEN_BFD_RESCAN) == 0
 		      || plugin_insert == NULL)
 #endif
-		  && !s->input_statement.whole_archive
-		  && s->input_statement.loaded
+		  && !s->input_statement.flags.whole_archive
+		  && s->input_statement.flags.loaded
 		  && bfd_check_format (s->input_statement.the_bfd,
 				       bfd_archive))
-		s->input_statement.loaded = FALSE;
+		s->input_statement.flags.loaded = FALSE;
 #ifdef ENABLE_PLUGINS
 	      /* When rescanning, reload --as-needed shared libs.  */
 	      else if ((mode & OPEN_BFD_RESCAN) != 0
 		       && plugin_insert == NULL
-		       && s->input_statement.loaded
-		       && s->input_statement.add_DT_NEEDED_for_regular
+		       && s->input_statement.flags.loaded
+		       && s->input_statement.flags.add_DT_NEEDED_for_regular
 		       && ((s->input_statement.the_bfd->flags) & DYNAMIC) != 0
 		       && plugin_should_reload (s->input_statement.the_bfd))
 		{
-		  s->input_statement.loaded = FALSE;
-		  s->input_statement.reload = TRUE;
+		  s->input_statement.flags.loaded = FALSE;
+		  s->input_statement.flags.reload = TRUE;
 		}
 #endif
 
@@ -3337,7 +3306,7 @@ open_input_bfds (lang_statement_union_ty
     }
 
   /* Exit if any of the files were missing.  */
-  if (missing_file)
+  if (input_flags.missing_file)
     einfo ("%F");
 }
 
@@ -4648,7 +4617,7 @@ size_input_section
   lang_input_section_type *is = &((*this_ptr)->input_section);
   asection *i = is->section;
 
-  if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+  if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
       && (i->flags & SEC_EXCLUDE) == 0)
     {
       bfd_size_type alignment_needed;
@@ -5819,7 +5788,7 @@ lang_check (void)
     {
 #ifdef ENABLE_PLUGINS
       /* Don't check format of files claimed by plugin.  */
-      if (file->input_statement.claimed)
+      if (file->input_statement.flags.claimed)
 	continue;
 #endif /* ENABLE_PLUGINS */
       input_bfd = file->input_statement.the_bfd;
@@ -6022,7 +5991,7 @@ lang_place_orphans (void)
 	      /* This section of the file is not attached, root
 		 around for a sensible place for it to go.  */
 
-	      if (file->just_syms_flag)
+	      if (file->flags.just_syms)
 		bfd_link_just_syms (file->the_bfd, s, &link_info);
 	      else if ((s->flags & SEC_EXCLUDE) != 0)
 		s->output_section = bfd_abs_section_ptr;
@@ -6334,7 +6303,7 @@ lang_gc_sections (void)
 	{
 	  asection *sec;
 #ifdef ENABLE_PLUGINS
-	  if (f->claimed)
+	  if (f->flags.claimed)
 	    continue;
 #endif
 	  for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
@@ -6499,8 +6468,8 @@ find_replacements_insert_point (void)
        claim1 != NULL;
        claim1 = &claim1->next->input_statement)
     {
-      if (claim1->claimed)
-	return claim1->claim_archive ? lastobject : claim1;
+      if (claim1->flags.claimed)
+	return claim1->flags.claim_archive ? lastobject : claim1;
       /* Update lastobject if this is a real object file.  */
       if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
 	lastobject = claim1;
@@ -6911,7 +6880,7 @@ lang_startup (const char *name)
     }
   first_file->filename = name;
   first_file->local_sym_name = name;
-  first_file->real = TRUE;
+  first_file->flags.real = TRUE;
 }
 
 void
Index: ld/ldlang.h
===================================================================
RCS file: /cvs/src/src/ld/ldlang.h,v
retrieving revision 1.101
diff -u -p -r1.101 ldlang.h
--- ld/ldlang.h	15 Nov 2011 18:22:27 -0000	1.101
+++ ld/ldlang.h	5 Mar 2012 12:04:23 -0000
@@ -1,6 +1,6 @@
 /* ldlang.h - linker command language support
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
@@ -228,36 +228,16 @@ typedef struct
   bfd_vma output_offset;
 } lang_reloc_statement_type;
 
-typedef struct lang_input_statement_struct
+struct lang_input_statement_flags
 {
-  lang_statement_header_type header;
-  /* Name of this file.  */
-  const char *filename;
-  /* Name to use for the symbol giving address of text start.
-     Usually the same as filename, but for a file spec'd with
-     -l this is the -l switch itself rather than the filename.  */
-  const char *local_sym_name;
-
-  bfd *the_bfd;
-
-  struct flag_info *section_flag_list;
-
-  /* Point to the next file - whatever it is, wanders up and down
-     archives */
-  union lang_statement_union *next;
-
-  /* Point to the next file, but skips archive contents.  */
-  union lang_statement_union *next_real_file;
-
-  const char *target;
-
+  /* 1 means this file was specified in a -l option.  */
   unsigned int maybe_archive : 1;
 
   /* 1 means search a set of directories for this file.  */
-  unsigned int search_dirs_flag : 1;
+  unsigned int search_dirs : 1;
 
   /* 1 means this was found in a search directory marked as sysrooted,
-     if search_dirs_flag is false, otherwise, that it should be
+     if search_dirs is false, otherwise, that it should be
      searched in ld_sysroot before any other location, as long as it
      starts with a slash.  */
   unsigned int sysrooted : 1;
@@ -265,7 +245,7 @@ typedef struct lang_input_statement_stru
   /* 1 means this is base file of incremental load.
      Do not load this file's text or data.
      Also default text_start to after this file's bss.  */
-  unsigned int just_syms_flag : 1;
+  unsigned int just_syms : 1;
 
   /* Whether to search for this entry as a dynamic archive.  */
   unsigned int dynamic : 1;
@@ -300,7 +280,32 @@ typedef struct lang_input_statement_stru
   /* Set if reloading an --as-needed lib.  */
   unsigned int reload : 1;
 #endif /* ENABLE_PLUGINS */
+};
+
+typedef struct lang_input_statement_struct
+{
+  lang_statement_header_type header;
+  /* Name of this file.  */
+  const char *filename;
+  /* Name to use for the symbol giving address of text start.
+     Usually the same as filename, but for a file spec'd with
+     -l this is the -l switch itself rather than the filename.  */
+  const char *local_sym_name;
+
+  bfd *the_bfd;
+
+  struct flag_info *section_flag_list;
+
+  /* Point to the next file - whatever it is, wanders up and down
+     archives */
+  union lang_statement_union *next;
+
+  /* Point to the next file, but skips archive contents.  */
+  union lang_statement_union *next_real_file;
+
+  const char *target;
 
+  struct lang_input_statement_flags flags;
 } lang_input_statement_type;
 
 typedef struct
@@ -416,8 +421,6 @@ struct lang_phdr
   etree_type *flags;
 };
 
-extern struct lang_phdr *lang_phdr_list;
-
 /* This structure is used to hold a list of sections which may not
    cross reference each other.  */
 
@@ -435,8 +438,6 @@ struct lang_nocrossrefs
   lang_nocrossref_type *list;
 };
 
-extern struct lang_nocrossrefs *nocrossref_list;
-
 /* This structure is used to hold a list of input section names which
    will not match an output section in the linker script.  */
 
@@ -467,9 +468,12 @@ struct orphan_save
   lang_output_section_statement_type **os_tail;
 };
 
+extern struct lang_phdr *lang_phdr_list;
+extern struct lang_nocrossrefs *nocrossref_list;
 extern const char *output_target;
 extern lang_output_section_statement_type *abs_output_section;
 extern lang_statement_list_type lang_output_section_statement;
+extern struct lang_input_statement_flags input_flags;
 extern bfd_boolean lang_has_input_file;
 extern etree_type *base;
 extern lang_statement_list_type *stat_ptr;
@@ -482,7 +486,6 @@ extern lang_statement_list_type file_cha
 extern lang_statement_list_type input_file_chain;
 
 extern int lang_statement_iteration;
-extern bfd_boolean missing_file;
 
 extern void lang_init
   (void);
Index: ld/ldmain.c
===================================================================
RCS file: /cvs/src/src/ld/ldmain.c,v
retrieving revision 1.162
diff -u -p -r1.162 ldmain.c
--- ld/ldmain.c	17 Feb 2012 14:09:57 -0000	1.162
+++ ld/ldmain.c	5 Mar 2012 12:04:23 -0000
@@ -95,18 +95,6 @@ bfd_boolean trace_file_tries;
    instead of complaining if no input files are given.  */
 bfd_boolean version_printed;
 
-/* Nonzero means link in every member of an archive.  */
-bfd_boolean whole_archive;
-
-/* True means only create DT_NEEDED entries for dynamic libraries
-   if they actually satisfy some reference in a regular object.  */
-bfd_boolean add_DT_NEEDED_for_regular;
-
-/* True means create DT_NEEDED entries for dynamic libraries that
-   are DT_NEEDED by dynamic libraries specifically mentioned on
-   the command line.  */
-bfd_boolean add_DT_NEEDED_for_dynamic;
-
 /* TRUE if we should demangle symbol names.  */
 bfd_boolean demangling;
 
@@ -767,9 +755,9 @@ add_archive_element (struct bfd_link_inf
 	  file.filesize = arelt_size (abfd);
 	  file.fd = fd;
 	  plugin_maybe_claim (&file, input);
-	  if (input->claimed)
+	  if (input->flags.claimed)
 	    {
-	      input->claim_archive = TRUE;
+	      input->flags.claim_archive = TRUE;
 	      *subsbfd = input->the_bfd;
 	    }
 	}
Index: ld/ldmain.h
===================================================================
RCS file: /cvs/src/src/ld/ldmain.h,v
retrieving revision 1.16
diff -u -p -r1.16 ldmain.h
--- ld/ldmain.h	5 Nov 2009 15:35:50 -0000	1.16
+++ ld/ldmain.h	5 Mar 2012 12:04:23 -0000
@@ -1,6 +1,6 @@
 /* ldmain.h -
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2002, 2003, 2004,
-   2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2005, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -33,9 +33,6 @@ extern char *default_target;
 extern bfd_boolean trace_files;
 extern bfd_boolean trace_file_tries;
 extern bfd_boolean version_printed;
-extern bfd_boolean whole_archive;
-extern bfd_boolean add_DT_NEEDED_for_regular;
-extern bfd_boolean add_DT_NEEDED_for_dynamic;
 extern bfd_boolean demangling;
 extern int g_switch_value;
 extern const char *output_filename;
Index: ld/ldwrite.c
===================================================================
RCS file: /cvs/src/src/ld/ldwrite.c,v
retrieving revision 1.34
diff -u -p -r1.34 ldwrite.c
--- ld/ldwrite.c	31 Jan 2012 17:54:36 -0000	1.34
+++ ld/ldwrite.c	5 Mar 2012 12:04:24 -0000
@@ -241,7 +241,7 @@ build_link_order (lang_statement_union_t
 	   attached */
 	asection *i = statement->input_section.section;
 
-	if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+	if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
 	    && (i->flags & SEC_EXCLUDE) == 0)
 	  {
 	    asection *output_section = i->output_section;
Index: ld/lexsup.c
===================================================================
RCS file: /cvs/src/src/ld/lexsup.c,v
retrieving revision 1.129
diff -u -p -r1.129 lexsup.c
--- ld/lexsup.c	17 Feb 2012 14:09:57 -0000	1.129
+++ ld/lexsup.c	5 Mar 2012 12:04:24 -0000
@@ -775,10 +775,10 @@ parse_args (unsigned argc, char **argv)
 	     ``use only shared libraries'' but, then, we don't
 	     currently support shared libraries on HP/UX anyhow.  */
 	  if (strcmp (optarg, "archive") == 0)
-	    config.dynamic_link = FALSE;
+	    input_flags.dynamic = FALSE;
 	  else if (strcmp (optarg, "shared") == 0
 		   || strcmp (optarg, "default") == 0)
-	    config.dynamic_link = TRUE;
+	    input_flags.dynamic = TRUE;
 	  else
 	    einfo (_("%P%F: unrecognized -a option `%s'\n"), optarg);
 	  break;
@@ -807,10 +807,10 @@ parse_args (unsigned argc, char **argv)
 	  yyparse ();
 	  break;
 	case OPTION_CALL_SHARED:
-	  config.dynamic_link = TRUE;
+	  input_flags.dynamic = TRUE;
 	  break;
 	case OPTION_NON_SHARED:
-	  config.dynamic_link = FALSE;
+	  input_flags.dynamic = FALSE;
 	  break;
 	case OPTION_CREF:
 	  command_line.cref = TRUE;
@@ -934,17 +934,17 @@ parse_args (unsigned argc, char **argv)
 	case 'N':
 	  config.text_read_only = FALSE;
 	  config.magic_demand_paged = FALSE;
-	  config.dynamic_link = FALSE;
+	  input_flags.dynamic = FALSE;
 	  break;
 	case OPTION_NO_OMAGIC:
 	  config.text_read_only = TRUE;
 	  config.magic_demand_paged = TRUE;
-	  /* NB/ Does not set dynamic_link to TRUE.
+	  /* NB/ Does not set input_flags.dynamic to TRUE.
 	     Use --call-shared or -Bdynamic for this.  */
 	  break;
 	case 'n':
 	  config.magic_demand_paged = FALSE;
-	  config.dynamic_link = FALSE;
+	  input_flags.dynamic = FALSE;
 	  break;
 	case OPTION_NO_DEFINE_COMMON:
 	  command_line.inhibit_common_definition = TRUE;
@@ -1040,7 +1040,7 @@ parse_args (unsigned argc, char **argv)
 	  config.only_cmd_line_lib_dirs = TRUE;
 	  break;
 	case OPTION_NO_WHOLE_ARCHIVE:
-	  whole_archive = FALSE;
+	  input_flags.whole_archive = FALSE;
 	  break;
 	case 'O':
 	  /* FIXME "-O<non-digits> <value>" used to set the address of
@@ -1092,7 +1092,7 @@ parse_args (unsigned argc, char **argv)
 	  config.build_constructors = FALSE;
 	  config.magic_demand_paged = FALSE;
 	  config.text_read_only = FALSE;
-	  config.dynamic_link = FALSE;
+	  input_flags.dynamic = FALSE;
 	  break;
 	case 'R':
 	  /* The GNU linker traditionally uses -R to mean to include
@@ -1313,7 +1313,7 @@ parse_args (unsigned argc, char **argv)
 	  config.build_constructors = TRUE;
 	  config.magic_demand_paged = FALSE;
 	  config.text_read_only = FALSE;
-	  config.dynamic_link = FALSE;
+	  input_flags.dynamic = FALSE;
 	  break;
 	case 'u':
 	  ldlang_add_undef (optarg, TRUE);
@@ -1437,19 +1437,19 @@ parse_args (unsigned argc, char **argv)
 	  link_info.warn_alternate_em = TRUE;
 	  break;
 	case OPTION_WHOLE_ARCHIVE:
-	  whole_archive = TRUE;
+	  input_flags.whole_archive = TRUE;
 	  break;
 	case OPTION_ADD_DT_NEEDED_FOR_DYNAMIC:
-	  add_DT_NEEDED_for_dynamic = TRUE;
+	  input_flags.add_DT_NEEDED_for_dynamic = TRUE;
 	  break;
 	case OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC:
-	  add_DT_NEEDED_for_dynamic = FALSE;
+	  input_flags.add_DT_NEEDED_for_dynamic = FALSE;
 	  break;
 	case OPTION_ADD_DT_NEEDED_FOR_REGULAR:
-	  add_DT_NEEDED_for_regular = TRUE;
+	  input_flags.add_DT_NEEDED_for_regular = TRUE;
 	  break;
 	case OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR:
-	  add_DT_NEEDED_for_regular = FALSE;
+	  input_flags.add_DT_NEEDED_for_regular = FALSE;
 	  break;
 	case OPTION_WRAP:
 	  add_wrap (optarg);
Index: ld/plugin.c
===================================================================
RCS file: /cvs/src/src/ld/plugin.c,v
retrieving revision 1.43
diff -u -p -r1.43 plugin.c
--- ld/plugin.c	20 Oct 2011 09:50:59 -0000	1.43
+++ ld/plugin.c	5 Mar 2012 12:04:24 -0000
@@ -1,5 +1,5 @@
 /* Plugin control for the GNU linker.
-   Copyright 2010, 2011 Free Software Foundation, Inc.
+   Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -262,7 +262,7 @@ is_ir_dummy_bfd (const bfd *abfd)
      when processing DT_NEEDED dependencies.  */
   return (abfd
 	  && abfd->usrdata
-	  && ((lang_input_statement_type *)(abfd->usrdata))->claimed);
+	  && ((lang_input_statement_type *)(abfd->usrdata))->flags.claimed);
 }
 
 /* Helpers to convert between BFD and GOLD symbol formats.  */
@@ -873,7 +873,7 @@ plugin_maybe_claim (struct ld_plugin_inp
       if (entry->the_bfd->my_archive == NULL)
 	bfd_close (entry->the_bfd);
       entry->the_bfd = file->handle;
-      entry->claimed = TRUE;
+      entry->flags.claimed = TRUE;
       bfd_make_readable (entry->the_bfd);
     }
   else
@@ -881,7 +881,7 @@ plugin_maybe_claim (struct ld_plugin_inp
       /* If plugin didn't claim the file, we don't need the dummy bfd.
 	 Can't avoid speculatively creating it, alas.  */
       bfd_close_all_done (file->handle);
-      entry->claimed = FALSE;
+      entry->flags.claimed = FALSE;
     }
 }
 
Index: ld/emultempl/aix.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/aix.em,v
retrieving revision 1.59
diff -u -p -r1.59 aix.em
--- ld/emultempl/aix.em	2 Nov 2011 16:28:31 -0000	1.59
+++ ld/emultempl/aix.em	5 Mar 2012 12:04:25 -0000
@@ -10,7 +10,7 @@ fragment <<EOF
 
 /* AIX emulation code for ${EMULATION_NAME}
    Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
    Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    AIX support by Ian Lance Taylor <ian@cygnus.com>
@@ -145,7 +145,7 @@ gld${EMULATION_NAME}_before_parse (void)
 {
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
 
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = TRUE;
 
   /* The link_info.[init|fini]_functions are initialized in ld/lexsup.c.
@@ -669,7 +669,7 @@ gld${EMULATION_NAME}_unrecognized_file (
       *flpp = n;
 
       ret = TRUE;
-      entry->loaded = TRUE;
+      entry->flags.loaded = TRUE;
     }
 
   fclose (e);
@@ -1505,7 +1505,7 @@ gld${EMULATION_NAME}_open_dynamic_archiv
 {
   char *path;
 
-  if (!entry->maybe_archive)
+  if (!entry->flags.maybe_archive)
     return FALSE;
 
   path = concat (search->name, "/lib", entry->filename, arch, ".a", NULL);
Index: ld/emultempl/armelf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/armelf.em,v
retrieving revision 1.83
diff -u -p -r1.83 armelf.em
--- ld/emultempl/armelf.em	25 Nov 2011 15:04:09 -0000	1.83
+++ ld/emultempl/armelf.em	5 Mar 2012 12:04:25 -0000
@@ -1,6 +1,6 @@
 # This shell script emits a C file. -*- C -*-
 #   Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-#   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+#   2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
 #   Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
@@ -50,7 +50,7 @@ gld${EMULATION_NAME}_before_parse (void)
 #ifndef TARGET_			/* I.e., if not generic.  */
   ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
 #endif /* not TARGET_ */
-  config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+  input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
 }
 
@@ -240,7 +240,7 @@ build_section_lists (lang_statement_unio
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section != NULL
 	  && i->output_section->owner == link_info.output_bfd)
Index: ld/emultempl/elf32.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/elf32.em,v
retrieving revision 1.224
diff -u -p -r1.224 elf32.em
--- ld/emultempl/elf32.em	19 Oct 2011 04:13:28 -0000	1.224
+++ ld/emultempl/elf32.em	5 Mar 2012 12:04:25 -0000
@@ -13,7 +13,7 @@ fragment <<EOF
 
 /* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
    Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    ELF support by Ian Lance Taylor <ian@cygnus.com>
@@ -102,7 +102,7 @@ static void
 gld${EMULATION_NAME}_before_parse (void)
 {
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
-  config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+  input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
 }
 
@@ -121,16 +121,16 @@ gld${EMULATION_NAME}_load_symbols (lang_
   /* Tell the ELF linker that we don't want the output file to have a
      DT_NEEDED entry for this file, unless it is used to resolve
      references in a regular object.  */
-  if (entry->add_DT_NEEDED_for_regular)
+  if (entry->flags.add_DT_NEEDED_for_regular)
     link_class = DYN_AS_NEEDED;
 
   /* Tell the ELF linker that we don't want the output file to have a
      DT_NEEDED entry for any dynamic library in DT_NEEDED tags from
      this file at all.  */
-  if (!entry->add_DT_NEEDED_for_dynamic)
+  if (!entry->flags.add_DT_NEEDED_for_dynamic)
     link_class |= DYN_NO_ADD_NEEDED;
 
-  if (entry->just_syms_flag
+  if (entry->flags.just_syms
       && (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0)
     einfo (_("%P%F: --just-symbols may not be used on DSO: %B\n"),
 	   entry->the_bfd);
@@ -862,7 +862,7 @@ gld${EMULATION_NAME}_check_needed (lang_
       return;
     }
 
-  if (s->search_dirs_flag)
+  if (s->flags.search_dirs)
     {
       const char *f = strrchr (s->filename, '/');
       if (f != NULL
@@ -1560,7 +1560,7 @@ ${ELF_INTERPRETER_SET_DEFAULT}
 	char *msg;
 	bfd_boolean ret;
 
-	if (is->just_syms_flag)
+	if (is->flags.just_syms)
 	  continue;
 
 	s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
@@ -1621,7 +1621,7 @@ gld${EMULATION_NAME}_open_dynamic_archiv
   const char *filename;
   char *string;
 
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     return FALSE;
 
   filename = entry->filename;
@@ -1675,7 +1675,7 @@ gld${EMULATION_NAME}_open_dynamic_archiv
   if (bfd_check_format (entry->the_bfd, bfd_object)
       && (entry->the_bfd->flags & DYNAMIC) != 0)
     {
-      ASSERT (entry->maybe_archive && entry->search_dirs_flag);
+      ASSERT (entry->flags.maybe_archive && entry->flags.search_dirs);
 
       /* Rather than duplicating the logic above.  Just use the
 	 filename we recorded earlier.  */
Index: ld/emultempl/hppaelf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/hppaelf.em,v
retrieving revision 1.56
diff -u -p -r1.56 hppaelf.em
--- ld/emultempl/hppaelf.em	4 Feb 2010 09:16:43 -0000	1.56
+++ ld/emultempl/hppaelf.em	5 Mar 2012 12:04:25 -0000
@@ -1,6 +1,6 @@
 # This shell script emits a C file. -*- C -*-
 #   Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
-#   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#   2005, 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
 #
@@ -229,7 +229,7 @@ build_section_lists (lang_statement_unio
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section != NULL
 	  && i->output_section->owner == link_info.output_bfd)
Index: ld/emultempl/linux.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/linux.em,v
retrieving revision 1.25
diff -u -p -r1.25 linux.em
--- ld/emultempl/linux.em	6 Dec 2010 00:07:06 -0000	1.25
+++ ld/emultempl/linux.em	5 Mar 2012 12:04:25 -0000
@@ -10,7 +10,7 @@ fragment <<EOF
 
 /* Linux a.out emulation code for ${EMULATION_NAME}
    Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2007, 2008, 2012 Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    Linux support by Eric Youngdale <ericy@cais.cais.com>
 
@@ -49,7 +49,7 @@ static void
 gld${EMULATION_NAME}_before_parse (void)
 {
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = TRUE;
 }
 
@@ -62,7 +62,7 @@ gld${EMULATION_NAME}_open_dynamic_archiv
 {
   char *string;
 
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     return FALSE;
 
   string = (char *) xmalloc (strlen (search->name)
Index: ld/emultempl/pe.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/pe.em,v
retrieving revision 1.171
diff -u -p -r1.171 pe.em
--- ld/emultempl/pe.em	13 Jun 2011 00:59:43 -0000	1.171
+++ ld/emultempl/pe.em	5 Mar 2012 12:04:26 -0000
@@ -9,7 +9,8 @@ rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
 /* Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+   Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -164,7 +165,7 @@ gld_${EMULATION_NAME}_before_parse (void
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
   output_filename = "${EXECUTABLE_NAME:-a.exe}";
 #ifdef DLL_SUPPORT
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = 1;
 EOF
 
@@ -2093,7 +2094,7 @@ gld_${EMULATION_NAME}_open_dynamic_archi
   unsigned int i;
 
 
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     return FALSE;
 
   filename = entry->filename;
Index: ld/emultempl/pep.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/pep.em,v
retrieving revision 1.46
diff -u -p -r1.46 pep.em
--- ld/emultempl/pep.em	13 Jun 2011 00:59:43 -0000	1.46
+++ ld/emultempl/pep.em	5 Mar 2012 12:04:26 -0000
@@ -8,7 +8,7 @@ fi
 rm -f e${EMULATION_NAME}.c
 (echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
 fragment <<EOF
-/* Copyright 2006, 2007, 2008, 2009, 2010, 2011
+/* Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
    Free Software Foundation, Inc.
    Written by Kai Tietz, OneVision Software GmbH&CoKg.
 
@@ -139,7 +139,7 @@ gld_${EMULATION_NAME}_before_parse (void
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
   output_filename = "${EXECUTABLE_NAME:-a.exe}";
 #ifdef DLL_SUPPORT
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = 1;
   link_info.pei386_auto_import = 1;
   link_info.pei386_runtime_pseudo_reloc = 2; /* Use by default version 2.  */
@@ -1830,7 +1830,7 @@ gld_${EMULATION_NAME}_open_dynamic_archi
   unsigned int i;
 
 
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     return FALSE;
 
   filename = entry->filename;
Index: ld/emultempl/ppc64elf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/ppc64elf.em,v
retrieving revision 1.80
diff -u -p -r1.80 ppc64elf.em
--- ld/emultempl/ppc64elf.em	11 Jan 2012 09:28:45 -0000	1.80
+++ ld/emultempl/ppc64elf.em	5 Mar 2012 12:04:26 -0000
@@ -435,7 +435,7 @@ build_toc_list (lang_statement_union_typ
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section == toc_section)
 	{
@@ -453,7 +453,7 @@ build_section_lists (lang_statement_unio
     {
       asection *i = statement->input_section.section;
 
-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
+      if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
 	  && (i->flags & SEC_EXCLUDE) == 0
 	  && i->output_section != NULL
 	  && i->output_section->owner == link_info.output_bfd)
Index: ld/emultempl/scoreelf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/scoreelf.em,v
retrieving revision 1.6
diff -u -p -r1.6 scoreelf.em
--- ld/emultempl/scoreelf.em	2 Mar 2009 10:33:08 -0000	1.6
+++ ld/emultempl/scoreelf.em	5 Mar 2012 12:04:26 -0000
@@ -1,5 +1,5 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#   Copyright 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
 #   Contributed by:
 #   Brain.lin (brain.lin@sunplusct.com)
 #   Mei Ligang (ligang@sunnorth.com.cn)
@@ -36,7 +36,7 @@ gld${EMULATION_NAME}_before_parse ()
 #ifndef TARGET_			/* I.e., if not generic.  */
   ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
 #endif /* not TARGET_ */
-  config.dynamic_link = ${DYNAMIC_LINK-TRUE};
+  input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
   config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
 }
 
Index: ld/emultempl/spuelf.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/spuelf.em,v
retrieving revision 1.44
diff -u -p -r1.44 spuelf.em
--- ld/emultempl/spuelf.em	1 Dec 2011 11:38:32 -0000	1.44
+++ ld/emultempl/spuelf.em	5 Mar 2012 12:04:27 -0000
@@ -1,5 +1,5 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2006, 2007, 2008, 2009, 2010, 2011
+#   Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
 #   Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
@@ -579,7 +579,7 @@ embedded_spu_file (lang_input_statement_
 
   /* Ensure bfd sections are excluded from the output.  */
   bfd_section_list_clear (entry->the_bfd);
-  entry->loaded = TRUE;
+  entry->flags.loaded = TRUE;
   return TRUE;
 }
 
Index: ld/emultempl/sunos.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/sunos.em,v
retrieving revision 1.33
diff -u -p -r1.33 sunos.em
--- ld/emultempl/sunos.em	20 Dec 2010 13:00:14 -0000	1.33
+++ ld/emultempl/sunos.em	5 Mar 2012 12:04:27 -0000
@@ -10,7 +10,8 @@ fragment <<EOF
 
 /* SunOS emulation code for ${EMULATION_NAME}
    Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2012
+   Free Software Foundation, Inc.
    Written by Steve Chamberlain <sac@cygnus.com>
    SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
 
@@ -85,7 +86,7 @@ static void
 gld${EMULATION_NAME}_before_parse (void)
 {
   ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = TRUE;
 }
 
@@ -156,9 +157,9 @@ gld${EMULATION_NAME}_find_so (lang_input
   char *alc;
   struct stat st;
 
-  if (! inp->search_dirs_flag
-      || ! inp->maybe_archive
-      || ! inp->dynamic)
+  if (! inp->flags.search_dirs
+      || ! inp->flags.maybe_archive
+      || ! inp->flags.dynamic)
     return;
 
   ASSERT (CONST_STRNEQ (inp->local_sym_name, "-l"));
@@ -188,7 +189,7 @@ gld${EMULATION_NAME}_find_so (lang_input
 
   /* Turn off the search_dirs_flag to prevent ldfile_open_file from
      searching for this file again.  */
-  inp->search_dirs_flag = FALSE;
+  inp->flags.search_dirs = FALSE;
 
   free (found);
 
@@ -891,7 +892,7 @@ gld${EMULATION_NAME}_count_need (lang_in
     {
       ++need_entries;
       need_size += NEED_ENTRY_SIZE;
-      if (! inp->maybe_archive)
+      if (! inp->flags.maybe_archive)
 	need_size += strlen (inp->filename) + 1;
       else
 	{
@@ -919,7 +920,7 @@ gld${EMULATION_NAME}_set_need (lang_inpu
 	 referential locality.  */
       bfd_put_32 (link_info.output_bfd, need_pnames - need_contents,
 		  need_pinfo);
-      if (! inp->maybe_archive)
+      if (! inp->flags.maybe_archive)
 	{
 	  bfd_put_32 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 4);
 	  bfd_put_16 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 8);
Index: ld/emultempl/vms.em
===================================================================
RCS file: /cvs/src/src/ld/emultempl/vms.em,v
retrieving revision 1.4
diff -u -p -r1.4 vms.em
--- ld/emultempl/vms.em	4 May 2011 08:31:04 -0000	1.4
+++ ld/emultempl/vms.em	5 Mar 2012 12:04:27 -0000
@@ -1,5 +1,5 @@
 # This shell script emits a C file. -*- C -*-
-#   Copyright 2010
+#   Copyright 2010, 2012
 #   Free Software Foundation, Inc.
 #
 # This file is part of the GNU Binutils.
@@ -29,7 +29,7 @@ static void
 gld${EMULATION_NAME}_before_parse (void)
 {
   ldfile_set_output_arch ("${ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
-  config.dynamic_link = TRUE;
+  input_flags.dynamic = TRUE;
   config.has_shared = FALSE; /* Not yet.  */
 }
 
@@ -54,7 +54,7 @@ gld${EMULATION_NAME}_open_dynamic_archiv
 {
   char *string;
 
-  if (! entry->maybe_archive)
+  if (! entry->flags.maybe_archive)
     return FALSE;
 
   string = (char *) xmalloc (strlen (search->name)

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list