aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorFelix Willgerodt <felix.willgerodt@intel.com>2023-06-27 11:18:21 +0200
committerFelix Willgerodt <felix.willgerodt@intel.com>2024-09-24 14:22:29 +0200
commitdc08e970bb59880a0a2d712e13cb57344af82635 (patch)
treed5535bdaa5ea96993181b5395a9be1d750d849a5 /gdb
parentcdd65168f30913731047b86b5a3ef0082d18a90e (diff)
downloadbinutils-dc08e970bb59880a0a2d712e13cb57344af82635.zip
binutils-dc08e970bb59880a0a2d712e13cb57344af82635.tar.gz
binutils-dc08e970bb59880a0a2d712e13cb57344af82635.tar.bz2
btrace: Add support for IRET events.
This is similar to the previous events that we added. Approved-By: Markus Metzger <markus.t.metzger@intel.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/btrace.c14
-rw-r--r--gdb/testsuite/gdb.btrace/event-tracing-gap.exp3
-rw-r--r--gdb/testsuite/gdb.btrace/event-tracing.exp3
3 files changed, 19 insertions, 1 deletions
diff --git a/gdb/btrace.c b/gdb/btrace.c
index e72bea4..317516c 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -1428,6 +1428,20 @@ handle_pt_insn_events (struct btrace_thread_info *btinfo,
handle_pt_aux_insn (btinfo, aux_string, pc);
break;
}
+
+ case ptev_iret:
+ {
+ std::string aux_string = std::string (_("iret"));
+
+ if (event.ip_suppressed == 0)
+ {
+ pc = event.variant.iret.ip;
+ aux_string += std::string (": ip = ") + hex_string (*pc);
+ }
+
+ handle_pt_aux_insn (btinfo, aux_string, pc);
+ break;
+ }
#endif /* defined (LIBIPT_VERSION >= 0x201) */
}
}
diff --git a/gdb/testsuite/gdb.btrace/event-tracing-gap.exp b/gdb/testsuite/gdb.btrace/event-tracing-gap.exp
index 13bf45d..d33e8e8 100644
--- a/gdb/testsuite/gdb.btrace/event-tracing-gap.exp
+++ b/gdb/testsuite/gdb.btrace/event-tracing-gap.exp
@@ -61,12 +61,15 @@ gdb_continue_to_breakpoint "break at bp_2" ".*$srcfile:$bp_2.*"
# gdb_test_sequence and check only for events that we can control.
gdb_test_sequence "record function-call-history" "function-call-history" {
"\[0-9\]+\tmain"
+ "\\\[iret(: ip = $hex)?\\\]"
"\[0-9\]+\t\\\[non-contiguous\\\]"
"\[0-9\]+\tsquare"
"\\\[interrupt: vector = 0x3 \\\(#bp\\\)(, ip = 0x\[0-9a-fA-F\]+)?\\\]"
+ "\\\[iret(: ip = $hex)?\\\]"
"\[0-9\]+\t\\\[non-contiguous\\\]"
"\[0-9\]+\tmain"
"\[0-9\]+\tsquare"
"\\\[interrupt: vector = 0x3 \\\(#bp\\\)(, ip = 0x\[0-9a-fA-F\]+)?\\\]"
+ "\\\[iret(: ip = $hex)?\\\]"
"\[0-9\]+\tmain"
}
diff --git a/gdb/testsuite/gdb.btrace/event-tracing.exp b/gdb/testsuite/gdb.btrace/event-tracing.exp
index 4e6e785..1a5eee0 100644
--- a/gdb/testsuite/gdb.btrace/event-tracing.exp
+++ b/gdb/testsuite/gdb.btrace/event-tracing.exp
@@ -34,10 +34,11 @@ gdb_test_no_output "record btrace pt"
gdb_test "continue" "Program received signal SIGSEGV, Segmentation fault.*"
-# Test printing of at least one INTERRUPT event.
+# Test printing of at least one INTERRUPT and one IRET event.
# This uses test_sequence to avoid random events failing the tests.
gdb_test_sequence "record function-call-history" "function-call-history" {
"\[0-9\]+\tmain"
+ "\t \\\[iret(: ip = $hex)?\\\]"
"\t \\\[interrupt: vector = 0xe \\\(#pf\\\)(, cr2 = 0x0)?(, ip = 0x\[0-9a-fA-F\]+)?\\\]"
}