From patchwork Thu Mar 31 18:31:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 11586 Received: (qmail 25065 invoked by alias); 31 Mar 2016 18:31:26 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 24648 invoked by uid 89); 31 Mar 2016 18:31:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, SPF_PASS autolearn=ham version=3.3.2 spammy=1128, 2* X-HELO: usplmg20.ericsson.net Received: from usplmg20.ericsson.net (HELO usplmg20.ericsson.net) (198.24.6.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Thu, 31 Mar 2016 18:31:15 +0000 Received: from EUSAAHC001.ericsson.se (Unknown_Domain [147.117.188.75]) by usplmg20.ericsson.net (Symantec Mail Security) with SMTP id ED.25.30335.4076DF65; Thu, 31 Mar 2016 20:05:57 +0200 (CEST) Received: from [142.133.110.144] (147.117.188.8) by smtp-am.internal.ericsson.com (147.117.188.77) with Microsoft SMTP Server id 14.3.248.2; Thu, 31 Mar 2016 14:31:12 -0400 Subject: Re: [PATCH 2/2] Add test for fast tracepoint enable/disable To: Yao Qi References: <1459351018-23718-1-git-send-email-simon.marchi@ericsson.com> <1459351018-23718-2-git-send-email-simon.marchi@ericsson.com> <86k2kirk18.fsf@gmail.com> <56FD65EB.4040109@ericsson.com> CC: From: Simon Marchi Message-ID: <56FD6CEF.40406@ericsson.com> Date: Thu, 31 Mar 2016 14:31:11 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <56FD65EB.4040109@ericsson.com> X-IsSubscribed: yes On 16-03-31 02:01 PM, Simon Marchi wrote: >> Can you extend the test to cover normal tracepoint as well? It >> shouldn't be hard. You can just pass argument "type" to "proc >> test_trace_enable_disable" like, >> >> proc test_trace_enable_disable { type } { >> >> and the type can be "trace" and "ftrace". > > I'll try to do that. > > Thanks, > > Simon Here is an updated patch that tests both trace and ftrace. I left gdb_compile_pthreads for now, while we discuss. One thing that could be improved is that the test should be organized so that it tests normal tracepoints even if fast tracepoints are not supported by the architecture. Right now, I think it will do both or none at all. From 09ccbccb0176feaaf8a385adad28dab6ff357f33 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 30 Mar 2016 10:24:05 -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/gdb.trace/trace-enable-disable.c | 38 +++++++ gdb/testsuite/gdb.trace/trace-enable-disable.exp | 128 +++++++++++++++++++++++ 2 files changed, 166 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/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..2d9d6c7 --- /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_pthreads "$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_shlibs $libipa + +lappend options shlib=$libipa + +if { [gdb_compile_pthreads "$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" { + global executable binfile decimal + 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