aboutsummaryrefslogtreecommitdiff
blob: 60e7076c863432b5db662e4b44d0b2469a2abb22 (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
133
134
135
136
137
# Copyright 2012 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
load_lib mi-support.exp
set MIFLAGS "-i=mi"

standard_testfile tfile.c
set executable $testfile

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
	   executable {debug nowarnings}] != "" } {
     untested ${testfile}.exp
     return -1
}

# Make sure we are starting fresh.
remote_file host delete basic.tf
remote_file target delete basic.tf

remote_exec target "$binfile"
# Copy tracefile from target to host.
remote_download host [remote_upload target basic.tf] basic.tf

proc test_tfind_tfile { } { with_test_prefix "tfile" {
    global binfile
    global decimal

    if [mi_gdb_start] {
	return
    }
    mi_gdb_load ${binfile}

    mi_gdb_test "-target-select tfile basic.tf" \
	".*=breakpoint-created,bkpt=\{number=\"${decimal}\",type=\"tracepoint\",disp=\"keep\",enabled=\"y\",.*,func=\"write_basic_trace_file\".*\\^connected" \
	"select trace file"

    mi_gdb_test "tfind 0" \
	".*=traceframe-changed,num=\"0\",tracepoint=\"${decimal}\".*\\^done" \
	"tfind 0"

    # No MI notification is sent because traceframe is not changed.
    mi_gdb_test "tfind 0" \
	"\\&\"tfind 0\\\\n\"\r\n\~\"Found.*\\^done" \
	"tfind 0 again"

    mi_gdb_test "tfind end" \
	".*=traceframe-changed,end.*\\^done" \
	"tfind end"

    # No MI notification is send because request is from MI command.
    mi_gdb_test "-trace-find frame-number 0" \
	"-trace-find frame-number 0\r\n\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \
	"-trace-find frame-number 0"

    mi_gdb_exit
}}

test_tfind_tfile

# Change to a different test case in order to run it on target, and get
# several traceframes.
standard_testfile status-stop.c
set testfile ${testfile}-1
set binfile ${objdir}/${subdir}/${testfile}
set executable $testfile

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
	   executable {debug nowarnings}] != "" } {
     untested ${testfile}.exp
     return -1
}

# Test target supports tracepoints or not.

clean_restart $executable

if ![runto_main] {
    fail "Can't run to main to check for trace support"
    return -1
}

if ![gdb_target_supports_trace] {
    unsupported "Current target does not support trace"
    return -1;
}

gdb_exit

proc test_tfind_remote { } { with_test_prefix "remote" {
    global decimal

    if [mi_gdb_start] {
	return
    }
    mi_run_to_main

    mi_gdb_test "-break-insert end" "\\^done.*" "break end"
    mi_gdb_test "-break-insert -a func2" "\\^done.*" "break func2"
    mi_gdb_test "-trace-start" "=breakpoint-modified,bkpt={.*installed=\"y\".*}.*\\^done.*" \
	"trace start"

    mi_execute_to "exec-continue" "breakpoint-hit" end "" ".*" ".*" \
	{ "" "disp=\"keep\"" } \
	"continue to end"
    mi_gdb_test "-trace-stop" "\\^done.*" "trace stop"

    mi_gdb_test "tfind 0" \
	".*=traceframe-changed,num=\"0\",tracepoint=\"${decimal}\".*\\^done" \
	"tfind 0"

    mi_gdb_test "tfind" \
	".*=traceframe-changed,num=\"1\",tracepoint=\"${decimal}\".*\\^done" \
	"tfind"

    mi_gdb_test "tfind end" \
	".*=traceframe-changed,end.*\\^done" \
	"tfind end"

    mi_gdb_exit
}}

test_tfind_remote

return 0