xref: /dflybsd-src/contrib/binutils-2.34/gas/messages.c (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj /* messages.c - error reporter -
2*fae548d3Szrj    Copyright (C) 1987-2020 Free Software Foundation, Inc.
3*fae548d3Szrj    This file is part of GAS, the GNU Assembler.
4*fae548d3Szrj 
5*fae548d3Szrj    GAS is free software; you can redistribute it and/or modify
6*fae548d3Szrj    it under the terms of the GNU General Public License as published by
7*fae548d3Szrj    the Free Software Foundation; either version 3, or (at your option)
8*fae548d3Szrj    any later version.
9*fae548d3Szrj 
10*fae548d3Szrj    GAS is distributed in the hope that it will be useful,
11*fae548d3Szrj    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*fae548d3Szrj    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*fae548d3Szrj    GNU General Public License for more details.
14*fae548d3Szrj 
15*fae548d3Szrj    You should have received a copy of the GNU General Public License
16*fae548d3Szrj    along with GAS; see the file COPYING.  If not, write to the Free
17*fae548d3Szrj    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
18*fae548d3Szrj    02110-1301, USA.  */
19*fae548d3Szrj 
20*fae548d3Szrj #include "as.h"
21*fae548d3Szrj #include <signal.h>
22*fae548d3Szrj 
23*fae548d3Szrj /* If the system doesn't provide strsignal, we get it defined in
24*fae548d3Szrj    libiberty but no declaration is supplied.  Because, reasons. */
25*fae548d3Szrj #if !defined (HAVE_STRSIGNAL) && !defined (strsignal)
26*fae548d3Szrj extern const char *strsignal (int);
27*fae548d3Szrj #endif
28*fae548d3Szrj 
29*fae548d3Szrj static void identify (const char *);
30*fae548d3Szrj static void as_show_where (void);
31*fae548d3Szrj static void as_warn_internal (const char *, unsigned int, char *);
32*fae548d3Szrj static void as_bad_internal (const char *, unsigned int, char *);
33*fae548d3Szrj static void signal_crash (int) ATTRIBUTE_NORETURN;
34*fae548d3Szrj 
35*fae548d3Szrj /* Despite the rest of the comments in this file, (FIXME-SOON),
36*fae548d3Szrj    here is the current scheme for error messages etc:
37*fae548d3Szrj 
38*fae548d3Szrj    as_fatal() is used when gas is quite confused and
39*fae548d3Szrj    continuing the assembly is pointless.  In this case we
40*fae548d3Szrj    exit immediately with error status.
41*fae548d3Szrj 
42*fae548d3Szrj    as_bad() is used to mark errors that result in what we
43*fae548d3Szrj    presume to be a useless object file.  Say, we ignored
44*fae548d3Szrj    something that might have been vital.  If we see any of
45*fae548d3Szrj    these, assembly will continue to the end of the source,
46*fae548d3Szrj    no object file will be produced, and we will terminate
47*fae548d3Szrj    with error status.  The new option, -Z, tells us to
48*fae548d3Szrj    produce an object file anyway but we still exit with
49*fae548d3Szrj    error status.  The assumption here is that you don't want
50*fae548d3Szrj    this object file but we could be wrong.
51*fae548d3Szrj 
52*fae548d3Szrj    as_warn() is used when we have an error from which we
53*fae548d3Szrj    have a plausible error recovery.  eg, masking the top
54*fae548d3Szrj    bits of a constant that is longer than will fit in the
55*fae548d3Szrj    destination.  In this case we will continue to assemble
56*fae548d3Szrj    the source, although we may have made a bad assumption,
57*fae548d3Szrj    and we will produce an object file and return normal exit
58*fae548d3Szrj    status (ie, no error).  The new option -X tells us to
59*fae548d3Szrj    treat all as_warn() errors as as_bad() errors.  That is,
60*fae548d3Szrj    no object file will be produced and we will exit with
61*fae548d3Szrj    error status.  The idea here is that we don't kill an
62*fae548d3Szrj    entire make because of an error that we knew how to
63*fae548d3Szrj    correct.  On the other hand, sometimes you might want to
64*fae548d3Szrj    stop the make at these points.
65*fae548d3Szrj 
66*fae548d3Szrj    as_tsktsk() is used when we see a minor error for which
67*fae548d3Szrj    our error recovery action is almost certainly correct.
68*fae548d3Szrj    In this case, we print a message and then assembly
69*fae548d3Szrj    continues as though no error occurred.
70*fae548d3Szrj 
71*fae548d3Szrj    as_abort () is used for logic failure (assert or abort, signal).
72*fae548d3Szrj */
73*fae548d3Szrj 
74*fae548d3Szrj static void
identify(const char * file)75*fae548d3Szrj identify (const char *file)
76*fae548d3Szrj {
77*fae548d3Szrj   static int identified;
78*fae548d3Szrj 
79*fae548d3Szrj   if (identified)
80*fae548d3Szrj     return;
81*fae548d3Szrj   identified++;
82*fae548d3Szrj 
83*fae548d3Szrj   if (!file)
84*fae548d3Szrj     {
85*fae548d3Szrj       unsigned int x;
86*fae548d3Szrj       file = as_where (&x);
87*fae548d3Szrj     }
88*fae548d3Szrj 
89*fae548d3Szrj   if (file)
90*fae548d3Szrj     fprintf (stderr, "%s: ", file);
91*fae548d3Szrj   fprintf (stderr, _("Assembler messages:\n"));
92*fae548d3Szrj }
93*fae548d3Szrj 
94*fae548d3Szrj /* The number of warnings issued.  */
95*fae548d3Szrj static int warning_count;
96*fae548d3Szrj 
97*fae548d3Szrj int
had_warnings(void)98*fae548d3Szrj had_warnings (void)
99*fae548d3Szrj {
100*fae548d3Szrj   return warning_count;
101*fae548d3Szrj }
102*fae548d3Szrj 
103*fae548d3Szrj /* Nonzero if we've hit a 'bad error', and should not write an obj file,
104*fae548d3Szrj    and exit with a nonzero error code.  */
105*fae548d3Szrj 
106*fae548d3Szrj static int error_count;
107*fae548d3Szrj 
108*fae548d3Szrj int
had_errors(void)109*fae548d3Szrj had_errors (void)
110*fae548d3Szrj {
111*fae548d3Szrj   return error_count;
112*fae548d3Szrj }
113*fae548d3Szrj 
114*fae548d3Szrj /* Print the current location to stderr.  */
115*fae548d3Szrj 
116*fae548d3Szrj static void
as_show_where(void)117*fae548d3Szrj as_show_where (void)
118*fae548d3Szrj {
119*fae548d3Szrj   const char *file;
120*fae548d3Szrj   unsigned int line;
121*fae548d3Szrj 
122*fae548d3Szrj   file = as_where (&line);
123*fae548d3Szrj   identify (file);
124*fae548d3Szrj   if (file)
125*fae548d3Szrj     {
126*fae548d3Szrj       if (line != 0)
127*fae548d3Szrj 	fprintf (stderr, "%s:%u: ", file, line);
128*fae548d3Szrj       else
129*fae548d3Szrj 	fprintf (stderr, "%s: ", file);
130*fae548d3Szrj     }
131*fae548d3Szrj }
132*fae548d3Szrj 
133*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning
134*fae548d3Szrj    in input file(s).
135*fae548d3Szrj    Please only use this for when we have some recovery action.
136*fae548d3Szrj    Please explain in string (which may have '\n's) what recovery was
137*fae548d3Szrj    done.  */
138*fae548d3Szrj 
139*fae548d3Szrj void
as_tsktsk(const char * format,...)140*fae548d3Szrj as_tsktsk (const char *format, ...)
141*fae548d3Szrj {
142*fae548d3Szrj   va_list args;
143*fae548d3Szrj 
144*fae548d3Szrj   as_show_where ();
145*fae548d3Szrj   va_start (args, format);
146*fae548d3Szrj   vfprintf (stderr, format, args);
147*fae548d3Szrj   va_end (args);
148*fae548d3Szrj   (void) putc ('\n', stderr);
149*fae548d3Szrj }
150*fae548d3Szrj 
151*fae548d3Szrj /* The common portion of as_warn and as_warn_where.  */
152*fae548d3Szrj 
153*fae548d3Szrj static void
as_warn_internal(const char * file,unsigned int line,char * buffer)154*fae548d3Szrj as_warn_internal (const char *file, unsigned int line, char *buffer)
155*fae548d3Szrj {
156*fae548d3Szrj   ++warning_count;
157*fae548d3Szrj 
158*fae548d3Szrj   if (file == NULL)
159*fae548d3Szrj     file = as_where (&line);
160*fae548d3Szrj 
161*fae548d3Szrj   identify (file);
162*fae548d3Szrj   if (file)
163*fae548d3Szrj     {
164*fae548d3Szrj       if (line != 0)
165*fae548d3Szrj 	fprintf (stderr, "%s:%u: %s%s\n", file, line, _("Warning: "), buffer);
166*fae548d3Szrj       else
167*fae548d3Szrj 	fprintf (stderr, "%s: %s%s\n", file, _("Warning: "), buffer);
168*fae548d3Szrj     }
169*fae548d3Szrj   else
170*fae548d3Szrj     fprintf (stderr, "%s%s\n", _("Warning: "), buffer);
171*fae548d3Szrj #ifndef NO_LISTING
172*fae548d3Szrj   listing_warning (buffer);
173*fae548d3Szrj #endif
174*fae548d3Szrj }
175*fae548d3Szrj 
176*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning
177*fae548d3Szrj    in input file(s).
178*fae548d3Szrj    Please only use this for when we have some recovery action.
179*fae548d3Szrj    Please explain in string (which may have '\n's) what recovery was
180*fae548d3Szrj    done.  */
181*fae548d3Szrj 
182*fae548d3Szrj void
as_warn(const char * format,...)183*fae548d3Szrj as_warn (const char *format, ...)
184*fae548d3Szrj {
185*fae548d3Szrj   va_list args;
186*fae548d3Szrj   char buffer[2000];
187*fae548d3Szrj 
188*fae548d3Szrj   if (!flag_no_warnings)
189*fae548d3Szrj     {
190*fae548d3Szrj       va_start (args, format);
191*fae548d3Szrj       vsnprintf (buffer, sizeof (buffer), format, args);
192*fae548d3Szrj       va_end (args);
193*fae548d3Szrj       as_warn_internal ((char *) NULL, 0, buffer);
194*fae548d3Szrj     }
195*fae548d3Szrj }
196*fae548d3Szrj 
197*fae548d3Szrj /* Like as_bad but the file name and line number are passed in.
198*fae548d3Szrj    Unfortunately, we have to repeat the function in order to handle
199*fae548d3Szrj    the varargs correctly and portably.  */
200*fae548d3Szrj 
201*fae548d3Szrj void
as_warn_where(const char * file,unsigned int line,const char * format,...)202*fae548d3Szrj as_warn_where (const char *file, unsigned int line, const char *format, ...)
203*fae548d3Szrj {
204*fae548d3Szrj   va_list args;
205*fae548d3Szrj   char buffer[2000];
206*fae548d3Szrj 
207*fae548d3Szrj   if (!flag_no_warnings)
208*fae548d3Szrj     {
209*fae548d3Szrj       va_start (args, format);
210*fae548d3Szrj       vsnprintf (buffer, sizeof (buffer), format, args);
211*fae548d3Szrj       va_end (args);
212*fae548d3Szrj       as_warn_internal (file, line, buffer);
213*fae548d3Szrj     }
214*fae548d3Szrj }
215*fae548d3Szrj 
216*fae548d3Szrj /* The common portion of as_bad and as_bad_where.  */
217*fae548d3Szrj 
218*fae548d3Szrj static void
as_bad_internal(const char * file,unsigned int line,char * buffer)219*fae548d3Szrj as_bad_internal (const char *file, unsigned int line, char *buffer)
220*fae548d3Szrj {
221*fae548d3Szrj   ++error_count;
222*fae548d3Szrj 
223*fae548d3Szrj   if (file == NULL)
224*fae548d3Szrj     file = as_where (&line);
225*fae548d3Szrj 
226*fae548d3Szrj   identify (file);
227*fae548d3Szrj   if (file)
228*fae548d3Szrj     {
229*fae548d3Szrj       if (line != 0)
230*fae548d3Szrj 	fprintf (stderr, "%s:%u: %s%s\n", file, line, _("Error: "), buffer);
231*fae548d3Szrj       else
232*fae548d3Szrj 	fprintf (stderr, "%s: %s%s\n", file, _("Error: "), buffer);
233*fae548d3Szrj     }
234*fae548d3Szrj   else
235*fae548d3Szrj     fprintf (stderr, "%s%s\n", _("Error: "), buffer);
236*fae548d3Szrj #ifndef NO_LISTING
237*fae548d3Szrj   listing_error (buffer);
238*fae548d3Szrj #endif
239*fae548d3Szrj }
240*fae548d3Szrj 
241*fae548d3Szrj /* Send to stderr a string as a warning, and locate warning in input
242*fae548d3Szrj    file(s).  Please use when there is no recovery, but we want to
243*fae548d3Szrj    continue processing but not produce an object file.
244*fae548d3Szrj    Please explain in string (which may have '\n's) what recovery was
245*fae548d3Szrj    done.  */
246*fae548d3Szrj 
247*fae548d3Szrj void
as_bad(const char * format,...)248*fae548d3Szrj as_bad (const char *format, ...)
249*fae548d3Szrj {
250*fae548d3Szrj   va_list args;
251*fae548d3Szrj   char buffer[2000];
252*fae548d3Szrj 
253*fae548d3Szrj   va_start (args, format);
254*fae548d3Szrj   vsnprintf (buffer, sizeof (buffer), format, args);
255*fae548d3Szrj   va_end (args);
256*fae548d3Szrj 
257*fae548d3Szrj   as_bad_internal ((char *) NULL, 0, buffer);
258*fae548d3Szrj }
259*fae548d3Szrj 
260*fae548d3Szrj /* Like as_bad but the file name and line number are passed in.
261*fae548d3Szrj    Unfortunately, we have to repeat the function in order to handle
262*fae548d3Szrj    the varargs correctly and portably.  */
263*fae548d3Szrj 
264*fae548d3Szrj void
as_bad_where(const char * file,unsigned int line,const char * format,...)265*fae548d3Szrj as_bad_where (const char *file, unsigned int line, const char *format, ...)
266*fae548d3Szrj {
267*fae548d3Szrj   va_list args;
268*fae548d3Szrj   char buffer[2000];
269*fae548d3Szrj 
270*fae548d3Szrj   va_start (args, format);
271*fae548d3Szrj   vsnprintf (buffer, sizeof (buffer), format, args);
272*fae548d3Szrj   va_end (args);
273*fae548d3Szrj 
274*fae548d3Szrj   as_bad_internal (file, line, buffer);
275*fae548d3Szrj }
276*fae548d3Szrj 
277*fae548d3Szrj /* Send to stderr a string as a fatal message, and print location of
278*fae548d3Szrj    error in input file(s).
279*fae548d3Szrj    Please only use this for when we DON'T have some recovery action.
280*fae548d3Szrj    It xexit()s with a warning status.  */
281*fae548d3Szrj 
282*fae548d3Szrj void
as_fatal(const char * format,...)283*fae548d3Szrj as_fatal (const char *format, ...)
284*fae548d3Szrj {
285*fae548d3Szrj   va_list args;
286*fae548d3Szrj 
287*fae548d3Szrj   as_show_where ();
288*fae548d3Szrj   va_start (args, format);
289*fae548d3Szrj   fprintf (stderr, _("Fatal error: "));
290*fae548d3Szrj   vfprintf (stderr, format, args);
291*fae548d3Szrj   (void) putc ('\n', stderr);
292*fae548d3Szrj   va_end (args);
293*fae548d3Szrj   /* Delete the output file, if it exists.  This will prevent make from
294*fae548d3Szrj      thinking that a file was created and hence does not need rebuilding.  */
295*fae548d3Szrj   if (out_file_name != NULL)
296*fae548d3Szrj     unlink_if_ordinary (out_file_name);
297*fae548d3Szrj   xexit (EXIT_FAILURE);
298*fae548d3Szrj }
299*fae548d3Szrj 
300*fae548d3Szrj /* Indicate internal constency error.
301*fae548d3Szrj    Arguments: Filename, line number, optional function name.
302*fae548d3Szrj    FILENAME may be NULL, which we use for crash-via-signal.  */
303*fae548d3Szrj 
304*fae548d3Szrj void
as_abort(const char * file,int line,const char * fn)305*fae548d3Szrj as_abort (const char *file, int line, const char *fn)
306*fae548d3Szrj {
307*fae548d3Szrj   as_show_where ();
308*fae548d3Szrj 
309*fae548d3Szrj   if (!file)
310*fae548d3Szrj     fprintf (stderr, _("Internal error (%s).\n"), fn ? fn : "unknown");
311*fae548d3Szrj   else if (fn)
312*fae548d3Szrj     fprintf (stderr, _("Internal error in %s at %s:%d.\n"), fn, file, line);
313*fae548d3Szrj   else
314*fae548d3Szrj     fprintf (stderr, _("Internal error at %s:%d.\n"), file, line);
315*fae548d3Szrj 
316*fae548d3Szrj   fprintf (stderr, _("Please report this bug.\n"));
317*fae548d3Szrj 
318*fae548d3Szrj   xexit (EXIT_FAILURE);
319*fae548d3Szrj }
320*fae548d3Szrj 
321*fae548d3Szrj /* Handler for fatal signals, such as SIGSEGV. */
322*fae548d3Szrj 
323*fae548d3Szrj static void
signal_crash(int signo)324*fae548d3Szrj signal_crash (int signo)
325*fae548d3Szrj {
326*fae548d3Szrj   /* Reset, to prevent unbounded recursion.  */
327*fae548d3Szrj   signal (signo, SIG_DFL);
328*fae548d3Szrj 
329*fae548d3Szrj   as_abort (NULL, 0, strsignal (signo));
330*fae548d3Szrj }
331*fae548d3Szrj 
332*fae548d3Szrj /* Register signal handlers, for less abrubt crashes.  */
333*fae548d3Szrj 
334*fae548d3Szrj void
signal_init(void)335*fae548d3Szrj signal_init (void)
336*fae548d3Szrj {
337*fae548d3Szrj #ifdef SIGSEGV
338*fae548d3Szrj   signal (SIGSEGV, signal_crash);
339*fae548d3Szrj #endif
340*fae548d3Szrj #ifdef SIGILL
341*fae548d3Szrj   signal (SIGILL, signal_crash);
342*fae548d3Szrj #endif
343*fae548d3Szrj #ifdef SIGBUS
344*fae548d3Szrj   signal (SIGBUS, signal_crash);
345*fae548d3Szrj #endif
346*fae548d3Szrj #ifdef SIGABRT
347*fae548d3Szrj   signal (SIGABRT, signal_crash);
348*fae548d3Szrj #endif
349*fae548d3Szrj #if defined SIGIOT && (!defined SIGABRT || SIGABRT != SIGIOT)
350*fae548d3Szrj   signal (SIGIOT, signal_crash);
351*fae548d3Szrj #endif
352*fae548d3Szrj #ifdef SIGFPE
353*fae548d3Szrj   signal (SIGFPE, signal_crash);
354*fae548d3Szrj #endif
355*fae548d3Szrj }
356*fae548d3Szrj 
357*fae548d3Szrj /* Support routines.  */
358*fae548d3Szrj 
359*fae548d3Szrj void
sprint_value(char * buf,valueT val)360*fae548d3Szrj sprint_value (char *buf, valueT val)
361*fae548d3Szrj {
362*fae548d3Szrj   if (sizeof (val) <= sizeof (long))
363*fae548d3Szrj     {
364*fae548d3Szrj       sprintf (buf, "%ld", (long) val);
365*fae548d3Szrj       return;
366*fae548d3Szrj     }
367*fae548d3Szrj   if (sizeof (val) <= sizeof (bfd_vma))
368*fae548d3Szrj     {
369*fae548d3Szrj       sprintf_vma (buf, val);
370*fae548d3Szrj       return;
371*fae548d3Szrj     }
372*fae548d3Szrj   abort ();
373*fae548d3Szrj }
374*fae548d3Szrj 
375*fae548d3Szrj #define HEX_MAX_THRESHOLD	1024
376*fae548d3Szrj #define HEX_MIN_THRESHOLD	-(HEX_MAX_THRESHOLD)
377*fae548d3Szrj 
378*fae548d3Szrj static void
as_internal_value_out_of_range(const char * prefix,offsetT val,offsetT min,offsetT max,const char * file,unsigned line,int bad)379*fae548d3Szrj as_internal_value_out_of_range (const char *prefix,
380*fae548d3Szrj 				offsetT val,
381*fae548d3Szrj 				offsetT min,
382*fae548d3Szrj 				offsetT max,
383*fae548d3Szrj 				const char *file,
384*fae548d3Szrj 				unsigned line,
385*fae548d3Szrj 				int bad)
386*fae548d3Szrj {
387*fae548d3Szrj   const char * err;
388*fae548d3Szrj 
389*fae548d3Szrj   if (prefix == NULL)
390*fae548d3Szrj     prefix = "";
391*fae548d3Szrj 
392*fae548d3Szrj   if (val >= min && val <= max)
393*fae548d3Szrj     {
394*fae548d3Szrj       addressT right = max & -max;
395*fae548d3Szrj 
396*fae548d3Szrj       if (max <= 1)
397*fae548d3Szrj 	abort ();
398*fae548d3Szrj 
399*fae548d3Szrj       /* xgettext:c-format  */
400*fae548d3Szrj       err = _("%s out of domain (%" BFD_VMA_FMT "d is not a multiple of %" \
401*fae548d3Szrj 	      BFD_VMA_FMT "d)");
402*fae548d3Szrj       if (bad)
403*fae548d3Szrj 	as_bad_where (file, line, err, prefix, val, right);
404*fae548d3Szrj       else
405*fae548d3Szrj 	as_warn_where (file, line, err, prefix, val, right);
406*fae548d3Szrj       return;
407*fae548d3Szrj     }
408*fae548d3Szrj 
409*fae548d3Szrj   if (   val < HEX_MAX_THRESHOLD
410*fae548d3Szrj       && min < HEX_MAX_THRESHOLD
411*fae548d3Szrj       && max < HEX_MAX_THRESHOLD
412*fae548d3Szrj       && val > HEX_MIN_THRESHOLD
413*fae548d3Szrj       && min > HEX_MIN_THRESHOLD
414*fae548d3Szrj       && max > HEX_MIN_THRESHOLD)
415*fae548d3Szrj     {
416*fae548d3Szrj       /* xgettext:c-format  */
417*fae548d3Szrj       err = _("%s out of range (%" BFD_VMA_FMT "d is not between %" \
418*fae548d3Szrj 	      BFD_VMA_FMT "d and %" BFD_VMA_FMT "d)");
419*fae548d3Szrj 
420*fae548d3Szrj       if (bad)
421*fae548d3Szrj 	as_bad_where (file, line, err, prefix, val, min, max);
422*fae548d3Szrj       else
423*fae548d3Szrj 	as_warn_where (file, line, err, prefix, val, min, max);
424*fae548d3Szrj     }
425*fae548d3Szrj   else
426*fae548d3Szrj     {
427*fae548d3Szrj       char val_buf [sizeof (val) * 3 + 2];
428*fae548d3Szrj       char min_buf [sizeof (val) * 3 + 2];
429*fae548d3Szrj       char max_buf [sizeof (val) * 3 + 2];
430*fae548d3Szrj 
431*fae548d3Szrj       if (sizeof (val) > sizeof (bfd_vma))
432*fae548d3Szrj 	abort ();
433*fae548d3Szrj 
434*fae548d3Szrj       sprintf_vma (val_buf, (bfd_vma) val);
435*fae548d3Szrj       sprintf_vma (min_buf, (bfd_vma) min);
436*fae548d3Szrj       sprintf_vma (max_buf, (bfd_vma) max);
437*fae548d3Szrj 
438*fae548d3Szrj       /* xgettext:c-format.  */
439*fae548d3Szrj       err = _("%s out of range (0x%s is not between 0x%s and 0x%s)");
440*fae548d3Szrj 
441*fae548d3Szrj       if (bad)
442*fae548d3Szrj 	as_bad_where (file, line, err, prefix, val_buf, min_buf, max_buf);
443*fae548d3Szrj       else
444*fae548d3Szrj 	as_warn_where (file, line, err, prefix, val_buf, min_buf, max_buf);
445*fae548d3Szrj     }
446*fae548d3Szrj }
447*fae548d3Szrj 
448*fae548d3Szrj void
as_warn_value_out_of_range(const char * prefix,offsetT value,offsetT min,offsetT max,const char * file,unsigned line)449*fae548d3Szrj as_warn_value_out_of_range (const char *prefix,
450*fae548d3Szrj 			   offsetT value,
451*fae548d3Szrj 			   offsetT min,
452*fae548d3Szrj 			   offsetT max,
453*fae548d3Szrj 			   const char *file,
454*fae548d3Szrj 			   unsigned line)
455*fae548d3Szrj {
456*fae548d3Szrj   as_internal_value_out_of_range (prefix, value, min, max, file, line, 0);
457*fae548d3Szrj }
458*fae548d3Szrj 
459*fae548d3Szrj void
as_bad_value_out_of_range(const char * prefix,offsetT value,offsetT min,offsetT max,const char * file,unsigned line)460*fae548d3Szrj as_bad_value_out_of_range (const char *prefix,
461*fae548d3Szrj 			   offsetT value,
462*fae548d3Szrj 			   offsetT min,
463*fae548d3Szrj 			   offsetT max,
464*fae548d3Szrj 			   const char *file,
465*fae548d3Szrj 			   unsigned line)
466*fae548d3Szrj {
467*fae548d3Szrj   as_internal_value_out_of_range (prefix, value, min, max, file, line, 1);
468*fae548d3Szrj }
469