gdb/
[binutils-gdb.git] / gas / messages.c
index a8e309d1622cf2a9977327a362f92a1a3347ff7a..9ea1bce26dcdfb0c8dca15cdfc02a783e14dc5cc 100644 (file)
@@ -1,12 +1,12 @@
 /* messages.c - error reporter -
    Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
 /* messages.c - error reporter -
    Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
-   2003, 2004, 2005
+   2003, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Free Software Foundation, Inc.
    This file is part of GAS, the GNU Assembler.
 
    GAS 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, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 
 #include "as.h"
 
 
 #include "as.h"
 
-#include <stdio.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-#ifdef USE_STDARG
-#include <stdarg.h>
-#endif
-
-#ifdef USE_VARARGS
-#include <varargs.h>
-#endif
-
-#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 (char *);
 static void as_show_where (void);
 static void as_warn_internal (char *, unsigned int, char *);
 static void identify (char *);
 static void as_show_where (void);
 static void as_warn_internal (char *, unsigned int, char *);
@@ -138,31 +116,12 @@ as_show_where (void)
     fprintf (stderr, "%s:%u: ", file, line);
 }
 
     fprintf (stderr, "%s:%u: ", file, line);
 }
 
-/* Like perror(3), but with more info.  */
-
-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;
-  errtxt = bfd_errmsg (bfd_get_error ());
-  fprintf (stderr, ": %s\n", errtxt);
-  errno = 0;
-  bfd_set_error (bfd_error_no_error);
-}
-
 /* 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, ...)
 {
@@ -174,21 +133,6 @@ as_tsktsk (const char *format, ...)
   va_end (args);
   (void) putc ('\n', stderr);
 }
   va_end (args);
   (void) putc ('\n', stderr);
 }
-#else
-void
-as_tsktsk (format, va_alist)
-     const char *format;
-     va_dcl
-{
-  va_list args;
-
-  as_show_where ();
-  va_start (args);
-  vfprintf (stderr, format, args);
-  va_end (args);
-  (void) putc ('\n', stderr);
-}
-#endif /* not NO_STDARG */
 
 /* The common portion of as_warn and as_warn_where.  */
 
 
 /* The common portion of as_warn and as_warn_where.  */
 
@@ -217,7 +161,6 @@ as_warn_internal (char *file, unsigned int line, char *buffer)
    Please explain in string (which may have '\n's) what recovery was
    done.  */
 
    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, ...)
 {
@@ -232,30 +175,11 @@ as_warn (const char *format, ...)
       as_warn_internal ((char *) NULL, 0, buffer);
     }
 }
       as_warn_internal ((char *) NULL, 0, buffer);
     }
 }
-#else
-void
-as_warn (format, va_alist)
-     const char *format;
-     va_dcl
-{
-  va_list args;
-  char buffer[2000];
-
-  if (!flag_no_warnings)
-    {
-      va_start (args);
-      vsnprintf (buffer, sizeof (buffer), format, args);
-      va_end (args);
-      as_warn_internal ((char *) NULL, 0, buffer);
-    }
-}
-#endif /* not NO_STDARG */
 
 /* 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, ...)
 {
@@ -270,26 +194,6 @@ as_warn_where (char *file, unsigned int line, const char *format, ...)
       as_warn_internal (file, line, buffer);
     }
 }
       as_warn_internal (file, line, buffer);
     }
 }
-#else
-void
-as_warn_where (file, line, format, va_alist)
-     char *file;
-     unsigned int line;
-     const char *format;
-     va_dcl
-{
-  va_list args;
-  char buffer[2000];
-
-  if (!flag_no_warnings)
-    {
-      va_start (args);
-      vsnprintf (buffer, sizeof (buffer), format, args);
-      va_end (args);
-      as_warn_internal (file, line, buffer);
-    }
-}
-#endif /* not NO_STDARG */
 
 /* The common portion of as_bad and as_bad_where.  */
 
 
 /* The common portion of as_bad and as_bad_where.  */
 
