1da0c48c4Sopenharmony_ci#! /bin/sh
2da0c48c4Sopenharmony_ci# Copyright (C) 2013 Red Hat, Inc.
3da0c48c4Sopenharmony_ci# This file is part of elfutils.
4da0c48c4Sopenharmony_ci#
5da0c48c4Sopenharmony_ci# This file is free software; you can redistribute it and/or modify
6da0c48c4Sopenharmony_ci# it under the terms of the GNU General Public License as published by
7da0c48c4Sopenharmony_ci# the Free Software Foundation; either version 3 of the License, or
8da0c48c4Sopenharmony_ci# (at your option) any later version.
9da0c48c4Sopenharmony_ci#
10da0c48c4Sopenharmony_ci# elfutils is distributed in the hope that it will be useful, but
11da0c48c4Sopenharmony_ci# WITHOUT ANY WARRANTY; without even the implied warranty of
12da0c48c4Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13da0c48c4Sopenharmony_ci# GNU General Public License for more details.
14da0c48c4Sopenharmony_ci#
15da0c48c4Sopenharmony_ci# You should have received a copy of the GNU General Public License
16da0c48c4Sopenharmony_ci# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci. $srcdir/test-subr.sh
19da0c48c4Sopenharmony_ci
20da0c48c4Sopenharmony_ci# See the source files testfile_const_type.c testfile_implicit_value.c
21da0c48c4Sopenharmony_ci# testfile_entry_value.c testfile_parameter_ref.c testfile_implicit_pointer.c
22da0c48c4Sopenharmony_ci# how to regenerate the test files (needs GCC 4.8+).
23da0c48c4Sopenharmony_ci
24da0c48c4Sopenharmony_citestfiles testfile_const_type testfile_implicit_value testfile_entry_value
25da0c48c4Sopenharmony_citestfiles testfile_parameter_ref testfile_implicit_pointer
26da0c48c4Sopenharmony_ci
27da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs -e testfile_const_type <<\EOF
28da0c48c4Sopenharmony_cimodule 'testfile_const_type'
29da0c48c4Sopenharmony_ci[b] CU 'const_type.c'@0
30da0c48c4Sopenharmony_ci  [33] function 'f1'@80483f0
31da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(4,4)}}
32da0c48c4Sopenharmony_ci    [4b] parameter 'd'
33da0c48c4Sopenharmony_ci      [80483f0,804841b) {fbreg(0)}
34da0c48c4Sopenharmony_ci    [57] variable 'w'
35da0c48c4Sopenharmony_ci      [80483f0,804841b) {fbreg(0), GNU_deref_type(8){long long int,signed,64@[25]}, GNU_const_type{long long int,signed,64@[25]}(8)[0000806745230100], div, GNU_convert{long long unsigned int,unsigned,64@[2c]}, stack_value}
36da0c48c4Sopenharmony_ci  [7d] function 'main'@80482f0
37da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(4,4)}}
38da0c48c4Sopenharmony_ciEOF
39da0c48c4Sopenharmony_ci
40da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs -e testfile_implicit_value <<\EOF
41da0c48c4Sopenharmony_cimodule 'testfile_implicit_value'
42da0c48c4Sopenharmony_ci[b] CU 'implicit_value.c'@0
43da0c48c4Sopenharmony_ci  [25] function 'foo'@80483f0
44da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(4,4)}}
45da0c48c4Sopenharmony_ci    [3e] variable 'a'
46da0c48c4Sopenharmony_ci      [80483f0,80483f6) {implicit_value(8){0200000000000000}, piece(8), implicit_value(8){1500000000000000}, piece(8)}
47da0c48c4Sopenharmony_ci  [86] function 'main'@80482f0
48da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(4,4)}}
49da0c48c4Sopenharmony_ciEOF
50da0c48c4Sopenharmony_ci
51da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs -e testfile_entry_value <<\EOF
52da0c48c4Sopenharmony_cimodule 'testfile_entry_value'
53da0c48c4Sopenharmony_ci[b] CU 'entry_value.c'@0
54da0c48c4Sopenharmony_ci  [29] function 'foo'@400500
55da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
56da0c48c4Sopenharmony_ci    [4a] parameter 'x'
57da0c48c4Sopenharmony_ci      [400500,400504) {reg5}
58da0c48c4Sopenharmony_ci    [55] parameter 'y'
59da0c48c4Sopenharmony_ci      [400500,400504) {reg4}
60da0c48c4Sopenharmony_ci  [68] function 'bar'@400510
61da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
62da0c48c4Sopenharmony_ci    [89] parameter 'x'
63da0c48c4Sopenharmony_ci      [400510,40051c) {reg5}
64da0c48c4Sopenharmony_ci      [40051c,40052b) {reg6}
65da0c48c4Sopenharmony_ci      [40052b,400531) {GNU_entry_value(1) {reg5}, stack_value}
66da0c48c4Sopenharmony_ci    [96] parameter 'y'
67da0c48c4Sopenharmony_ci      [400510,40051c) {reg4}
68da0c48c4Sopenharmony_ci      [40051c,40052a) {reg3}
69da0c48c4Sopenharmony_ci      [40052a,400531) {GNU_entry_value(1) {reg4}, stack_value}
70da0c48c4Sopenharmony_ci    [a3] variable 'z'
71da0c48c4Sopenharmony_ci      [400524,400528) {reg0}
72da0c48c4Sopenharmony_ci      [400528,400529) {reg12}
73da0c48c4Sopenharmony_ci      [400529,40052e) {breg0(0), breg12(0), plus, stack_value}
74da0c48c4Sopenharmony_ci      [40052e,400531) {reg0}
75da0c48c4Sopenharmony_ci  [e9] function 'main'@400400
76da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
77da0c48c4Sopenharmony_ci    [10a] parameter 'argc'
78da0c48c4Sopenharmony_ci      [400400,400406) {reg5}
79da0c48c4Sopenharmony_ci      [400406,40040a) {breg5(-1), stack_value}
80da0c48c4Sopenharmony_ci      [40040a,40040b) {GNU_entry_value(1) {reg5}, stack_value}
81da0c48c4Sopenharmony_ci    [119] parameter 'argv'
82da0c48c4Sopenharmony_ci      [400400,400403) {reg4}
83da0c48c4Sopenharmony_ci      [400403,40040b) {GNU_entry_value(1) {reg4}, stack_value}
84da0c48c4Sopenharmony_ciEOF
85da0c48c4Sopenharmony_ci
86da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs -e testfile_parameter_ref <<\EOF
87da0c48c4Sopenharmony_cimodule 'testfile_parameter_ref'
88da0c48c4Sopenharmony_ci[b] CU 'parameter_ref.c'@0
89da0c48c4Sopenharmony_ci  [77] function 'foo'@400510
90da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
91da0c48c4Sopenharmony_ci    [92] parameter 'x'
92da0c48c4Sopenharmony_ci      [400510,400523) {reg5}
93da0c48c4Sopenharmony_ci    [99] parameter 'y'
94da0c48c4Sopenharmony_ci      [400510,400523) {GNU_parameter_ref[42], stack_value}
95da0c48c4Sopenharmony_ci    [a5] variable 'a'
96da0c48c4Sopenharmony_ci      [400510,400523) {breg5(0), lit1, shl, stack_value}
97da0c48c4Sopenharmony_ci    [b0] variable 'b'
98da0c48c4Sopenharmony_ci      [400510,400523) {GNU_parameter_ref[42], lit1, shl, stack_value}
99da0c48c4Sopenharmony_ci    [be] variable 'c'
100da0c48c4Sopenharmony_ci      <constant value>
101da0c48c4Sopenharmony_ci    [c4] parameter 'z'
102da0c48c4Sopenharmony_ci      <constant value>
103da0c48c4Sopenharmony_ci  [cb] function 'main'@400400
104da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
105da0c48c4Sopenharmony_ci    [ec] parameter 'x'
106da0c48c4Sopenharmony_ci      [400400,400408) {reg5}
107da0c48c4Sopenharmony_ci      [400408,400421) {reg3}
108da0c48c4Sopenharmony_ci      [400421,400423) {GNU_entry_value(1) {reg5}, stack_value}
109da0c48c4Sopenharmony_ci    [f9] parameter 'argv'
110da0c48c4Sopenharmony_ci      [400400,400408) {reg4}
111da0c48c4Sopenharmony_ci      [400408,400423) {GNU_entry_value(1) {reg4}, stack_value}
112da0c48c4Sopenharmony_ciEOF
113da0c48c4Sopenharmony_ci
114da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs -e testfile_implicit_pointer <<\EOF
115da0c48c4Sopenharmony_cimodule 'testfile_implicit_pointer'
116da0c48c4Sopenharmony_ci[b] CU 'implicit_pointer.c'@0
117da0c48c4Sopenharmony_ci  [29] function 'foo'@400500
118da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
119da0c48c4Sopenharmony_ci    [4a] parameter 'i'
120da0c48c4Sopenharmony_ci      [400500,400503) {reg5}
121da0c48c4Sopenharmony_ci    [55] variable 'p'
122da0c48c4Sopenharmony_ci      [400500,400503) {GNU_implicit_pointer([4a],0) {reg5}}
123da0c48c4Sopenharmony_ci  [73] function 'main'@400400
124da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {bregx(7,8)}}
125da0c48c4Sopenharmony_ciEOF
126da0c48c4Sopenharmony_ci
127da0c48c4Sopenharmony_ci# Multi CU DWARF5. See run-dwarf-ranges.sh.
128da0c48c4Sopenharmony_citestfiles testfileranges5.debug
129da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --debug -e testfileranges5.debug <<\EOF
130da0c48c4Sopenharmony_cimodule 'testfileranges5.debug'
131da0c48c4Sopenharmony_ci[c] CU 'hello.c'@0
132da0c48c4Sopenharmony_ci  [2a] function 'no_say'@401160
133da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
134da0c48c4Sopenharmony_ci    [4a] parameter 'prefix'
135da0c48c4Sopenharmony_ci      [401160,401169) {reg5}
136da0c48c4Sopenharmony_ci      [401169,40116a) {entry_value(1) {reg5}, stack_value}
137da0c48c4Sopenharmony_ci      [40116a,401175) {reg5}
138da0c48c4Sopenharmony_ci      [401175,40117a) {entry_value(1) {reg5}, stack_value}
139da0c48c4Sopenharmony_ci    [59] variable 'world'
140da0c48c4Sopenharmony_ci      [401160,40117a) {addr(0x402004), stack_value}
141da0c48c4Sopenharmony_ci  [bd] function 'main'@401050
142da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
143da0c48c4Sopenharmony_ci    [dd] parameter 'argc'
144da0c48c4Sopenharmony_ci      [401050,401062) {reg5}
145da0c48c4Sopenharmony_ci      [401062,401067) {entry_value(1) {reg5}, stack_value}
146da0c48c4Sopenharmony_ci    [ec] parameter 'argv'
147da0c48c4Sopenharmony_ci      [401050,401066) {reg4}
148da0c48c4Sopenharmony_ci      [401066,401067) {entry_value(1) {reg4}, stack_value}
149da0c48c4Sopenharmony_ci  [fb] inlined function 'subject'@401053
150da0c48c4Sopenharmony_ci    [117] parameter 'count'
151da0c48c4Sopenharmony_ci      [401053,40105f) {reg5}
152da0c48c4Sopenharmony_ci    [120] parameter 'word'
153da0c48c4Sopenharmony_ci      [401053,40105f) {reg0}
154da0c48c4Sopenharmony_ci  [168] function 'subject'@401150
155da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
156da0c48c4Sopenharmony_ci    [183] parameter 'word'
157da0c48c4Sopenharmony_ci      [401150,401160) {reg5}
158da0c48c4Sopenharmony_ci    [18a] parameter 'count'
159da0c48c4Sopenharmony_ci      [401150,401160) {reg4}
160da0c48c4Sopenharmony_cimodule 'testfileranges5.debug'
161da0c48c4Sopenharmony_ci[1ab] CU 'world.c'@401180
162da0c48c4Sopenharmony_ci  [1cd] function 'no_main'@4011d0
163da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
164da0c48c4Sopenharmony_ci    [1ef] parameter 'argc'
165da0c48c4Sopenharmony_ci      [4011d0,4011e2) {reg5}
166da0c48c4Sopenharmony_ci      [4011e2,4011e7) {entry_value(1) {reg5}, stack_value}
167da0c48c4Sopenharmony_ci    [1fe] parameter 'argv'
168da0c48c4Sopenharmony_ci      [4011d0,4011e6) {reg4}
169da0c48c4Sopenharmony_ci      [4011e6,4011e7) {entry_value(1) {reg4}, stack_value}
170da0c48c4Sopenharmony_ci  [20d] inlined function 'no_subject'@4011d3
171da0c48c4Sopenharmony_ci    [229] parameter 'count'
172da0c48c4Sopenharmony_ci      [4011d3,4011df) {reg5}
173da0c48c4Sopenharmony_ci    [232] parameter 'word'
174da0c48c4Sopenharmony_ci      [4011d3,4011df) {reg0}
175da0c48c4Sopenharmony_ci  [28d] function 'say'@401180
176da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
177da0c48c4Sopenharmony_ci    [2af] parameter 'prefix'
178da0c48c4Sopenharmony_ci      [401180,40118e) {reg5}
179da0c48c4Sopenharmony_ci      [40118e,40119c) {reg3}
180da0c48c4Sopenharmony_ci      [40119c,4011a7) {entry_value(1) {reg5}, stack_value}
181da0c48c4Sopenharmony_ci      [4011a7,4011b5) {reg3}
182da0c48c4Sopenharmony_ci      [4011b5,4011c0) {entry_value(1) {reg5}, stack_value}
183da0c48c4Sopenharmony_ci    [2be] variable 'world'
184da0c48c4Sopenharmony_ci      [401193,40119b) {reg0}
185da0c48c4Sopenharmony_ci      [4011a7,4011b4) {reg0}
186da0c48c4Sopenharmony_ci  [2ce] inlined function 'happy'@40119b
187da0c48c4Sopenharmony_ci    [2e6] parameter 'w'
188da0c48c4Sopenharmony_ci      [4011a7,4011b4) {reg0}
189da0c48c4Sopenharmony_ci  [2ef] inlined function 'sad'@40119b
190da0c48c4Sopenharmony_ci    [303] parameter 'c'
191da0c48c4Sopenharmony_ci      [40119b,4011a6) {reg0}
192da0c48c4Sopenharmony_ci      [4011a6,4011a7) {entry_value(1) {reg5}}
193da0c48c4Sopenharmony_ci      [4011b4,4011bf) {reg0}
194da0c48c4Sopenharmony_ci  [36b] function 'no_subject'@4011c0
195da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
196da0c48c4Sopenharmony_ci    [386] parameter 'word'
197da0c48c4Sopenharmony_ci      [4011c0,4011d0) {reg5}
198da0c48c4Sopenharmony_ci    [38d] parameter 'count'
199da0c48c4Sopenharmony_ci      [4011c0,4011d0) {reg4}
200da0c48c4Sopenharmony_ciEOF
201da0c48c4Sopenharmony_ci
202da0c48c4Sopenharmony_ci# Multi CU Split DWARF5. See run-dwarf-ranges.sh.
203da0c48c4Sopenharmony_ci# Note that the DIE numbers change, but the actual location addresses are
204da0c48c4Sopenharmony_ci# the same as above, even though the representation is totally different.
205da0c48c4Sopenharmony_citestfiles testfilesplitranges5.debug
206da0c48c4Sopenharmony_citestfiles testfile-ranges-hello5.dwo testfile-ranges-world5.dwo
207da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --debug -e testfilesplitranges5.debug <<\EOF
208da0c48c4Sopenharmony_cimodule 'testfilesplitranges5.debug'
209da0c48c4Sopenharmony_ci[14] CU 'hello.c'
210da0c48c4Sopenharmony_ci  [1d] function 'no_say'@401160
211da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
212da0c48c4Sopenharmony_ci    [33] parameter 'prefix'
213da0c48c4Sopenharmony_ci      [401160,401169) {reg5}
214da0c48c4Sopenharmony_ci      [401169,40116a) {entry_value(1) {reg5}, stack_value}
215da0c48c4Sopenharmony_ci      [40116a,401175) {reg5}
216da0c48c4Sopenharmony_ci      [401175,40117a) {entry_value(1) {reg5}, stack_value}
217da0c48c4Sopenharmony_ci    [3c] variable 'world'
218da0c48c4Sopenharmony_ci      [401160,40117a) {addr: 0x402004, stack_value}
219da0c48c4Sopenharmony_ci  [7e] function 'main'@401050
220da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
221da0c48c4Sopenharmony_ci    [94] parameter 'argc'
222da0c48c4Sopenharmony_ci      [401050,401062) {reg5}
223da0c48c4Sopenharmony_ci      [401062,401067) {entry_value(1) {reg5}, stack_value}
224da0c48c4Sopenharmony_ci    [9d] parameter 'argv'
225da0c48c4Sopenharmony_ci      [401050,401066) {reg4}
226da0c48c4Sopenharmony_ci      [401066,401067) {entry_value(1) {reg4}, stack_value}
227da0c48c4Sopenharmony_ci  [a6] inlined function 'subject'@401053
228da0c48c4Sopenharmony_ci    [bb] parameter 'count'
229da0c48c4Sopenharmony_ci      [401053,40105f) {reg5}
230da0c48c4Sopenharmony_ci    [c1] parameter 'word'
231da0c48c4Sopenharmony_ci      [401053,40105f) {reg0}
232da0c48c4Sopenharmony_ci  [f6] function 'subject'@401150
233da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
234da0c48c4Sopenharmony_ci    [10a] parameter 'word'
235da0c48c4Sopenharmony_ci      [401150,401160) {reg5}
236da0c48c4Sopenharmony_ci    [111] parameter 'count'
237da0c48c4Sopenharmony_ci      [401150,401160) {reg4}
238da0c48c4Sopenharmony_cimodule 'testfilesplitranges5.debug'
239da0c48c4Sopenharmony_ci[14] CU 'world.c'
240da0c48c4Sopenharmony_ci  [1d] function 'no_main'@4011d0
241da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
242da0c48c4Sopenharmony_ci    [35] parameter 'argc'
243da0c48c4Sopenharmony_ci      [4011d0,4011e2) {reg5}
244da0c48c4Sopenharmony_ci      [4011e2,4011e7) {entry_value(1) {reg5}, stack_value}
245da0c48c4Sopenharmony_ci    [3e] parameter 'argv'
246da0c48c4Sopenharmony_ci      [4011d0,4011e6) {reg4}
247da0c48c4Sopenharmony_ci      [4011e6,4011e7) {entry_value(1) {reg4}, stack_value}
248da0c48c4Sopenharmony_ci  [47] inlined function 'no_subject'@4011d3
249da0c48c4Sopenharmony_ci    [5c] parameter 'count'
250da0c48c4Sopenharmony_ci      [4011d3,4011df) {reg5}
251da0c48c4Sopenharmony_ci    [62] parameter 'word'
252da0c48c4Sopenharmony_ci      [4011d3,4011df) {reg0}
253da0c48c4Sopenharmony_ci  [a7] function 'say'@401180
254da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
255da0c48c4Sopenharmony_ci    [c2] parameter 'prefix'
256da0c48c4Sopenharmony_ci      [401180,40118e) {reg5}
257da0c48c4Sopenharmony_ci      [40118e,40119c) {reg3}
258da0c48c4Sopenharmony_ci      [40119c,4011a7) {entry_value(1) {reg5}, stack_value}
259da0c48c4Sopenharmony_ci      [4011a7,4011b5) {reg3}
260da0c48c4Sopenharmony_ci      [4011b5,4011c0) {entry_value(1) {reg5}, stack_value}
261da0c48c4Sopenharmony_ci    [cb] variable 'world'
262da0c48c4Sopenharmony_ci      [401193,40119b) {reg0}
263da0c48c4Sopenharmony_ci      [4011a7,4011b4) {reg0}
264da0c48c4Sopenharmony_ci  [d5] inlined function 'happy'@40119b
265da0c48c4Sopenharmony_ci    [e3] parameter 'w'
266da0c48c4Sopenharmony_ci      [4011a7,4011b4) {reg0}
267da0c48c4Sopenharmony_ci  [e9] inlined function 'sad'@40119b
268da0c48c4Sopenharmony_ci    [f3] parameter 'c'
269da0c48c4Sopenharmony_ci      [40119b,4011a6) {reg0}
270da0c48c4Sopenharmony_ci      [4011a6,4011a7) {entry_value(1) {reg5}}
271da0c48c4Sopenharmony_ci      [4011b4,4011bf) {reg0}
272da0c48c4Sopenharmony_ci  [147] function 'no_subject'@4011c0
273da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
274da0c48c4Sopenharmony_ci    [15b] parameter 'word'
275da0c48c4Sopenharmony_ci      [4011c0,4011d0) {reg5}
276da0c48c4Sopenharmony_ci    [162] parameter 'count'
277da0c48c4Sopenharmony_ci      [4011c0,4011d0) {reg4}
278da0c48c4Sopenharmony_ciEOF
279da0c48c4Sopenharmony_ci
280da0c48c4Sopenharmony_ci# GNU DebugFissuon Multi CU Split DWARF. See run-dwarf-ranges.sh.
281da0c48c4Sopenharmony_citestfiles testfilesplitranges4.debug
282da0c48c4Sopenharmony_citestfiles testfile-ranges-hello.dwo testfile-ranges-world.dwo
283da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --debug -e testfilesplitranges4.debug <<\EOF
284da0c48c4Sopenharmony_cimodule 'testfilesplitranges4.debug'
285da0c48c4Sopenharmony_ci[b] CU 'hello.c'
286da0c48c4Sopenharmony_ci  [18] function 'no_say'@4004f0
287da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
288da0c48c4Sopenharmony_ci    [2f] parameter 'prefix'
289da0c48c4Sopenharmony_ci      [4004f0,4004fa) {reg5}
290da0c48c4Sopenharmony_ci      [4004fa,4004ff) {GNU_entry_value(1) {reg5}, stack_value}
291da0c48c4Sopenharmony_ci    [3b] variable 'world'
292da0c48c4Sopenharmony_ci      <no value>
293da0c48c4Sopenharmony_ci  [60] function 'main'@4003e0
294da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
295da0c48c4Sopenharmony_ci    [77] parameter 'argc'
296da0c48c4Sopenharmony_ci      [4003e0,4003f2) {reg5}
297da0c48c4Sopenharmony_ci      [4003f2,4003f7) {GNU_entry_value(1) {reg5}, stack_value}
298da0c48c4Sopenharmony_ci    [83] parameter 'argv'
299da0c48c4Sopenharmony_ci      [4003e0,4003f6) {reg4}
300da0c48c4Sopenharmony_ci      [4003f6,1004003f5) {GNU_entry_value(1) {reg4}, stack_value}
301da0c48c4Sopenharmony_ci  [8f] inlined function 'subject'@4003e3
302da0c48c4Sopenharmony_ci    [a3] parameter 'count'
303da0c48c4Sopenharmony_ci      [4003e3,4003ef) {reg5}
304da0c48c4Sopenharmony_ci    [ac] parameter 'word'
305da0c48c4Sopenharmony_ci      [4003e3,4003ef) {reg0}
306da0c48c4Sopenharmony_ci  [e7] function 'subject'@4004e0
307da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
308da0c48c4Sopenharmony_ci    [fb] parameter 'word'
309da0c48c4Sopenharmony_ci      [4004e0,4004f0) {reg5}
310da0c48c4Sopenharmony_ci    [102] parameter 'count'
311da0c48c4Sopenharmony_ci      [4004e0,4004f0) {reg4}
312da0c48c4Sopenharmony_cimodule 'testfilesplitranges4.debug'
313da0c48c4Sopenharmony_ci[b] CU 'world.c'
314da0c48c4Sopenharmony_ci  [18] function 'no_main'@400550
315da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
316da0c48c4Sopenharmony_ci    [2f] parameter 'argc'
317da0c48c4Sopenharmony_ci      [400550,400562) {reg5}
318da0c48c4Sopenharmony_ci      [400562,400567) {GNU_entry_value(1) {reg5}, stack_value}
319da0c48c4Sopenharmony_ci    [3b] parameter 'argv'
320da0c48c4Sopenharmony_ci      [400550,400566) {reg4}
321da0c48c4Sopenharmony_ci      [400566,100400565) {GNU_entry_value(1) {reg4}, stack_value}
322da0c48c4Sopenharmony_ci  [47] inlined function 'no_subject'@400553
323da0c48c4Sopenharmony_ci    [5b] parameter 'count'
324da0c48c4Sopenharmony_ci      [400553,40055f) {reg5}
325da0c48c4Sopenharmony_ci    [64] parameter 'word'
326da0c48c4Sopenharmony_ci      [400553,40055f) {reg0}
327da0c48c4Sopenharmony_ci  [af] function 'say'@400500
328da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
329da0c48c4Sopenharmony_ci    [c9] parameter 'prefix'
330da0c48c4Sopenharmony_ci      [400500,40050e) {reg5}
331da0c48c4Sopenharmony_ci      [40050e,40051c) {reg3}
332da0c48c4Sopenharmony_ci      [40051c,400527) {GNU_entry_value(1) {reg5}, stack_value}
333da0c48c4Sopenharmony_ci      [400527,400535) {reg3}
334da0c48c4Sopenharmony_ci      [400535,400540) {GNU_entry_value(1) {reg5}, stack_value}
335da0c48c4Sopenharmony_ci    [d5] variable 'world'
336da0c48c4Sopenharmony_ci      [400513,40051b) {reg0}
337da0c48c4Sopenharmony_ci      [400527,400534) {reg0}
338da0c48c4Sopenharmony_ci  [e1] inlined function 'happy'@40051c
339da0c48c4Sopenharmony_ci    [f1] parameter 'w'
340da0c48c4Sopenharmony_ci      [400527,400534) {reg0}
341da0c48c4Sopenharmony_ci  [fa] inlined function 'sad'@40051c
342da0c48c4Sopenharmony_ci    [106] parameter 'c'
343da0c48c4Sopenharmony_ci      [40051b,400526) {reg0}
344da0c48c4Sopenharmony_ci      [400526,400527) {GNU_entry_value(1) {reg5}}
345da0c48c4Sopenharmony_ci      [400534,40053f) {reg0}
346da0c48c4Sopenharmony_ci  [15c] function 'no_subject'@400540
347da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
348da0c48c4Sopenharmony_ci    [170] parameter 'word'
349da0c48c4Sopenharmony_ci      [400540,400550) {reg5}
350da0c48c4Sopenharmony_ci    [177] parameter 'count'
351da0c48c4Sopenharmony_ci      [400540,400550) {reg4}
352da0c48c4Sopenharmony_ciEOF
353da0c48c4Sopenharmony_ci
354da0c48c4Sopenharmony_ci# DW_OP_addrx and DW_OP_constx testcases.
355da0c48c4Sopenharmony_ci#
356da0c48c4Sopenharmony_ci# int i, j, k;
357da0c48c4Sopenharmony_ci# __thread int l, m, n;
358da0c48c4Sopenharmony_ci#
359da0c48c4Sopenharmony_ci# int main ()
360da0c48c4Sopenharmony_ci# {
361da0c48c4Sopenharmony_ci#   int r1 = i + j + k;
362da0c48c4Sopenharmony_ci#   int r2 = l + m + n;
363da0c48c4Sopenharmony_ci#   int res = r1 + r2;
364da0c48c4Sopenharmony_ci#
365da0c48c4Sopenharmony_ci#   return res;
366da0c48c4Sopenharmony_ci# }
367da0c48c4Sopenharmony_ci#
368da0c48c4Sopenharmony_ci# gcc -O2 -gdwarf-5 -gsplit-dwarf -o addrx_constx-5.o -c addrx_constx.c
369da0c48c4Sopenharmony_ci# gcc -O2 -gdwarf-5 -gsplit-dwarf -o testfile-addrx_constx-5 addrx_constx-5.o
370da0c48c4Sopenharmony_ci# gcc -O2 -gdwarf-4 -gsplit-dwarf -o addrx_constx-4.o -c addrx_constx.c
371da0c48c4Sopenharmony_ci# gcc -O2 -gdwarf-4 -gsplit-dwarf -o testfile-addrx_constx-4 addrx_constx-4.o
372da0c48c4Sopenharmony_ci
373da0c48c4Sopenharmony_citestfiles testfile-addrx_constx-5 addrx_constx-5.dwo
374da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --exprlocs -e testfile-addrx_constx-5 <<\EOF
375da0c48c4Sopenharmony_cimodule 'testfile-addrx_constx-5'
376da0c48c4Sopenharmony_ci[14] CU 'addrx_constx.c'
377da0c48c4Sopenharmony_ci  producer (strx)
378da0c48c4Sopenharmony_ci  language (data1)
379da0c48c4Sopenharmony_ci  name (strx)
380da0c48c4Sopenharmony_ci  comp_dir (strx)
381da0c48c4Sopenharmony_ci  [19] variable "i"
382da0c48c4Sopenharmony_ci    name (string)
383da0c48c4Sopenharmony_ci    decl_file (implicit_const)
384da0c48c4Sopenharmony_ci    decl_line (data1)
385da0c48c4Sopenharmony_ci    decl_column (data1)
386da0c48c4Sopenharmony_ci    type (ref4)
387da0c48c4Sopenharmony_ci    external (flag_present)
388da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x404038}
389da0c48c4Sopenharmony_ci  [25] base_type "int"
390da0c48c4Sopenharmony_ci    byte_size (data1)
391da0c48c4Sopenharmony_ci    encoding (data1)
392da0c48c4Sopenharmony_ci    name (string)
393da0c48c4Sopenharmony_ci  [2c] variable "j"
394da0c48c4Sopenharmony_ci    name (string)
395da0c48c4Sopenharmony_ci    decl_file (implicit_const)
396da0c48c4Sopenharmony_ci    decl_line (data1)
397da0c48c4Sopenharmony_ci    decl_column (data1)
398da0c48c4Sopenharmony_ci    type (ref4)
399da0c48c4Sopenharmony_ci    external (flag_present)
400da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x404034}
401da0c48c4Sopenharmony_ci  [38] variable "k"
402da0c48c4Sopenharmony_ci    name (string)
403da0c48c4Sopenharmony_ci    decl_file (implicit_const)
404da0c48c4Sopenharmony_ci    decl_line (data1)
405da0c48c4Sopenharmony_ci    decl_column (data1)
406da0c48c4Sopenharmony_ci    type (ref4)
407da0c48c4Sopenharmony_ci    external (flag_present)
408da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x40403c}
409da0c48c4Sopenharmony_ci  [44] variable "l"
410da0c48c4Sopenharmony_ci    name (string)
411da0c48c4Sopenharmony_ci    decl_file (implicit_const)
412da0c48c4Sopenharmony_ci    decl_line (data1)
413da0c48c4Sopenharmony_ci    decl_column (data1)
414da0c48c4Sopenharmony_ci    type (ref4)
415da0c48c4Sopenharmony_ci    external (flag_present)
416da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e10, form_tls_address}
417da0c48c4Sopenharmony_ci  [51] variable "m"
418da0c48c4Sopenharmony_ci    name (string)
419da0c48c4Sopenharmony_ci    decl_file (implicit_const)
420da0c48c4Sopenharmony_ci    decl_line (data1)
421da0c48c4Sopenharmony_ci    decl_column (data1)
422da0c48c4Sopenharmony_ci    type (ref4)
423da0c48c4Sopenharmony_ci    external (flag_present)
424da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e0c, form_tls_address}
425da0c48c4Sopenharmony_ci  [5e] variable "n"
426da0c48c4Sopenharmony_ci    name (string)
427da0c48c4Sopenharmony_ci    decl_file (implicit_const)
428da0c48c4Sopenharmony_ci    decl_line (data1)
429da0c48c4Sopenharmony_ci    decl_column (data1)
430da0c48c4Sopenharmony_ci    type (ref4)
431da0c48c4Sopenharmony_ci    external (flag_present)
432da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e08, form_tls_address}
433da0c48c4Sopenharmony_ci  [6b] subprogram "main"
434da0c48c4Sopenharmony_ci    external (flag_present)
435da0c48c4Sopenharmony_ci    name (strx)
436da0c48c4Sopenharmony_ci    decl_file (data1)
437da0c48c4Sopenharmony_ci    decl_line (data1)
438da0c48c4Sopenharmony_ci    decl_column (data1)
439da0c48c4Sopenharmony_ci    type (ref4)
440da0c48c4Sopenharmony_ci    low_pc (addrx)
441da0c48c4Sopenharmony_ci    high_pc (data8)
442da0c48c4Sopenharmony_ci    frame_base (exprloc) {call_frame_cfa {bregx(7,8)}}
443da0c48c4Sopenharmony_ci    call_all_calls (flag_present)
444da0c48c4Sopenharmony_ci    [7f] variable "r1"
445da0c48c4Sopenharmony_ci      name (string)
446da0c48c4Sopenharmony_ci      decl_file (implicit_const)
447da0c48c4Sopenharmony_ci      decl_line (data1)
448da0c48c4Sopenharmony_ci      decl_column (implicit_const)
449da0c48c4Sopenharmony_ci      type (ref4)
450da0c48c4Sopenharmony_ci      location (exprloc) {addr: 0x404038, deref_size(4), addr: 0x404034, deref_size(4), plus, addr: 0x40403c, deref_size(4), plus, stack_value}
451da0c48c4Sopenharmony_ci    [98] variable "r2"
452da0c48c4Sopenharmony_ci      name (string)
453da0c48c4Sopenharmony_ci      decl_file (implicit_const)
454da0c48c4Sopenharmony_ci      decl_line (data1)
455da0c48c4Sopenharmony_ci      decl_column (implicit_const)
456da0c48c4Sopenharmony_ci      type (ref4)
457da0c48c4Sopenharmony_ci      location (exprloc) {form_tls_address, const: 0x403e10, deref_size(4), form_tls_address, const: 0x403e0c, deref_size(4), plus, form_tls_address, const: 0x403e08, deref_size(4), plus, stack_value}
458da0c48c4Sopenharmony_ci    [b4] variable "res"
459da0c48c4Sopenharmony_ci      name (string)
460da0c48c4Sopenharmony_ci      decl_file (implicit_const)
461da0c48c4Sopenharmony_ci      decl_line (data1)
462da0c48c4Sopenharmony_ci      decl_column (implicit_const)
463da0c48c4Sopenharmony_ci      type (ref4)
464da0c48c4Sopenharmony_ci      location (exprloc) {addr: 0x404038, deref_size(4), form_tls_address, const: 0x403e08, deref_size(4), plus, form_tls_address, const: 0x403e0c, deref_size(4), plus, form_tls_address, const: 0x403e10, deref_size(4), plus, addr: 0x404034, deref_size(4), plus, addr: 0x40403c, deref_size(4), plus, stack_value}
465da0c48c4Sopenharmony_ciEOF
466da0c48c4Sopenharmony_ci
467da0c48c4Sopenharmony_citestfiles testfile-addrx_constx-4 addrx_constx-4.dwo
468da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --exprlocs -e testfile-addrx_constx-4 <<\EOF
469da0c48c4Sopenharmony_cimodule 'testfile-addrx_constx-4'
470da0c48c4Sopenharmony_ci[b] CU 'addrx_constx.c'
471da0c48c4Sopenharmony_ci  producer (GNU_str_index)
472da0c48c4Sopenharmony_ci  language (data1)
473da0c48c4Sopenharmony_ci  name (GNU_str_index)
474da0c48c4Sopenharmony_ci  comp_dir (GNU_str_index)
475da0c48c4Sopenharmony_ci  GNU_dwo_id (data8)
476da0c48c4Sopenharmony_ci  [18] variable "i"
477da0c48c4Sopenharmony_ci    name (string)
478da0c48c4Sopenharmony_ci    decl_file (data1)
479da0c48c4Sopenharmony_ci    decl_line (data1)
480da0c48c4Sopenharmony_ci    decl_column (data1)
481da0c48c4Sopenharmony_ci    type (ref4)
482da0c48c4Sopenharmony_ci    external (flag_present)
483da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x404038}
484da0c48c4Sopenharmony_ci  [25] base_type "int"
485da0c48c4Sopenharmony_ci    byte_size (data1)
486da0c48c4Sopenharmony_ci    encoding (data1)
487da0c48c4Sopenharmony_ci    name (string)
488da0c48c4Sopenharmony_ci  [2c] variable "j"
489da0c48c4Sopenharmony_ci    name (string)
490da0c48c4Sopenharmony_ci    decl_file (data1)
491da0c48c4Sopenharmony_ci    decl_line (data1)
492da0c48c4Sopenharmony_ci    decl_column (data1)
493da0c48c4Sopenharmony_ci    type (ref4)
494da0c48c4Sopenharmony_ci    external (flag_present)
495da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x404034}
496da0c48c4Sopenharmony_ci  [39] variable "k"
497da0c48c4Sopenharmony_ci    name (string)
498da0c48c4Sopenharmony_ci    decl_file (data1)
499da0c48c4Sopenharmony_ci    decl_line (data1)
500da0c48c4Sopenharmony_ci    decl_column (data1)
501da0c48c4Sopenharmony_ci    type (ref4)
502da0c48c4Sopenharmony_ci    external (flag_present)
503da0c48c4Sopenharmony_ci    location (exprloc) {addr: 0x40403c}
504da0c48c4Sopenharmony_ci  [46] variable "l"
505da0c48c4Sopenharmony_ci    name (string)
506da0c48c4Sopenharmony_ci    decl_file (data1)
507da0c48c4Sopenharmony_ci    decl_line (data1)
508da0c48c4Sopenharmony_ci    decl_column (data1)
509da0c48c4Sopenharmony_ci    type (ref4)
510da0c48c4Sopenharmony_ci    external (flag_present)
511da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e10, GNU_push_tls_address}
512da0c48c4Sopenharmony_ci  [54] variable "m"
513da0c48c4Sopenharmony_ci    name (string)
514da0c48c4Sopenharmony_ci    decl_file (data1)
515da0c48c4Sopenharmony_ci    decl_line (data1)
516da0c48c4Sopenharmony_ci    decl_column (data1)
517da0c48c4Sopenharmony_ci    type (ref4)
518da0c48c4Sopenharmony_ci    external (flag_present)
519da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e0c, GNU_push_tls_address}
520da0c48c4Sopenharmony_ci  [62] variable "n"
521da0c48c4Sopenharmony_ci    name (string)
522da0c48c4Sopenharmony_ci    decl_file (data1)
523da0c48c4Sopenharmony_ci    decl_line (data1)
524da0c48c4Sopenharmony_ci    decl_column (data1)
525da0c48c4Sopenharmony_ci    type (ref4)
526da0c48c4Sopenharmony_ci    external (flag_present)
527da0c48c4Sopenharmony_ci    location (exprloc) {const: 0x403e08, GNU_push_tls_address}
528da0c48c4Sopenharmony_ci  [70] subprogram "main"
529da0c48c4Sopenharmony_ci    external (flag_present)
530da0c48c4Sopenharmony_ci    name (GNU_str_index)
531da0c48c4Sopenharmony_ci    decl_file (data1)
532da0c48c4Sopenharmony_ci    decl_line (data1)
533da0c48c4Sopenharmony_ci    decl_column (data1)
534da0c48c4Sopenharmony_ci    type (ref4)
535da0c48c4Sopenharmony_ci    low_pc (GNU_addr_index)
536da0c48c4Sopenharmony_ci    high_pc (data8)
537da0c48c4Sopenharmony_ci    frame_base (exprloc) {call_frame_cfa {bregx(7,8)}}
538da0c48c4Sopenharmony_ci    GNU_all_call_sites (flag_present)
539da0c48c4Sopenharmony_ci    [84] variable "r1"
540da0c48c4Sopenharmony_ci      name (string)
541da0c48c4Sopenharmony_ci      decl_file (data1)
542da0c48c4Sopenharmony_ci      decl_line (data1)
543da0c48c4Sopenharmony_ci      decl_column (data1)
544da0c48c4Sopenharmony_ci      type (ref4)
545da0c48c4Sopenharmony_ci      location (exprloc) {addr: 0x404038, deref_size(4), addr: 0x404034, deref_size(4), plus, addr: 0x40403c, deref_size(4), plus, stack_value}
546da0c48c4Sopenharmony_ci    [9f] variable "r2"
547da0c48c4Sopenharmony_ci      name (string)
548da0c48c4Sopenharmony_ci      decl_file (data1)
549da0c48c4Sopenharmony_ci      decl_line (data1)
550da0c48c4Sopenharmony_ci      decl_column (data1)
551da0c48c4Sopenharmony_ci      type (ref4)
552da0c48c4Sopenharmony_ci      location (exprloc) {GNU_push_tls_address, const: 0x403e10, deref_size(4), GNU_push_tls_address, const: 0x403e0c, deref_size(4), plus, GNU_push_tls_address, const: 0x403e08, deref_size(4), plus, stack_value}
553da0c48c4Sopenharmony_ci    [bd] variable "res"
554da0c48c4Sopenharmony_ci      name (string)
555da0c48c4Sopenharmony_ci      decl_file (data1)
556da0c48c4Sopenharmony_ci      decl_line (data1)
557da0c48c4Sopenharmony_ci      decl_column (data1)
558da0c48c4Sopenharmony_ci      type (ref4)
559da0c48c4Sopenharmony_ci      location (exprloc) {addr: 0x404038, deref_size(4), GNU_push_tls_address, const: 0x403e08, deref_size(4), plus, GNU_push_tls_address, const: 0x403e0c, deref_size(4), plus, GNU_push_tls_address, const: 0x403e10, deref_size(4), plus, addr: 0x404034, deref_size(4), plus, addr: 0x40403c, deref_size(4), plus, stack_value}
560da0c48c4Sopenharmony_ciEOF
561da0c48c4Sopenharmony_ci
562da0c48c4Sopenharmony_ci# See run-readelf-loc.sh
563da0c48c4Sopenharmony_citestfiles testfile-splitdwarf4-not-split4.debug
564da0c48c4Sopenharmony_citestfiles splitdwarf4-not-split4.dwo
565da0c48c4Sopenharmony_ci
566da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/tests/varlocs --debug -e testfile-splitdwarf4-not-split4.debug <<\EOF
567da0c48c4Sopenharmony_cimodule 'testfile-splitdwarf4-not-split4.debug'
568da0c48c4Sopenharmony_ci[b] CU 'splitdwarf4-not-split4.c'
569da0c48c4Sopenharmony_ci  [18] function 'main'@401050
570da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
571da0c48c4Sopenharmony_ci    [30] parameter 'argc'
572da0c48c4Sopenharmony_ci      [401050,40106e) {reg5}
573da0c48c4Sopenharmony_ci      [40106e,401086) {reg12}
574da0c48c4Sopenharmony_ci      [401086,401095) {GNU_entry_value(1) {reg5}, stack_value}
575da0c48c4Sopenharmony_ci      [401095,40109c) {reg5}
576da0c48c4Sopenharmony_ci    [3d] parameter 'argv'
577da0c48c4Sopenharmony_ci      [401050,40106e) {reg4}
578da0c48c4Sopenharmony_ci      [40106e,401095) {GNU_entry_value(1) {reg4}, stack_value}
579da0c48c4Sopenharmony_ci      [401095,40109c) {reg4}
580da0c48c4Sopenharmony_ci    [4a] variable 'i'
581da0c48c4Sopenharmony_ci      [401050,40106e) {lit0, stack_value}
582da0c48c4Sopenharmony_ci      [401086,40108e) {breg12(0), breg6(0), plus, stack_value}
583da0c48c4Sopenharmony_ci      [40108e,401095) {reg0}
584da0c48c4Sopenharmony_ci      [401095,40109c) {lit0, stack_value}
585da0c48c4Sopenharmony_ci    [58] variable 'p'
586da0c48c4Sopenharmony_ci      [401050,40106e) {reg5}
587da0c48c4Sopenharmony_ci      [40106e,401090) {reg6}
588da0c48c4Sopenharmony_ci      [401095,40109c) {reg5}
589da0c48c4Sopenharmony_cimodule 'testfile-splitdwarf4-not-split4.debug'
590da0c48c4Sopenharmony_ci[3f] CU 'popcount.c'@401180
591da0c48c4Sopenharmony_ci  [61] function 'popcount'@401180
592da0c48c4Sopenharmony_ci    frame_base: {call_frame_cfa {...}}
593da0c48c4Sopenharmony_ci    [83] parameter 'u'
594da0c48c4Sopenharmony_ci      [401180,401189) {reg5}
595da0c48c4Sopenharmony_ci      [401189,40119b) {reg1}
596da0c48c4Sopenharmony_ci      [40119b,40119d) {breg1(0), lit1, shr, stack_value}
597da0c48c4Sopenharmony_ci      [40119d,4011a1) {reg1}
598da0c48c4Sopenharmony_ci    [91] variable 'c'
599da0c48c4Sopenharmony_ci      [401180,401189) {lit0, stack_value}
600da0c48c4Sopenharmony_ci      [401189,4011a0) {reg0}
601da0c48c4Sopenharmony_ci      [4011a0,4011a1) {lit0, stack_value}
602da0c48c4Sopenharmony_ciEOF
603da0c48c4Sopenharmony_ci
604da0c48c4Sopenharmony_ciexit 0
605