projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pass Ctrl-C to the target in target_terminal_inferior
[deliverable/binutils-gdb.git]
/
gdb
/
complaints.c
diff --git
a/gdb/complaints.c
b/gdb/complaints.c
index 64598535135cf53c71c07989dfedc40d528027ef..b35c81de342618c2561d6872b804f29a165a4f2b 100644
(file)
--- a/
gdb/complaints.c
+++ b/
gdb/complaints.c
@@
-1,7
+1,6
@@
/* Support for complaint handling during symbol reading in GDB.
/* Support for complaint handling during symbol reading in GDB.
- Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998, 1999, 2000, 2002, 2004,
- 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 1990-2016 Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-20,27
+19,25
@@
#include "defs.h"
#include "complaints.h"
#include "defs.h"
#include "complaints.h"
-#include "gdb_assert.h"
#include "command.h"
#include "gdbcmd.h"
extern void _initialize_complaints (void);
#include "command.h"
#include "gdbcmd.h"
extern void _initialize_complaints (void);
-/* Should each complaint message be self explanatory, or should we
assume that
- a series of complaints is being produced? */
+/* Should each complaint message be self explanatory, or should we
+ a
ssume that a
series of complaints is being produced? */
-/* case 1: First message of a series that must
- start off with explanation. case 2: Subsequent message of a series
- that needs no explanation (the user already knows we have a problem
- so we can just state our piece). */
enum complaint_series {
/* Isolated self explanatory message. */
ISOLATED_MESSAGE,
enum complaint_series {
/* Isolated self explanatory message. */
ISOLATED_MESSAGE,
+
/* First message of a series, includes an explanation. */
FIRST_MESSAGE,
/* First message of a series, includes an explanation. */
FIRST_MESSAGE,
+
/* First message of a series, but does not need to include any sort
of explanation. */
SHORT_FIRST_MESSAGE,
/* First message of a series, but does not need to include any sort
of explanation. */
SHORT_FIRST_MESSAGE,
+
/* Subsequent message of a series that needs no explanation (the
user already knows we have a problem so we can just state our
piece). */
/* Subsequent message of a series that needs no explanation (the
user already knows we have a problem so we can just state our
piece). */
@@
-71,13
+68,7
@@
struct complaints
{
struct complain *root;
{
struct complain *root;
- /* Should each complaint be self explanatory, or should we assume
- that a series of complaints is being produced? case 0: Isolated
- self explanatory message. case 1: First message of a series that
- must start off with explanation. case 2: Subsequent message of a
- series that needs no explanation (the user already knows we have
- a problem so we can just state our piece). */
- int series;
+ enum complaint_series series;
/* The explanatory messages that should accompany the complaint.
NOTE: cagney/2002-08-14: In a desperate attempt at being vaguely
/* The explanatory messages that should accompany the complaint.
NOTE: cagney/2002-08-14: In a desperate attempt at being vaguely
@@
-101,7
+92,7
@@
static struct explanation symfile_explanations[] = {
static struct complaints symfile_complaint_book = {
&complaint_sentinel,
static struct complaints symfile_complaint_book = {
&complaint_sentinel,
-
0
,
+
ISOLATED_MESSAGE
,
symfile_explanations
};
struct complaints *symfile_complaints = &symfile_complaint_book;
symfile_explanations
};
struct complaints *symfile_complaints = &symfile_complaint_book;
@@
-113,14
+104,14
@@
get_complaints (struct complaints **c)
{
if ((*c) != NULL)
return (*c);
{
if ((*c) != NULL)
return (*c);
- (*c) = X
MALLOC
(struct complaints);
+ (*c) = X
NEW
(struct complaints);
(*c)->root = &complaint_sentinel;
(*c)->series = ISOLATED_MESSAGE;
(*c)->explanation = NULL;
return (*c);
}
(*c)->root = &complaint_sentinel;
(*c)->series = ISOLATED_MESSAGE;
(*c)->explanation = NULL;
return (*c);
}
-static struct complain *
+static struct complain *
ATTRIBUTE_PRINTF (4, 0)
find_complaint (struct complaints *complaints, const char *file,
int line, const char *fmt)
{
find_complaint (struct complaints *complaints, const char *file,
int line, const char *fmt)
{
@@
-141,7
+132,7
@@
find_complaint (struct complaints *complaints, const char *file,
}
/* Oops not seen before, fill in a new complaint. */
}
/* Oops not seen before, fill in a new complaint. */
- complaint = X
MALLOC
(struct complain);
+ complaint = X
NEW
(struct complain);
complaint->fmt = fmt;
complaint->file = file;
complaint->line = line;
complaint->fmt = fmt;
complaint->file = file;
complaint->line = line;
@@
-164,13
+155,16
@@
static int stop_whining = 0;
/* Print a complaint, and link the complaint block into a chain for
later handling. */
/* Print a complaint, and link the complaint block into a chain for
later handling. */
-static void ATTR_FORMAT (printf, 4, 0)
-vcomplaint (struct complaints **c, const char *file, int line, const char *fmt,
+static void ATTRIBUTE_PRINTF (4, 0)
+vcomplaint (struct complaints **c, const char *file,
+ int line, const char *fmt,
va_list args)
{
struct complaints *complaints = get_complaints (c);
va_list args)
{
struct complaints *complaints = get_complaints (c);
- struct complain *complaint = find_complaint (complaints, file, line, fmt);
+ struct complain *complaint = find_complaint (complaints, file,
+ line, fmt);
enum complaint_series series;
enum complaint_series series;
+
gdb_assert (complaints != NULL);
complaint->counter++;
gdb_assert (complaints != NULL);
complaint->counter++;
@@
-182,20
+176,27
@@
vcomplaint (struct complaints **c, const char *file, int line, const char *fmt,
else
series = complaints->series;
else
series = complaints->series;
+ /* Pass 'fmt' instead of 'complaint->fmt' to printf-like callees
+ from here on, to avoid "format string is not a string literal"
+ warnings. 'fmt' is this function's printf-format parameter, so
+ the compiler can assume the passed in argument is a literal
+ string somewhere up the call chain. */
+ gdb_assert (complaint->fmt == fmt);
+
if (complaint->file != NULL)
if (complaint->file != NULL)
- internal_vwarning (complaint->file, complaint->line,
complaint->
fmt, args);
+ internal_vwarning (complaint->file, complaint->line, fmt, args);
else if (deprecated_warning_hook)
else if (deprecated_warning_hook)
- (*deprecated_warning_hook) (
complaint->
fmt, args);
+ (*deprecated_warning_hook) (fmt, args);
else
{
if (complaints->explanation == NULL)
/* A [v]warning() call always appends a newline. */
else
{
if (complaints->explanation == NULL)
/* A [v]warning() call always appends a newline. */
- vwarning (
complaint->
fmt, args);
+ vwarning (fmt, args);
else
{
char *msg;
struct cleanup *cleanups;
else
{
char *msg;
struct cleanup *cleanups;
- msg = xstrvprintf (
complaint->
fmt, args);
+ msg = xstrvprintf (fmt, args);
cleanups = make_cleanup (xfree, msg);
wrap_here ("");
if (series != SUBSEQUENT_MESSAGE)
cleanups = make_cleanup (xfree, msg);
wrap_here ("");
if (series != SUBSEQUENT_MESSAGE)
@@
-243,6
+244,7
@@
void
complaint (struct complaints **complaints, const char *fmt, ...)
{
va_list args;
complaint (struct complaints **complaints, const char *fmt, ...)
{
va_list args;
+
va_start (args, fmt);
vcomplaint (complaints, NULL/*file*/, 0/*line*/, fmt, args);
va_end (args);
va_start (args, fmt);
vcomplaint (complaints, NULL/*file*/, 0/*line*/, fmt, args);
va_end (args);
@@
-292,7
+294,8
@@
clear_complaints (struct complaints **c, int less_verbose, int noisy)
case SUBSEQUENT_MESSAGE:
/* It would be really nice to use begin_line() here.
Unfortunately that function doesn't track GDB_STDERR and
case SUBSEQUENT_MESSAGE:
/* It would be really nice to use begin_line() here.
Unfortunately that function doesn't track GDB_STDERR and
- consequently will sometimes supress a line when it shouldn't. */
+ consequently will sometimes supress a line when it
+ shouldn't. */
fputs_unfiltered ("\n", gdb_stderr);
break;
default:
fputs_unfiltered ("\n", gdb_stderr);
break;
default:
@@
-319,7
+322,8
@@
complaints_show_value (struct ui_file *file, int from_tty,
void
_initialize_complaints (void)
{
void
_initialize_complaints (void)
{
- add_setshow_zinteger_cmd ("complaints", class_support, &stop_whining, _("\
+ add_setshow_zinteger_cmd ("complaints", class_support,
+ &stop_whining, _("\
Set max number of complaints about incorrect symbols."), _("\
Show max number of complaints about incorrect symbols."), NULL,
NULL, complaints_show_value,
Set max number of complaints about incorrect symbols."), _("\
Show max number of complaints about incorrect symbols."), NULL,
NULL, complaints_show_value,
This page took
0.027218 seconds
and
4
git commands to generate.