This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 2/2] Add test for fast tracepoint enable/disable
- From: Simon Marchi <simon dot marchi at ericsson dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>
- Cc: <gdb-patches at sourceware dot org>
- Date: Thu, 31 Mar 2016 14:31:11 -0400
- Subject: Re: [PATCH 2/2] Add test for fast tracepoint enable/disable
- Authentication-results: sourceware.org; auth=none
- References: <1459351018-23718-1-git-send-email-simon dot marchi at ericsson dot com> <1459351018-23718-2-git-send-email-simon dot marchi at ericsson dot com> <86k2kirk18 dot fsf at gmail dot com> <56FD65EB dot 4040109 at ericsson dot com>
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 <simon.marchi@ericsson.com>
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 <http://www.gnu.org/licenses/>. */
+
+#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 <http://www.gnu.org/licenses/>.
+
+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
--
2.8.0