aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.stabs/wierd.exp
blob: 864bc5eb7e75d55175d89e7f9b1c4cd4ce8d3fd2 (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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
# Test that GDB properly ignores invalid stabs.
# Also test that GDB can debug a .o file, and that it doesn't mind
# a file that's more minimal than what a compiler normally puts out.
if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

proc do_tests {} {
	global binfile
	global prompt

	# Do this first because the bug only exhibits itself before partial
	# symbols have been expanded.
	setup_xfail "*-*-*"
	# xcoffread.c doesn't (yet) use partial symbol tables.
	clear_xfail "rs*-*-aix*"
	gdb_test "ptype red" "type = enum \{red, green, blue\}" "ptype unnamed enum"

	print_wierd_var var0
	print_wierd_var var1
	print_wierd_var var2
	print_wierd_var var3

	print_wierd_var attr32
	print_wierd_var attr33
	print_wierd_var attr35
	print_wierd_var attr36
	print_wierd_var attr37
	print_wierd_var attr38
	print_wierd_var attr39
	print_wierd_var attr41
	print_wierd_var attr42
	print_wierd_var attr43
	print_wierd_var attr44
	print_wierd_var attr46
	print_wierd_var attr47
	print_wierd_var attr58
	print_wierd_var attr59
	print_wierd_var attr60
	print_wierd_var attr61
	print_wierd_var attr62
	print_wierd_var attr63
	print_wierd_var attr64
	print_wierd_var attr65
	print_wierd_var attr66
	print_wierd_var attr67
	print_wierd_var attr68
	print_wierd_var attr69
	print_wierd_var attr70
	print_wierd_var attr71
	print_wierd_var attr72
	print_wierd_var attr73
	print_wierd_var attr74
	print_wierd_var attr75
	print_wierd_var attr76
	print_wierd_var attr77
	print_wierd_var attr78
	print_wierd_var attr79
	print_wierd_var attr80
	print_wierd_var attr81
	print_wierd_var attr82
	print_wierd_var attr83
	print_wierd_var attr84
	print_wierd_var attr85
	print_wierd_var attr86
	print_wierd_var attr87
	print_wierd_var attr88
	print_wierd_var attr89
	print_wierd_var attr90
	print_wierd_var attr91
	print_wierd_var attr92
	print_wierd_var attr93
	print_wierd_var attr94
	print_wierd_var attr95
	print_wierd_var attr96
	print_wierd_var attr97
	print_wierd_var attr98
	print_wierd_var attr99
	print_wierd_var attr100
	print_wierd_var attr101
	print_wierd_var attr102
	print_wierd_var attr103
	print_wierd_var attr104
	print_wierd_var attr105
	print_wierd_var attr106
	print_wierd_var attr107
	print_wierd_var attr108
	print_wierd_var attr109
	print_wierd_var attr110
	print_wierd_var attr111
	print_wierd_var attr112
	print_wierd_var attr113
	print_wierd_var attr114
	print_wierd_var attr115
	print_wierd_var attr116
	print_wierd_var attr117
	print_wierd_var attr118
	print_wierd_var attr119
	print_wierd_var attr120
	print_wierd_var attr121
	print_wierd_var attr122
	print_wierd_var attr123
	print_wierd_var attr124
	print_wierd_var attr125
	print_wierd_var attr126

	gdb_test "p const69" " = 69" "'e' constant on non-enum type"
	gdb_test "whatis const69" "type = (unsigned int|inttype)" "whatis const69"

	# Haven't investigated
	setup_xfail "*-*-*"
	gdb_test "p sizeof (const70)" " = 2" "'e' constant with embedded type"

	# field3 is printing out a bogus value; haven't investigated
	setup_xfail "*-*-*"
	gdb_test "p bad_neg0" " = \{field0 = 42, field2 =.*field3 = 45\}" "p bad_neg0"
	# test that it at least gets field0 right
	gdb_test "p bad_neg0" " = \{field0 = 42, field2 =" "p bad_neg0, test 2"

	gdb_test "ptype inttype" "type = (unsigned int|inttype)" "ptype on inttype"
	gdb_test "p sizeof (float72type)" " = 9" "unrecognized floating point type"

	gdb_test "p/x int256var" " = 0x0*2a0000002b0000002c0000002d\
0000002d0000002c0000002b0000002a" "print very big integer"

	gdb_test "whatis consth" "type = inttype" "whatis consth"
	gdb_test "whatis consth2" "type = inttype" "whatis consth2"

	# GDB does not yet understand S constants
	setup_xfail "*-*-*"
	gdb_test "p/x bad_neg0const" " = \{field0 = 0x11222211, field2 =.*\
field3 = 0x77888877\}" "print struct constant"

	gdb_test "ptype bad_type0" "type = " "print bad_type0"
	gdb_test "ptype bad_type1" "type = " "print bad_type1"

	# GDB does not yet support arrays indexed by anything at all unusual
	setup_xfail "*-*-*"
	gdb_test "p array0" " = \{42, 43, 44, 45, 46, 47\}" "array0 with strange index"
	setup_xfail "*-*-*"
	gdb_test "p array1" " = \{42, 43, 44\}" "array1 with strange index"

	# GDB does not yet support this feature
	setup_xfail "*-*-*"
	gdb_test "whatis one_var" "type = inttype_one" "whatis one_var"
	# But do make sure that it prints as something reasonable
	gdb_test "whatis one_var" "type = inttype(|_one)" "whatis one_var test 2"

	setup_xfail "*-*-*"
	gdb_test "whatis two_var" "type = inttype_two" "whatis two_var"
	gdb_test "whatis two_var" "type = inttype(|_two)" "whatis two_var test 2"

	setup_xfail "*-*-*"
	gdb_test "whatis pointer_to_int_var" "type = int \*" "whatis p t i v"
	setup_xfail "*-*-*"
	gdb_test "whatis intp_var" "type = intp" "whatis intp_var"

	# xcoffread.c doesn't understand common blocks at all
	setup_xfail "rs6*-*-aix*"
	gdb_test "p common0var0" "= 42"
	# GDB seems to only understand common blocks local to a function.
	# These variables never get relocated to be relative to the common 
	# block.
	# I'm not sure whether it is valid to have a common block which
	# is not local to a function.
	setup_xfail "*-*-*"
	gdb_test "p common0var1" "= 24"
	setup_xfail "*-*-*"
	gdb_test "p common0var2" "= 22"

	gdb_test "p v_comb" "{<> = \
{<> = {x = 42}, \[_a-zA-Z$\]* = \[0-9xa-fA-F\]*, a = 43}, \
<> = {\[_a-zA-Z$\]* = \[0-9xa-fA-F\]*, b = 44}, comb = 45}"
}

proc print_wierd_var { var } {
	global prompt

	# Make sure that the variable gets printed out correctly, without
	# any sort of warning message.
	send "print $var\n"
	expect {
		-re "^print $var\r*\n.\[0-9\]* = 42.*$prompt $" {
			pass "variable $var printed properly"
		}
		-re ".*$prompt $" {
			fail "variable $var not printed properly"
		}
		timeout { fail "variable $var not printed (timeout)" }
		eof { fail "(eof) variable $var not printed" }
	}

	# Make sure that the stabs did get loaded in a sensible way.
	# If somehow the stabs got skipped, then the above test can
	# pass because GDB assumes int for variables without a stab.

	gdb_test "whatis $var" "type = (unsigned int|inttype)" "whatis on $var"
}

# Start with a fresh gdb

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# Don't use gdb_load; it doesn't bitch if the loading produced some
# error messages during symbol reading.
set binfile $objdir/$subdir/wierd.o

if ![file exists $binfile] then {
	if $all_flag then {
		warning "$binfile does not exist; tests suppressed"
	}
} else {
	# xcoffread.c wrongly bitches about the lack of a text section.
	setup_xfail "rs*-*-aix*"
	send "file $binfile\n"
	expect {
		-re "^file $binfile\r*\nReading symbols from $binfile\.\.\.done\.\r*\n$prompt $" {
			pass "wierd.o read without error"
		}
		-re ".*$prompt $" {
			fail "Errors reading wierd.o"
		}
		timeout {
			error "couldn't load $binfile into $GDB (timed out)."
			return -1
		}
		eof { fail "(eof) cannot read wierd.o" }
	}
	do_tests
}

return 0