* emulparams/elf32_tic6x_le.sh (OTHER_BSS_SECTIONS): New.
[binutils-gdb.git] / ld / ldfile.c
index 3c59a20819695d728cd84cd48db0582abc5577d5..4661897b8226b4b3a3229d5ae4d2b604df7f7845 100644 (file)
@@ -1,6 +1,6 @@
 /* Linker file opening and searching.
    Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
    This file is part of the GNU Binutils.
 
@@ -98,28 +98,28 @@ is_sysrooted_pathname (const char *name, bfd_boolean notsame)
 void
 ldfile_add_library_path (const char *name, bfd_boolean cmdline)
 {
-  search_dirs_type *new;
+  search_dirs_type *new_dirs;
 
   if (!cmdline && config.only_cmd_line_lib_dirs)
     return;
 
-  new = xmalloc (sizeof (search_dirs_type));
-  new->next = NULL;
-  new->cmdline = cmdline;
-  *search_tail_ptr = new;
-  search_tail_ptr = &new->next;
+  new_dirs = (search_dirs_type *) xmalloc (sizeof (search_dirs_type));
+  new_dirs->next = NULL;
+  new_dirs->cmdline = cmdline;
+  *search_tail_ptr = new_dirs;
+  search_tail_ptr = &new_dirs->next;
 
   /* If a directory is marked as honoring sysroot, prepend the sysroot path
      now.  */
   if (name[0] == '=')
     {
-      new->name = concat (ld_sysroot, name + 1, (const char *) NULL);
-      new->sysrooted = TRUE;
+      new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
+      new_dirs->sysrooted = TRUE;
     }
   else
     {
-      new->name = xstrdup (name);
-      new->sysrooted = is_sysrooted_pathname (name, FALSE);
+      new_dirs->name = xstrdup (name);
+      new_dirs->sysrooted = is_sysrooted_pathname (name, FALSE);
     }
 }
 
@@ -363,7 +363,10 @@ ldfile_open_file_search (const char *arch,
   return FALSE;
 }
 
-/* Open the input file specified by ENTRY.  */
+/* Open the input file specified by ENTRY.
+   PR 4437: Do not stop on the first missing file, but
+   continue processing other input files in case there
+   are more errors to report.  */
 
 void
 ldfile_open_file (lang_input_statement_type *entry)
@@ -375,11 +378,15 @@ ldfile_open_file (lang_input_statement_type *entry)
     {
       if (ldfile_try_open_bfd (entry->filename, entry))
        return;
+
       if (strcmp (entry->filename, entry->local_sym_name) != 0)
-       einfo (_("%F%P: %s (%s): No such file: %E\n"),
+       einfo (_("%P: cannot find %s (%s): %E\n"),
               entry->filename, entry->local_sym_name);
       else
-       einfo (_("%F%P: %s: No such file: %E\n"), entry->local_sym_name);
+       einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
+
+      entry->missing_file = TRUE;
+      missing_file = TRUE;
     }
   else
     {
@@ -406,13 +413,18 @@ ldfile_open_file (lang_input_statement_type *entry)
         again.  */
       if (found)
        entry->search_dirs_flag = FALSE;
-      else if (entry->sysrooted
+      else
+       {
+         if (entry->sysrooted
               && ld_sysroot
               && IS_ABSOLUTE_PATH (entry->local_sym_name))
-       einfo (_("%F%P: cannot find %s inside %s\n"),
-              entry->local_sym_name, ld_sysroot);
-      else
-       einfo (_("%F%P: cannot find %s\n"), 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;
+       }
     }
 }
 
@@ -615,19 +627,20 @@ void
 ldfile_add_arch (const char *in_name)
 {
   char *name = xstrdup (in_name);
-  search_arch_type *new = xmalloc (sizeof (search_arch_type));
+  search_arch_type *new_arch = (search_arch_type *)
+      xmalloc (sizeof (search_arch_type));
 
   ldfile_output_machine_name = in_name;
 
-  new->name = name;
-  new->next = NULL;
+  new_arch->name = name;
+  new_arch->next = NULL;
   while (*name)
     {
       *name = TOLOWER (*name);
       name++;
     }
-  *search_arch_tail_ptr = new;
-  search_arch_tail_ptr = &new->next;
+  *search_arch_tail_ptr = new_arch;
+  search_arch_tail_ptr = &new_arch->next;
 
 }