aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.testsuite/board-sanity.exp
blob: d6402262f602ac97501ae21c4e65cb496128b996 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# Copyright 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/>.

# The purpose of this test-case is to test the sanity of the used host/target
# board files.

proc test_remote { remote host_is_target } {
    global srcdir subdir

    set file board-sanity.exp

    set shell_ok 0
    set delete_ok 0
    set exists_ok 1

    if { $host_is_target } {
	if { $remote == "host" } {
	    set other_remote "target"
	} else {
	    set other_remote "host"
	}
    }

    with_test_prefix cleanup-remote {
	set res [remote_file $remote delete $file]
	gdb_assert { [lindex $res 0] == $delete_ok } \
	    "remove $remote copy "

	set res [remote_file $remote exists $file]
	gdb_assert { $res != $exists_ok } \
	    "$remote copy does not exist"

	if { $host_is_target } {
	    set res [remote_file $other_remote exists $file]
	    gdb_assert { $res != $exists_ok } \
		"$other_remote copy does not exist"	
	}
    }

    with_test_prefix copy-to-remote {
	set remote_file [remote_download $remote $srcdir/$subdir/$file]
	gdb_assert { [string equal [file tail $remote_file] $file] == 1} \
	    "remote_download returns valid value"

	set res [remote_file $remote exists $file]
	gdb_assert { $res == $exists_ok } \
	    "$remote copy exists"

	if { $host_is_target } {
	    set res [remote_file $other_remote exists $file]
	    gdb_assert { $res == $exists_ok } \
		"$other_remote copy exists"
	}
    }

    with_test_prefix cleanup-build {
	    # Note: we're not comparing with delete_ok, return value seems to be
	    # different for build.
	    set res [remote_file build delete $file]
	    gdb_assert { [string equal $res ""] } \
		"remove build copy"

	    set res [remote_file build exists $file]
	    gdb_assert { $res != $exists_ok } \
		"build copy does not exist"
	}

    with_test_prefix copy-from-remote {
	# Note: we're using $remote_file here instead of $file, otherwise
	# this breaks with board_info remotedir.
	set build_file [remote_upload $remote $remote_file]
	gdb_assert { [string equal [file tail $build_file] $file] == 1 } \
	    "remote_upload returns valid value"
	
	set res [remote_file $remote delete $file]
	gdb_assert { [string equal $res $delete_ok] == 1 } \
	    "remove $remote copy"

	set res [remote_file $remote exists $file]
	gdb_assert { $res != $exists_ok } \
	    "$remote copy does not exist"

	if { $host_is_target } {
	    set res [remote_file $other_remote exists $file]
	    gdb_assert { $res != $exists_ok } \
		"$other_remote copy does not exist"	
	}

	set res [remote_file build exists $file]
	gdb_assert { $res == $exists_ok } \
	    "build copy exists"

	set res [remote_file $remote delete $file]
	gdb_assert { $res == $delete_ok } \
	    "remove build copy"
    }
}

# Host_is_target == 1 for local-remote-host-native.exp, if as intended specified
# with both --target_board and --host_board.
if { [info exists host_board] } {
    set host_is_target [string equal $host_board [target_info name]]
} else {
    set host_is_target 0
}

foreach_with_prefix remote {host target} {
    if { [is_remote $remote] } {
	test_remote $remote $host_is_target
    }
}

proc_with_prefix gdb_simple_compile_and_run {} {
    set src {
	int main() {
	    return 0;
	}
    }

    set test "compile"
    if {![gdb_simple_compile board-sanity $src executable]} {
	fail $test
	return
    }
    pass $test

    set target_obj [gdb_remote_download target $obj]
    set result [remote_exec target $target_obj]
    set status [lindex $result 0]
    set output [lindex $result 1]

    if { [host_info name] == "local-remote-host-native"
	 && [target_info name] == "local-remote-host-native" } {
	# Setting remotedir on this board has effect on both host and
	# target, and it seems to broken for host.  Xfail this for now.
	setup_xfail *-*-*
    }
    gdb_assert { $status == 0 && $output == "" }

    remote_file build delete $obj
}

gdb_simple_compile_and_run