[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: va_end buglets in opcodes/{arc-dis,fr30-desc,m32r-desc}.c
From: |
Alan Modra |
Subject: |
Re: va_end buglets in opcodes/{arc-dis,fr30-desc,m32r-desc}.c |
Date: |
Wed, 26 Sep 2001 11:21:12 +0930 |
User-agent: |
Mutt/1.3.17i |
On Mon, Sep 24, 2001 at 04:50:22PM +0200, Thomas Klausner wrote:
> In opcodes/arc-dis.c, a va_end is missing, see attached diff.
Thanks. I'm checking in the following patch.
bfd/ChangeLog
* bfd.c (_bfd_default_error_handlerl): Define using VPARAMS,
VA_OPEN, VA_FIXEDARG, VA_CLOSE.
binutils/ChangeLog
* bucomm.c (fatal): Define using VPARAMS, VA_OPEN, VA_FIXEDARG,
VA_CLOSE.
(non_fatal): Likewise.
* objdump.c (objdump_sprintf): Likewise.
* readelf.c (error): Likewise.
(warn): Likewise.
ld/ChangeLog
* ldmisc.c (USE_STDARG): Remove.
(info_msg): Define using VPARAMS, VA_OPEN, VA_FIXEDARG, VA_CLOSE.
(einfo): Likewise.
(minfo): Likewise.
(lfinfo): Likewise.
* ldmisc.h: Remove #ifdef ANSI_PROTOTYPES and non-ansi
declarations. Update copyright.
opcodes/ChangeLog
* arc-dis.c: Formatting fixes.
(my_sprintf): Define using VPARAMS, VA_OPEN, VA_FIXEDARG, VA_CLOSE.
--
Alan Modra
Index: bfd/bfd.c
===================================================================
RCS file: /cvs/src/src/bfd/bfd.c,v
retrieving revision 1.24
diff -u -p -r1.24 bfd.c
--- bfd.c 2001/09/20 23:30:34 1.24
+++ bfd.c 2001/09/26 01:44:48
@@ -410,57 +410,24 @@ static const char *_bfd_error_program_na
/* This is the default routine to handle BFD error messages. */
-#ifdef ANSI_PROTOTYPES
-
static void _bfd_default_error_handler PARAMS ((const char *s, ...));
-static void
-_bfd_default_error_handler (const char *s, ...)
-{
- va_list p;
-
- if (_bfd_error_program_name != NULL)
- fprintf (stderr, "%s: ", _bfd_error_program_name);
- else
- fprintf (stderr, "BFD: ");
-
- va_start (p, s);
-
- vfprintf (stderr, s, p);
-
- va_end (p);
-
- fprintf (stderr, "\n");
-}
-
-#else /* ! defined (ANSI_PROTOTYPES) */
-
-static void _bfd_default_error_handler ();
-
static void
-_bfd_default_error_handler (va_alist)
- va_dcl
+_bfd_default_error_handler VPARAMS ((const char *s, ...))
{
- va_list p;
- const char *s;
-
if (_bfd_error_program_name != NULL)
fprintf (stderr, "%s: ", _bfd_error_program_name);
else
fprintf (stderr, "BFD: ");
-
- va_start (p);
- s = va_arg (p, const char *);
+ VA_OPEN (p, s);
+ VA_FIXEDARG (p, const char *, s);
vfprintf (stderr, s, p);
+ VA_CLOSE (p);
- va_end (p);
-
fprintf (stderr, "\n");
}
-#endif /* ! defined (ANSI_PROTOTYPES) */
-
/* This is a function pointer to the routine which should handle BFD
error messages. It is called when a BFD routine encounters an
error for which it wants to print a message. Going through a
@@ -560,7 +527,7 @@ bfd_archive_filename (abfd)
if (curr)
free (buf);
curr = needed + (needed >> 1);
- buf = bfd_malloc (curr);
+ buf = bfd_malloc ((bfd_size_type) curr);
/* If we can't malloc, fail safe by returning just the file
name. This function is only used when building error
messages. */
Index: binutils/bucomm.c
===================================================================
RCS file: /cvs/src/src/binutils/bucomm.c,v
retrieving revision 1.9
diff -u -p -r1.9 bucomm.c
--- bucomm.c 2001/07/29 05:31:43 1.9
+++ bucomm.c 2001/09/26 01:44:49
@@ -70,55 +70,26 @@ report (format, args)
putc ('\n', stderr);
}
-#ifdef ANSI_PROTOTYPES
void
-fatal (const char *format, ...)
+fatal VPARAMS ((const char *format, ...))
{
- va_list args;
+ VA_OPEN (args, format);
+ VA_FIXEDARG (args, const char *, format);
- va_start (args, format);
report (format, args);
- va_end (args);
+ VA_CLOSE (args);
xexit (1);
}
void
-non_fatal (const char *format, ...)
+non_fatal VPARAMS ((const char *format, ...))
{
- va_list args;
+ VA_OPEN (args, format);
+ VA_FIXEDARG (args, const char *, format);
- va_start (args, format);
report (format, args);
- va_end (args);
+ VA_CLOSE (args);
}
-#else
-void
-fatal (va_alist)
- va_dcl
-{
- char *Format;
- va_list args;
-
- va_start (args);
- Format = va_arg (args, char *);
- report (Format, args);
- va_end (args);
- xexit (1);
-}
-
-void
-non_fatal (va_alist)
- va_dcl
-{
- char *Format;
- va_list args;
-
- va_start (args);
- Format = va_arg (args, char *);
- report (Format, args);
- va_end (args);
-}
-#endif
/* Set the default BFD target based on the configured target. Doing
this permits the binutils to be configured for a particular target,
Index: binutils/objdump.c
===================================================================
RCS file: /cvs/src/src/binutils/objdump.c,v
retrieving revision 1.42
diff -u -p -r1.42 objdump.c
--- objdump.c 2001/09/19 05:33:16 1.42
+++ objdump.c 2001/09/26 01:44:51
@@ -1109,35 +1109,20 @@ typedef struct
/* sprintf to a "stream" */
static int
-#ifdef ANSI_PROTOTYPES
-objdump_sprintf (SFILE *f, const char *format, ...)
-#else
-objdump_sprintf (va_alist)
- va_dcl
-#endif
+objdump_sprintf VPARAMS ((SFILE *f, const char *format, ...))
{
-#ifndef ANSI_PROTOTYPES
- SFILE *f;
- const char *format;
-#endif
char *buf;
- va_list args;
size_t n;
-#ifdef ANSI_PROTOTYPES
- va_start (args, format);
-#else
- va_start (args);
- f = va_arg (args, SFILE *);
- format = va_arg (args, const char *);
-#endif
+ VA_OPEN (args, format);
+ VA_FIXEDARG (args, SFILE *, f);
+ VA_FIXEDARG (args, const char *, format);
vasprintf (&buf, format, args);
- va_end (args);
-
if (buf == NULL)
{
+ va_end (args);
fatal (_("Out of virtual memory"));
}
@@ -1159,6 +1144,7 @@ objdump_sprintf (va_alist)
free (buf);
+ VA_CLOSE (args);
return n;
}
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.123
diff -u -p -r1.123 readelf.c
--- readelf.c 2001/09/25 16:44:19 1.123
+++ readelf.c 2001/09/26 01:44:55
@@ -281,61 +281,27 @@ typedef int Elf32_Word;
: get_64bit_elf_symbols (file, offset, size))
-#ifdef ANSI_PROTOTYPES
static void
-error (const char * message, ...)
+error VPARAMS ((const char *message, ...))
{
- va_list args;
+ VA_OPEN (args, message);
+ VA_FIXEDARG (args, const char *, message);
fprintf (stderr, _("%s: Error: "), program_name);
- va_start (args, message);
vfprintf (stderr, message, args);
- va_end (args);
- return;
+ VA_CLOSE (args);
}
static void
-warn (const char * message, ...)
+warn VPARAMS ((const char *message, ...))
{
- va_list args;
+ VA_OPEN (args, message);
+ VA_FIXEDARG (args, const char *, message);
fprintf (stderr, _("%s: Warning: "), program_name);
- va_start (args, message);
vfprintf (stderr, message, args);
- va_end (args);
- return;
+ VA_CLOSE (args);
}
-#else
-static void
-error (va_alist)
- va_dcl
-{
- char * message;
- va_list args;
-
- fprintf (stderr, _("%s: Error: "), program_name);
- va_start (args);
- message = va_arg (args, char *);
- vfprintf (stderr, message, args);
- va_end (args);
- return;
-}
-
-static void
-warn (va_alist)
- va_dcl
-{
- char * message;
- va_list args;
-
- fprintf (stderr, _("%s: Warning: "), program_name);
- va_start (args);
- message = va_arg (args, char *);
- vfprintf (stderr, message, args);
- va_end (args);
- return;
-}
-#endif
static PTR get_data PARAMS ((PTR, FILE *, long, size_t, const char *));
Index: ld/ldmisc.c
===================================================================
RCS file: /cvs/src/src/ld/ldmisc.c,v
retrieving revision 1.7
diff -u -p -r1.7 ldmisc.c
--- ldmisc.c 2001/05/02 16:42:55 1.7
+++ ldmisc.c 2001/09/26 01:45:20
@@ -27,10 +27,8 @@ Software Foundation, 59 Temple Place - S
#ifdef ANSI_PROTOTYPES
#include <stdarg.h>
-#define USE_STDARG 1
#else
#include <varargs.h>
-#define USE_STDARG 0
#endif
#include "ld.h"
@@ -412,51 +410,25 @@ vfinfo (fp, fmt, arg)
would hosed by LynxOS, which defines that name in its libc.) */
void
-#if USE_STDARG
-info_msg (const char *fmt, ...)
-#else
-info_msg (va_alist)
- va_dcl
-#endif
+info_msg VPARAMS ((const char *fmt, ...))
{
- va_list arg;
-
-#if ! USE_STDARG
- const char *fmt;
-
- va_start (arg);
- fmt = va_arg (arg, const char *);
-#else
- va_start (arg, fmt);
-#endif
+ VA_OPEN (arg, fmt);
+ VA_FIXEDARG (arg, const char *, fmt);
vfinfo (stdout, fmt, arg);
- va_end (arg);
+ VA_CLOSE (arg);
}
/* ('e' for error.) Format info message and print on stderr. */
void
-#if USE_STDARG
-einfo (const char *fmt, ...)
-#else
-einfo (va_alist)
- va_dcl
-#endif
+einfo VPARAMS ((const char *fmt, ...))
{
- va_list arg;
-
-#if ! USE_STDARG
- const char *fmt;
-
- va_start (arg);
- fmt = va_arg (arg, const char *);
-#else
- va_start (arg, fmt);
-#endif
+ VA_OPEN (arg, fmt);
+ VA_FIXEDARG (arg, const char *, fmt);
vfinfo (stderr, fmt, arg);
- va_end (arg);
+ VA_CLOSE (arg);
}
void
@@ -470,50 +442,24 @@ info_assert (file, line)
/* ('m' for map) Format info message and print on map. */
void
-#if USE_STDARG
-minfo (const char *fmt, ...)
-#else
-minfo (va_alist)
- va_dcl
-#endif
+minfo VPARAMS ((const char *fmt, ...))
{
- va_list arg;
-
-#if ! USE_STDARG
- const char *fmt;
- va_start (arg);
- fmt = va_arg (arg, const char *);
-#else
- va_start (arg, fmt);
-#endif
+ VA_OPEN (arg, fmt);
+ VA_FIXEDARG (arg, const char *, fmt);
vfinfo (config.map_file, fmt, arg);
- va_end (arg);
+ VA_CLOSE (arg);
}
void
-#if USE_STDARG
-lfinfo (FILE *file, const char *fmt, ...)
-#else
-lfinfo (va_alist)
- va_dcl
-#endif
+lfinfo VPARAMS ((FILE *file, const char *fmt, ...))
{
- va_list arg;
-
-#if ! USE_STDARG
- FILE *file;
- const char *fmt;
-
- va_start (arg);
- file = va_arg (arg, FILE *);
- fmt = va_arg (arg, const char *);
-#else
- va_start (arg, fmt);
-#endif
+ VA_OPEN (arg, fmt);
+ VA_FIXEDARG (arg, FILE *, file);
+ VA_FIXEDARG (arg, const char *, fmt);
vfinfo (file, fmt, arg);
- va_end (arg);
+ VA_CLOSE (arg);
}
/* Functions to print the link map. */
Index: ld/ldmisc.h
===================================================================
RCS file: /cvs/src/src/ld/ldmisc.h,v
retrieving revision 1.3
diff -u -p -r1.3 ldmisc.h
--- ldmisc.h 2001/05/02 16:42:55 1.3
+++ ldmisc.h 2001/09/26 01:45:20
@@ -1,5 +1,5 @@
/* ldmisc.h -
- Copyright 1991, 1992, 1993, 1994, 1996, 1997
+ Copyright 1991, 1992, 1993, 1994, 1996, 1997, 2001
Free Software Foundation, Inc.
This file is part of GLD, the Gnu Linker.
@@ -15,28 +15,17 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with GLD; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
+ along with GLD; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston,
+ MA 02111-1307, USA. */
#ifndef LDMISC_H
#define LDMISC_H
-#ifdef ANSI_PROTOTYPES
extern void einfo PARAMS ((const char *, ...));
extern void minfo PARAMS ((const char *, ...));
extern void info_msg PARAMS ((const char *, ...));
extern void lfinfo PARAMS ((FILE *, const char *, ...));
-#else
-/* VARARGS*/
-extern void einfo ();
-/* VARARGS*/
-extern void minfo ();
-/* VARARGS*/
-extern void info_msg ();
-/*VARARGS*/
-extern void lfinfo ();
-#endif
-
extern void info_assert PARAMS ((const char *, unsigned int));
extern void yyerror PARAMS ((const char *));
extern PTR xmalloc PARAMS ((size_t));
Index: opcodes/arc-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/arc-dis.c,v
retrieving revision 1.6
diff -u -p -r1.6 arc-dis.c
--- arc-dis.c 2001/09/21 12:36:56 1.6
+++ arc-dis.c 2001/09/26 01:45:24
@@ -45,13 +45,13 @@
treated as signed for bit shifting purposes: */
#define FIELDD(word) (BITS (((signed int)word), 0, 8))
-#define PUT_NEXT_WORD_IN(a)
\
- do
\
- {
\
- if (is_limm == 1 && !NEXT_WORD (1))
\
- mwerror (state, _("Illegal limm reference in last instruction!\n"));
\
- a = state->words[1];
\
- }
\
+#define PUT_NEXT_WORD_IN(a) \
+ do \
+ { \
+ if (is_limm == 1 && !NEXT_WORD (1)) \
+ mwerror (state, _("Illegal limm reference in last instruction!\n")); \
+ a = state->words[1]; \
+ } \
while (0)
#define CHECK_FLAG_COND_NULLIFY() \
@@ -97,7 +97,7 @@
#define CHECK_FIELD_A() \
do \
{ \
- fieldA = FIELDA(state->words[0]); \
+ fieldA = FIELDA (state->words[0]); \
if (fieldA > 60) \
{ \
fieldAisReg = 0; \
@@ -233,20 +233,22 @@ post_address (state, addr)
return "";
}
+static void my_sprintf PARAMS ((struct arcDisState *, char *, const char *,
+ ...));
+
static void
-my_sprintf (
- struct arcDisState * state,
- char * buf,
- const char * format,
- ...)
+my_sprintf VPARAMS ((struct arcDisState *state, char *buf, const char *format,
+ ...))
{
char *bp;
const char *p;
int size, leading_zero, regMap[2];
long auxNum;
- va_list ap;
- va_start (ap, format);
+ VA_OPEN (ap, format);
+ VA_FIXEDARG (ap, struct arcDisState *, state);
+ VA_FIXEDARG (ap, char *, buf);
+ VA_FIXEDARG (ap, const char *, format);
bp = buf;
*bp = 0;
@@ -258,8 +260,8 @@ my_sprintf (
while (1)
switch (*p++)
{
- case 0:
- goto DOCOMM; /* (return) */
+ case 0:
+ goto DOCOMM; /* (return) */
default:
*bp++ = p[-1];
break;
@@ -409,6 +411,7 @@ my_sprintf (
}
DOCOMM: *bp = 0;
+ VA_CLOSE (ap);
}
static void
@@ -435,7 +438,8 @@ write_comments_(state, shimm, is_limm, l
strcpy (state->commentBuffer, comment_prefix);
else
strcat (state->commentBuffer, ", ");
- strncat (state->commentBuffer, state->comm[i], sizeof
(state->commentBuffer));
+ strncat (state->commentBuffer, state->comm[i],
+ sizeof (state->commentBuffer));
}
}
}
@@ -724,7 +728,7 @@ dsmOneArcInst (addr, state)
instrName = instruction_name (state,
state->_opcode,
FIELDC (state->words[0]),
- & flags);
+ &flags);
if (!instrName)
{
instrName = "???";
@@ -839,14 +843,16 @@ dsmOneArcInst (addr, state)
if (!repeatsOp)
WRITE_FORMAT_COMMA_x (C);
WRITE_NOP_COMMENT ();
- my_sprintf (state, state->operandBuffer, formatString, fieldA,
fieldB, fieldC);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldA, fieldB, fieldC);
}
else
{
WRITE_FORMAT_x (B);
if (!repeatsOp)
WRITE_FORMAT_COMMA_x (C);
- my_sprintf (state, state->operandBuffer, formatString, fieldB,
fieldC);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldB, fieldC);
}
write_comments ();
break;
@@ -862,7 +868,8 @@ dsmOneArcInst (addr, state)
WRITE_FORMAT_x (A);
WRITE_FORMAT_COMMA_x (B);
WRITE_NOP_COMMENT ();
- my_sprintf (state, state->operandBuffer, formatString, fieldA,
fieldB);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldA, fieldB);
}
else
{
@@ -894,16 +901,17 @@ dsmOneArcInst (addr, state)
/* This address could be a label we know. Convert it. */
if (state->_opcode != op_LPC /* LP */)
{
- add_target (fieldA); /* For debugger. */
- state->flow = state->_opcode == op_BLC /* BL */
- ? direct_call
- : direct_jump;
- /* indirect calls are achieved by "lr blink,[status];
- lr dest<- func addr; j [dest]" */
+ add_target (fieldA); /* For debugger. */
+ state->flow = state->_opcode == op_BLC /* BL */
+ ? direct_call
+ : direct_jump;
+ /* indirect calls are achieved by "lr blink,[status];
+ lr dest<- func addr; j [dest]" */
}
strcat (formatString, "%s"); /* address/label name */
- my_sprintf (state, state->operandBuffer, formatString, post_address
(state, fieldA));
+ my_sprintf (state, state->operandBuffer, formatString,
+ post_address (state, fieldA));
write_comments ();
break;
@@ -986,7 +994,8 @@ dsmOneArcInst (addr, state)
fieldB = fieldC;
WRITE_FORMAT_x_RB (C);
- my_sprintf (state, state->operandBuffer, formatString, fieldA, fieldB,
fieldC);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldA, fieldB, fieldC);
write_comments ();
break;
@@ -1031,7 +1040,8 @@ dsmOneArcInst (addr, state)
else
WRITE_FORMAT_RB ();
}
- my_sprintf (state, state->operandBuffer, formatString, fieldA, fieldB,
fieldC);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldA, fieldB, fieldC);
write_comments ();
break;
@@ -1043,7 +1053,7 @@ dsmOneArcInst (addr, state)
/* [B,A offset] */
if (dbg) printf("7:b reg %d %x off %x\n",
- fieldBisReg,fieldB,fieldA);
+ fieldBisReg,fieldB,fieldA);
state->_ea_present = 1;
state->_offset = fieldA;
if (fieldBisReg)
@@ -1076,7 +1086,8 @@ dsmOneArcInst (addr, state)
else
WRITE_FORMAT_RB();
}
- my_sprintf (state, state->operandBuffer, formatString, fieldC, fieldB,
fieldA);
+ my_sprintf (state, state->operandBuffer, formatString,
+ fieldC, fieldB, fieldA);
write_comments2(fieldA);
break;
case 8:
@@ -1143,7 +1154,7 @@ _coreRegName(arg, regval)
static const char *
_auxRegName(void *_this ATTRIBUTE_UNUSED, int regval)
{
- return arcExtMap_auxRegName(regval);
+ return arcExtMap_auxRegName(regval);
}
@@ -1151,14 +1162,14 @@ _auxRegName(void *_this ATTRIBUTE_UNUSED
static const char *
_condCodeName(void *_this ATTRIBUTE_UNUSED, int regval)
{
- return arcExtMap_condCodeName(regval);
+ return arcExtMap_condCodeName(regval);
}
/* Returns the name the user specified extension instruction. */
static const char *
_instName (void *_this ATTRIBUTE_UNUSED, int majop, int minop, int *flags)
{
- return arcExtMap_instName(majop, minop, flags);
+ return arcExtMap_instName(majop, minop, flags);
}
/* Decode an instruction returning the size of the instruction