binutils-gdb/gdb/testsuite/gdb.btrace/cpu.exp
Markus Metzger 4a4495d62d btrace: set/show record btrace cpu
Add new set/show commands to set the processor that is used for enabling
errata workarounds when decoding branch trace.

The general format is "<vendor>:<identifier>" but we also allow two
special values "auto" and "none".

The default is "auto", which is the current behaviour of having GDB
determine the processor on which the trace was recorded.

If that cpu is not known to the trace decoder, e.g. when using an old
decoder on a new system, decode may fail with "unknown cpu".  In most
cases it should suffice to 'downgrade' decode to assume an older cpu.
Unfortunately, we can't do this automatically.

The other special value, "none", disables errata workarounds.

gdb/
	* NEWS (New options): announce set/show record btrace cpu.
	* btrace.c: Include record-btrace.h.
	(btrace_compute_ftrace_pt): Skip enabling errata workarounds if
	the vendor is unknown.
	(btrace_compute_ftrace_1): Add cpu parameter.  Update callers.
	Maybe overwrite the btrace configuration's cpu.
	(btrace_compute_ftrace): Add cpu parameter.  Update callers.
	(btrace_fetch): Add cpu parameter.  Update callers.
	(btrace_maint_update_pt_packets): Call record_btrace_get_cpu.
	Maybe overwrite the btrace configuration's cpu.  Skip enabling
	errata workarounds if the vendor is unknown.
	* python/py-record-btrace.c: Include record-btrace.h.
	(recpy_bt_begin, recpy_bt_end, recpy_bt_instruction_history)
	(recpy_bt_function_call_history): Call record_btrace_get_cpu.
	* record-btrace.c (record_btrace_cpu_state_kind): New.
	(record_btrace_cpu): New.
	(set_record_btrace_cpu_cmdlist): New.
	(record_btrace_get_cpu): New.
	(require_btrace_thread, record_btrace_info)
	(record_btrace_resume_thread): Call record_btrace_get_cpu.
	(cmd_set_record_btrace_cpu_none): New.
	(cmd_set_record_btrace_cpu_auto): New.
	(cmd_set_record_btrace_cpu): New.
	(cmd_show_record_btrace_cpu): New.
	(_initialize_record_btrace): Initialize set/show record btrace cpu
	commands.
	* record-btrace.h (record_btrace_get_cpu): New.

testsuite/
	* gdb.btrace/cpu.exp: New.

doc/
	* gdb.texinfo: Document set/show record btrace cpu.
2018-04-13 11:35:55 +02:00

77 lines
2.4 KiB
Plaintext

# This testcase is part of GDB, the GNU debugger.
#
# Copyright 2018 Free Software Foundation, Inc.
#
# 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/>.
gdb_start
proc test_good { arg } {
gdb_test_no_output "set record btrace cpu $arg" "set cpu $arg"
gdb_test "show record btrace cpu" "btrace cpu is '$arg'\." \
"show cpu $arg"
}
proc test_bad { arg current } {
gdb_test "set record btrace cpu $arg" \
"Bad format\. See \"help set record btrace cpu\"\." \
"set cpu $arg"
gdb_test "show record btrace cpu" "btrace cpu is '$current'\." \
"show cpu $arg"
}
proc test_junk { arg junk current } {
gdb_test "set record btrace cpu $arg" \
"Trailing junk: '$junk'\." \
"set cpu $arg"
gdb_test "show record btrace cpu" "btrace cpu is '$current'\." \
"show cpu $arg"
}
gdb_test "show record btrace cpu" "btrace cpu is 'auto'\." "default cpu"
gdb_test "set record" \
"\"set record\" must be followed by an appropriate subcommand.*" \
"set record"
gdb_test "set record btrace" \
"\"set record btrace\" must be followed by an appropriate subcommand.*" \
"set record btrace"
test_bad "" "auto"
test_good "intel: 0/0"
test_good "intel: 0/0/1"
# We omit a zero stepping in the output.
gdb_test_no_output "set record btrace cpu intel: 0/0/0" \
"set cpu intel: 0/0/0"
gdb_test "show record btrace cpu" "btrace cpu is 'intel: 0/0'\." \
"show cpu intel: 0/0/0"
test_good "auto"
test_good "none"
test_bad "intel: foo" "none"
test_bad "intel: 0" "none"
test_bad "intel: 0/" "none"
test_bad "intel: 0/foo" "none"
test_bad "intel: foo/bar" "none"
test_bad "intel: foo/0" "none"
test_bad "intel: 0x0/0" "none"
test_junk "intel: 0/0 foo" " foo" "none"
test_junk "intel: 0/0x0" "x0" "none"
test_junk "intel: 0/0/foo" "/foo" "none"
test_junk "intel: 0/0/0 foo" " foo" "none"
test_junk "intel: 0/0/0x0" "x0" "none"