2016-05-17 Tom Tromey <tom@tromey.com>
+ * NEWS: Add "maint selftest" entry.
+ * selftest.h: New file.
+ * selftest.c: New file.
+ * maint.c: Include selftest.h.
+ (maintenance_selftest): New function.
+ (_initialize_maint_cmds): Add "maint selftest" command.
+ * configure.ac (GDB_SELF_TEST): Maybe define.
+ * config.in, configure: Rebuild.
+ * Makefile.in (SFILES): Add selftest.c.
+ (COMMON_OBS): Add selftest.o.
+
+2016-05-17 Tom Tromey <tom@tromey.com>
+
* expprint.c: Include f-lang.h.
(print_subexp_standard, dump_subexp_body_standard): Handle
OP_F90_RANGE.
proc-service.list progspace.c \
prologue-value.c psymtab.c \
regcache.c reggroups.c remote.c remote-fileio.c remote-notif.c reverse.c \
- sentinel-frame.c \
+ selftest.c sentinel-frame.c \
serial.c ser-base.c ser-unix.c ser-event.c skip.c \
solib.c solib-target.c source.c \
stabsread.c stack.c probe.c stap-probe.c std-regs.c \
go-lang.o go-valprint.o go-typeprint.o \
jv-lang.o jv-valprint.o jv-typeprint.o jv-varobj.o \
m2-lang.o opencl-lang.o p-lang.o p-typeprint.o p-valprint.o \
- sentinel-frame.o \
+ selftest.o sentinel-frame.o \
complaints.o typeprint.o \
ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o \
ada-valprint.o c-valprint.o cp-valprint.o d-valprint.o f-valprint.o \
maint info line-table REGEXP
Display the contents of GDB's internal line table data struture.
+maint selftest
+ Run any GDB unit tests that were compiled in.
+
* Support for tracepoints and fast tracepoints on s390-linux and s390x-linux
was added in GDBserver, including JIT compiling fast tracepoint's
conditional expression bytecode into native code.
/* Define to the default OS ABI for this configuration. */
#undef GDB_OSABI_DEFAULT
+/* 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
$as_echo "#define GDB_DEFAULT_HOST_CHARSET \"UTF-8\"" >>confdefs.h
+if $development; then
+
+$as_echo "#define GDB_SELF_TEST 1" >>confdefs.h
+
+fi
+
gdb_ac_transform=`echo "$program_transform_name" | sed -e 's/\\$\\$/\\$/g'`
GDB_TRANSFORM_NAME=`echo gdb | sed -e "$gdb_ac_transform"`
AC_DEFINE(GDB_DEFAULT_HOST_CHARSET, "UTF-8",
[Define to be a string naming the default host character set.])
+if $development; then
+ AC_DEFINE(GDB_SELF_TEST, 1,
+ [Define if self-testing features should be enabled])
+fi
+
GDB_AC_TRANSFORM([gdb], [GDB_TRANSFORM_NAME])
GDB_AC_TRANSFORM([gcore], [GCORE_TRANSFORM_NAME])
AC_CONFIG_FILES([gcore], [chmod +x gcore])
+2016-05-17 Tom Tromey <tom@tromey.com>
+
+ * gdb.texinfo (Maintenance Commands): Document "maint selftest".
+
2016-04-27 Yao Qi <yao.qi@linaro.org>
* gdb.texinfo (tfind): Complete doc about tfind without
a recursive definition of the data type as stored in @value{GDBN}'s
data structures, including its flags and contained types.
+@kindex maint selftest
+@cindex self tests
+Run any self tests that were compiled in to @value{GDBN}. This will
+print a message showing how many tests were run, and how many failed.
+
@kindex maint set dwarf always-disassemble
@kindex maint show dwarf always-disassemble
@item maint set dwarf always-disassemble
#include "top.h"
#include "timeval-utils.h"
#include "maint.h"
+#include "selftest.h"
#include "cli/cli-decode.h"
#include "cli/cli-utils.h"
cmd_show_list (per_command_showlist, from_tty, "");
}
\f
+
+/* The "maintenance selftest" command. */
+
+static void
+maintenance_selftest (char *args, int from_tty)
+{
+ run_self_tests ();
+}
+
+\f
void
_initialize_maint_cmds (void)
{
If you decide you want to use it: maintenance undeprecate 'commandname'"),
&maintenancelist);
+ add_cmd ("selftest", class_maintenance, maintenance_selftest, _("\
+Run gdb's unit tests.\n\
+Usage: maintenance selftest\n\
+This will run any unit tests that were built in to gdb.\n\
+gdb will abort if any test fails."),
+ &maintenancelist);
+
add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\
Set watchdog timer."), _("\
Show watchdog timer."), _("\
--- /dev/null
+/* GDB self-testing.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ 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/>. */
+
+#include "defs.h"
+#include "selftest.h"
+#include "vec.h"
+
+typedef self_test_function *self_test_function_ptr;
+
+DEF_VEC_P (self_test_function_ptr);
+
+/* All the tests that have been registered. */
+
+static VEC (self_test_function_ptr) *tests;
+
+/* See selftest.h. */
+
+void
+register_self_test (self_test_function *function)
+{
+ VEC_safe_push (self_test_function_ptr, tests, function);
+}
+
+/* See selftest.h. */
+
+void
+run_self_tests (void)
+{
+ int i;
+ self_test_function_ptr func;
+ int failed = 0;
+
+ for (i = 0; VEC_iterate (self_test_function_ptr, tests, i, func); ++i)
+ {
+ QUIT;
+
+ TRY
+ {
+ (*func) ();
+ }
+ CATCH (ex, RETURN_MASK_ERROR)
+ {
+ ++failed;
+ exception_fprintf (gdb_stderr, ex,
+ _("Self test threw exception"));
+ }
+ END_CATCH
+ }
+
+ printf_filtered (_("Ran %u unit tests, %d failed\n"),
+ VEC_length (self_test_function_ptr, tests), failed);
+}
--- /dev/null
+/* GDB self-testing.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ 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/>. */
+
+#ifndef SELFTEST_H
+#define SELFTEST_H
+
+/* A test is just a function that does some checks and throws an
+ exception if something has gone wrong. */
+
+typedef void self_test_function (void);
+
+/* Register a new self-test. */
+
+extern void register_self_test (self_test_function *function);
+
+/* Run all the self tests. This print a message describing the number
+ of test and the number of failures. */
+
+extern void run_self_tests (void);
+
+/* Check that VALUE is true, and, if not, throw an exception. */
+
+#define SELF_CHECK(VALUE) \
+ do { \
+ if (!(VALUE)) \
+ error (_("self-test failed at %s:%d"), __FILE__, __LINE__); \
+ } while (0)
+
+#endif /* SELFTEST_H */
+2016-05-17 Tom Tromey <tom@tromey.com>
+
+ * gdb.gdb/unittest.exp: New file.
+
2016-05-16 Yao Qi <yao.qi@linaro.org>
* gdb.base/batch-preserve-term-settings.exp: Remove variable
--- /dev/null
+# Copyright 2016 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/>.
+
+gdb_start
+gdb_test "maintenance selftest" "Ran $decimal unit tests, 0 failed"