diff options
author | David MacKenzie <djm@cygnus> | 1994-06-03 17:42:27 +0000 |
---|---|---|
committer | David MacKenzie <djm@cygnus> | 1994-06-03 17:42:27 +0000 |
commit | f3d817d8b7dd2b45a294f2a2cb2a2eb4eed0af07 (patch) | |
tree | abba03b98ddaacc2f7f940a5d16cd2f2bf10485b /gas/messages.c | |
parent | 172559ec3375efe6c3964670fe22c38255ee4280 (diff) | |
download | ppe42-binutils-f3d817d8b7dd2b45a294f2a2cb2a2eb4eed0af07.tar.gz ppe42-binutils-f3d817d8b7dd2b45a294f2a2cb2a2eb4eed0af07.zip |
* as.c (show_usage): Remove target specific messages;
instead, call md_show_usage.
(parse_args): Use getopt_long_only. Take pointers to argc and
argv.
(main): Pass parse_args pointers.
* as.h: Remove 3 variables that are redundant with flagseen.
* as.c, messages.c: Change their users to use flagseen.
Define getopt stuff.
* tc.h: Update md_parse_option decl. Add md_show_usage decl.
* config/tc-*.c: Add md_shortopts, md_longopts,
md_longopts_size, md_show_usage. Change calling convention for
md_parse_option. Remove md_parse_long_option.
* config/tc-ns32k.c: Rename `struct option' to `struct ns32k_option'.
* config/tc-i386.h: Don't define md_parse_option.
Diffstat (limited to 'gas/messages.c')
-rw-r--r-- | gas/messages.c | 378 |
1 files changed, 265 insertions, 113 deletions
diff --git a/gas/messages.c b/gas/messages.c index 80c1d85967..cb544136bd 100644 --- a/gas/messages.c +++ b/gas/messages.c @@ -17,7 +17,7 @@ along with GAS; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <stdio.h> /* define stderr */ +#include <stdio.h> #include <errno.h> #include "as.h" @@ -38,6 +38,10 @@ extern char *strerror (); +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: @@ -76,29 +80,23 @@ extern char *strerror (); * continues as though no error occurred. */ -/* - ERRORS - - JF: this is now bogus. We now print more standard error messages - that try to look like everyone else's. - - We print the error message 1st, beginning in column 1. - All ancillary info starts in column 2 on lines after the - key error text. - We try to print a location in logical and physical file - just after the main error text. - Caller then prints any appendices after that, begining all - lines with at least 1 space. - - Optionally, we may die. - There is no need for a trailing '\n' in your error text format - because we supply one. - - as_warn(fmt,args) Like fprintf(stderr,fmt,args) but also call errwhere(). +static void +identify (file) + char *file; +{ + static int identified; + if (identified) + return; + identified++; - as_fatal(fmt,args) Like as_warn() but exit with a fatal status. + if (!file) + { + unsigned int x; + as_where (&file, &x); + } - */ + fprintf (stderr, "%s: Assembler messages:\n", file); +} static int warning_count; /* Count of number of warnings issued */ @@ -120,21 +118,45 @@ had_errors () } /* had_errors() */ +/* Print the current location to stderr. */ + +static void +as_show_where () +{ + char *file; + unsigned int line; + + as_where (&file, &line); + identify (file); + fprintf (stderr, "%s:%u: ", file, line); +} + /* * a s _ p e r r o r * * Like perror(3), but with more info. */ + void as_perror (gripe, filename) - char *gripe; /* Unpunctuated error theme. */ - char *filename; + const char *gripe; /* Unpunctuated error theme. */ + const char *filename; { - as_where (); + const char *errtxt; + + as_show_where (); fprintf (stderr, gripe, filename); - fprintf (stderr, ": %s\n", strerror (errno)); - errno = 0; /* After reporting, clear it. */ -} /* as_perror() */ +#ifdef BFD_ASSEMBLER + errtxt = bfd_errmsg (bfd_get_error ()); +#else + errtxt = strerror (errno); +#endif + fprintf (stderr, ": %s\n", errtxt); + errno = 0; +#ifdef BFD_ASSEMBLER + bfd_set_error (bfd_error_no_error); +#endif +} /* * a s _ t s k t s k () @@ -147,13 +169,13 @@ as_perror (gripe, filename) #ifndef NO_STDARG void -as_tsktsk (const char *Format,...) +as_tsktsk (const char *format,...) { va_list args; - as_where (); - va_start (args, Format); - vfprintf (stderr, Format, args); + as_show_where (); + va_start (args, format); + vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); } /* as_tsktsk() */ @@ -161,33 +183,54 @@ as_tsktsk (const char *Format,...) #else #ifndef NO_VARARGS void -as_tsktsk (Format, va_alist) - char *Format; +as_tsktsk (format, va_alist) + char *format; va_dcl { va_list args; - as_where (); + as_show_where (); va_start (args); - vfprintf (stderr, Format, args); + vfprintf (stderr, format, args); va_end (args); (void) putc ('\n', stderr); } /* as_tsktsk() */ #else /*VARARGS1 */ -as_tsktsk (Format, args) - char *Format; +as_tsktsk (format, args) + char *format; { - as_where (); - _doprnt (Format, &args, stderr); + as_show_where (); + _doprnt (format, &args, stderr); (void) putc ('\n', stderr); - /* as_where(); */ } /* as_tsktsk */ #endif /* not NO_VARARGS */ #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; +{ + ++warning_count; + + if (file == NULL) + as_where (&file, &line); + + identify (file); + fprintf (stderr, "%s:%u: Warning: ", file, line); + fputs (buffer, stderr); + (void) putc ('\n', stderr); +#ifndef NO_LISTING + listing_warning (buffer); +#endif +} + /* * a s _ w a r n () * @@ -199,71 +242,140 @@ as_tsktsk (Format, args) #ifndef NO_STDARG void -as_warn (const char *Format,...) +as_warn (const char *format,...) { va_list args; char buffer[200]; - if (!flag_suppress_warnings) + if (!flagseen['W']) + { + 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 +as_warn (format, va_alist) + char *format; + va_dcl +{ + va_list args; + char buffer[200]; + + if (!flagseen['W']) + { + 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_where (); - va_start (args, Format); + as_show_where (); fprintf (stderr, "Warning: "); - vsprintf (buffer, Format, args); - fputs (buffer, stderr); -#ifndef NO_LISTING - listing_warning (buffer); -#endif - va_end (args); + _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. */ + +#ifndef NO_STDARG +void +as_warn_where (char *file, unsigned int line, const char *format,...) +{ + va_list args; + char buffer[200]; + + if (!flagseen['W']) + { + va_start (args, format); + vsprintf (buffer, format, args); + va_end (args); + as_warn_internal (file, line, buffer); + } +} /* as_warn() */ + #else #ifndef NO_VARARGS void -as_warn (Format, va_alist) - char *Format; +as_warn_where (file, line, format, va_alist) + char *file; + unsigned int line; + char *format; va_dcl { va_list args; char buffer[200]; - if (!flag_suppress_warnings) + if (!flagseen['W']) { - ++warning_count; - as_where (); va_start (args); - fprintf (stderr, "Warning: "); - vsprintf (buffer, Format, args); - fputs (buffer, stderr); -#ifndef NO_LISTING - listing_warning (buffer); -#endif + vsprintf (buffer, format, args); va_end (args); - (void) putc ('\n', stderr); + as_warn_internal (file, line, buffer); } } /* as_warn() */ #else /*VARARGS1 */ -as_warn (Format, args) - char *Format; +as_warn_where (file, line, format, args) + char *file; + unsigned int line; + char *format; { - if (!flag_suppress_warnings) + if (!flagseen['W']) { ++warning_count; - as_where (); - _doprnt (Format, &args, stderr); + identify (file); + fprintf (stderr, "%s:%u: Warning: ", file, line); + _doprnt (format, &args, stderr); (void) putc ('\n', stderr); - /* as_where(); */ } } /* as_warn() */ #endif /* not NO_VARARGS */ #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; +{ + ++error_count; + + if (file == NULL) + as_where (&file, &line); + + identify (file); + fprintf (stderr, "%s:%u: Error: ", file, line); + fputs (buffer, stderr); + (void) putc ('\n', stderr); +#ifndef NO_LISTING + listing_error (buffer); +#endif +} + /* * a s _ b a d () * @@ -275,60 +387,101 @@ as_warn (Format, args) #ifndef NO_STDARG void -as_bad (const char *Format,...) +as_bad (const char *format,...) { va_list args; char buffer[200]; - ++error_count; - as_where (); - va_start (args, Format); - fprintf (stderr, "Error: "); + va_start (args, format); + vsprintf (buffer, format, args); + va_end (args); - vsprintf (buffer, Format, args); - fputs (buffer, stderr); -#ifndef NO_LISTING - listing_error (buffer); -#endif + as_bad_internal ((char *) NULL, 0, buffer); +} + +#else +#ifndef NO_VARARGS +void +as_bad (format, va_alist) + char *format; + va_dcl +{ + va_list args; + char buffer[200]; + + va_start (args); + vsprintf (buffer, format, args); va_end (args); + + 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. */ + +#ifndef NO_STDARG +void +as_bad_where (char *file, unsigned int line, const char *format,...) +{ + va_list args; + char buffer[200]; + + va_start (args, format); + vsprintf (buffer, format, args); + va_end (args); + + as_bad_internal (file, line, buffer); +} + #else #ifndef NO_VARARGS void -as_bad (Format, va_alist) - char *Format; +as_bad_where (file, line, format, va_alist) + char *file; + unsigned int line; + char *format; va_dcl { va_list args; char buffer[200]; - ++error_count; - as_where (); va_start (args); - vsprintf (buffer, Format, args); - fputs (buffer, stderr); -#ifndef NO_LISTING - listing_error (buffer); -#endif - + vsprintf (buffer, format, args); va_end (args); - (void) putc ('\n', stderr); -} /* as_bad() */ + + as_bad_internal (file, line, buffer); +} #else /*VARARGS1 */ -as_bad (Format, args) - char *Format; +as_bad_where (file, line, format, args) + char *file; + unsigned int line; + char *format; { ++error_count; - as_where (); - fprintf (stderr, "Error: "); - _doprnt (Format, &args, stderr); + identify (file); + fprintf (stderr, "%s:%u: Error: ", file, line); + _doprnt (format, &args, stderr); (void) putc ('\n', stderr); - /* as_where(); */ } /* as_bad() */ #endif /* not NO_VARARGS */ @@ -345,14 +498,14 @@ as_bad (Format, args) #ifndef NO_STDARG void -as_fatal (const char *Format,...) +as_fatal (const char *format,...) { va_list args; - as_where (); - va_start (args, Format); - fprintf (stderr, "Assembler fatal error:"); - vfprintf (stderr, Format, args); + as_show_where (); + va_start (args, format); + fprintf (stderr, "Fatal error:"); + vfprintf (stderr, format, args); (void) putc ('\n', stderr); va_end (args); exit (33); @@ -361,16 +514,16 @@ as_fatal (const char *Format,...) #else #ifndef NO_VARARGS void -as_fatal (Format, va_alist) - char *Format; +as_fatal (format, va_alist) + char *format; va_dcl { va_list args; - as_where (); + as_show_where (); va_start (args); - fprintf (stderr, "Assembler fatal error:"); - vfprintf (stderr, Format, args); + fprintf (stderr, "Fatal error:"); + vfprintf (stderr, format, args); (void) putc ('\n', stderr); va_end (args); exit (33); @@ -378,14 +531,13 @@ as_fatal (Format, va_alist) #else /*VARARGS1 */ -as_fatal (Format, args) - char *Format; +as_fatal (format, args) + char *format; { - as_where (); - fprintf (stderr, "Assembler fatal error:"); - _doprnt (Format, &args, stderr); + as_show_where (); + fprintf (stderr, "Fatal error:"); + _doprnt (format, &args, stderr); (void) putc ('\n', stderr); - /* as_where(); */ exit (33); /* What is a good exit status? */ } /* as_fatal() */ |