@@ -318,7 +222,6 @@ as_bad_internal (char *file, unsigned int line, char *buffer)
    Please explain in string (which may have '\n's) what recovery was
    done.  */
 
    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, ...)
 {
@@ -332,28 +235,10 @@ as_bad (const char *format, ...)
   as_bad_internal ((char *) NULL, 0, buffer);
 }
 
   as_bad_internal ((char *) NULL, 0, buffer);
 }
 
-#else
-void
-as_bad (format, va_alist)
-     const char *format;
-     va_dcl
-{
-  va_list args;
-  char buffer[2000];
-
-  va_start (args);
-  vsnprintf (buffer, sizeof (buffer), format, args);
-  va_end (args);
-
-  as_bad_internal ((char *) NULL, 0, buffer);
-}
-#endif /* not NO_STDARG */
-
 /* 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, ...)
 {
@@ -367,31 +252,11 @@ as_bad_where (char *file, unsigned int line, const char *format, ...)
   as_bad_internal (file, line, buffer);
 }
 
   as_bad_internal (file, line, buffer);
 }
 
-#else
-void
-as_bad_where (file, line, format, va_alist)
-     char *file;
-     unsigned int line;
-     const char *format;
-     va_dcl
-{
-  va_list args;
-  char buffer[2000];
-
-  va_start (args);
-  vsnprintf (buffer, sizeof (buffer), format, args);
-  va_end (args);
-
-  as_bad_internal (file, line, buffer);
-}
-#endif /* not NO_STDARG */
-
 /* 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, ...)
 {
@@ -409,23 +274,6 @@ as_fatal (const char *format, ...)
     unlink_if_ordinary (out_file_name);
   xexit (EXIT_FAILURE);
 }
     unlink_if_ordinary (out_file_name);
   xexit (EXIT_FAILURE);
 }
-#else
-void
-as_fatal (format, va_alist)
-     char *format;
-     va_dcl
-{
-  va_list args;
-
-  as_show_where ();
-  va_start (args);
-  fprintf (stderr, _("Fatal error: "));
-  vfprintf (stderr, format, args);
-  (void) putc ('\n', stderr);
-  va_end (args);
-  xexit (EXIT_FAILURE);
-}
-#endif /* not NO_STDARG */
 
 /* Indicate assertion failure.
    Arguments: Filename, line number, optional function name.  */
 
 /* Indicate assertion failure.
    Arguments: Filename, line number, optional function name.  */
@@ -496,6 +344,24 @@ as_internal_value_out_of_range (char *    prefix,
   if (prefix == NULL)
     prefix = "";
 
   if (prefix == NULL)
     prefix = "";
 
+  if (val >= min && val <= max)
+    {
+      addressT right = max & -max;
+
+      if (max <= 1)
+       abort ();
+
+      /* xgettext:c-format  */
+      err = _("%s out of domain (%d is not a multiple of %d)");
+      if (bad)
+       as_bad_where (file, line, err,
+                     prefix, (int) val, (int) right);
+      else
+       as_warn_where (file, line, err,
+                      prefix, (int) val, (int) right);
+      return;
+    }
+
   if (   val < HEX_MAX_THRESHOLD
       && min < HEX_MAX_THRESHOLD
       && max < HEX_MAX_THRESHOLD
   if (   val < HEX_MAX_THRESHOLD
       && min < HEX_MAX_THRESHOLD
       && max < HEX_MAX_THRESHOLD
@@ -522,9 +388,9 @@ as_internal_value_out_of_range (char *    prefix,
       if (sizeof (val) > sizeof (bfd_vma))
        abort ();
 
       if (sizeof (val) > sizeof (bfd_vma))
        abort ();
 
-      sprintf_vma (val_buf, val);
-      sprintf_vma (min_buf, min);
-      sprintf_vma (max_buf, max);
+      sprintf_vma (val_buf, (bfd_vma) val);
+      sprintf_vma (min_buf, (bfd_vma) min);
+      sprintf_vma (max_buf, (bfd_vma) max);
 
       /* xgettext:c-format.  */
       err = _("%s out of range (0x%s is not between 0x%s and 0x%s)");
 
       /* xgettext:c-format.  */
       err = _("%s out of range (0x%s is not between 0x%s and 0x%s)");