X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fmessages.c;h=e85deec3bde11443a80ce7c726eed551f0d77cb8;hb=f7df6a7927fca92d8839b024faa9353a0fac5c13;hp=cb544136bddc66110b166685938d4b3ed8fb6e24;hpb=f3d817d8b7dd2b45a294f2a2cb2a2eb4eed0af07;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/messages.c b/gas/messages.c index cb544136bd..e85deec3bd 100644 --- a/gas/messages.c +++ b/gas/messages.c @@ -1,6 +1,6 @@ /* messages.c - error reporter - - Copyright (C) 1987, 1991, 1992 Free Software Foundation, Inc. - + Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. GAS is free software; you can redistribute it and/or modify @@ -14,36 +14,40 @@ GNU General Public License for more details. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#include -#include + 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. */ #include "as.h" -#ifndef __STDC__ -#ifndef NO_STDARG -#define NO_STDARG -#endif +#include +#ifdef HAVE_ERRNO_H +#include #endif -#ifndef NO_STDARG +#ifdef USE_STDARG #include -#else -#ifndef NO_VARARGS +#endif + +#ifdef USE_VARARGS #include -#endif /* NO_VARARGS */ -#endif /* NO_STDARG */ +#endif -extern char *strerror (); +#if !defined (USE_STDARG) && !defined (USE_VARARGS) +/* Roll our own. */ +#define va_alist REST +#define va_dcl +typedef int * va_list; +#define va_start(ARGS) ARGS = &REST +#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), +/* 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 @@ -95,28 +99,30 @@ identify (file) as_where (&file, &x); } - fprintf (stderr, "%s: Assembler messages:\n", file); + if (file) + fprintf (stderr, "%s: ", 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 +int had_warnings () { return (warning_count); -} /* had_err() */ +} /* 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 +int had_errors () { return (error_count); -} /* had_errors() */ - +} /* Print the current location to stderr. */ @@ -128,18 +134,15 @@ as_show_where () as_where (&file, &line); identify (file); - fprintf (stderr, "%s:%u: ", file, line); + if (file) + 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 +void as_perror (gripe, filename) - const char *gripe; /* Unpunctuated error theme. */ + const char *gripe; /* Unpunctuated error theme. */ const char *filename; { const char *errtxt; @@ -149,7 +152,7 @@ as_perror (gripe, filename) #ifdef BFD_ASSEMBLER errtxt = bfd_errmsg (bfd_get_error ()); #else - errtxt = strerror (errno); + errtxt = xstrerror (errno); #endif fprintf (stderr, ": %s\n", errtxt); errno = 0; @@ -158,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. */ -#ifndef NO_STDARG -void -as_tsktsk (const char *format,...) +#ifdef USE_STDARG +void +as_tsktsk (const char *format, ...) { va_list args; @@ -178,13 +178,11 @@ as_tsktsk (const char *format,...) vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); -} /* as_tsktsk() */ - +} #else -#ifndef NO_VARARGS -void +void as_tsktsk (format, va_alist) - char *format; + const char *format; va_dcl { va_list args; @@ -194,19 +192,7 @@ as_tsktsk (format, va_alist) vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); -} /* as_tsktsk() */ - -#else -/*VARARGS1 */ -as_tsktsk (format, args) - char *format; -{ - as_show_where (); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); -} /* as_tsktsk */ - -#endif /* not NO_VARARGS */ +} #endif /* not NO_STDARG */ /* The common portion of as_warn and as_warn_where. */ @@ -223,7 +209,9 @@ as_warn_internal (file, line, buffer) as_where (&file, &line); identify (file); - fprintf (stderr, "%s:%u: Warning: ", file, line); + if (file) + fprintf (stderr, "%s:%u: ", file, line); + fprintf (stderr, _("Warning: ")); fputs (buffer, stderr); (void) putc ('\n', stderr); #ifndef NO_LISTING @@ -231,127 +219,84 @@ 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. */ -#ifndef NO_STDARG -void -as_warn (const char *format,...) +#ifdef USE_STDARG +void +as_warn (const char *format, ...) { va_list args; - char buffer[200]; + char buffer[2000]; - if (!flagseen['W']) + if (!flag_no_warnings) { va_start (args, format); vsprintf (buffer, format, args); va_end (args); as_warn_internal ((char *) NULL, 0, buffer); } -} /* as_warn() */ - +} #else -#ifndef NO_VARARGS -void +void as_warn (format, va_alist) - char *format; + const char *format; va_dcl { va_list args; - char buffer[200]; + char buffer[2000]; - if (!flagseen['W']) + if (!flag_no_warnings) { va_start (args); vsprintf (buffer, format, args); va_end (args); as_warn_internal ((char *) NULL, 0, buffer); } -} /* as_warn() */ - -#else -/*VARARGS1 */ -as_warn (format, args) - char *format; -{ - if (!flagseen['W']) - { - ++warning_count; - as_show_where (); - fprintf (stderr, "Warning: "); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); - } -} /* as_warn() */ - -#endif /* not NO_VARARGS */ +} #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. */ -#ifndef NO_STDARG -void -as_warn_where (char *file, unsigned int line, const char *format,...) +#ifdef USE_STDARG +void +as_warn_where (char *file, unsigned int line, const char *format, ...) { va_list args; - char buffer[200]; + char buffer[2000]; - if (!flagseen['W']) + if (!flag_no_warnings) { va_start (args, format); vsprintf (buffer, format, args); va_end (args); as_warn_internal (file, line, buffer); } -} /* as_warn() */ - +} #else -#ifndef NO_VARARGS -void +void as_warn_where (file, line, format, va_alist) char *file; unsigned int line; - char *format; + const char *format; va_dcl { va_list args; - char buffer[200]; + char buffer[2000]; - if (!flagseen['W']) + if (!flag_no_warnings) { va_start (args); vsprintf (buffer, format, args); va_end (args); as_warn_internal (file, line, buffer); } -} /* as_warn() */ - -#else -/*VARARGS1 */ -as_warn_where (file, line, format, args) - char *file; - unsigned int line; - char *format; -{ - if (!flagseen['W']) - { - ++warning_count; - identify (file); - fprintf (stderr, "%s:%u: Warning: ", file, line); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); - } -} /* as_warn() */ - -#endif /* not NO_VARARGS */ +} #endif /* not NO_STDARG */ /* The common portion of as_bad and as_bad_where. */ @@ -368,7 +313,9 @@ as_bad_internal (file, line, buffer) as_where (&file, &line); identify (file); - fprintf (stderr, "%s:%u: Error: ", file, line); + if (file) + fprintf (stderr, "%s:%u: ", file, line); + fprintf (stderr, _("Error: ")); fputs (buffer, stderr); (void) putc ('\n', stderr); #ifndef NO_LISTING @@ -376,21 +323,18 @@ 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. */ -#ifndef NO_STDARG -void -as_bad (const char *format,...) +#ifdef USE_STDARG +void +as_bad (const char *format, ...) { va_list args; - char buffer[200]; + char buffer[2000]; va_start (args, format); vsprintf (buffer, format, args); @@ -400,14 +344,13 @@ as_bad (const char *format,...) } #else -#ifndef NO_VARARGS -void +void as_bad (format, va_alist) - char *format; + const char *format; va_dcl { va_list args; - char buffer[200]; + char buffer[2000]; va_start (args); vsprintf (buffer, format, args); @@ -415,33 +358,18 @@ as_bad (format, va_alist) as_bad_internal ((char *) NULL, 0, buffer); } - -#else -/*VARARGS1 */ -as_bad (format, args) - char *format; -{ - ++error_count; - - as_show_where (); - fprintf (stderr, "Error: "); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); -} /* as_bad() */ - -#endif /* not NO_VARARGS */ #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. */ -#ifndef NO_STDARG -void -as_bad_where (char *file, unsigned int line, const char *format,...) +#ifdef USE_STDARG +void +as_bad_where (char *file, unsigned int line, const char *format, ...) { va_list args; - char buffer[200]; + char buffer[2000]; va_start (args, format); vsprintf (buffer, format, args); @@ -451,16 +379,15 @@ as_bad_where (char *file, unsigned int line, const char *format,...) } #else -#ifndef NO_VARARGS -void +void as_bad_where (file, line, format, va_alist) char *file; unsigned int line; - char *format; + const char *format; va_dcl { va_list args; - char buffer[200]; + char buffer[2000]; va_start (args); vsprintf (buffer, format, args); @@ -468,52 +395,33 @@ as_bad_where (file, line, format, va_alist) as_bad_internal (file, line, buffer); } - -#else -/*VARARGS1 */ -as_bad_where (file, line, format, args) - char *file; - unsigned int line; - char *format; -{ - ++error_count; - - identify (file); - fprintf (stderr, "%s:%u: Error: ", file, line); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); -} /* as_bad() */ - -#endif /* not NO_VARARGS */ #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 exit()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. */ -#ifndef NO_STDARG -void -as_fatal (const char *format,...) +#ifdef USE_STDARG +void +as_fatal (const char *format, ...) { va_list args; as_show_where (); va_start (args, format); - fprintf (stderr, "Fatal error:"); + fprintf (stderr, _("Fatal error: ")); vfprintf (stderr, format, args); (void) putc ('\n', stderr); va_end (args); - exit (33); -} /* as_fatal() */ - + /* 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); +} #else -#ifndef NO_VARARGS -void +void as_fatal (format, va_alist) char *format; va_dcl @@ -522,27 +430,53 @@ as_fatal (format, va_alist) as_show_where (); va_start (args); - fprintf (stderr, "Fatal error:"); + fprintf (stderr, _("Fatal error: ")); vfprintf (stderr, format, args); (void) putc ('\n', stderr); va_end (args); - exit (33); -} /* as_fatal() */ + xexit (EXIT_FAILURE); +} +#endif /* not NO_STDARG */ -#else -/*VARARGS1 */ -as_fatal (format, args) - char *format; +/* Indicate assertion failure. + Arguments: Filename, line number, optional function name. */ + +void +as_assert (file, line, fn) + const char *file, *fn; + int line; { as_show_where (); - fprintf (stderr, "Fatal error:"); - _doprnt (format, &args, stderr); - (void) putc ('\n', stderr); - exit (33); /* What is a good exit status? */ -} /* as_fatal() */ + fprintf (stderr, _("Internal error!\n")); + if (fn) + fprintf (stderr, _("Assertion failure in %s at %s line %d.\n"), + fn, file, line); + else + fprintf (stderr, _("Assertion failure at %s line %d.\n"), file, line); + fprintf (stderr, _("Please report this bug.\n")); + xexit (EXIT_FAILURE); +} -#endif /* not NO_VARARGS */ -#endif /* not NO_STDARG */ +/* 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_show_where (); + if (fn) + fprintf (stderr, _("Internal error, aborting at %s line %d in %s\n"), + file, line, fn); + else + fprintf (stderr, _("Internal error, aborting at %s line %d\n"), + file, line); + fprintf (stderr, _("Please report this bug.\n")); + xexit (EXIT_FAILURE); +} + +/* Support routines. */ void fprint_value (file, val) @@ -551,7 +485,7 @@ fprint_value (file, val) { if (sizeof (val) <= sizeof (long)) { - fprintf (file, "%ld", val); + fprintf (file, "%ld", (long) val); return; } #ifdef BFD_ASSEMBLER @@ -571,7 +505,7 @@ sprint_value (buf, val) { if (sizeof (val) <= sizeof (long)) { - sprintf (buf, "%ld", val); + sprintf (buf, "%ld", (long) val); return; } #ifdef BFD_ASSEMBLER @@ -583,5 +517,3 @@ sprint_value (buf, val) #endif abort (); } - -/* end of messages.c */