GDBserver self tests
This patch uses GDB self test in GDBserver. The self tests are run if GDBserver is started with option --selftest. gdb: 2017-08-18 Yao Qi <yao.qi@linaro.org> * NEWS: Mention GDBserver's new option "--selftest". * Makefile.in (SFILES): Remove selftest.c, add common/selftest.c. * selftest.c: Move it to common/selftest.c. * selftest.h: Move it to common/selftest.h. * selftest-arch.c (reset): New function. (tests_with_arch): Call reset. gdb/gdbserver: 2017-08-18 Yao Qi <yao.qi@linaro.org> * Makefile.in (OBS): Add selftest.o. * configure.ac: AC_DEFINE GDB_SELF_TEST if $development. * configure, config.in: Re-generated. * server.c: Include common/sefltest.h. (captured_main): Handle option --selftest. gdb/testsuite: 2017-08-18 Yao Qi <yao.qi@linaro.org> * gdb.server/unittest.exp: New. gdb/doc: 2017-08-18 Yao Qi <yao.qi@linaro.org> * gdb.texinfo (Server): Document "--selftest".
This commit is contained in:
parent
86dcbf50fe
commit
6d580b635f
|
@ -1,3 +1,12 @@
|
|||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* NEWS: Mention GDBserver's new option "--selftest".
|
||||
* Makefile.in (SFILES): Remove selftest.c, add common/selftest.c.
|
||||
* selftest.c: Move it to common/selftest.c.
|
||||
* selftest.h: Move it to common/selftest.h.
|
||||
* selftest-arch.c (reset): New function.
|
||||
(tests_with_arch): Call reset.
|
||||
|
||||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* selftest.c (run_tests): Don't call QUIT. Call debug_printf
|
||||
|
|
|
@ -1178,7 +1178,6 @@ SFILES = \
|
|||
reverse.c \
|
||||
rust-exp.y \
|
||||
rust-lang.c \
|
||||
selftest.c \
|
||||
selftest-arch.c \
|
||||
sentinel-frame.c \
|
||||
ser-base.c \
|
||||
|
@ -1244,6 +1243,7 @@ SFILES = \
|
|||
common/ptid.c \
|
||||
common/rsp-low.c \
|
||||
common/run-time-clock.c \
|
||||
common/selftest.c \
|
||||
common/signals.c \
|
||||
common/signals-state-save-restore.c \
|
||||
common/vec.c \
|
||||
|
|
7
gdb/NEWS
7
gdb/NEWS
|
@ -3,7 +3,12 @@
|
|||
|
||||
*** Changes since GDB 8.0
|
||||
|
||||
* On Unix systems, GDBserver now does globbing expansion and variable
|
||||
* New features in the GDB remote stub, GDBserver
|
||||
|
||||
** New "--selftest" command line option runs some GDBserver self
|
||||
tests. These self tests are disabled in releases.
|
||||
|
||||
** On Unix systems, GDBserver now does globbing expansion and variable
|
||||
substitution in inferior command line arguments.
|
||||
|
||||
This is done by starting inferiors using a shell, like GDB does.
|
||||
|
|
|
@ -16,7 +16,9 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "common-defs.h"
|
||||
#include "common-exceptions.h"
|
||||
#include "common-debug.h"
|
||||
#include "selftest.h"
|
||||
#include <vector>
|
||||
|
||||
|
@ -55,9 +57,7 @@ run_tests (void)
|
|||
}
|
||||
END_CATCH
|
||||
|
||||
/* Clear GDB internal state. */
|
||||
registers_changed ();
|
||||
reinit_frame_cache ();
|
||||
reset ();
|
||||
}
|
||||
|
||||
debug_printf ("Ran %lu unit tests, %d failed\n",
|
|
@ -36,6 +36,9 @@ extern void register_test (self_test_function *function);
|
|||
|
||||
extern void run_tests (void);
|
||||
|
||||
/* Reset GDB or GDBserver's internal state. */
|
||||
extern void reset ();
|
||||
|
||||
}
|
||||
|
||||
/* Check that VALUE is true, and, if not, throw an exception. */
|
|
@ -1,3 +1,7 @@
|
|||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* gdb.texinfo (Server): Document "--selftest".
|
||||
|
||||
2017-08-16 Ruslan Kabatsayev <b7.10110111@gmail.com>
|
||||
|
||||
* gdb.texinfo (TUI Single Key Mode): Document the new shortcuts in
|
||||
|
|
|
@ -20253,6 +20253,15 @@ environment:
|
|||
$ gdbserver --wrapper env LD_PRELOAD=libtest.so -- :2222 ./testprog
|
||||
@end smallexample
|
||||
|
||||
@cindex @option{--selftest}
|
||||
The @option{--selftest} option runs the self tests in @code{gdbserver}:
|
||||
|
||||
@smallexample
|
||||
$ gdbserver --selftest
|
||||
Ran 2 unit tests, 0 failed
|
||||
@end smallexample
|
||||
|
||||
These tests are disabled in release.
|
||||
@subsection Connecting to @code{gdbserver}
|
||||
|
||||
The basic procedure for connecting to the remote target is:
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* Makefile.in (OBS): Add selftest.o.
|
||||
* configure.ac: AC_DEFINE GDB_SELF_TEST if $development.
|
||||
* configure, config.in: Re-generated.
|
||||
* server.c: Include common/sefltest.h.
|
||||
(captured_main): Handle option --selftest.
|
||||
|
||||
2017-08-09 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* configure.srv (srv_i386_regobj): Remove i386-avx.o,
|
||||
|
|
|
@ -258,6 +258,7 @@ OBS = \
|
|||
regcache.o \
|
||||
remote-utils.o \
|
||||
rsp-low.o \
|
||||
selftest.o \
|
||||
server.o \
|
||||
signals.o \
|
||||
signals-state-save-restore.o \
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
/* Define to 1 if using `alloca.c'. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define if self-testing features should be enabled */
|
||||
#undef GDB_SELF_TEST
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
|
|
|
@ -5813,6 +5813,12 @@ fi
|
|||
fi
|
||||
|
||||
|
||||
if $development; then
|
||||
|
||||
$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
case ${build_alias} in
|
||||
"") build_noncanonical=${build} ;;
|
||||
*) build_noncanonical=${build_alias} ;;
|
||||
|
|
|
@ -56,6 +56,11 @@ else
|
|||
fi
|
||||
GDB_AC_LIBMCHECK(${libmcheck_default})
|
||||
|
||||
if $development; then
|
||||
AC_DEFINE(GDB_SELF_TEST, 1,
|
||||
[Define if self-testing features should be enabled])
|
||||
fi
|
||||
|
||||
ACX_NONCANONICAL_TARGET
|
||||
ACX_NONCANONICAL_HOST
|
||||
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
#include "job-control.h"
|
||||
#include "environ.h"
|
||||
|
||||
#include "common/selftest.h"
|
||||
|
||||
/* The environment to pass to the inferior when creating it. */
|
||||
|
||||
static gdb_environ our_environ;
|
||||
|
@ -3521,6 +3523,7 @@ captured_main (int argc, char *argv[])
|
|||
volatile int multi_mode = 0;
|
||||
volatile int attach = 0;
|
||||
int was_running;
|
||||
bool selftest = false;
|
||||
|
||||
while (*next_arg != NULL && **next_arg == '-')
|
||||
{
|
||||
|
@ -3639,6 +3642,8 @@ captured_main (int argc, char *argv[])
|
|||
startup_with_shell = false;
|
||||
else if (strcmp (*next_arg, "--once") == 0)
|
||||
run_once = 1;
|
||||
else if (strcmp (*next_arg, "--selftest") == 0)
|
||||
selftest = true;
|
||||
else
|
||||
{
|
||||
fprintf (stderr, "Unknown argument: %s\n", *next_arg);
|
||||
|
@ -3654,7 +3659,8 @@ captured_main (int argc, char *argv[])
|
|||
port = *next_arg;
|
||||
next_arg++;
|
||||
}
|
||||
if (port == NULL || (!attach && !multi_mode && *next_arg == NULL))
|
||||
if ((port == NULL || (!attach && !multi_mode && *next_arg == NULL))
|
||||
&& !selftest)
|
||||
{
|
||||
gdbserver_usage (stderr);
|
||||
exit (1);
|
||||
|
@ -3670,6 +3676,7 @@ captured_main (int argc, char *argv[])
|
|||
starting the inferior. Inferiors created in this scenario have
|
||||
stdin,stdout redirected. So do this here before we call
|
||||
start_inferior. */
|
||||
if (port != NULL)
|
||||
remote_prepare (port);
|
||||
|
||||
bad_attach = 0;
|
||||
|
@ -3711,6 +3718,12 @@ captured_main (int argc, char *argv[])
|
|||
own_buf = (char *) xmalloc (PBUFSIZ + 1);
|
||||
mem_buf = (unsigned char *) xmalloc (PBUFSIZ);
|
||||
|
||||
if (selftest)
|
||||
{
|
||||
selftests::run_tests ();
|
||||
throw_quit ("Quit");
|
||||
}
|
||||
|
||||
if (pid == 0 && *next_arg != NULL)
|
||||
{
|
||||
int i, n;
|
||||
|
@ -4507,3 +4520,14 @@ handle_target_event (int err, gdb_client_data client_data)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if GDB_SELF_TEST
|
||||
namespace selftests
|
||||
{
|
||||
|
||||
void
|
||||
reset ()
|
||||
{}
|
||||
|
||||
} // namespace selftests
|
||||
#endif /* GDB_SELF_TEST */
|
||||
|
|
|
@ -33,6 +33,14 @@ register_test_foreach_arch (self_test_foreach_arch_function *function)
|
|||
gdbarch_tests.push_back (function);
|
||||
}
|
||||
|
||||
void
|
||||
reset ()
|
||||
{
|
||||
/* Clear GDB internal state. */
|
||||
registers_changed ();
|
||||
reinit_frame_cache ();
|
||||
}
|
||||
|
||||
static void
|
||||
tests_with_arch ()
|
||||
{
|
||||
|
@ -82,9 +90,7 @@ tests_with_arch ()
|
|||
}
|
||||
END_CATCH
|
||||
|
||||
/* Clear GDB internal state. */
|
||||
registers_changed ();
|
||||
reinit_frame_cache ();
|
||||
reset ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2017-08-18 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* gdb.server/unittest.exp: New.
|
||||
|
||||
2017-08-15 Sergio Durigan Junior <sergiodj@redhat.com>
|
||||
|
||||
PR gdb/21954
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
# This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
# Copyright 2017 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
|
||||
}
|
||||
|
||||
global server_spawn_id
|
||||
|
||||
set gdbserver [find_gdbserver]
|
||||
set gdbserver_command "$gdbserver --selftest"
|
||||
|
||||
set server_spawn_id [remote_spawn target $gdbserver_command]
|
||||
|
||||
gdb_expect {
|
||||
-i $server_spawn_id
|
||||
-re "Ran $decimal unit tests, 0 failed" {
|
||||
pass "unit tests"
|
||||
}
|
||||
default {
|
||||
fail "unit tests"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue