* utils.c, defs.h (error_begin): New function.
(quit): Print annotation before printing the error message. * main.c (return_to_top_level): Print annotation before doing the longjmp. * symtab.c (decode_line_1): Call error not warning and then return_to_top_level. Call error_begin and printf_unfiltered rather calling warning (before calls to return_to_top_level). * core.c (memory_error): Use error_begin, printf_unfiltered, print_address_numeric and return_to_top_level instead of error. Cleans up a FIXME-32x64. * language.c (type_error, range_error): Call error_begin not just target_terminal_ours.
This commit is contained in:
parent
21ad7c45a4
commit
a0cf46812c
6 changed files with 82 additions and 39 deletions
|
@ -1,12 +1,22 @@
|
|||
Thu Apr 28 08:40:56 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* utils.c, defs.h (error_begin): New function.
|
||||
(quit): Print annotation before printing the error message.
|
||||
* main.c (return_to_top_level): Print annotation before doing the
|
||||
longjmp.
|
||||
* symtab.c (decode_line_1): Call error not warning and then
|
||||
return_to_top_level. Call error_begin and printf_unfiltered
|
||||
rather calling warning (before calls to return_to_top_level).
|
||||
* core.c (memory_error): Use error_begin, printf_unfiltered,
|
||||
print_address_numeric and return_to_top_level instead of error.
|
||||
Cleans up a FIXME-32x64.
|
||||
* language.c (type_error, range_error): Call error_begin
|
||||
not just target_terminal_ours.
|
||||
|
||||
* dbxread.c (stabsect_build_psymtabs): Assign to sym_stab_info
|
||||
directly, rather than via DBX_SYMFILE_INFO. A cast on the left
|
||||
side of an assignment is non-portable.
|
||||
|
||||
* symtab.c (decode_line_1): Call error not warning and then
|
||||
return_to_top_level.
|
||||
|
||||
* utils.c (query): Change syntax of query annotations to be
|
||||
consistent with other input annotations.
|
||||
(prompt_for_continue): Likewise for prompt-for-continue annotation.
|
||||
|
|
17
gdb/core.c
17
gdb/core.c
|
@ -138,19 +138,24 @@ memory_error (status, memaddr)
|
|||
int status;
|
||||
CORE_ADDR memaddr;
|
||||
{
|
||||
/* FIXME-32x64--casting CORE_ADDR to unsigned long */
|
||||
if (status == EIO)
|
||||
{
|
||||
/* Actually, address between memaddr and memaddr + len
|
||||
was out of bounds. */
|
||||
error ("Cannot access memory at address %s.",
|
||||
local_hex_string((unsigned long) memaddr));
|
||||
error_begin ();
|
||||
printf_unfiltered ("Cannot access memory at address ");
|
||||
print_address_numeric (memaddr, gdb_stdout);
|
||||
printf_unfiltered (".\n");
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
error ("Error accessing memory address %s: %s.",
|
||||
local_hex_string ((unsigned long) memaddr),
|
||||
safe_strerror (status));
|
||||
error_begin ();
|
||||
printf_unfiltered ("Error accessing memory address ");
|
||||
print_address_numeric (memaddr, gdb_stdout);
|
||||
printf_unfiltered (": %s.\n",
|
||||
safe_strerror (status));
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -337,7 +337,7 @@ extern char *
|
|||
gdb_readline PARAMS ((char *));
|
||||
|
||||
extern char *
|
||||
command_line_input PARAMS ((char *, int));
|
||||
command_line_input PARAMS ((char *, int, char *));
|
||||
|
||||
extern void
|
||||
print_prompt PARAMS ((void));
|
||||
|
@ -623,6 +623,8 @@ extern char *warning_pre_print;
|
|||
extern NORETURN void /* Does not return to the caller. */
|
||||
error ();
|
||||
|
||||
extern void error_begin PARAMS ((void));
|
||||
|
||||
extern NORETURN void /* Does not return to the caller. */
|
||||
fatal ();
|
||||
|
||||
|
|
|
@ -983,18 +983,18 @@ type_error (va_alist)
|
|||
va_list args;
|
||||
char *string;
|
||||
|
||||
if (type_check==type_check_warn)
|
||||
fprintf_unfiltered(gdb_stderr,warning_pre_print);
|
||||
if (type_check == type_check_warn)
|
||||
fprintf_unfiltered (gdb_stderr, warning_pre_print);
|
||||
else
|
||||
target_terminal_ours();
|
||||
error_begin ();
|
||||
|
||||
va_start (args);
|
||||
string = va_arg (args, char *);
|
||||
vfprintf_unfiltered (gdb_stderr, string, args);
|
||||
fprintf_unfiltered (gdb_stderr, "\n");
|
||||
va_end (args);
|
||||
if (type_check==type_check_on)
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
if (type_check == type_check_on)
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1004,18 +1004,18 @@ range_error (va_alist)
|
|||
va_list args;
|
||||
char *string;
|
||||
|
||||
if (range_check==range_check_warn)
|
||||
fprintf_unfiltered(gdb_stderr,warning_pre_print);
|
||||
if (range_check == range_check_warn)
|
||||
fprintf_unfiltered (gdb_stderr, warning_pre_print);
|
||||
else
|
||||
target_terminal_ours();
|
||||
error_begin ();
|
||||
|
||||
va_start (args);
|
||||
string = va_arg (args, char *);
|
||||
vfprintf_unfiltered (gdb_stderr, string, args);
|
||||
fprintf_unfiltered (gdb_stderr, "\n");
|
||||
va_end (args);
|
||||
if (range_check==range_check_on)
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
if (range_check == range_check_on)
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
|
||||
|
||||
|
|
36
gdb/symtab.c
36
gdb/symtab.c
|
@ -1038,8 +1038,14 @@ find_pc_symtab (pc)
|
|||
return (s);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/* Find the closest symbol value (of any sort -- function or variable)
|
||||
for a given address value. Slow but complete. */
|
||||
for a given address value. Slow but complete. (currently unused,
|
||||
mainly because it is too slow. We could fix it if each symtab and
|
||||
psymtab had contained in it the addresses ranges of each of its
|
||||
sections, which also would be required to make things like "info
|
||||
line *0x2345" cause psymtabs to be converted to symtabs). */
|
||||
|
||||
struct symbol *
|
||||
find_addr_symbol (addr, symtabp, symaddrp)
|
||||
|
@ -1110,7 +1116,7 @@ find_addr_symbol (addr, symtabp, symaddrp)
|
|||
*symaddrp = best_sym_addr;
|
||||
return best_sym;
|
||||
}
|
||||
|
||||
#endif /* 0 */
|
||||
|
||||
/* Find the source file and line number for a given PC value.
|
||||
Return a structure containing a symtab pointer, a line number,
|
||||
|
@ -1863,10 +1869,7 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
|
|||
while(!++p && *p != '>');
|
||||
if (!p)
|
||||
{
|
||||
/* FIXME: Why warning() and then return_to_top_level?
|
||||
What's wrong with error()? */
|
||||
warning("non-matching '<' and '>' in command");
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
error ("non-matching '<' and '>' in command");
|
||||
}
|
||||
}
|
||||
if (p[0] == ':' || p[0] == ' ' || p[0] == '\t')
|
||||
|
@ -1923,7 +1926,8 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
|
|||
opname = cplus_mangle_opname (tmp, DMGL_ANSI);
|
||||
if (opname == NULL)
|
||||
{
|
||||
warning ("no mangling for \"%s\"", tmp);
|
||||
error_begin ();
|
||||
printf_unfiltered ("no mangling for \"%s\"\n", tmp);
|
||||
cplusplus_hint (saved_arg);
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
|
@ -2015,21 +2019,25 @@ decode_line_1 (argptr, funfirstline, default_symtab, default_line, canonical)
|
|||
}
|
||||
else
|
||||
tmp = copy;
|
||||
error_begin ();
|
||||
if (tmp[0] == '~')
|
||||
warning ("the class `%s' does not have destructor defined",
|
||||
SYMBOL_SOURCE_NAME(sym_class));
|
||||
printf_unfiltered
|
||||
("the class `%s' does not have destructor defined\n",
|
||||
SYMBOL_SOURCE_NAME(sym_class));
|
||||
else
|
||||
warning ("the class %s does not have any method named %s",
|
||||
SYMBOL_SOURCE_NAME(sym_class), tmp);
|
||||
printf_unfiltered
|
||||
("the class %s does not have any method named %s\n",
|
||||
SYMBOL_SOURCE_NAME(sym_class), tmp);
|
||||
cplusplus_hint (saved_arg);
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error_begin ();
|
||||
/* The quotes are important if copy is empty. */
|
||||
warning ("can't find class, struct, or union named \"%s\"",
|
||||
copy);
|
||||
printf_unfiltered
|
||||
("can't find class, struct, or union named \"%s\"\n", copy);
|
||||
cplusplus_hint (saved_arg);
|
||||
return_to_top_level (RETURN_ERROR);
|
||||
}
|
||||
|
@ -2338,7 +2346,7 @@ decode_line_2 (sym_arr, nelts, funfirstline, canonical)
|
|||
printf_unfiltered("%s ",prompt);
|
||||
gdb_flush(gdb_stdout);
|
||||
|
||||
args = command_line_input ((char *) NULL, 0);
|
||||
args = command_line_input ((char *) NULL, 0, "overload-choice");
|
||||
|
||||
if (args == 0 || *args == 0)
|
||||
error_no_arg ("one or more choice numbers");
|
||||
|
|
28
gdb/utils.c
28
gdb/utils.c
|
@ -250,6 +250,25 @@ warning (va_alist)
|
|||
va_end (args);
|
||||
}
|
||||
|
||||
/* Start the printing of an error message. Way to use this is to call
|
||||
this, output the error message, and then call
|
||||
return_to_top_level (RETURN_ERROR). error() provides a convenient way to
|
||||
do this for the special case that the error message can be formatted with
|
||||
a single printf call, but this is more general. */
|
||||
void
|
||||
error_begin ()
|
||||
{
|
||||
target_terminal_ours ();
|
||||
wrap_here (""); /* Force out any buffered output */
|
||||
gdb_flush (gdb_stdout);
|
||||
|
||||
if (annotation_level > 1)
|
||||
fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
|
||||
|
||||
if (error_pre_print)
|
||||
fprintf_filtered (gdb_stderr, error_pre_print);
|
||||
}
|
||||
|
||||
/* Print an error message and return to command level.
|
||||
The first argument STRING is the error message, used as a fprintf string,
|
||||
and the remaining args are passed as arguments to it. */
|
||||
|
@ -262,12 +281,8 @@ error (va_alist)
|
|||
va_list args;
|
||||
char *string;
|
||||
|
||||
error_begin ();
|
||||
va_start (args);
|
||||
target_terminal_ours ();
|
||||
wrap_here(""); /* Force out any buffered output */
|
||||
gdb_flush (gdb_stdout);
|
||||
if (error_pre_print)
|
||||
fprintf_filtered (gdb_stderr, error_pre_print);
|
||||
string = va_arg (args, char *);
|
||||
vfprintf_filtered (gdb_stderr, string, args);
|
||||
fprintf_filtered (gdb_stderr, "\n");
|
||||
|
@ -438,6 +453,9 @@ quit ()
|
|||
SERIAL_FLUSH_OUTPUT (gdb_stdout_serial);
|
||||
SERIAL_UN_FDOPEN (gdb_stdout_serial);
|
||||
|
||||
if (annotation_level > 1)
|
||||
fprintf_filtered (gdb_stderr, "\n\032\032error-begin\n");
|
||||
|
||||
/* Don't use *_filtered; we don't want to prompt the user to continue. */
|
||||
if (error_pre_print)
|
||||
fprintf_unfiltered (gdb_stderr, error_pre_print);
|
||||
|
|
Loading…
Add table
Reference in a new issue