2008-05-10 01:02:03 +08:00
|
|
|
/* The find command.
|
|
|
|
|
2020-01-01 14:20:01 +08:00
|
|
|
Copyright (C) 2008-2020 Free Software Foundation, Inc.
|
2008-05-10 01:02: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"
|
2019-04-03 10:04:24 +08:00
|
|
|
#include "arch-utils.h"
|
2019-04-07 03:38:10 +08:00
|
|
|
#include <ctype.h>
|
2019-04-03 10:04:24 +08:00
|
|
|
#include "gdbcmd.h"
|
|
|
|
#include "value.h"
|
2019-04-07 03:38:10 +08:00
|
|
|
#include "target.h"
|
|
|
|
#include "cli/cli-utils.h"
|
|
|
|
#include <algorithm>
|
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/byte-vector.h"
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
/* Copied from bfd_put_bits. */
|
|
|
|
|
|
|
|
static void
|
2017-09-09 23:56:27 +08:00
|
|
|
put_bits (bfd_uint64_t data, gdb::byte_vector &buf, int bits, bfd_boolean big_p)
|
2008-05-10 01:02:03 +08:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
int bytes;
|
|
|
|
|
|
|
|
gdb_assert (bits % 8 == 0);
|
|
|
|
|
|
|
|
bytes = bits / 8;
|
2017-09-09 23:56:27 +08:00
|
|
|
size_t last = buf.size ();
|
|
|
|
buf.resize (last + bytes);
|
2008-05-10 01:02:03 +08:00
|
|
|
for (i = 0; i < bytes; i++)
|
|
|
|
{
|
|
|
|
int index = big_p ? bytes - i - 1 : i;
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
buf[last + index] = data & 0xff;
|
2008-05-10 01:02:03 +08:00
|
|
|
data >>= 8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Subroutine of find_command to simplify it.
|
|
|
|
Parse the arguments of the "find" command. */
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
static gdb::byte_vector
|
|
|
|
parse_find_args (const char *args, ULONGEST *max_countp,
|
2009-07-03 01:02:35 +08:00
|
|
|
CORE_ADDR *start_addrp, ULONGEST *search_space_lenp,
|
|
|
|
bfd_boolean big_p)
|
2008-05-10 01:02:03 +08:00
|
|
|
{
|
|
|
|
/* Default to using the specified type. */
|
|
|
|
char size = '\0';
|
|
|
|
ULONGEST max_count = ~(ULONGEST) 0;
|
|
|
|
/* Buffer to hold the search pattern. */
|
2017-09-09 23:56:27 +08:00
|
|
|
gdb::byte_vector pattern_buf;
|
2008-05-10 01:02:03 +08:00
|
|
|
CORE_ADDR start_addr;
|
|
|
|
ULONGEST search_space_len;
|
2013-03-13 01:39:45 +08:00
|
|
|
const char *s = args;
|
2008-05-10 01:02:03 +08:00
|
|
|
struct value *v;
|
|
|
|
|
|
|
|
if (args == NULL)
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Missing search parameters."));
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
/* Get search granularity and/or max count if specified.
|
|
|
|
They may be specified in either order, together or separately. */
|
|
|
|
|
|
|
|
while (*s == '/')
|
|
|
|
{
|
|
|
|
++s;
|
|
|
|
|
|
|
|
while (*s != '\0' && *s != '/' && !isspace (*s))
|
|
|
|
{
|
|
|
|
if (isdigit (*s))
|
|
|
|
{
|
|
|
|
max_count = atoi (s);
|
|
|
|
while (isdigit (*s))
|
|
|
|
++s;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (*s)
|
|
|
|
{
|
|
|
|
case 'b':
|
|
|
|
case 'h':
|
|
|
|
case 'w':
|
|
|
|
case 'g':
|
|
|
|
size = *s++;
|
|
|
|
break;
|
|
|
|
default:
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Invalid size granularity."));
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Rename _const functions to use overloading instead
This renames a few functions -- skip_spaces_const,
skip_to_space_const, get_number_const, extract_arg_const -- to drop
the "_const" suffix and instead rely on overloading.
This makes future const fixes simpler by reducing the number of lines
that must be changed. I think it is also not any less clear, as all
these functions have the same interface as their non-const versions by
design. Furthermore there's an example of using an overload in-tree
already, namely check_for_argument.
This patch was largely created using some perl one-liners; then a few
fixes were applied by hand.
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* common/common-utils.h (skip_to_space): Remove macro, redeclare
as function.
(skip_to_space): Rename from skip_to_space_const.
* common/common-utils.c (skip_to_space): New function.
(skip_to_space): Rename from skip_to_space_const.
* cli/cli-utils.h (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
* cli/cli-utils.c (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
(number_or_range_parser::get_number): Use ::get_number.
* aarch64-linux-tdep.c, ada-lang.c, arm-linux-tdep.c, ax-gdb.c,
break-catch-throw.c, breakpoint.c, cli/cli-cmds.c, cli/cli-dump.c,
cli/cli-script.c, cli/cli-setshow.c, compile/compile.c,
completer.c, demangle.c, disasm.c, findcmd.c, linespec.c,
linux-tdep.c, linux-thread-db.c, location.c, mi/mi-parse.c,
minsyms.c, nat/linux-procfs.c, printcmd.c, probe.c,
python/py-breakpoint.c, record.c, rust-exp.y, serial.c, stack.c,
stap-probe.c, tid-parse.c, tracepoint.c: Update all callers.
2017-09-11 04:19:19 +08:00
|
|
|
s = skip_spaces (s);
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Get the search range. */
|
|
|
|
|
|
|
|
v = parse_to_comma_and_eval (&s);
|
|
|
|
start_addr = value_as_address (v);
|
|
|
|
|
|
|
|
if (*s == ',')
|
|
|
|
++s;
|
Rename _const functions to use overloading instead
This renames a few functions -- skip_spaces_const,
skip_to_space_const, get_number_const, extract_arg_const -- to drop
the "_const" suffix and instead rely on overloading.
This makes future const fixes simpler by reducing the number of lines
that must be changed. I think it is also not any less clear, as all
these functions have the same interface as their non-const versions by
design. Furthermore there's an example of using an overload in-tree
already, namely check_for_argument.
This patch was largely created using some perl one-liners; then a few
fixes were applied by hand.
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* common/common-utils.h (skip_to_space): Remove macro, redeclare
as function.
(skip_to_space): Rename from skip_to_space_const.
* common/common-utils.c (skip_to_space): New function.
(skip_to_space): Rename from skip_to_space_const.
* cli/cli-utils.h (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
* cli/cli-utils.c (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
(number_or_range_parser::get_number): Use ::get_number.
* aarch64-linux-tdep.c, ada-lang.c, arm-linux-tdep.c, ax-gdb.c,
break-catch-throw.c, breakpoint.c, cli/cli-cmds.c, cli/cli-dump.c,
cli/cli-script.c, cli/cli-setshow.c, compile/compile.c,
completer.c, demangle.c, disasm.c, findcmd.c, linespec.c,
linux-tdep.c, linux-thread-db.c, location.c, mi/mi-parse.c,
minsyms.c, nat/linux-procfs.c, printcmd.c, probe.c,
python/py-breakpoint.c, record.c, rust-exp.y, serial.c, stack.c,
stap-probe.c, tid-parse.c, tracepoint.c: Update all callers.
2017-09-11 04:19:19 +08:00
|
|
|
s = skip_spaces (s);
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
if (*s == '+')
|
|
|
|
{
|
|
|
|
LONGEST len;
|
2010-05-15 03:27:05 +08:00
|
|
|
|
2008-05-10 01:02:03 +08:00
|
|
|
++s;
|
|
|
|
v = parse_to_comma_and_eval (&s);
|
|
|
|
len = value_as_long (v);
|
|
|
|
if (len == 0)
|
|
|
|
{
|
2008-05-10 01:37:36 +08:00
|
|
|
printf_filtered (_("Empty search range.\n"));
|
2017-09-09 23:56:27 +08:00
|
|
|
return pattern_buf;
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
if (len < 0)
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Invalid length."));
|
2008-05-10 01:02:03 +08:00
|
|
|
/* Watch for overflows. */
|
|
|
|
if (len > CORE_ADDR_MAX
|
|
|
|
|| (start_addr + len - 1) < start_addr)
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Search space too large."));
|
2008-05-10 01:02:03 +08:00
|
|
|
search_space_len = len;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
CORE_ADDR end_addr;
|
2010-05-15 03:27:05 +08:00
|
|
|
|
2008-05-10 01:02:03 +08:00
|
|
|
v = parse_to_comma_and_eval (&s);
|
|
|
|
end_addr = value_as_address (v);
|
|
|
|
if (start_addr > end_addr)
|
2011-07-05 12:35:00 +08:00
|
|
|
error (_("Invalid search space, end precedes start."));
|
2008-05-10 01:02:03 +08:00
|
|
|
search_space_len = end_addr - start_addr + 1;
|
|
|
|
/* We don't support searching all of memory
|
|
|
|
(i.e. start=0, end = 0xff..ff).
|
|
|
|
Bail to avoid overflows later on. */
|
|
|
|
if (search_space_len == 0)
|
2011-01-06 06:22:53 +08:00
|
|
|
error (_("Overflow in address range "
|
|
|
|
"computation, choose smaller range."));
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (*s == ',')
|
|
|
|
++s;
|
|
|
|
|
|
|
|
/* Fetch the search string. */
|
|
|
|
|
|
|
|
while (*s != '\0')
|
|
|
|
{
|
|
|
|
LONGEST x;
|
2012-09-25 20:48:53 +08:00
|
|
|
struct type *t;
|
2008-05-10 01:02:03 +08:00
|
|
|
|
Rename _const functions to use overloading instead
This renames a few functions -- skip_spaces_const,
skip_to_space_const, get_number_const, extract_arg_const -- to drop
the "_const" suffix and instead rely on overloading.
This makes future const fixes simpler by reducing the number of lines
that must be changed. I think it is also not any less clear, as all
these functions have the same interface as their non-const versions by
design. Furthermore there's an example of using an overload in-tree
already, namely check_for_argument.
This patch was largely created using some perl one-liners; then a few
fixes were applied by hand.
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* common/common-utils.h (skip_to_space): Remove macro, redeclare
as function.
(skip_to_space): Rename from skip_to_space_const.
* common/common-utils.c (skip_to_space): New function.
(skip_to_space): Rename from skip_to_space_const.
* cli/cli-utils.h (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
* cli/cli-utils.c (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
(number_or_range_parser::get_number): Use ::get_number.
* aarch64-linux-tdep.c, ada-lang.c, arm-linux-tdep.c, ax-gdb.c,
break-catch-throw.c, breakpoint.c, cli/cli-cmds.c, cli/cli-dump.c,
cli/cli-script.c, cli/cli-setshow.c, compile/compile.c,
completer.c, demangle.c, disasm.c, findcmd.c, linespec.c,
linux-tdep.c, linux-thread-db.c, location.c, mi/mi-parse.c,
minsyms.c, nat/linux-procfs.c, printcmd.c, probe.c,
python/py-breakpoint.c, record.c, rust-exp.y, serial.c, stack.c,
stap-probe.c, tid-parse.c, tracepoint.c: Update all callers.
2017-09-11 04:19:19 +08:00
|
|
|
s = skip_spaces (s);
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
v = parse_to_comma_and_eval (&s);
|
2012-09-25 20:48:53 +08:00
|
|
|
t = value_type (v);
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
if (size != '\0')
|
|
|
|
{
|
|
|
|
x = value_as_long (v);
|
|
|
|
switch (size)
|
|
|
|
{
|
|
|
|
case 'b':
|
2017-09-09 23:56:27 +08:00
|
|
|
pattern_buf.push_back (x);
|
2008-05-10 01:02:03 +08:00
|
|
|
break;
|
|
|
|
case 'h':
|
2017-09-09 23:56:27 +08:00
|
|
|
put_bits (x, pattern_buf, 16, big_p);
|
2008-05-10 01:02:03 +08:00
|
|
|
break;
|
|
|
|
case 'w':
|
2017-09-09 23:56:27 +08:00
|
|
|
put_bits (x, pattern_buf, 32, big_p);
|
2008-05-10 01:02:03 +08:00
|
|
|
break;
|
|
|
|
case 'g':
|
2017-09-09 23:56:27 +08:00
|
|
|
put_bits (x, pattern_buf, 64, big_p);
|
2008-05-10 01:02:03 +08:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2017-09-09 23:56:27 +08:00
|
|
|
const gdb_byte *contents = value_contents (v);
|
|
|
|
pattern_buf.insert (pattern_buf.end (), contents,
|
|
|
|
contents + TYPE_LENGTH (t));
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (*s == ',')
|
|
|
|
++s;
|
Rename _const functions to use overloading instead
This renames a few functions -- skip_spaces_const,
skip_to_space_const, get_number_const, extract_arg_const -- to drop
the "_const" suffix and instead rely on overloading.
This makes future const fixes simpler by reducing the number of lines
that must be changed. I think it is also not any less clear, as all
these functions have the same interface as their non-const versions by
design. Furthermore there's an example of using an overload in-tree
already, namely check_for_argument.
This patch was largely created using some perl one-liners; then a few
fixes were applied by hand.
ChangeLog
2017-09-11 Tom Tromey <tom@tromey.com>
* common/common-utils.h (skip_to_space): Remove macro, redeclare
as function.
(skip_to_space): Rename from skip_to_space_const.
* common/common-utils.c (skip_to_space): New function.
(skip_to_space): Rename from skip_to_space_const.
* cli/cli-utils.h (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
* cli/cli-utils.c (get_number): Rename from get_number_const.
(extract_arg): Rename from extract_arg_const.
(number_or_range_parser::get_number): Use ::get_number.
* aarch64-linux-tdep.c, ada-lang.c, arm-linux-tdep.c, ax-gdb.c,
break-catch-throw.c, breakpoint.c, cli/cli-cmds.c, cli/cli-dump.c,
cli/cli-script.c, cli/cli-setshow.c, compile/compile.c,
completer.c, demangle.c, disasm.c, findcmd.c, linespec.c,
linux-tdep.c, linux-thread-db.c, location.c, mi/mi-parse.c,
minsyms.c, nat/linux-procfs.c, printcmd.c, probe.c,
python/py-breakpoint.c, record.c, rust-exp.y, serial.c, stack.c,
stap-probe.c, tid-parse.c, tracepoint.c: Update all callers.
2017-09-11 04:19:19 +08:00
|
|
|
s = skip_spaces (s);
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
if (pattern_buf.empty ())
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Missing search pattern."));
|
2008-05-10 01:02:03 +08:00
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
if (search_space_len < pattern_buf.size ())
|
2008-05-10 01:37:36 +08:00
|
|
|
error (_("Search space too small to contain pattern."));
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
*max_countp = max_count;
|
|
|
|
*start_addrp = start_addr;
|
|
|
|
*search_space_lenp = search_space_len;
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
return pattern_buf;
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-09-13 11:33:48 +08:00
|
|
|
find_command (const char *args, int from_tty)
|
2008-05-10 01:02:03 +08:00
|
|
|
{
|
2009-07-03 01:02:35 +08:00
|
|
|
struct gdbarch *gdbarch = get_current_arch ();
|
|
|
|
bfd_boolean big_p = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG;
|
2008-05-10 01:02:03 +08:00
|
|
|
/* Command line parameters.
|
|
|
|
These are initialized to avoid uninitialized warnings from -Wall. */
|
|
|
|
ULONGEST max_count = 0;
|
|
|
|
CORE_ADDR start_addr = 0;
|
|
|
|
ULONGEST search_space_len = 0;
|
|
|
|
/* End of command line parameters. */
|
|
|
|
unsigned int found_count;
|
|
|
|
CORE_ADDR last_found_addr;
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
gdb::byte_vector pattern_buf = parse_find_args (args, &max_count,
|
|
|
|
&start_addr,
|
|
|
|
&search_space_len,
|
|
|
|
big_p);
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
/* Perform the search. */
|
|
|
|
|
|
|
|
found_count = 0;
|
|
|
|
last_found_addr = 0;
|
|
|
|
|
2017-09-09 23:56:27 +08:00
|
|
|
while (search_space_len >= pattern_buf.size ()
|
2008-05-10 01:02:03 +08:00
|
|
|
&& found_count < max_count)
|
|
|
|
{
|
|
|
|
/* Offset from start of this iteration to the next iteration. */
|
|
|
|
ULONGEST next_iter_incr;
|
|
|
|
CORE_ADDR found_addr;
|
|
|
|
int found = target_search_memory (start_addr, search_space_len,
|
2017-09-09 23:56:27 +08:00
|
|
|
pattern_buf.data (),
|
|
|
|
pattern_buf.size (),
|
|
|
|
&found_addr);
|
2008-05-10 01:02:03 +08:00
|
|
|
|
|
|
|
if (found <= 0)
|
|
|
|
break;
|
|
|
|
|
* defs.h (strlen_paddr, paddr, paddr_nz): Remove.
(paddress): Add GDBARCH parameter.
* utils.c (strlen_paddr, paddr, paddr_nz): Remove.
(paddress): Add GDBARCH parameter, use it instead of current_gdbarch.
* ui-out.h (ui_out_field_core_addr): Add GDBARCH parameter.
* ui-out.c (ui_out_field_core_addr): Add GDBARCH parameter,
use it instead of current_gdbarch.
Update calls to ui_out_field_core_addr to pass architecture:
* ada-lang.c (print_one_exception): Update.
* breakpoint.c (print_one_breakpoint_location,
print_one_exception_catchpoint): Update.
* disasm.c (dump_insns): Update.
* darwin-nat-info.c (darwin_debug_regions_recurse): Update.
* mi/mi-main.c (mi_cmd_data_read_memory): Update.
* mi/mi-symbol-cmds.c: Include "objfiles.h".
(mi_cmd_symbol_list_lines): Update.
* stack.c (print_frame_info, print_frame): Update.
Update callers of paddress to pass architecture:
* ada-tasks.c (info_task): Update.
* ada-valprint.c (ada_val_print_1): Update.
* annotate.c (annotate_source, annotate_frame_begin): Update.
* breakpoint.c (insert_bp_location, describe_other_breakpoints,
mention): Update.
* cli/cli-cmds.c (edit_command, list_command, print_disassembly):
Update.
* corefile.c (memory_error): Update.
* c-valprint.c (print_function_pointer_address, c_val_print): Update.
* disasm.c (dis_asm_print_address): Update.
* exec.c (print_section_info): Update.
* f-valprint.c (f_val_print): Update.
* infcmd.c: Include "arch-utils.h".
(jump_command, program_info): Update.
* linux-fork.c: Include "arch-utils.h".
(info_forks_command): Update.
* m2-valprint.c (print_function_pointer_address,
print_unpacked_pointer, print_variable_at_address,
m2_val_print): Update.
* m32r-rom.c (m32r_load_section, m32r_load, m32r_upload_command):
Update.
* printcmd.c (print_address, print_address_demangle, address_info):
Update.
* p-valprint.c (pascal_val_print): Update.
* source.c: Include "arch-utils.h".
(line_info): Update.
* stack.c (frame_info, print_block_frame_labels): Update.
* symfile.c (add_symbol_file_command, list_overlays_command): Update.
* symmisc.c (dump_msymbols, dump_psymtab, dump_symtab_1,
print_symbol, print_partial_symbols, maintenance_info_psymtabs,
maintenance_check_symtabs): Update.
* symtab.c (find_pc_sect_symtab): Update.
* target.c (deprecated_debug_xfer_memory): Update.
* tracepoint.c (scope_info): Update.
* tui/tui-stack.c (tui_make_status_line): Update.
* valprint.c (val_print_string): Update.
Update callers of paddr_nz to use paddress instead (keeping
user-visible output identical):
* alpha-tdep.c (alpha_heuristic_proc_start): Update.
* amd64-tdep.c (fixup_riprel, amd64_displaced_step_copy_insn,
amd64_displaced_step_fixup): Update.
* arch-utils.c (simple_displaced_step_copy_insn): Update.
* auxv.c (fprint_target_auxv): Update.
* breakpoint.c (insert_single_step_breakpoint): Update.
* buildsym.c (finish_block): Update.
* cli/cli-dump.c (restore_section_callback): Update.
* fbsd-nat.c (fbsd_find_memory_regions): Update.
* frame.c (frame_unwind_register_value): Update.
* gcore.c (gcore_create_callback): Update.
* hppa-tdep.c (hppa_frame_cache, hppa_skip_trampoline_code): Update.
* i386-tdep.c (i386_displaced_step_fixup, i386_record_modrm,
i386_record_lea_modrm_addr, i386_record_lea_modrm,
i386_process_record): Update.
* ia64-tdep.c (ia64_frame_this_id, ia64_sigtramp_frame_this_id,
ia64_libunwind_frame_this_id, ia64_libunwind_sigtramp_frame_this_id,
ia64_dummy_id, ia64_access_reg, ia64_access_rse_reg): Update.
* infrun.c (displaced_step_prepare, displaced_step_fixup,
handle_inferior_event, insert_step_resume_breakpoint_at_sal,
insert_longjmp_resume_breakpoint): Update.
* linux-nat.c (linux_nat_find_memory_regions): Update.
* linux-record.c (record_linux_system_call): Update.
* mips-tdep.c (heuristic_proc_start, mips_eabi_push_dummy_call,
mips_n32n64_push_dummy_call, mips_o32_push_dummy_call,
mips_o64_push_dummy_call): Update.
* monitor.c (monitor_error, monitor_remove_breakpoint): Update.
* record.c (record_arch_list_add_mem, record_wait,
record_xfer_partial): Update.
* remote-mips.c (mips_fetch_word, mips_check_lsi_error,
mips_common_breakpoint): Update.
* remote-sim.c (gdbsim_xfer_inferior_memory): Update.
* rs6000-tdep.c (ppc_displaced_step_fixup): Update.
* solib-som.c (som_current_sos): Update.
* symfile.c (load_progress, generic_load): Update.
* symfile-mem.c (add_vsyscall_page): Update.
* valops.c (value_fetch_lazy): Update.
* windows-tdep.c (windows_xfer_shared_library): Update.
Update callers of paddr_nz to use paddress instead (changing
user-visible output to make it more correct):
* dwarf2loc.c (locexpr_describe_location): Update.
* ia64-tdep.c (ia64_memory_insert_breakpoint,
ia64_memory_remove_breakpoint): Update.
* jv-valprint.c (java_value_print): Update.
* m32c-tdep.c (m32c_m16c_address_to_pointer): Update.
* monitor.c (monitor_read_memory): Update.
Update callers of paddr to use paddress instead (changing
user-visible output to make it more correct):
* arm-tdep.c (arm_push_dummy_call): Update.
* breakpoint.c (insert_bp_location, create_thread_event_breakpoint,
create_breakpoint): Update.
* darwin-nat-info.c (darwin_debug_regions): Update.
* dcache.c (dcache_info): Update.
* dsrec.c (load_srec, make_srec): Update.
* dwarf2-frame.c (dwarf2_restore_rule, execute_cfa_program,
dwarf2_frame_cache): Update.
* gcore.c (gcore_copy_callback): Update.
* gnu-nat.c (gnu_xfer_memory): Update.
* mips-linux-nat.c (mips_show_dr): Update.
* monitor.c (monitor_write_memory, monitor_insert_breakpoint,
monitor_remove_breakpoint): Update.
* remote.c (compare_sections_command): Update.
* remote-m32r-sdi.c (m32r_xfer_memory, m32r_insert_breakpoint,
m32r_remove_breakpoint, m32r_insert_watchpoint,
m32r_remove_watchpoint): Update.
* sol-thread.c (info_cb): Update.
* symfile.c (load_progress): Update.
Update callers of paddress or paddr_nz to use hex_string instead
(changes output of internal/error/debug messages only):
* dwarf2read.c (dump_die_shallow): Update.
* frame.c (fprint_field, fprint_frame, frame_pc_unwind,
get_frame_func, create_new_frame): Update.
* hppa-tdep.c (find_unwind_entry, unwind_command): Update.
* ia64-tdep.c (get_kernel_table, ia64_find_proc_info_x,
ia64_get_dyn_info_list): Update.
* maint.c (maintenance_translate_address): Update.
* mi/mi-cmd-var.c (mi_cmd_var_create): Update.
* target.c (target_flash_erase): Update.
Update callers of paddr/paddr_nz to use phex/phex_nz instead,
using an appropriate address size. Remove use of strlen_paddr.
* exec.c (exec_files_info): Update.
* i386-nat.c (i386_show_dr): Update.
* remote.c (remote_flash_erase): Update.
* m32r-rom.c (m32r_load_section): Update.
* monitor.c (monitor_vsprintf, monitor_store_register): Update.
* remote.c (remote_check_symbols, remote_search_memory): Update.
* remote-mips.c (mips_request, mips_common_breakpoint): Update.
* scm-valprint.c (scm_ipruk, scm_scmval_print): Update.
* sh64-tdep.c (sh64_show_media_regs, sh64_show_compact_regs): Update.
* sh-tdep.c (sh_generic_show_regs, sh3_show_regs, sh2e_show_regs,
sh2a_show_regs, sh2a_nofpu_show_regs, sh3e_show_regs,
sh3_dsp_show_regs, sh4_show_regs, sh4_nofpu_show_regs,
sh_dsp_show_regs): Update.
* xcoffsolib.c (sharedlibrary_command): Update.
* maint.c (maint_print_section_info): Add ADDR_SIZE parameter.
Use hex_string_custom instead of paddr.
(print_bfd_section_info): Pass address size.
(print_objfile_section_info): Likewise.
* annotate.h (annotate_source): Add GDBARCH parameter.
(annotate_frame_begin): Likewise.
* annotate.c (annotate_source): Add GDBARCH parameter.
(annotate_frame_begin): Likewise.
* source.c (identify_source_line): Update call to annotate_source.
* stack.c (print_frame_info, print_frame): Update call to
annotate_frame_begin.
* breakpoint.c (describe_other_breakpoints): Add GDBARCH parameter.
(create_breakpoint, create_ada_exception_breakpoint): Update call.
* stack.c (print_block_frame_labels): Add GDBARCH parameter.
(print_frame_label_vars): Update call.
* symmisc.c (print_partial_symbols): Add GDBARCH parameter.
(dump_psymtab): Update call to print_partial_symbols.
(struct print_symbol_args): Add GDBARCH member.
(dump_symtab_1): Set print_symbol_args architecture member.
(print_symbol): Use it.
* windows-tdep.h (windows_xfer_shared_library): Add GDBARCH
parameter.
* windows-tdep.c (windows_xfer_shared_library): Likewise.
* i386-cygwin-tdep.c (struct cpms_data): Add GDBARCH member.
(core_process_module_section): Pass architecture from cpms_data to
windows_xfer_shared_library.
(windows_core_xfer_shared_libraries): Initialize cmps_data
architecture member.
* windows-nat.c (windows_xfer_shared_libraries): Pass architecture
to windows_xfer_shared_library.
* defs.h (print_address): Add GDBARCH parameter.
* printcmd.c (print_address): Add GDBARCH parameter.
(print_scalar_formatted, do_examine): Update call.
* findcmd.c (find_command): Update call.
* tracepoint.c: Include "arch-utils.h".
(trace_find_line_command): Update call.
* tui/tui-disasm.c (tui_disassemble): Update call.
* value.h (print_address_demangle): Add GDBARCH parameter.
* printcmd.c (print_address_demangle): Add GDBARCH parameter.
* c-valprint.c (print_function_pointer_address, c_val_print):
Update call.
* f-valprint.c (f_val_print): Update call.
* gnu-v3-abi.c (gnuv3_print_method_ptr): Update call.
* jv-valprint.c (java_val_print): Update call.
* m2-valprint.c (print_function_pointer_address, m2_val_print):
Update call.
* p-valprint.c (pascal_val_print): Update call.
* disasm.c (gdb_disassemble_info): Install architecture into
di.application_data field.
testsuite/ChangeLog:
* gdb.threads/tls-shared.exp: Update to locexpr_describe_location
change to prefix TLS offset in hex with 0x.
doc/ChangeLog:
* gdbint.texinfo (Item Output Functions): Update signature
for ui_out_field_core_addr.
2009-07-03 01:21:10 +08:00
|
|
|
print_address (gdbarch, found_addr, gdb_stdout);
|
2008-05-10 01:02:03 +08:00
|
|
|
printf_filtered ("\n");
|
|
|
|
++found_count;
|
|
|
|
last_found_addr = found_addr;
|
|
|
|
|
|
|
|
/* Begin next iteration at one byte past this match. */
|
|
|
|
next_iter_incr = (found_addr - start_addr) + 1;
|
|
|
|
|
|
|
|
/* For robustness, we don't let search_space_len go -ve here. */
|
|
|
|
if (search_space_len >= next_iter_incr)
|
|
|
|
search_space_len -= next_iter_incr;
|
|
|
|
else
|
|
|
|
search_space_len = 0;
|
|
|
|
start_addr += next_iter_incr;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Record and print the results. */
|
|
|
|
|
2009-06-04 02:16:44 +08:00
|
|
|
set_internalvar_integer (lookup_internalvar ("numfound"), found_count);
|
2008-05-10 01:02:03 +08:00
|
|
|
if (found_count > 0)
|
|
|
|
{
|
2008-09-11 22:21:49 +08:00
|
|
|
struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
|
2010-05-15 03:27:05 +08:00
|
|
|
|
2008-05-10 01:02:03 +08:00
|
|
|
set_internalvar (lookup_internalvar ("_"),
|
2008-09-11 22:21:49 +08:00
|
|
|
value_from_pointer (ptr_type, last_found_addr));
|
2008-05-10 01:02:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (found_count == 0)
|
2008-05-10 01:37:36 +08:00
|
|
|
printf_filtered ("Pattern not found.\n");
|
2008-05-10 01:02:03 +08:00
|
|
|
else
|
2008-05-10 01:37:36 +08:00
|
|
|
printf_filtered ("%d pattern%s found.\n", found_count,
|
2008-05-10 01:02:03 +08:00
|
|
|
found_count > 1 ? "s" : "");
|
|
|
|
}
|
|
|
|
|
2020-01-14 03:01:38 +08:00
|
|
|
void _initialize_mem_search ();
|
2008-05-10 01:02:03 +08:00
|
|
|
void
|
2020-01-14 03:01:38 +08:00
|
|
|
_initialize_mem_search ()
|
2008-05-10 01:02:03 +08:00
|
|
|
{
|
|
|
|
add_cmd ("find", class_vars, find_command, _("\
|
|
|
|
Search memory for a sequence of bytes.\n\
|
2011-01-06 06:22:53 +08:00
|
|
|
Usage:\nfind \
|
2019-02-14 22:58:58 +08:00
|
|
|
[/SIZE-CHAR] [/MAX-COUNT] START-ADDRESS, END-ADDRESS, EXPR1 [, EXPR2 ...]\n\
|
|
|
|
find [/SIZE-CHAR] [/MAX-COUNT] START-ADDRESS, +LENGTH, EXPR1 [, EXPR2 ...]\n\
|
|
|
|
SIZE-CHAR is one of b,h,w,g for 8,16,32,64 bit values respectively,\n\
|
2008-05-10 01:02:03 +08:00
|
|
|
and if not specified the size is taken from the type of the expression\n\
|
|
|
|
in the current language.\n\
|
|
|
|
Note that this means for example that in the case of C-like languages\n\
|
|
|
|
a search for an untyped 0x42 will search for \"(int) 0x42\"\n\
|
2017-11-27 11:42:18 +08:00
|
|
|
which is typically four bytes, and a search for a string \"hello\" will\n\
|
|
|
|
include the trailing '\\0'. The null terminator can be removed from\n\
|
|
|
|
searching by using casts, e.g.: {char[5]}\"hello\".\n\
|
2008-05-10 01:02:03 +08:00
|
|
|
\n\
|
|
|
|
The address of the last match is stored as the value of \"$_\".\n\
|
|
|
|
Convenience variable \"$numfound\" is set to the number of matches."),
|
|
|
|
&cmdlist);
|
|
|
|
}
|