From: Simon Marchi Date: Thu, 28 Apr 2016 16:55:30 +0000 (-0400) Subject: Add test for tracepoint enable/disable X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9080ac9d99e5326286a7df806955a326fcd655b2;p=binutils-gdb.git Add test for tracepoint enable/disable This patch adds a test for tracepoints enabling/disabling, which didn't work properly for fast tracepoints on big endian systems. gdb/testsuite/ChangeLog: * gdb.trace/trace-enable-disable.exp: New file. * gdb.trace/trace-enable-disable.c: New file. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 88f8d3d2145..710b2af76ca 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-28 Simon Marchi + + * gdb.trace/trace-enable-disable.exp: New file. + * gdb.trace/trace-enable-disable.c: New file. + 2016-04-28 Simon Marchi * gdb.arch/ftrace-insn-reloc.exp: Save gdb_load_shlib result, diff --git a/gdb/testsuite/gdb.trace/trace-enable-disable.c b/gdb/testsuite/gdb.trace/trace-enable-disable.c new file mode 100644 index 00000000000..23453db448d --- /dev/null +++ b/gdb/testsuite/gdb.trace/trace-enable-disable.c @@ -0,0 +1,38 @@ +/* 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 . */ + +#include "trace-common.h" + +static void +break_here (void) +{ +} + +int +main (void) +{ + int i; + + for (i = 0; i < 100; i++) + { + FAST_TRACEPOINT_LABEL(point_a); + FAST_TRACEPOINT_LABEL(point_b); + break_here (); + } + + return 0; +} diff --git a/gdb/testsuite/gdb.trace/trace-enable-disable.exp b/gdb/testsuite/gdb.trace/trace-enable-disable.exp new file mode 100644 index 00000000000..0c35c92e14e --- /dev/null +++ b/gdb/testsuite/gdb.trace/trace-enable-disable.exp @@ -0,0 +1,128 @@ +# Copyright 2015-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 . + +load_lib "trace-support.exp" + +standard_testfile +set executable $testfile +set expfile $testfile.exp + +# Some targets have leading underscores on assembly symbols. +set options [list debug [gdb_target_symbol_prefix_flags]] + +# Check that the target supports trace. +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } { + untested "Couldn't compile test program" + return -1 +} + +clean_restart ${testfile} + +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 +} + +# Compile the test case with the in-process agent library. +set libipa [get_in_proc_agent] +gdb_load_shlib $libipa + +lappend options shlib=$libipa + +if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } { + untested "Couldn't compile test program with in-process agent library" + return -1 +} + +# This test makes sure that disabling and enabling tracepoints works +# correctly. TRACEPOINT_CMD is the command used to set tracepoints +# (e.g. trace or ftrace). + +proc test_tracepoint_enable_disable { tracepoint_cmd } { + with_test_prefix "test_tracepoint_enable_disable $tracepoint_cmd" { + global executable + clean_restart ${executable} + + set expected 0 + + if ![runto_main] { + fail "Can't run to main." + return -1 + } + + gdb_test "$tracepoint_cmd point_a" "(Tracepoint|Fast tracepoint) 2.*" + gdb_test "$tracepoint_cmd point_b" "(Tracepoint|Fast tracepoint) 3.*" + gdb_breakpoint "break_here" + gdb_test_no_output "tstart" + + # Test that tracepoints start enabled + with_test_prefix "start" { + gdb_continue "break_here" + incr expected 2 + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + # Test that disabling works + with_test_prefix "disable #1" { + gdb_test_no_output "disable 2" + gdb_continue "break_here" + incr expected 1 + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + with_test_prefix "disable #2" { + gdb_test_no_output "disable 3" + gdb_continue "break_here" + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + # Test that disabling an already disabled tracepoint works + with_test_prefix "disable #3" { + gdb_test_no_output "disable 2" + gdb_continue "break_here" + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + # Test that enabling works + with_test_prefix "enable #1" { + gdb_test_no_output "enable 2" + gdb_continue "break_here" + incr expected 1 + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + with_test_prefix "enable #2" { + gdb_test_no_output "enable 3" + gdb_continue "break_here" + incr expected 2 + gdb_test "tstatus" "Collected $expected trace frames.*" + } + + # Test that enabling an already enabled tracepoint works + with_test_prefix "enable #3" { + gdb_test_no_output "enable 3" + gdb_continue "break_here" + incr expected 2 + gdb_test "tstatus" "Collected $expected trace frames.*" + } + } +} + +test_tracepoint_enable_disable trace +test_tracepoint_enable_disable ftrace