2003-06-26 Andrew Cagney <cagney@redhat.com>

* utils.c (internal_vproblem): Print the problem to a reason
	buffer and then pass to query.  Make the msg variable more local.

VS: ----------------------------------------------------------------------
This commit is contained in:
Andrew Cagney 2003-06-26 17:25:25 +00:00
parent 42efa47a82
commit 714b128219
2 changed files with 40 additions and 28 deletions

View File

@ -1,3 +1,8 @@
2003-06-26 Andrew Cagney <cagney@redhat.com>
* utils.c (internal_vproblem): Print the problem to a reason
buffer and then pass to query. Make the msg variable more local.
2003-06-26 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh (FRAME_ARGS_ADDRESS): Add predicate. Deprecate.

View File

@ -689,42 +689,49 @@ static void
internal_vproblem (struct internal_problem *problem,
const char *file, int line, const char *fmt, va_list ap)
{
static char msg[] = "Recursive internal problem.\n";
static int dejavu;
int quit_p;
int dump_core_p;
char *reason;
/* Don't allow infinite error/warning recursion. */
switch (dejavu)
{
case 0:
dejavu = 1;
break;
case 1:
dejavu = 2;
fputs_unfiltered (msg, gdb_stderr);
abort (); /* NOTE: GDB has only three calls to abort(). */
default:
dejavu = 3;
write (STDERR_FILENO, msg, sizeof (msg));
exit (1);
}
{
static char msg[] = "Recursive internal problem.\n";
switch (dejavu)
{
case 0:
dejavu = 1;
break;
case 1:
dejavu = 2;
fputs_unfiltered (msg, gdb_stderr);
abort (); /* NOTE: GDB has only three calls to abort(). */
default:
dejavu = 3;
write (STDERR_FILENO, msg, sizeof (msg));
exit (1);
}
}
/* Try to get the message out and at the start of a new line. */
target_terminal_ours ();
begin_line ();
/* The error/warning message. Format using a style similar to a
compiler error message. */
fprintf_unfiltered (gdb_stderr, "%s:%d: %s: ", file, line, problem->name);
vfprintf_unfiltered (gdb_stderr, fmt, ap);
fputs_unfiltered ("\n", gdb_stderr);
/* Provide more details so that the user knows that they are living
on the edge. */
fprintf_unfiltered (gdb_stderr, "\
A problem internal to GDB has been detected. Further\n\
debugging may prove unreliable.\n");
/* Create a string containing the full error/warning message. Need
to call query with this full string, as otherwize the reason
(error/warning) and question become separated. Format using a
style similar to a compiler error message. Include extra detail
so that the user knows that they are living on the edge. */
{
char *msg;
xasprintf (&msg, fmt, ap);
xasprintf (&reason, "\
%s:%d: %s: %s\n\
A problem internal to GDB has been detected,\n\
further debugging may prove unreliable.", file, line, problem->name, msg);
xfree (msg);
make_cleanup (xfree, reason);
}
switch (problem->should_quit)
{
@ -732,7 +739,7 @@ debugging may prove unreliable.\n");
/* Default (yes/batch case) is to quit GDB. When in batch mode
this lessens the likelhood of GDB going into an infinate
loop. */
quit_p = query ("Quit this debugging session? ");
quit_p = query ("%s\nQuit this debugging session? ", reason);
break;
case AUTO_BOOLEAN_TRUE:
quit_p = 1;
@ -750,7 +757,7 @@ debugging may prove unreliable.\n");
/* Default (yes/batch case) is to dump core. This leaves a GDB
`dropping' so that it is easier to see that something went
wrong in GDB. */
dump_core_p = query ("Create a core file of GDB? ");
dump_core_p = query ("%s\nCreate a core file of GDB? ", reason);
break;
break;
case AUTO_BOOLEAN_TRUE: