X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ld%2Fldmisc.c;h=5e1801321ea38ad5931373b2796fc870cfef1a5e;hb=ee959deb576c46b85b6174626d700e1393256adf;hp=21e6f4f84ae855f9862ea1041a1b01d36a4d2763;hpb=dab69f680baf93b577f85c1a9344d7ea7996f466;p=platform%2Fupstream%2Fbinutils.git diff --git a/ld/ldmisc.c b/ld/ldmisc.c index 21e6f4f..5e18013 100644 --- a/ld/ldmisc.c +++ b/ld/ldmisc.c @@ -1,7 +1,5 @@ /* 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. @@ -72,11 +70,14 @@ vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning) while (*fmt != '\0') { + const char *str = fmt; while (*fmt != '%' && *fmt != '\0') - { - putc (*fmt, fp); - fmt++; - } + fmt++; + if (fmt != str) + if (fwrite (str, 1, fmt - str, fp)) + { + /* Ignore. */ + } 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. */ { - node_type node; + etree_type node; 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; } @@ -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: - + 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) - fprintf (fp, "%u%s", linenumber, ":" + done); + fprintf (fp, "%u%s", linenumber, done ? "" : ":"); else done = FALSE; } @@ -481,7 +482,22 @@ minfo (const char *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); } }