mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-06 00:34:26 +08:00
268a13a5a3
This is the next patch in the ongoing series to move gdbsever to the top level. This patch just renames the "common" directory. The idea is to do this move in two parts: first rename the directory (this patch), then move the directory to the top. This approach makes the patches a bit more tractable. I chose the name "gdbsupport" for the directory. However, as this patch was largely written by sed, we could pick a new name without too much difficulty. Tested by the buildbot. gdb/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * contrib/ari/gdb_ari.sh: Change common to gdbsupport. * configure: Rebuild. * configure.ac: Change common to gdbsupport. * gdbsupport: Rename from common. * acinclude.m4: Change common to gdbsupport. * Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES) (HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to gdbsupport. * aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c, amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c, amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c, amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c, amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c, arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c, arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c, arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c, arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c, auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h, btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c, charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c, cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c, coff-pe-read.c, command.h, compile/compile-c-support.c, compile/compile-c.h, compile/compile-cplus-symbols.c, compile/compile-cplus-types.c, compile/compile-cplus.h, compile/compile-loc2c.c, compile/compile.c, completer.c, completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c, cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c, darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c, disasm.h, dtrace-probe.c, dwarf-index-cache.c, dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c, dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c, event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c, features/aarch64-core.c, features/aarch64-fpu.c, features/aarch64-pauth.c, features/aarch64-sve.c, features/i386/32bit-avx.c, features/i386/32bit-avx512.c, features/i386/32bit-core.c, features/i386/32bit-linux.c, features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c, features/i386/32bit-segments.c, features/i386/32bit-sse.c, features/i386/64bit-avx.c, features/i386/64bit-avx512.c, features/i386/64bit-core.c, features/i386/64bit-linux.c, features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c, features/i386/64bit-segments.c, features/i386/64bit-sse.c, features/i386/x32-core.c, features/riscv/32bit-cpu.c, features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c, features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c, features/riscv/64bit-fpu.c, features/tic6x-c6xp.c, features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h, findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h, gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c, gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c, go32-nat.c, guile/guile.c, guile/scm-ports.c, guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c, i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c, i386-linux-tdep.c, i386-tdep.c, i387-tdep.c, ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c, inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h, inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h, inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c, linux-tdep.c, linux-thread-db.c, location.c, machoread.c, macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h, mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h, minsyms.c, mips-linux-tdep.c, namespace.h, nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h, nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c, nat/amd64-linux-siginfo.c, nat/fork-inferior.c, nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c, nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c, nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h, nat/linux-waitpid.c, nat/mips-linux-watch.c, nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c, nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c, nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h, obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c, parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c, procfs.c, producer.c, progspace.h, psymtab.h, python/py-framefilter.c, python/py-inferior.c, python/py-ref.h, python/py-type.c, python/python.c, record-btrace.c, record-full.c, record.c, record.h, regcache-dump.c, regcache.c, regcache.h, remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c, riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c, selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c, ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c, source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c, stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h, symtab.c, symtab.h, target-descriptions.c, target-descriptions.h, target-memory.c, target.c, target.h, target/waitstatus.c, target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c, top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c, tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h, unittests/array-view-selftests.c, unittests/child-path-selftests.c, unittests/cli-utils-selftests.c, unittests/common-utils-selftests.c, unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c, unittests/format_pieces-selftests.c, unittests/function-view-selftests.c, unittests/lookup_name_info-selftests.c, unittests/memory-map-selftests.c, unittests/memrange-selftests.c, unittests/mkdir-recursive-selftests.c, unittests/observable-selftests.c, unittests/offset-type-selftests.c, unittests/optional-selftests.c, unittests/parse-connection-spec-selftests.c, unittests/ptid-selftests.c, unittests/rsp-low-selftests.c, unittests/scoped_fd-selftests.c, unittests/scoped_mmap-selftests.c, unittests/scoped_restore-selftests.c, unittests/string_view-selftests.c, unittests/style-selftests.c, unittests/tracepoint-selftests.c, unittests/unpack-selftests.c, unittests/utils-selftests.c, unittests/xml-utils-selftests.c, utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c, value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c, xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c, xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport. gdb/gdbserver/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * configure: Rebuild. * configure.ac: Change common to gdbsupport. * acinclude.m4: Change common to gdbsupport. * Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS) (version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change common to gdbsupport. * ax.c, event-loop.c, fork-child.c, gdb_proc_service.h, gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c, inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c, linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c, linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c, linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h, nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c, server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h, thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change common to gdbsupport.
175 lines
5.3 KiB
C
175 lines
5.3 KiB
C
/* Self tests for gdbarch for GDB, the GNU debugger.
|
|
|
|
Copyright (C) 2017-2019 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"
|
|
#if GDB_SELF_TEST
|
|
#include "gdbsupport/selftest.h"
|
|
#include "selftest-arch.h"
|
|
#include "inferior.h"
|
|
#include "gdbthread.h"
|
|
#include "target.h"
|
|
#include "test-target.h"
|
|
#include "target-float.h"
|
|
#include "gdbsupport/def-vector.h"
|
|
|
|
namespace selftests {
|
|
|
|
/* Test gdbarch methods register_to_value and value_to_register. */
|
|
|
|
static void
|
|
register_to_value_test (struct gdbarch *gdbarch)
|
|
{
|
|
const struct builtin_type *builtin = builtin_type (gdbarch);
|
|
struct type *types[] =
|
|
{
|
|
builtin->builtin_void,
|
|
builtin->builtin_char,
|
|
builtin->builtin_short,
|
|
builtin->builtin_int,
|
|
builtin->builtin_long,
|
|
builtin->builtin_signed_char,
|
|
builtin->builtin_unsigned_short,
|
|
builtin->builtin_unsigned_int,
|
|
builtin->builtin_unsigned_long,
|
|
builtin->builtin_float,
|
|
builtin->builtin_double,
|
|
builtin->builtin_long_double,
|
|
builtin->builtin_complex,
|
|
builtin->builtin_double_complex,
|
|
builtin->builtin_string,
|
|
builtin->builtin_bool,
|
|
builtin->builtin_long_long,
|
|
builtin->builtin_unsigned_long_long,
|
|
builtin->builtin_int8,
|
|
builtin->builtin_uint8,
|
|
builtin->builtin_int16,
|
|
builtin->builtin_uint16,
|
|
builtin->builtin_int32,
|
|
builtin->builtin_uint32,
|
|
builtin->builtin_int64,
|
|
builtin->builtin_uint64,
|
|
builtin->builtin_int128,
|
|
builtin->builtin_uint128,
|
|
builtin->builtin_char16,
|
|
builtin->builtin_char32,
|
|
};
|
|
|
|
/* Error out if debugging something, because we're going to push the
|
|
test target, which would pop any existing target. */
|
|
if (current_top_target ()->stratum () >= process_stratum)
|
|
error (_("target already pushed"));
|
|
|
|
/* Create a mock environment. An inferior with a thread, with a
|
|
process_stratum target pushed. */
|
|
|
|
test_target_ops mock_target;
|
|
ptid_t mock_ptid (1, 1);
|
|
inferior mock_inferior (mock_ptid.pid ());
|
|
address_space mock_aspace {};
|
|
mock_inferior.gdbarch = gdbarch;
|
|
mock_inferior.aspace = &mock_aspace;
|
|
thread_info mock_thread (&mock_inferior, mock_ptid);
|
|
|
|
scoped_restore restore_thread_list
|
|
= make_scoped_restore (&mock_inferior.thread_list, &mock_thread);
|
|
|
|
/* Add the mock inferior to the inferior list so that look ups by
|
|
target+ptid can find it. */
|
|
scoped_restore restore_inferior_list
|
|
= make_scoped_restore (&inferior_list);
|
|
inferior_list = &mock_inferior;
|
|
|
|
/* Switch to the mock inferior. */
|
|
scoped_restore_current_inferior restore_current_inferior;
|
|
set_current_inferior (&mock_inferior);
|
|
|
|
/* Push the process_stratum target so we can mock accessing
|
|
registers. */
|
|
push_target (&mock_target);
|
|
|
|
/* Pop it again on exit (return/exception). */
|
|
SCOPE_EXIT { pop_all_targets_at_and_above (process_stratum); };
|
|
|
|
/* Switch to the mock thread. */
|
|
scoped_restore restore_inferior_ptid
|
|
= make_scoped_restore (&inferior_ptid, mock_ptid);
|
|
|
|
struct frame_info *frame = get_current_frame ();
|
|
const int num_regs = gdbarch_num_cooked_regs (gdbarch);
|
|
|
|
/* Test gdbarch methods register_to_value and value_to_register with
|
|
different combinations of register numbers and types. */
|
|
for (const auto &type : types)
|
|
{
|
|
for (auto regnum = 0; regnum < num_regs; regnum++)
|
|
{
|
|
if (gdbarch_convert_register_p (gdbarch, regnum, type))
|
|
{
|
|
std::vector<gdb_byte> expected (TYPE_LENGTH (type), 0);
|
|
|
|
if (TYPE_CODE (type) == TYPE_CODE_FLT)
|
|
{
|
|
/* Generate valid float format. */
|
|
target_float_from_string (expected.data (), type, "1.25");
|
|
}
|
|
else
|
|
{
|
|
for (auto j = 0; j < expected.size (); j++)
|
|
expected[j] = (regnum + j) % 16;
|
|
}
|
|
|
|
gdbarch_value_to_register (gdbarch, frame, regnum, type,
|
|
expected.data ());
|
|
|
|
/* Allocate two bytes more for overflow check. */
|
|
std::vector<gdb_byte> buf (TYPE_LENGTH (type) + 2, 0);
|
|
int optim, unavail, ok;
|
|
|
|
/* Set the fingerprint in the last two bytes. */
|
|
buf [TYPE_LENGTH (type)]= 'w';
|
|
buf [TYPE_LENGTH (type) + 1]= 'l';
|
|
ok = gdbarch_register_to_value (gdbarch, frame, regnum, type,
|
|
buf.data (), &optim, &unavail);
|
|
|
|
SELF_CHECK (ok);
|
|
SELF_CHECK (!optim);
|
|
SELF_CHECK (!unavail);
|
|
|
|
SELF_CHECK (buf[TYPE_LENGTH (type)] == 'w');
|
|
SELF_CHECK (buf[TYPE_LENGTH (type) + 1] == 'l');
|
|
|
|
for (auto k = 0; k < TYPE_LENGTH(type); k++)
|
|
SELF_CHECK (buf[k] == expected[k]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace selftests
|
|
#endif /* GDB_SELF_TEST */
|
|
|
|
void
|
|
_initialize_gdbarch_selftests (void)
|
|
{
|
|
#if GDB_SELF_TEST
|
|
selftests::register_test_foreach_arch ("register_to_value",
|
|
selftests::register_to_value_test);
|
|
#endif
|
|
}
|