Fix wrong source file name of cross-arm-binutils.
[platform/upstream/binutils.git] / ld / ldmisc.c
index 21e6f4f..5e18013 100644 (file)
@@ -1,7 +1,5 @@
 /* ldmisc.c
 /* ldmisc.c
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012
-   Free Software Foundation, Inc.
+   Copyright (C) 1991-2014 Free Software Foundation, Inc.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of the GNU Binutils.
    Written by Steve Chamberlain of Cygnus Support.
 
    This file is part of the GNU Binutils.
@@ -72,11 +70,14 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
 
   while (*fmt != '\0')
     {
 
   while (*fmt != '\0')
     {
+      const char *str = fmt;
       while (*fmt != '%' && *fmt != '\0')
       while (*fmt != '%' && *fmt != '\0')
-       {
-         putc (*fmt, fp);
-         fmt++;
-       }
+       fmt++;
+      if (fmt != str)
+       if (fwrite (str, 1, fmt - str, fp))
+         {
+           /* Ignore.  */
+         }
 
       if (*fmt == '%')
        {
 
       if (*fmt == '%')
        {
@@ -241,12 +242,12 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
            case 'S':
              /* Print script file and linenumber.  */
              {
            case 'S':
              /* Print script file and linenumber.  */
              {
-               node_type node;
+               etree_type node;
                etree_type *tp = va_arg (arg, etree_type *);
 
                if (tp == NULL)
                  {
                etree_type *tp = va_arg (arg, etree_type *);
 
                if (tp == NULL)
                  {
-                   tp = (etree_type *) &node;
+                   tp = &node;
                    tp->type.filename = ldlex_filename ();
                    tp->type.lineno = lineno;
                  }
                    tp->type.filename = ldlex_filename ();
                    tp->type.lineno = lineno;
                  }
@@ -301,7 +302,7 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
 
                /* The GNU Coding Standard requires that error messages
                   be of the form:
 
                /* The GNU Coding Standard requires that error messages
                   be of the form:
-                  
+
                     source-file-name:lineno: message
 
                   We do not always have a line number available so if
                     source-file-name:lineno: message
 
                   We do not always have a line number available so if
@@ -358,7 +359,7 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
                    if (functionname != NULL && fmt[-1] == 'G')
                      lfinfo (fp, "%T", functionname);
                    else if (filename != NULL && linenumber != 0)
                    if (functionname != NULL && fmt[-1] == 'G')
                      lfinfo (fp, "%T", functionname);
                    else if (filename != NULL && linenumber != 0)
-                     fprintf (fp, "%u%s", linenumber, ":" + done);
+                     fprintf (fp, "%u%s", linenumber, done ? "" : ":");
                    else
                      done = FALSE;
                  }
                    else
                      done = FALSE;
                  }
@@ -481,7 +482,22 @@ minfo (const char *fmt, ...)
       va_list arg;
 
       va_start (arg, fmt);
       va_list arg;
 
       va_start (arg, fmt);
-      vfinfo (config.map_file, fmt, arg, FALSE);
+      if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
+       {
+         /* Stash info about --as-needed shared libraries.  Print
+            later so they don't appear intermingled with archive
+            library info.  */
+         struct asneeded_minfo *m = xmalloc (sizeof *m);
+
+         m->next = NULL;
+         m->soname = va_arg (arg, const char *);
+         m->ref = va_arg (arg, bfd *);
+         m->name = va_arg (arg, const char *);
+         *asneeded_list_tail = m;
+         asneeded_list_tail = &m->next;
+       }
+      else
+       vfinfo (config.map_file, fmt, arg, FALSE);
       va_end (arg);
     }
 }
       va_end (arg);
     }
 }