Browse Source
The btrace record target shows the branch trace from the location of the first branch destination. This is the first BTS records. After adding incremental updates, we can now add a dummy record for the current PC when we enable tracing so we show the trace from the location where branch tracing has been enabled. 2014-01-16 Markus Metzger <markus.t.metzger@intel.com> * btrace.c: Include regcache.h. (btrace_add_pc): New. (btrace_enable): Call btrace_add_pc. (btrace_is_empty): New. * btrace.h (btrace_is_empty): New. * record-btrace.c (require_btrace, record_btrace_info): Call btrace_is_empty. testsuite/ * gdb.btrace/Makefile.in (EXECUTABLES): Add delta. * gdb.btrace/exception.exp: Update. * gdb.btrace/instruction_history.exp: Update. * gdb.btrace/record_goto.exp: Update. * gdb.btrace/tailcall.exp: Update. * gdb.btrace/unknown_functions.exp: Update. * gdb.btrace/delta.exp: New.gdb-7.8-branch
12 changed files with 260 additions and 118 deletions
@ -0,0 +1,68 @@ |
|||
# This testcase is part of GDB, the GNU debugger. |
|||
# |
|||
# Copyright 2013 Free Software Foundation, Inc. |
|||
# |
|||
# Contributed by Intel Corp. <markus.t.metzger@intel.com> |
|||
# |
|||
# 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/>. |
|||
|
|||
# check for btrace support |
|||
if { [skip_btrace_tests] } { return -1 } |
|||
|
|||
# start inferior |
|||
standard_testfile x86-record_goto.S |
|||
if [prepare_for_testing delta.exp $testfile $srcfile] { |
|||
return -1 |
|||
} |
|||
if ![runto_main] { |
|||
return -1 |
|||
} |
|||
|
|||
# proceed to some sequential code |
|||
gdb_test "next" |
|||
|
|||
# start tracing |
|||
gdb_test_no_output "record btrace" |
|||
|
|||
# we start without trace |
|||
with_test_prefix "no trace" { |
|||
gdb_test "info record" [join [list \ |
|||
"Active record target: record-btrace" \ |
|||
"Recorded 0 instructions in 0 functions for .*" \ |
|||
] "\r\n"] |
|||
gdb_test "record instruction-history" "No trace\." |
|||
gdb_test "record function-call-history" "No trace\." |
|||
} |
|||
|
|||
# we record each single-step, even if we have not seen a branch, yet. |
|||
gdb_test "stepi" |
|||
|
|||
proc check_trace {} { |
|||
gdb_test "info record" [join [list \ |
|||
"Active record target: record-btrace" \ |
|||
"Recorded 1 instructions in 1 functions for .*" \ |
|||
] "\r\n"] |
|||
gdb_test "record instruction-history /f 1" \ |
|||
"1\t 0x\[0-9a-f\]+ <\\+\[0-9\]+>:\tmov *\\\$0x0,%eax\r" |
|||
gdb_test "record function-call-history /c 1" "1\tmain" |
|||
} |
|||
|
|||
# make sure we don't extend the trace when we ask twice. |
|||
with_test_prefix "once" { |
|||
check_trace |
|||
} |
|||
|
|||
with_test_prefix "twice" { |
|||
check_trace |
|||
} |
|||
Loading…
Reference in new issue