diff options
author | 2013-03-22 15:56:56 +0100 | |
---|---|---|
committer | 2014-01-16 12:45:11 +0100 | |
commit | c2170eeffa616c51ca4c7ab7142523c04b762603 (patch) | |
tree | 8275515276a5b0591073db7cf182e45545f12471 /gdb/gdbarch.sh | |
parent | btrace: uppercase btrace_read_type (diff) | |
download | binutils-gdb-c2170eeffa616c51ca4c7ab7142523c04b762603.tar.gz binutils-gdb-c2170eeffa616c51ca4c7ab7142523c04b762603.tar.bz2 binutils-gdb-c2170eeffa616c51ca4c7ab7142523c04b762603.zip |
gdbarch: add instruction predicate methods
Add new methods to gdbarch for analyzing the instruction at a given address.
Implement those methods for i386 and amd64 architectures.
This is needed by "record btrace" to detect function calls in the
execution trace.
2014-01-16 Markus Metzger <markus.t.metzger@intel.com>
* amd64-tdep.c (amd64_classify_insn_at, amd64_insn_is_call)
(amd64_insn_is_ret, amd64_insn_is_jump, amd64_jmp_p): New.
(amd64_init_abi): Add insn_is_call, insn_is_ret, and insn_is_jump
to gdbarch.
* i386-tdep.c (i386_insn_is_call, i386_insn_is_ret)
(i386_insn_is_jump, i386_jmp_p): New.
(i386_gdbarch_init): Add insn_is_call, insn_is_ret, and
insn_is_jump to gdbarch.
* gdbarch.sh (insn_is_call, insn_is_ret, insn_is_jump): New.
* gdbarch.h: Regenerated.
* gdbarch.c: Regenerated.
* arch-utils.h (default_insn_is_call, default_insn_is_ret)
(default_insn_is_jump): New.
* arch-utils.c (default_insn_is_call, default_insn_is_ret)
(default_insn_is_jump): New.
Diffstat (limited to 'gdb/gdbarch.sh')
-rwxr-xr-x | gdb/gdbarch.sh | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 7e18d851a3f..9c1229e485f 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -994,6 +994,15 @@ m:void:iterate_over_objfiles_in_search_order:iterate_over_objfiles_in_search_ord # Ravenscar arch-dependent ops. v:struct ravenscar_arch_ops *:ravenscar_ops:::NULL:NULL::0:host_address_to_string (gdbarch->ravenscar_ops) + +# Return non-zero if the instruction at ADDR is a call; zero otherwise. +m:int:insn_is_call:CORE_ADDR addr:addr::default_insn_is_call::0 + +# Return non-zero if the instruction at ADDR is a return; zero otherwise. +m:int:insn_is_ret:CORE_ADDR addr:addr::default_insn_is_ret::0 + +# Return non-zero if the instruction at ADDR is a jump; zero otherwise. +m:int:insn_is_jump:CORE_ADDR addr:addr::default_insn_is_jump::0 EOF } |