aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.trace/trace-enable-disable.exp
blob: e42f6f75225e1eff8c21593efc6a3b8b30c1be40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Copyright 2015-2023 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"

require !skip_shlib_tests

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_trace_common_supports_arch] {
    unsupported "no trace-common.h support for arch"
    return -1
}
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable $options] != "" } {
    untested "failed to compile"
    return -1
}

clean_restart ${testfile}

if ![runto_main] {
    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 "failed to compile 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] {
	    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