2023-01-01 20:49:04 +08:00
|
|
|
/* Copyright (C) 1986-2023 Free Software Foundation, Inc.
|
2018-02-21 19:20:03 +08:00
|
|
|
|
|
|
|
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 "gdbcmd.h"
|
|
|
|
#include "regcache.h"
|
Rename common to gdbsupport
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.
2019-05-06 10:29:24 +08:00
|
|
|
#include "gdbsupport/def-vector.h"
|
2018-02-21 19:20:03 +08:00
|
|
|
#include "valprint.h"
|
|
|
|
#include "remote.h"
|
|
|
|
#include "reggroups.h"
|
|
|
|
#include "target.h"
|
Don't include gdbarch.h from defs.h
I touched symtab.h and was surprised to see how many files were
rebuilt. I looked into it a bit, and found that defs.h includes
gdbarch.h, which in turn includes many things.
gdbarch.h is only needed by a minority ofthe files in gdb, so this
patch removes the include from defs.h and updates the fallout.
I did "wc -l" on the files in build/gdb/.deps; this patch reduces the
line count from 139935 to 137030; so there are definitely future
build-time savings here.
Note that while I configured with --enable-targets=all, it's possible
that some *-nat.c file needs an update. I could not test all of
these. The buildbot caught a few problems along these lines.
gdb/ChangeLog
2019-07-10 Tom Tromey <tom@tromey.com>
* defs.h: Don't include gdbarch.h.
* aarch64-ravenscar-thread.c, aarch64-tdep.c, alpha-bsd-tdep.h,
alpha-linux-tdep.c, alpha-mdebug-tdep.c, arch-utils.h, arm-tdep.h,
ax-general.c, btrace.c, buildsym-legacy.c, buildsym.h, c-lang.c,
cli/cli-decode.h, cli/cli-dump.c, cli/cli-script.h,
cli/cli-style.h, coff-pe-read.h, compile/compile-c-support.c,
compile/compile-cplus.h, compile/compile-loc2c.c, corefile.c,
cp-valprint.c, cris-linux-tdep.c, ctf.c, d-lang.c, d-namespace.c,
dcache.c, dicos-tdep.c, dictionary.c, disasm-selftests.c,
dummy-frame.c, dummy-frame.h, dwarf2-frame-tailcall.c,
dwarf2expr.c, expression.h, f-lang.c, frame-base.c,
frame-unwind.c, frv-linux-tdep.c, gdbarch-selftests.c, gdbtypes.h,
go-lang.c, hppa-nbsd-tdep.c, hppa-obsd-tdep.c, i386-dicos-tdep.c,
i386-tdep.h, ia64-vms-tdep.c, interps.h, language.c,
linux-record.c, location.h, m2-lang.c, m32r-linux-tdep.c,
mem-break.c, memattr.c, mn10300-linux-tdep.c, nios2-linux-tdep.c,
objfiles.h, opencl-lang.c, or1k-linux-tdep.c, p-lang.c,
parser-defs.h, ppc-tdep.h, probe.h, python/py-record-btrace.c,
record-btrace.c, record.h, regcache-dump.c, regcache.h,
riscv-fbsd-tdep.c, riscv-linux-tdep.c, rust-exp.y,
sh-linux-tdep.c, sh-nbsd-tdep.c, source-cache.c,
sparc-nbsd-tdep.c, sparc-obsd-tdep.c, sparc-ravenscar-thread.c,
sparc64-fbsd-tdep.c, std-regs.c, target-descriptions.h,
target-float.c, tic6x-linux-tdep.c, tilegx-linux-tdep.c, top.c,
tracefile.c, trad-frame.c, type-stack.h, ui-style.c, utils.c,
utils.h, valarith.c, valprint.c, varobj.c, x86-tdep.c,
xml-support.h, xtensa-linux-tdep.c, cli/cli-cmds.h: Update.
* s390-linux-nat.c, procfs.c, inf-ptrace.c: Likewise.
2019-06-10 05:21:02 +08:00
|
|
|
#include "gdbarch.h"
|
2023-09-30 02:24:38 +08:00
|
|
|
#include "inferior.h"
|
2018-02-21 19:20:03 +08:00
|
|
|
|
|
|
|
/* Dump registers from regcache, used for dumping raw registers and
|
|
|
|
cooked registers. */
|
|
|
|
|
|
|
|
class register_dump_regcache : public register_dump
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
register_dump_regcache (regcache *regcache, bool dump_pseudo)
|
|
|
|
: register_dump (regcache->arch ()), m_regcache (regcache),
|
|
|
|
m_dump_pseudo (dump_pseudo)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dump_reg (ui_file *file, int regnum) override
|
|
|
|
{
|
|
|
|
if (regnum < 0)
|
|
|
|
{
|
|
|
|
if (m_dump_pseudo)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Cooked value");
|
2018-02-21 19:20:03 +08:00
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Raw value");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (regnum < gdbarch_num_regs (m_gdbarch) || m_dump_pseudo)
|
|
|
|
{
|
|
|
|
auto size = register_size (m_gdbarch, regnum);
|
|
|
|
|
|
|
|
if (size == 0)
|
|
|
|
return;
|
|
|
|
|
2023-10-31 11:22:03 +08:00
|
|
|
gdb::byte_vector buf (size);
|
2018-02-21 19:20:03 +08:00
|
|
|
auto status = m_regcache->cooked_read (regnum, buf.data ());
|
|
|
|
|
|
|
|
if (status == REG_UNKNOWN)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<invalid>");
|
2018-02-21 19:20:03 +08:00
|
|
|
else if (status == REG_UNAVAILABLE)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<unavailable>");
|
2018-02-21 19:20:03 +08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
print_hex_chars (file, buf.data (), size,
|
|
|
|
gdbarch_byte_order (m_gdbarch), true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Just print "<cooked>" for pseudo register when
|
|
|
|
regcache_dump_raw. */
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<cooked>");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
regcache *m_regcache;
|
|
|
|
|
|
|
|
/* Dump pseudo registers or not. */
|
|
|
|
const bool m_dump_pseudo;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Dump from reg_buffer, used when there is no thread or
|
|
|
|
registers. */
|
|
|
|
|
|
|
|
class register_dump_reg_buffer : public register_dump, reg_buffer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
register_dump_reg_buffer (gdbarch *gdbarch, bool dump_pseudo)
|
|
|
|
: register_dump (gdbarch), reg_buffer (gdbarch, dump_pseudo)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dump_reg (ui_file *file, int regnum) override
|
|
|
|
{
|
|
|
|
if (regnum < 0)
|
|
|
|
{
|
|
|
|
if (m_has_pseudo)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Cooked value");
|
2018-02-21 19:20:03 +08:00
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Raw value");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (regnum < gdbarch_num_regs (m_gdbarch) || m_has_pseudo)
|
|
|
|
{
|
|
|
|
auto size = register_size (m_gdbarch, regnum);
|
|
|
|
|
|
|
|
if (size == 0)
|
|
|
|
return;
|
|
|
|
|
|
|
|
auto status = get_register_status (regnum);
|
|
|
|
|
|
|
|
gdb_assert (status != REG_VALID);
|
|
|
|
|
|
|
|
if (status == REG_UNKNOWN)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<invalid>");
|
2018-02-21 19:20:03 +08:00
|
|
|
else
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<unavailable>");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Just print "<cooked>" for pseudo register when
|
|
|
|
regcache_dump_raw. */
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "<cooked>");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* For "maint print registers". */
|
|
|
|
|
|
|
|
class register_dump_none : public register_dump
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
register_dump_none (gdbarch *arch)
|
|
|
|
: register_dump (arch)
|
|
|
|
{}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dump_reg (ui_file *file, int regnum) override
|
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* For "maint print remote-registers". */
|
|
|
|
|
|
|
|
class register_dump_remote : public register_dump
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
register_dump_remote (gdbarch *arch)
|
|
|
|
: register_dump (arch)
|
|
|
|
{}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dump_reg (ui_file *file, int regnum) override
|
|
|
|
{
|
|
|
|
if (regnum < 0)
|
|
|
|
{
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Rmt Nr g/G Offset");
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
else if (regnum < gdbarch_num_regs (m_gdbarch))
|
|
|
|
{
|
|
|
|
int pnum, poffset;
|
|
|
|
|
|
|
|
if (remote_register_number_and_offset (m_gdbarch, regnum,
|
|
|
|
&pnum, &poffset))
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "%7d %11d", pnum, poffset);
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/* For "maint print register-groups". */
|
|
|
|
|
|
|
|
class register_dump_groups : public register_dump
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
register_dump_groups (gdbarch *arch)
|
|
|
|
: register_dump (arch)
|
|
|
|
{}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void dump_reg (ui_file *file, int regnum) override
|
|
|
|
{
|
|
|
|
if (regnum < 0)
|
2022-01-03 02:46:15 +08:00
|
|
|
gdb_printf (file, "Groups");
|
2018-02-21 19:20:03 +08:00
|
|
|
else
|
|
|
|
{
|
|
|
|
const char *sep = "";
|
2022-03-31 18:43:13 +08:00
|
|
|
for (const struct reggroup *group : gdbarch_reggroups (m_gdbarch))
|
2018-02-21 19:20:03 +08:00
|
|
|
{
|
|
|
|
if (gdbarch_register_reggroup_p (m_gdbarch, regnum, group))
|
|
|
|
{
|
2022-04-01 01:10:34 +08:00
|
|
|
gdb_printf (file, "%s%s", sep, group->name ());
|
2018-02-21 19:20:03 +08:00
|
|
|
sep = ",";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
enum regcache_dump_what
|
|
|
|
{
|
|
|
|
regcache_dump_none, regcache_dump_raw,
|
|
|
|
regcache_dump_cooked, regcache_dump_groups,
|
|
|
|
regcache_dump_remote
|
|
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
|
|
regcache_print (const char *args, enum regcache_dump_what what_to_dump)
|
|
|
|
{
|
|
|
|
/* Where to send output. */
|
|
|
|
stdio_file file;
|
|
|
|
ui_file *out;
|
|
|
|
|
|
|
|
if (args == NULL)
|
|
|
|
out = gdb_stdout;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!file.open (args, "w"))
|
|
|
|
perror_with_name (_("maintenance print architecture"));
|
|
|
|
out = &file;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::unique_ptr<register_dump> dump;
|
|
|
|
std::unique_ptr<regcache> regs;
|
|
|
|
gdbarch *gdbarch;
|
|
|
|
|
2020-09-29 09:38:25 +08:00
|
|
|
if (target_has_registers ())
|
2018-02-21 19:20:03 +08:00
|
|
|
gdbarch = get_current_regcache ()->arch ();
|
|
|
|
else
|
2023-09-30 02:24:38 +08:00
|
|
|
gdbarch = current_inferior ()->arch ();
|
2018-02-21 19:20:03 +08:00
|
|
|
|
|
|
|
switch (what_to_dump)
|
|
|
|
{
|
|
|
|
case regcache_dump_none:
|
|
|
|
dump.reset (new register_dump_none (gdbarch));
|
|
|
|
break;
|
|
|
|
case regcache_dump_remote:
|
|
|
|
dump.reset (new register_dump_remote (gdbarch));
|
|
|
|
break;
|
|
|
|
case regcache_dump_groups:
|
|
|
|
dump.reset (new register_dump_groups (gdbarch));
|
|
|
|
break;
|
|
|
|
case regcache_dump_raw:
|
|
|
|
case regcache_dump_cooked:
|
|
|
|
{
|
|
|
|
auto dump_pseudo = (what_to_dump == regcache_dump_cooked);
|
|
|
|
|
2020-09-29 09:38:25 +08:00
|
|
|
if (target_has_registers ())
|
2018-02-21 19:20:03 +08:00
|
|
|
dump.reset (new register_dump_regcache (get_current_regcache (),
|
|
|
|
dump_pseudo));
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* For the benefit of "maint print registers" & co when
|
|
|
|
debugging an executable, allow dumping a regcache even when
|
|
|
|
there is no thread selected / no registers. */
|
2023-09-30 02:24:38 +08:00
|
|
|
dump.reset (new register_dump_reg_buffer (gdbarch, dump_pseudo));
|
2018-02-21 19:20:03 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
dump->dump (out);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
maintenance_print_registers (const char *args, int from_tty)
|
|
|
|
{
|
|
|
|
regcache_print (args, regcache_dump_none);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
maintenance_print_raw_registers (const char *args, int from_tty)
|
|
|
|
{
|
|
|
|
regcache_print (args, regcache_dump_raw);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
maintenance_print_cooked_registers (const char *args, int from_tty)
|
|
|
|
{
|
|
|
|
regcache_print (args, regcache_dump_cooked);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
maintenance_print_register_groups (const char *args, int from_tty)
|
|
|
|
{
|
|
|
|
regcache_print (args, regcache_dump_groups);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
maintenance_print_remote_registers (const char *args, int from_tty)
|
|
|
|
{
|
|
|
|
regcache_print (args, regcache_dump_remote);
|
|
|
|
}
|
|
|
|
|
2020-01-14 03:01:38 +08:00
|
|
|
void _initialize_regcache_dump ();
|
2018-02-21 19:20:03 +08:00
|
|
|
void
|
2020-01-14 03:01:38 +08:00
|
|
|
_initialize_regcache_dump ()
|
2018-02-21 19:20:03 +08:00
|
|
|
{
|
|
|
|
add_cmd ("registers", class_maintenance, maintenance_print_registers,
|
|
|
|
_("Print the internal register configuration.\n"
|
|
|
|
"Takes an optional file parameter."), &maintenanceprintlist);
|
|
|
|
add_cmd ("raw-registers", class_maintenance,
|
|
|
|
maintenance_print_raw_registers,
|
|
|
|
_("Print the internal register configuration "
|
|
|
|
"including raw values.\n"
|
|
|
|
"Takes an optional file parameter."), &maintenanceprintlist);
|
|
|
|
add_cmd ("cooked-registers", class_maintenance,
|
|
|
|
maintenance_print_cooked_registers,
|
|
|
|
_("Print the internal register configuration "
|
|
|
|
"including cooked values.\n"
|
|
|
|
"Takes an optional file parameter."), &maintenanceprintlist);
|
|
|
|
add_cmd ("register-groups", class_maintenance,
|
|
|
|
maintenance_print_register_groups,
|
|
|
|
_("Print the internal register configuration "
|
|
|
|
"including each register's group.\n"
|
|
|
|
"Takes an optional file parameter."),
|
|
|
|
&maintenanceprintlist);
|
|
|
|
add_cmd ("remote-registers", class_maintenance,
|
|
|
|
maintenance_print_remote_registers, _("\
|
Make first and last lines of 'command help documentation' consistent.
With this patch, the help docs now respect 2 invariants:
* The first line of a command help is terminated by a '.' character.
* The last character of a command help is not a newline character.
Note that the changes for the last invariant were done by Tom, as part of :
[PATCH] Remove trailing newlines from help text
https://sourceware.org/ml/gdb-patches/2019-06/msg00050.html
but some occurrences have been re-introduced since then.
Some help docs had to be rephrased/restructured to respect the above
invariants.
Before this patch, print_doc_line was printing the first line
of a command help documentation, but stopping at the first '.'
or ',' character.
This was giving inconsistent results :
* The first line of command helps was sometimes '.' terminated,
sometimes not.
* The first line of command helps was not always designed to be
readable/understandable/unambiguous when stopping at the first
'.' or ',' character.
This e.g. created the following inconsistencies/problems:
< catch exception -- Catch Ada exceptions
< catch handlers -- Catch Ada exceptions
< catch syscall -- Catch system calls by their names
< down-silently -- Same as the `down' command
while the new help is:
> catch exception -- Catch Ada exceptions, when raised.
> catch handlers -- Catch Ada exceptions, when handled.
> catch syscall -- Catch system calls by their names, groups and/or numbers.
> down-silently -- Same as the `down' command, but does not print anything.
Also, the command help doc should not be terminated by a newline
character, but this was not respected by all commands.
The cli-option -OPT framework re-introduced some occurences.
So, the -OPT build help framework was changed to not output newlines at the
end of %OPTIONS% replacement.
This patch changes the help documentations to ensure the 2 invariants
given above.
It implied to slightly rephrase or restructure some help docs.
Based on the above invariants, print_doc_line (called by
'apropos' and 'help' commands to print the first line of a command
help) now outputs the full first line of a command help.
This all results in a lot of small changes in the produced help docs.
There are less code changes than changes in the help docs, as a lot
of docs are produced by some code (e.g. the remote packet usage settings).
gdb/ChangeLog
2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* cli/cli-decode.h (print_doc_line): Add for_value_prefix argument.
* cli/cli-decode.c (print_doc_line): Likewise. It now prints
the full first line, except when FOR_VALUE_PREFIX. In this case,
the trailing '.' is not output, and the first character is uppercased.
(print_help_for_command): Update call to print_doc_line.
(print_doc_of_command): Likewise.
* cli/cli-setshow.c (deprecated_show_value_hack): Likewise.
* cli/cli-option.c (append_indented_doc): Do not append newline.
(build_help_option): Append newline after first appended_indented_doc
only if a second call is done.
(build_help): Append 2 new lines before each option, except the first
one.
* compile/compile.c (_initialize_compile): Add new lines after
%OPTIONS%, when not at the end of the help.
Change help doc or code
producing the help doc to respect the invariants.
* maint-test-options.c (_initialize_maint_test_options): Likewise.
Also removed the new line after 'Options:', as all other commands
do not put an empty line between 'Options:' and the first option.
* printcmd.c (_initialize_printcmd): Likewise.
* stack.c (_initialize_stack): Likewise.
* interps.c (interpreter_exec_cmd): Fix "Usage:" line that was
incorrectly telling COMMAND is optional.
* ada-lang.c (_initialize_ada_language): Change help doc or code
producing the help doc to respect the invariants.
* ada-tasks.c (_initialize_ada_tasks): Likewise.
* breakpoint.c (_initialize_breakpoint): Likewise.
* cli/cli-cmds.c (_initialize_cli_cmds): Likewise.
* cli/cli-logging.c (_initialize_cli_logging): Likewise.
* cli/cli-setshow.c (_initialize_cli_setshow): Likewise.
* cli/cli-style.c (cli_style_option::add_setshow_commands,
_initialize_cli_style): Likewise.
* corelow.c (core_target_info): Likewise.
* dwarf-index-cache.c (_initialize_index_cache): Likewise.
* dwarf2read.c (_initialize_dwarf2_read): Likewise.
* filesystem.c (_initialize_filesystem): Likewise.
* frame.c (_initialize_frame): Likewise.
* gnu-nat.c (add_task_commands): Likewise.
* infcall.c (_initialize_infcall): Likewise.
* infcmd.c (_initialize_infcmd): Likewise.
* interps.c (_initialize_interpreter): Likewise.
* language.c (_initialize_language): Likewise.
* linux-fork.c (_initialize_linux_fork): Likewise.
* maint-test-settings.c (_initialize_maint_test_settings): Likewise.
* maint.c (_initialize_maint_cmds): Likewise.
* memattr.c (_initialize_mem): Likewise.
* printcmd.c (_initialize_printcmd): Likewise.
* python/lib/gdb/function/strfns.py (_MemEq, _StrLen, _StrEq,
_RegEx): Likewise.
* ravenscar-thread.c (_initialize_ravenscar): Likewise.
* record-btrace.c (_initialize_record_btrace): Likewise.
* record-full.c (_initialize_record_full): Likewise.
* record.c (_initialize_record): Likewise.
* regcache-dump.c (_initialize_regcache_dump): Likewise.
* regcache.c (_initialize_regcache): Likewise.
* remote.c (add_packet_config_cmd, init_remote_threadtests,
_initialize_remote): Likewise.
* ser-tcp.c (_initialize_ser_tcp): Likewise.
* serial.c (_initialize_serial): Likewise.
* skip.c (_initialize_step_skip): Likewise.
* source.c (_initialize_source): Likewise.
* stack.c (_initialize_stack): Likewise.
* symfile.c (_initialize_symfile): Likewise.
* symtab.c (_initialize_symtab): Likewise.
* target-descriptions.c (_initialize_target_descriptions): Likewise.
* top.c (init_main): Likewise.
* tracefile-tfile.c (tfile_target_info): Likewise.
* tracepoint.c (_initialize_tracepoint): Likewise.
* tui/tui-win.c (_initialize_tui_win): Likewise.
* utils.c (add_internal_problem_command): Likewise.
* valprint.c (value_print_option_defs): Likewise.
gdb/testsuite/ChangeLog
2019-08-07 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.base/style.exp: Update tests for help doc new invariants.
* gdb.base/help.exp: Likewise.
2019-06-09 17:16:20 +08:00
|
|
|
Print the internal register configuration including remote register number "
|
|
|
|
"and g/G packets offset.\n\
|
2018-02-21 19:20:03 +08:00
|
|
|
Takes an optional file parameter."),
|
|
|
|
&maintenanceprintlist);
|
|
|
|
}
|