X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fmessages.c;h=005cd22d417ba7594ac11bf85b162d664657d59a;hb=fd99574ba57795ede14cf8644ab4180facff4f17;hp=e4b7ad00a115226803f860243bd708424c17442b;hpb=252b5132c753830d5fd56823373aed85f2a0db63;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/messages.c b/gas/messages.c index e4b7ad00a1..005cd22d41 100644 --- a/gas/messages.c +++ b/gas/messages.c @@ -1,5 +1,5 @@ /* messages.c - error reporter - - Copyright (C) 1987, 91, 92, 93, 94, 95, 96, 97, 1998 + Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, 2003 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + 02111-1307, USA. */ #include "as.h" @@ -42,54 +42,52 @@ typedef int * va_list; #define va_end(ARGS) #endif -static void identify PARAMS ((char *)); -static void as_show_where PARAMS ((void)); -static void as_warn_internal PARAMS ((char *, unsigned int, char *)); -static void as_bad_internal PARAMS ((char *, unsigned int, char *)); - -/* - * Despite the rest of the comments in this file, (FIXME-SOON), - * here is the current scheme for error messages etc: - * - * as_fatal() is used when gas is quite confused and - * continuing the assembly is pointless. In this case we - * exit immediately with error status. - * - * as_bad() is used to mark errors that result in what we - * presume to be a useless object file. Say, we ignored - * something that might have been vital. If we see any of - * these, assembly will continue to the end of the source, - * no object file will be produced, and we will terminate - * with error status. The new option, -Z, tells us to - * produce an object file anyway but we still exit with - * error status. The assumption here is that you don't want - * this object file but we could be wrong. - * - * as_warn() is used when we have an error from which we - * have a plausible error recovery. eg, masking the top - * bits of a constant that is longer than will fit in the - * destination. In this case we will continue to assemble - * the source, although we may have made a bad assumption, - * and we will produce an object file and return normal exit - * status (ie, no error). The new option -X tells us to - * treat all as_warn() errors as as_bad() errors. That is, - * no object file will be produced and we will exit with - * error status. The idea here is that we don't kill an - * entire make because of an error that we knew how to - * correct. On the other hand, sometimes you might want to - * stop the make at these points. - * - * as_tsktsk() is used when we see a minor error for which - * our error recovery action is almost certainly correct. - * In this case, we print a message and then assembly - * continues as though no error occurred. - */ +static void identify (char *); +static void as_show_where (void); +static void as_warn_internal (char *, unsigned int, char *); +static void as_bad_internal (char *, unsigned int, char *); + +/* Despite the rest of the comments in this file, (FIXME-SOON), + here is the current scheme for error messages etc: + + as_fatal() is used when gas is quite confused and + continuing the assembly is pointless. In this case we + exit immediately with error status. + + as_bad() is used to mark errors that result in what we + presume to be a useless object file. Say, we ignored + something that might have been vital. If we see any of + these, assembly will continue to the end of the source, + no object file will be produced, and we will terminate + with error status. The new option, -Z, tells us to + produce an object file anyway but we still exit with + error status. The assumption here is that you don't want + this object file but we could be wrong. + + as_warn() is used when we have an error from which we + have a plausible error recovery. eg, masking the top + bits of a constant that is longer than will fit in the + destination. In this case we will continue to assemble + the source, although we may have made a bad assumption, + and we will produce an object file and return normal exit + status (ie, no error). The new option -X tells us to + treat all as_warn() errors as as_bad() errors. That is, + no object file will be produced and we will exit with + error status. The idea here is that we don't kill an + entire make because of an error that we knew how to + correct. On the other hand, sometimes you might want to + stop the make at these points. + + as_tsktsk() is used when we see a minor error for which + our error recovery action is almost certainly correct. + In this case, we print a message and then assembly + continues as though no error occurred. */ static void -identify (file) - char *file; +identify (char *file) { static int identified; + if (identified) return; identified++; @@ -105,30 +103,30 @@ identify (file) fprintf (stderr, _("Assembler messages:\n")); } -static int warning_count; /* Count of number of warnings issued */ +/* The number of warnings issued. */ +static int warning_count; -int -had_warnings () +int +had_warnings (void) { - return (warning_count); + return warning_count; } /* Nonzero if we've hit a 'bad error', and should not write an obj file, - and exit with a nonzero error code */ + and exit with a nonzero error code. */ static int error_count; -int -had_errors () +int +had_errors (void) { - return (error_count); + return error_count; } - /* Print the current location to stderr. */ static void -as_show_where () +as_show_where (void) { char *file; unsigned int line; @@ -139,21 +137,18 @@ as_show_where () fprintf (stderr, "%s:%u: ", file, line); } -/* - * a s _ p e r r o r - * - * Like perror(3), but with more info. - */ +/* Like perror(3), but with more info. */ -void -as_perror (gripe, filename) - const char *gripe; /* Unpunctuated error theme. */ - const char *filename; +void +as_perror (const char *gripe, /* Unpunctuated error theme. */ + const char *filename) { const char *errtxt; + int saved_errno = errno; as_show_where (); fprintf (stderr, gripe, filename); + errno = saved_errno; #ifdef BFD_ASSEMBLER errtxt = bfd_errmsg (bfd_get_error ()); #else @@ -166,18 +161,15 @@ as_perror (gripe, filename) #endif } -/* - * a s _ t s k t s k () - * - * Send to stderr a string as a warning, and locate warning - * in input file(s). - * Please only use this for when we have some recovery action. - * Please explain in string (which may have '\n's) what recovery was done. - */ +/* Send to stderr a string as a warning, and locate warning + in input file(s). + Please only use this for when we have some recovery action. + Please explain in string (which may have '\n's) what recovery was + done. */ #ifdef USE_STDARG -void -as_tsktsk (const char *format,...) +void +as_tsktsk (const char *format, ...) { va_list args; @@ -186,9 +178,9 @@ as_tsktsk (const char *format,...) vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); -} /* as_tsktsk() */ +} #else -void +void as_tsktsk (format, va_alist) const char *format; va_dcl @@ -200,16 +192,13 @@ as_tsktsk (format, va_alist) vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); -} /* as_tsktsk() */ +} #endif /* not NO_STDARG */ /* The common portion of as_warn and as_warn_where. */ static void -as_warn_internal (file, line, buffer) - char *file; - unsigned int line; - char *buffer; +as_warn_internal (char *file, unsigned int line, char *buffer) { ++warning_count; @@ -227,18 +216,15 @@ as_warn_internal (file, line, buffer) #endif } -/* - * a s _ w a r n () - * - * Send to stderr a string as a warning, and locate warning - * in input file(s). - * Please only use this for when we have some recovery action. - * Please explain in string (which may have '\n's) what recovery was done. - */ +/* Send to stderr a string as a warning, and locate warning + in input file(s). + Please only use this for when we have some recovery action. + Please explain in string (which may have '\n's) what recovery was + done. */ #ifdef USE_STDARG -void -as_warn (const char *format,...) +void +as_warn (const char *format, ...) { va_list args; char buffer[2000]; @@ -250,10 +236,9 @@ as_warn (const char *format,...) va_end (args); as_warn_internal ((char *) NULL, 0, buffer); } -} /* as_warn() */ +} #else -/*VARARGS1 */ -void +void as_warn (format, va_alist) const char *format; va_dcl @@ -268,16 +253,16 @@ as_warn (format, va_alist) va_end (args); as_warn_internal ((char *) NULL, 0, buffer); } -} /* as_warn() */ +} #endif /* not NO_STDARG */ -/* as_warn_where, like as_bad but the file name and line number are - passed in. Unfortunately, we have to repeat the function in order - to handle the varargs correctly and portably. */ +/* Like as_bad but the file name and line number are passed in. + Unfortunately, we have to repeat the function in order to handle + the varargs correctly and portably. */ #ifdef USE_STDARG -void -as_warn_where (char *file, unsigned int line, const char *format,...) +void +as_warn_where (char *file, unsigned int line, const char *format, ...) { va_list args; char buffer[2000]; @@ -289,10 +274,9 @@ as_warn_where (char *file, unsigned int line, const char *format,...) va_end (args); as_warn_internal (file, line, buffer); } -} /* as_warn() */ +} #else -/*VARARGS1 */ -void +void as_warn_where (file, line, format, va_alist) char *file; unsigned int line; @@ -309,16 +293,13 @@ as_warn_where (file, line, format, va_alist) va_end (args); as_warn_internal (file, line, buffer); } -} /* as_warn() */ +} #endif /* not NO_STDARG */ /* The common portion of as_bad and as_bad_where. */ static void -as_bad_internal (file, line, buffer) - char *file; - unsigned int line; - char *buffer; +as_bad_internal (char *file, unsigned int line, char *buffer) { ++error_count; @@ -336,18 +317,15 @@ as_bad_internal (file, line, buffer) #endif } -/* - * a s _ b a d () - * - * Send to stderr a string as a warning, and locate warning in input file(s). - * Please us when there is no recovery, but we want to continue processing - * but not produce an object file. - * Please explain in string (which may have '\n's) what recovery was done. - */ +/* Send to stderr a string as a warning, and locate warning in input + file(s). Please us when there is no recovery, but we want to + continue processing but not produce an object file. + Please explain in string (which may have '\n's) what recovery was + done. */ #ifdef USE_STDARG -void -as_bad (const char *format,...) +void +as_bad (const char *format, ...) { va_list args; char buffer[2000]; @@ -360,8 +338,7 @@ as_bad (const char *format,...) } #else -/*VARARGS1 */ -void +void as_bad (format, va_alist) const char *format; va_dcl @@ -377,13 +354,13 @@ as_bad (format, va_alist) } #endif /* not NO_STDARG */ -/* as_bad_where, like as_bad but the file name and line number are - passed in. Unfortunately, we have to repeat the function in order - to handle the varargs correctly and portably. */ +/* Like as_bad but the file name and line number are passed in. + Unfortunately, we have to repeat the function in order to handle + the varargs correctly and portably. */ #ifdef USE_STDARG -void -as_bad_where (char *file, unsigned int line, const char *format,...) +void +as_bad_where (char *file, unsigned int line, const char *format, ...) { va_list args; char buffer[2000]; @@ -396,8 +373,7 @@ as_bad_where (char *file, unsigned int line, const char *format,...) } #else -/*VARARGS1 */ -void +void as_bad_where (file, line, format, va_alist) char *file; unsigned int line; @@ -415,18 +391,14 @@ as_bad_where (file, line, format, va_alist) } #endif /* not NO_STDARG */ -/* - * a s _ f a t a l () - * - * Send to stderr a string as a fatal message, and print location of error in - * input file(s). - * Please only use this for when we DON'T have some recovery action. - * It xexit()s with a warning status. - */ +/* Send to stderr a string as a fatal message, and print location of + error in input file(s). + Please only use this for when we DON'T have some recovery action. + It xexit()s with a warning status. */ #ifdef USE_STDARG -void -as_fatal (const char *format,...) +void +as_fatal (const char *format, ...) { va_list args; @@ -436,11 +408,14 @@ as_fatal (const char *format,...) vfprintf (stderr, format, args); (void) putc ('\n', stderr); va_end (args); + /* Delete the output file, if it exists. This will prevent make from + thinking that a file was created and hence does not need rebuilding. */ + if (out_file_name != NULL) + unlink (out_file_name); xexit (EXIT_FAILURE); -} /* as_fatal() */ +} #else -/*VARARGS1*/ -void +void as_fatal (format, va_alist) char *format; va_dcl @@ -454,18 +429,14 @@ as_fatal (format, va_alist) (void) putc ('\n', stderr); va_end (args); xexit (EXIT_FAILURE); -} /* as_fatal() */ +} #endif /* not NO_STDARG */ -/* - * as_assert: Indicate assertion failure. - * Arguments: Filename, line number, optional function name. - */ +/* Indicate assertion failure. + Arguments: Filename, line number, optional function name. */ void -as_assert (file, line, fn) - const char *file, *fn; - int line; +as_assert (const char *file, int line, const char *fn) { as_show_where (); fprintf (stderr, _("Internal error!\n")); @@ -480,10 +451,9 @@ as_assert (file, line, fn) /* as_abort: Print a friendly message saying how totally hosed we are, and exit without producing a core file. */ + void -as_abort (file, line, fn) - const char *file, *fn; - int line; +as_abort (const char *file, int line, const char *fn) { as_show_where (); if (fn) @@ -499,9 +469,7 @@ as_abort (file, line, fn) /* Support routines. */ void -fprint_value (file, val) - FILE *file; - valueT val; +fprint_value (FILE *file, valueT val) { if (sizeof (val) <= sizeof (long)) { @@ -519,9 +487,7 @@ fprint_value (file, val) } void -sprint_value (buf, val) - char *buf; - valueT val; +sprint_value (char *buf, valueT val) { if (sizeof (val) <= sizeof (long)) { @@ -537,5 +503,3 @@ sprint_value (buf, val) #endif abort (); } - -/* end of messages.c */