* 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:
Jan Kratochvil 2013-03-22 20:39:29 +00:00
parent 82b821e99d
commit 598d363666
8 changed files with 121 additions and 12 deletions

View File

@ -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>

View File

@ -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
};

View File

@ -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. */

View File

@ -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):

View 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;
}

View 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"

View File

@ -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

View File

@ -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);