mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
gdb/
* exceptions.h (enum errors): New entry TARGET_CLOSE_ERROR. * remote.c (trace_error): Remove the special handling of '2'. (readchar) <SERIAL_EOF> (readchar) <SERIAL_ERROR> (getpkt_or_notif_sane_1): Use TARGET_CLOSE_ERROR for them. (remote_get_trace_status): Call throw_exception if EX is TARGET_CLOSE_ERROR. * utils.c (perror_with_name): Rename to ... (throw_perror_with_name): ... here. New parameter errcode, describe it in the function comment. (perror_with_name): New function wrapper. * utils.h (enum errors): New stub declaration. (throw_perror_with_name): New declaration. gdb/testsuite/ * gdb.server/server-kill.c: New file. * gdb.server/server-kill.exp: New file.
This commit is contained in:
parent
82b821e99d
commit
598d363666
@ -1,3 +1,19 @@
|
||||
2013-03-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* exceptions.h (enum errors): New entry TARGET_CLOSE_ERROR.
|
||||
* remote.c (trace_error): Remove the special handling of '2'.
|
||||
(readchar) <SERIAL_EOF>
|
||||
(readchar) <SERIAL_ERROR>
|
||||
(getpkt_or_notif_sane_1): Use TARGET_CLOSE_ERROR for them.
|
||||
(remote_get_trace_status): Call throw_exception if EX is
|
||||
TARGET_CLOSE_ERROR.
|
||||
* utils.c (perror_with_name): Rename to ...
|
||||
(throw_perror_with_name): ... here. New parameter errcode, describe it
|
||||
in the function comment.
|
||||
(perror_with_name): New function wrapper.
|
||||
* utils.h (enum errors): New stub declaration.
|
||||
(throw_perror_with_name): New declaration.
|
||||
|
||||
2013-03-22 Pedro Alves <palves@redhat.com>
|
||||
Yao Qi <yao@codesourcery.com>
|
||||
Mark Kettenis <kettenis@gnu.org>
|
||||
|
@ -86,6 +86,10 @@ enum errors {
|
||||
/* DW_OP_GNU_entry_value resolving failed. */
|
||||
NO_ENTRY_VALUE_ERROR,
|
||||
|
||||
/* Target throwing an error has been closed. Current command should be
|
||||
aborted as the inferior state is no longer valid. */
|
||||
TARGET_CLOSE_ERROR,
|
||||
|
||||
/* Add more errors here. */
|
||||
NR_ERRORS
|
||||
};
|
||||
|
21
gdb/remote.c
21
gdb/remote.c
@ -430,8 +430,6 @@ trace_error (char *buf)
|
||||
else
|
||||
error (_("remote.c: error in outgoing packet at field #%ld."),
|
||||
strtol (buf, NULL, 16));
|
||||
case '2':
|
||||
error (_("trace API error 0x%s."), ++buf);
|
||||
default:
|
||||
error (_("Target returns error code '%s'."), buf);
|
||||
}
|
||||
@ -7048,12 +7046,13 @@ readchar (int timeout)
|
||||
{
|
||||
case SERIAL_EOF:
|
||||
remote_unpush_target ();
|
||||
error (_("Remote connection closed"));
|
||||
throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
|
||||
/* no return */
|
||||
case SERIAL_ERROR:
|
||||
remote_unpush_target ();
|
||||
perror_with_name (_("Remote communication error. "
|
||||
"Target disconnected."));
|
||||
throw_perror_with_name (TARGET_CLOSE_ERROR,
|
||||
_("Remote communication error. "
|
||||
"Target disconnected."));
|
||||
/* no return */
|
||||
case SERIAL_TIMEOUT:
|
||||
break;
|
||||
@ -7576,7 +7575,9 @@ getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
|
||||
{
|
||||
QUIT;
|
||||
remote_unpush_target ();
|
||||
error (_("Watchdog timeout has expired. Target detached."));
|
||||
throw_error (TARGET_CLOSE_ERROR,
|
||||
_("Watchdog timeout has expired. "
|
||||
"Target detached."));
|
||||
}
|
||||
if (remote_debug)
|
||||
fputs_filtered ("Timed out.\n", gdb_stdlog);
|
||||
@ -10699,8 +10700,12 @@ remote_get_trace_status (struct trace_status *ts)
|
||||
}
|
||||
if (ex.reason < 0)
|
||||
{
|
||||
exception_fprintf (gdb_stderr, ex, "qTStatus: ");
|
||||
return -1;
|
||||
if (ex.error != TARGET_CLOSE_ERROR)
|
||||
{
|
||||
exception_fprintf (gdb_stderr, ex, "qTStatus: ");
|
||||
return -1;
|
||||
}
|
||||
throw_exception (ex);
|
||||
}
|
||||
|
||||
/* If the remote target doesn't do tracing, flag it. */
|
||||
|
@ -1,3 +1,9 @@
|
||||
2013-03-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.server/server-kill.c: New file.
|
||||
* gdb.server/server-kill.exp: New file.
|
||||
|
||||
2013-03-21 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.trace/trace-buffer-size.exp (get default buffer size):
|
||||
|
24
gdb/testsuite/gdb.server/server-kill.c
Normal file
24
gdb/testsuite/gdb.server/server-kill.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2013 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
return i;
|
||||
}
|
43
gdb/testsuite/gdb.server/server-kill.exp
Normal file
43
gdb/testsuite/gdb.server/server-kill.exp
Normal file
@ -0,0 +1,43 @@
|
||||
# This testcase is part of GDB, the GNU debugger.
|
||||
#
|
||||
# Copyright 2013 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
load_lib gdbserver-support.exp
|
||||
|
||||
standard_testfile
|
||||
|
||||
if {[skip_gdbserver_tests]} {
|
||||
return 0
|
||||
}
|
||||
|
||||
if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
|
||||
return -1
|
||||
}
|
||||
|
||||
# Make sure we're disconnected, in case we're testing with an
|
||||
# extended-remote board, therefore already connected.
|
||||
gdb_test "disconnect" ".*"
|
||||
|
||||
gdbserver_run ""
|
||||
|
||||
# Otherwise the breakpoint at 'main' would not cause insert
|
||||
# breakpoints during first step.
|
||||
delete_breakpoints
|
||||
|
||||
set server_pid [exp_pid -i [board_info target fileid]]
|
||||
remote_exec target "kill -9 $server_pid"
|
||||
|
||||
gdb_test "step" "Remote connection closed"
|
16
gdb/utils.c
16
gdb/utils.c
@ -966,11 +966,11 @@ add_internal_problem_command (struct internal_problem *problem)
|
||||
}
|
||||
|
||||
/* Print the system error message for errno, and also mention STRING
|
||||
as the file name for which the error was encountered.
|
||||
Then return to command level. */
|
||||
as the file name for which the error was encountered. Use ERRCODE
|
||||
for the thrown exception. Then return to command level. */
|
||||
|
||||
void
|
||||
perror_with_name (const char *string)
|
||||
throw_perror_with_name (enum errors errcode, const char *string)
|
||||
{
|
||||
char *err;
|
||||
char *combined;
|
||||
@ -987,7 +987,15 @@ perror_with_name (const char *string)
|
||||
bfd_set_error (bfd_error_no_error);
|
||||
errno = 0;
|
||||
|
||||
error (_("%s."), combined);
|
||||
throw_error (errcode, _("%s."), combined);
|
||||
}
|
||||
|
||||
/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
|
||||
|
||||
void
|
||||
perror_with_name (const char *string)
|
||||
{
|
||||
throw_perror_with_name (GENERIC_ERROR, string);
|
||||
}
|
||||
|
||||
/* Print the system error message for ERRCODE, and also mention STRING
|
||||
|
@ -278,6 +278,9 @@ extern char *hex_string_custom (LONGEST, int);
|
||||
extern void fprintf_symbol_filtered (struct ui_file *, const char *,
|
||||
enum language, int);
|
||||
|
||||
enum errors;
|
||||
extern void throw_perror_with_name (enum errors errcode, const char *string)
|
||||
ATTRIBUTE_NORETURN;
|
||||
extern void perror_with_name (const char *) ATTRIBUTE_NORETURN;
|
||||
|
||||
extern void print_sys_errmsg (const char *, int);
|
||||
|
Loading…
Reference in New Issue
Block a user