From 9080ac9d99e5326286a7df806955a326fcd655b2 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 28 Apr 2016 12:55:30 -0400 Subject: [PATCH] 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. --- gdb/testsuite/ChangeLog | 5 + gdb/testsuite/gdb.trace/trace-enable-disable.c | 38 +++++++ gdb/testsuite/gdb.trace/trace-enable-disable.exp | 128 +++++++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 gdb/testsuite/gdb.trace/trace-enable-disable.c create mode 100644 gdb/testsuite/gdb.trace/trace-enable-disable.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 88f8d3d..710b2af 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 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, use it in info sharedlibrary test. * gdb.trace/ftrace-lock.exp: Likewise. 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 0000000..23453db --- /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 0000000..0c35c92 --- /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 -- 2.7.4