X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=binutils%2Fbucomm.c;h=8ecd7f26dfc552655ca94b487633e3f28e5f9204;hb=b0cffb47671ffbaac559c1f17a9f248256ea6c42;hp=03a4d2873e2a325771c4f0fd82bf3c9c96ac3b65;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=binutils-gdb.git diff --git a/binutils/bucomm.c b/binutils/bucomm.c index 03a4d2873e2..8ecd7f26dfc 100644 --- a/binutils/bucomm.c +++ b/binutils/bucomm.c @@ -1,12 +1,11 @@ /* bucomm.c -- Bin Utils COMmon code. - Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003 - Free Software Foundation, Inc. + Copyright (C) 1991-2016 Free Software Foundation, Inc. This file is part of GNU Binutils. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -22,16 +21,15 @@ /* We might put this in a library someday so it could be dynamically loaded, but for now it's not necessary. */ +#include "sysdep.h" #include "bfd.h" -#include "bfdver.h" #include "libiberty.h" -#include "bucomm.h" #include "filenames.h" #include "libbfd.h" -#include #include /* ctime, maybe time_t */ #include +#include "bucomm.h" #ifndef HAVE_TIME_T_IN_TIME_H #ifndef HAVE_TIME_T_IN_TYPES_H @@ -51,14 +49,65 @@ char *program_name; void bfd_nonfatal (const char *string) { - const char *errmsg = bfd_errmsg (bfd_get_error ()); + const char *errmsg; + errmsg = bfd_errmsg (bfd_get_error ()); + fflush (stdout); if (string) fprintf (stderr, "%s: %s: %s\n", program_name, string, errmsg); else fprintf (stderr, "%s: %s\n", program_name, errmsg); } +/* Issue a non fatal error message. FILENAME, or if NULL then BFD, + are used to indicate the problematic file. SECTION, if non NULL, + is used to provide a section name. If FORMAT is non-null, then it + is used to print additional information via vfprintf. Finally the + bfd error message is printed. In summary, error messages are of + one of the following forms: + + PROGRAM:file: bfd-error-message + PROGRAM:file[section]: bfd-error-message + PROGRAM:file: printf-message: bfd-error-message + PROGRAM:file[section]: printf-message: bfd-error-message. */ + +void +bfd_nonfatal_message (const char *filename, + const bfd *abfd, + const asection *section, + const char *format, ...) +{ + const char *errmsg; + const char *section_name; + va_list args; + + errmsg = bfd_errmsg (bfd_get_error ()); + fflush (stdout); + section_name = NULL; + va_start (args, format); + fprintf (stderr, "%s", program_name); + + if (abfd) + { + if (!filename) + filename = bfd_get_archive_filename (abfd); + if (section) + section_name = bfd_get_section_name (abfd, section); + } + if (section_name) + fprintf (stderr, ":%s[%s]", filename, section_name); + else + fprintf (stderr, ":%s", filename); + + if (format) + { + fprintf (stderr, ": "); + vfprintf (stderr, format, args); + } + fprintf (stderr, ": %s\n", errmsg); + va_end (args); +} + void bfd_fatal (const char *string) { @@ -69,30 +118,33 @@ bfd_fatal (const char *string) void report (const char * format, va_list args) { + fflush (stdout); fprintf (stderr, "%s: ", program_name); vfprintf (stderr, format, args); putc ('\n', stderr); } void -fatal VPARAMS ((const char *format, ...)) +fatal (const char *format, ...) { - VA_OPEN (args, format); - VA_FIXEDARG (args, const char *, format); + va_list args; + + va_start (args, format); report (format, args); - VA_CLOSE (args); + va_end (args); xexit (1); } void -non_fatal VPARAMS ((const char *format, ...)) +non_fatal (const char *format, ...) { - VA_OPEN (args, format); - VA_FIXEDARG (args, const char *, format); + va_list args; + + va_start (args, format); report (format, args); - VA_CLOSE (args); + va_end (args); } /* Set the default BFD target based on the configured target. Doing @@ -118,6 +170,7 @@ set_default_bfd_target (void) void list_matching_formats (char **p) { + fflush (stdout); fprintf (stderr, _("%s: Matching formats:"), program_name); while (*p) fprintf (stderr, " %s", *p++); @@ -130,13 +183,14 @@ void list_supported_targets (const char *name, FILE *f) { int t; - const char **targ_names = bfd_target_list (); + const char **targ_names; if (name == NULL) fprintf (f, _("Supported targets:")); else fprintf (f, _("%s: supported targets:"), name); + targ_names = bfd_target_list (); for (t = 0; targ_names[t] != NULL; t++) fprintf (f, " %s", targ_names[t]); fprintf (f, "\n"); @@ -148,16 +202,18 @@ list_supported_targets (const char *name, FILE *f) void list_supported_architectures (const char *name, FILE *f) { - const char **arch; + const char ** arch; + const char ** arches; if (name == NULL) fprintf (f, _("Supported architectures:")); else fprintf (f, _("%s: supported architectures:"), name); - for (arch = bfd_arch_list (); *arch; arch++) + for (arch = arches = bfd_arch_list (); *arch; arch++) fprintf (f, " %s", *arch); fprintf (f, "\n"); + free (arches); } /* The length of the longest architecture name + 1. */ @@ -168,9 +224,9 @@ endian_string (enum bfd_endian endian) { switch (endian) { - case BFD_ENDIAN_BIG: return "big endian"; - case BFD_ENDIAN_LITTLE: return "little endian"; - default: return "endianness unknown"; + case BFD_ENDIAN_BIG: return _("big endian"); + case BFD_ENDIAN_LITTLE: return _("little endian"); + default: return _("endianness unknown"); } } @@ -189,9 +245,9 @@ display_target_list (void) { const bfd_target *p = bfd_target_vector[t]; bfd *abfd = bfd_openw (dummy_name, p->name); - enum bfd_architecture a; + int a; - printf ("%s\n (header %s, data %s)\n", p->name, + printf (_("%s\n (header %s, data %s)\n"), p->name, endian_string (p->header_byteorder), endian_string (p->byteorder)); @@ -235,7 +291,7 @@ display_info_table (int first, int last) int t; int ret = 1; char *dummy_name; - enum bfd_architecture a; + int a; /* Print heading of target names. */ printf ("\n%*s", (int) LONGEST_ARCH, " "); @@ -245,10 +301,11 @@ display_info_table (int first, int last) dummy_name = make_temp_file (NULL); for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++) - if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0) + if (strcmp (bfd_printable_arch_mach ((enum bfd_architecture) a, 0), + "UNKNOWN!") != 0) { printf ("%*s ", (int) LONGEST_ARCH - 1, - bfd_printable_arch_mach (a, 0)); + bfd_printable_arch_mach ((enum bfd_architecture) a, 0)); for (t = first; t < last && bfd_target_vector[t]; t++) { const bfd_target *p = bfd_target_vector[t]; @@ -277,7 +334,7 @@ display_info_table (int first, int last) if (ok) { - if (! bfd_set_arch_mach (abfd, a, 0)) + if (! bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0)) ok = FALSE; } @@ -370,69 +427,126 @@ print_arelt_descr (FILE *file, bfd *abfd, bfd_boolean verbose) char timebuf[40]; time_t when = buf.st_mtime; const char *ctime_result = (const char *) ctime (&when); + bfd_size_type size; - /* POSIX format: skip weekday and seconds from ctime output. */ - sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20); + /* PR binutils/17605: Check for corrupt time values. */ + if (ctime_result == NULL) + sprintf (timebuf, _("