gdb/testsuite: Add "get_endianness" convenience proc
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.dwarf2 / nonvar-access.exp
CommitLineData
61baf725 1# Copyright 2016-2017 Free Software Foundation, Inc.
da5b30da
AA
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16# Test accessing "non-variable" variables, i.e., variables which are
17# optimized to a constant DWARF location expression and/or
18# partially/fully optimized out.
19
20load_lib dwarf.exp
21
22if {![dwarf2_support]} { return 0 }
23
24standard_testfile main.c nonvar-access-dw.S
25
26# Make some DWARF for the test.
27set asm_file [standard_output_file $srcfile2]
28
29Dwarf::assemble $asm_file {
30 cu {} {
31 compile_unit {
32 {DW_AT_name main.c}
33 } {
7346ef59
AA
34 declare_labels int_type_label char_type_label \
35 struct_s_label struct_t_label array_a9_label \
7942e96e 36 char_ptr_label implicit_a_label stack_b_label
da5b30da
AA
37
38 int_type_label: base_type {
39 {name "int"}
40 {encoding @DW_ATE_signed}
41 {byte_size 4 DW_FORM_sdata}
42 }
7346ef59
AA
43 char_type_label: base_type {
44 {name "char"}
45 {encoding @DW_ATE_unsigned}
46 {byte_size 1 DW_FORM_sdata}
47 }
48 char_ptr_label: pointer_type {
49 {type :$char_type_label}
50 }
da5b30da
AA
51
52 struct_s_label: structure_type {
53 {name s}
54 {byte_size 4 DW_FORM_sdata}
55 } {
56 member {
57 {name a}
58 {type :$int_type_label}
59 {data_member_location 0 DW_FORM_udata}
60 {bit_size 8 DW_FORM_udata}
61 }
62 member {
63 {name b}
64 {type :$int_type_label}
65 {data_bit_offset 8 DW_FORM_udata}
66 {bit_size 24 DW_FORM_udata}
67 }
68 }
69
22347e55
AA
70 struct_t_label: structure_type {
71 {name t}
72 {byte_size 4 DW_FORM_sdata}
73 } {
74 member {
75 {name a}
76 {type :$int_type_label}
77 {data_member_location 0 DW_FORM_udata}
78 {bit_size 9 DW_FORM_udata}
79 }
80 member {
81 {name b}
82 {type :$int_type_label}
83 {data_bit_offset 9 DW_FORM_udata}
84 {bit_size 23 DW_FORM_udata}
85 }
86 }
87
7346ef59
AA
88 array_a9_label: array_type {
89 {type :$char_type_label}
90 } {
91 subrange_type {
92 {type :$int_type_label}
93 {upper_bound 8 DW_FORM_udata}
94 }
95 }
96
da5b30da
AA
97 DW_TAG_subprogram {
98 {name main}
99 {DW_AT_external 1 flag}
100 {low_pc [gdb_target_symbol main] DW_FORM_addr}
101 {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr}
102 } {
7346ef59 103 # Simple variable without location.
da5b30da
AA
104 DW_TAG_variable {
105 {name undef_int}
106 {type :$int_type_label}
107 }
7346ef59 108 # Struct variable without location.
da5b30da
AA
109 DW_TAG_variable {
110 {name undef_s}
111 {type :$struct_s_label}
112 }
7346ef59 113 # Composite location: byte-aligned pieces.
da5b30da
AA
114 DW_TAG_variable {
115 {name def_s}
116 {type :$struct_s_label}
117 {location {
118 const1u 0
119 stack_value
120 bit_piece 8 0
121 const1s -1
122 stack_value
123 bit_piece 24 0
124 } SPECIAL_expr}
125 }
7346ef59 126 # Composite location: non-byte-aligned pieces.
22347e55
AA
127 DW_TAG_variable {
128 {name def_t}
129 {type :$struct_t_label}
130 {location {
e9352324 131 const2s -184
22347e55
AA
132 stack_value
133 bit_piece 9 0
e9352324 134 const4u 1752286
22347e55
AA
135 stack_value
136 bit_piece 23 0
137 } SPECIAL_expr}
138 }
e9352324
AA
139 # Composite location with some empty pieces.
140 DW_TAG_variable {
141 {name part_def_a}
142 {type :$array_a9_label}
143 {location {
144 piece 3
145 const4u 0xf1927314
146 stack_value
147 piece 4
148 piece 2
149 } SPECIAL_expr}
150 }
7346ef59
AA
151 # Implicit location: immediate value.
152 DW_TAG_variable {
153 {name def_implicit_s}
154 {type :$struct_s_label}
155 {location {
156 implicit_value 0x12 0x34 0x56 0x78
157 } SPECIAL_expr}
158 }
159 # Implicit location: immediate value for whole array, with
160 # excess bytes.
161 implicit_a_label: DW_TAG_variable {
162 {name def_implicit_a}
163 {type :$array_a9_label}
164 {location {
165 implicit_value 0x1 0x12 0x23 0x34 0x45 \
166 0x56 0x67 0x78 0x89 0x9a 0xab
167 } SPECIAL_expr}
168 }
169 # Implicit pointer into immediate value.
170 DW_TAG_variable {
171 {name implicit_a_ptr}
172 {type :$char_ptr_label}
173 {location {
7942e96e
AA
174 implicit_pointer $implicit_a_label 5
175 } SPECIAL_expr}
176 }
177 # Stack-value location.
178 stack_b_label: DW_TAG_variable {
179 {name def_stack_b}
180 {type :$struct_t_label}
181 {location {
182 const4u 0x1a2b3c4d
183 stack_value
184 } SPECIAL_expr}
185 }
186 # Implicit pointer into stack value.
187 DW_TAG_variable {
188 {name implicit_b_ptr}
189 {type :$char_ptr_label}
190 {location {
191 implicit_pointer $stack_b_label 1
7346ef59
AA
192 } SPECIAL_expr}
193 }
da5b30da
AA
194 }
195 }
196 }
197}
198
5b362f04 199if { [prepare_for_testing "failed to prepare" ${testfile} \
da5b30da
AA
200 [list $srcfile $asm_file] {nodebug}] } {
201 return -1
202}
203
204if ![runto_main] {
205 return -1
206}
207
805acca0
AA
208# Determine byte order.
209set endian [get_endianness]
7346ef59
AA
210
211# Byte-aligned objects with simple location descriptions.
212switch $endian { big {set val 0x345678} little {set val 0x785634} }
213gdb_test "print/x def_implicit_s" " = \\{a = 0x12, b = $val\\}"
214gdb_test "print/x def_implicit_s.b" " = $val"
215gdb_test "print/x def_implicit_a" \
216 " = \\{0x1, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89\\}"
217gdb_test "print/x def_implicit_a\[5\]" " = 0x56"
218gdb_test "print/x *(char (*)\[5\]) implicit_a_ptr" \
219 " = \\{0x56, 0x67, 0x78, 0x89, 0x9a\\}"
7942e96e
AA
220switch $endian {
221 big {set val "a = 52, b = 2833485"}
222 little {set val "a = 77, b = 857502"}
223}
224gdb_test "print def_stack_b" " = \\{$val\\}"
225switch $endian {big {set val 0x2b} little {set val 0x3c}}
226gdb_test "print/x *implicit_b_ptr" " = $val"
7346ef59
AA
227
228# Byte-aligned fields, pieced together from DWARF stack values.
da5b30da 229gdb_test "print def_s" " = \\{a = 0, b = -1\\}"
e9352324
AA
230switch $endian { big {set val 0x92} little {set val 0x73} }
231gdb_test "print/x part_def_a\[4\]" " = $val"
232gdb_test "print/x part_def_a\[8\]" " = <optimized out>"
7346ef59
AA
233
234# Non-byte-aligned fields, pieced together from DWARF stack values.
e9352324 235gdb_test "print def_t" " = \\{a = -184, b = 1752286\\}"
7346ef59
AA
236
237# Simple variable without location.
da5b30da 238gdb_test "print undef_int" " = <optimized out>"
7346ef59
AA
239
240# Member of a structure without location.
da5b30da 241gdb_test "print undef_s.a" " = <optimized out>"
This page took 0.086564 seconds and 4 git commands to generate.