gdb.trace: Add a testcase for tdesc in tfile.
This tests whether $ymm15 can be correctly collected and printed from tfile. It covers: - storing tdesc in tfile (without that, $ymm15 doesn't exist) - ax_pseudo_register_collect for x86 (without that, $ymm15 cannot be collected) - register order in tfile_fetch_registers (without that, $ymm15h is fetched from wrong position) - off-by-one in tfile_fetch_registers (without that, $ymm15h is incorrectly considered to be out of bounds) - using proper tdesc in encoding tracepoint actions (without that, internal error happens due to $ymm15h being considered unavailable) gdb/testsuite/ChangeLog: * gdb.trace/tfile-avx.c: New test. * gdb.trace/tfile-avx.exp: New test.
This commit is contained in:
parent
82e9becd8a
commit
9f5fed7852
|
@ -1,3 +1,8 @@
|
|||
2016-02-11 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* gdb.trace/tfile-avx.c: New test.
|
||||
* gdb.trace/tfile-avx.exp: New test.
|
||||
|
||||
2016-02-09 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
PR breakpoints/19546
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2016 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/>. */
|
||||
|
||||
/*
|
||||
* Test program for reading target description from tfile: collects AVX
|
||||
* registers on x86_64.
|
||||
*/
|
||||
|
||||
#include <immintrin.h>
|
||||
|
||||
void
|
||||
dummy (void)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
end (void)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
register __v8si a asm("ymm15") = {
|
||||
0x12340001,
|
||||
0x12340002,
|
||||
0x12340003,
|
||||
0x12340004,
|
||||
0x12340005,
|
||||
0x12340006,
|
||||
0x12340007,
|
||||
0x12340008,
|
||||
};
|
||||
asm volatile ("traceme: call dummy" : : "x" (a));
|
||||
end ();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
# Copyright 2016 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/>.
|
||||
|
||||
if { ! [is_amd64_regs_target] } {
|
||||
verbose "Skipping tfile AVX test (target is not x86_64)."
|
||||
return
|
||||
}
|
||||
|
||||
load_lib "trace-support.exp"
|
||||
|
||||
standard_testfile
|
||||
|
||||
if {[prepare_for_testing $testfile.exp $testfile $srcfile \
|
||||
[list debug additional_flags=-mavx]]} {
|
||||
return -1
|
||||
}
|
||||
|
||||
if ![runto_main] {
|
||||
fail "Can't run to main to check for trace support"
|
||||
return -1
|
||||
}
|
||||
|
||||
if ![gdb_target_supports_trace] {
|
||||
unsupported "target does not support trace"
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test_multiple "print \$ymm15" "check for AVX support" {
|
||||
-re " = void.*$gdb_prompt $" {
|
||||
verbose "Skipping tfile AVX test (target doesn't support AVX)."
|
||||
return
|
||||
}
|
||||
-re " = \\{.*}.*$gdb_prompt $" {
|
||||
# All is well.
|
||||
}
|
||||
}
|
||||
|
||||
gdb_test "trace traceme" ".*"
|
||||
|
||||
gdb_trace_setactions "set actions for tracepoint" "" \
|
||||
"collect \$ymm15" "^$"
|
||||
|
||||
gdb_breakpoint "end"
|
||||
|
||||
gdb_test_no_output "tstart"
|
||||
|
||||
gdb_test "continue" ".*Breakpoint $decimal, end .*"
|
||||
|
||||
set tracefile [standard_output_file ${testfile}]
|
||||
|
||||
# Save trace frames to tfile.
|
||||
gdb_test "tsave ${tracefile}.tf" \
|
||||
"Trace data saved to file '${tracefile}.tf'.*" \
|
||||
"save tfile trace file"
|
||||
|
||||
# Change target to tfile.
|
||||
gdb_test "target tfile ${tracefile}.tf" "" "change to tfile target" \
|
||||
"A program is being debugged already. Kill it. .y or n. $" "y"
|
||||
|
||||
gdb_test "tfind 0" "Found trace frame 0, tracepoint .*"
|
||||
|
||||
gdb_test "print/x \$ymm15.v8_int32" " = \\{0x12340001, .*, 0x12340008}"
|
Loading…
Reference in New Issue