1da0c48c4Sopenharmony_ci#! /bin/sh
2da0c48c4Sopenharmony_ci# Copyright (C) 2007, 2008 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_citestfiles testfile34 testfile38 testfile41 testfile49
21da0c48c4Sopenharmony_ci
22da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -f -e testfile34 \
23da0c48c4Sopenharmony_ci				 0x08048074 0x08048075 0x08048076 \
24da0c48c4Sopenharmony_ci				 0x08049078 0x08048080 0x08049080 <<\EOF
25da0c48c4Sopenharmony_cifoo
26da0c48c4Sopenharmony_ci??:0
27da0c48c4Sopenharmony_cibar
28da0c48c4Sopenharmony_ci??:0
29da0c48c4Sopenharmony_ci_etext
30da0c48c4Sopenharmony_ci??:0
31da0c48c4Sopenharmony_cidata1
32da0c48c4Sopenharmony_ci??:0
33da0c48c4Sopenharmony_ci??
34da0c48c4Sopenharmony_ci??:0
35da0c48c4Sopenharmony_ci_end
36da0c48c4Sopenharmony_ci??:0
37da0c48c4Sopenharmony_ciEOF
38da0c48c4Sopenharmony_ci
39da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile38 0x02 0x10a 0x211 0x31a <<\EOF
40da0c48c4Sopenharmony_cit1_global_outer+0x2
41da0c48c4Sopenharmony_ci??:0
42da0c48c4Sopenharmony_cit2_global_symbol+0x2
43da0c48c4Sopenharmony_ci??:0
44da0c48c4Sopenharmony_cit3_global_after_0+0x1
45da0c48c4Sopenharmony_ci??:0
46da0c48c4Sopenharmony_ci(.text)+0x31a
47da0c48c4Sopenharmony_ci??:0
48da0c48c4Sopenharmony_ciEOF
49da0c48c4Sopenharmony_ci
50da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile41 0x1 0x104 <<\EOF
51da0c48c4Sopenharmony_cismall_global_at_large_global+0x1
52da0c48c4Sopenharmony_ci??:0
53da0c48c4Sopenharmony_cismall_global_first_at_large_global+0x1
54da0c48c4Sopenharmony_ci??:0
55da0c48c4Sopenharmony_ciEOF
56da0c48c4Sopenharmony_ci
57da0c48c4Sopenharmony_citestfiles testfile12 testfile14
58da0c48c4Sopenharmony_citempfiles testmaps
59da0c48c4Sopenharmony_ci
60da0c48c4Sopenharmony_cicat > testmaps <<EOF
61da0c48c4Sopenharmony_ci00400000-00401000 r-xp 00000000 fd:01 4006812                            `pwd`/testfile14
62da0c48c4Sopenharmony_ci00500000-00501000 rw-p 00000000 fd:01 4006812                            `pwd`/testfile14
63da0c48c4Sopenharmony_ci01000000-01001000 r-xp 00000000 fd:01 1234567				 `pwd`/testfile12
64da0c48c4Sopenharmony_ci01100000-01011000 rw-p 00000000 fd:01 1234567				 `pwd`/testfile12
65da0c48c4Sopenharmony_ci2aaaaaaab000-2aaaaaaad000 rw-p 2aaaaaaab000 00:00 0 
66da0c48c4Sopenharmony_ci2aaaaaae2000-2aaaaaae3000 rw-p 2aaaaaae2000 00:00 0 
67da0c48c4Sopenharmony_ci7fff61068000-7fff6107d000 rw-p 7ffffffea000 00:00 0                      [stack]
68da0c48c4Sopenharmony_ci7fff611fe000-7fff61200000 r-xp 7fff611fe000 00:00 0                      [vdso]
69da0c48c4Sopenharmony_ciffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
70da0c48c4Sopenharmony_ciEOF
71da0c48c4Sopenharmony_ci
72da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps 0x40047c 0x10009db <<\EOF
73da0c48c4Sopenharmony_cicaller+0x14
74da0c48c4Sopenharmony_ci/home/drepper/local/elfutils-build/20050425/v.c:11
75da0c48c4Sopenharmony_cifoo+0xb
76da0c48c4Sopenharmony_ci/home/drepper/local/elfutils-build/20030710/u.c:5
77da0c48c4Sopenharmony_ciEOF
78da0c48c4Sopenharmony_ci
79da0c48c4Sopenharmony_ci#	.section .text
80da0c48c4Sopenharmony_ci#	nop #0
81da0c48c4Sopenharmony_ci#sizeless_foo:
82da0c48c4Sopenharmony_ci#	nop #1
83da0c48c4Sopenharmony_ci#	nop #2
84da0c48c4Sopenharmony_ci#sized_bar:
85da0c48c4Sopenharmony_ci#	nop #3
86da0c48c4Sopenharmony_ci#	nop #4
87da0c48c4Sopenharmony_ci#sizeless_baz:
88da0c48c4Sopenharmony_ci#	nop #5
89da0c48c4Sopenharmony_ci#	nop #6
90da0c48c4Sopenharmony_ci#	.size sized_bar, . - sized_bar
91da0c48c4Sopenharmony_ci#	nop #7
92da0c48c4Sopenharmony_ci#	nop #8
93da0c48c4Sopenharmony_ci#sizeless_x:
94da0c48c4Sopenharmony_ci#	nop #9
95da0c48c4Sopenharmony_ci#	.org 0x100
96da0c48c4Sopenharmony_ci#	nop #0
97da0c48c4Sopenharmony_ci#	.globl global_outer
98da0c48c4Sopenharmony_ci#global_outer:
99da0c48c4Sopenharmony_ci#	nop #1
100da0c48c4Sopenharmony_ci#	nop #2
101da0c48c4Sopenharmony_ci#	.globl global_in_global
102da0c48c4Sopenharmony_ci#global_in_global:
103da0c48c4Sopenharmony_ci#	nop #3
104da0c48c4Sopenharmony_ci#	nop #4
105da0c48c4Sopenharmony_ci#	.size global_in_global, . - global_in_global
106da0c48c4Sopenharmony_ci#local_in_global:
107da0c48c4Sopenharmony_ci#	nop #5 
108da0c48c4Sopenharmony_ci#	nop #6 
109da0c48c4Sopenharmony_ci#	.size local_in_global, . - local_in_global
110da0c48c4Sopenharmony_ci#	nop #7
111da0c48c4Sopenharmony_ci#	nop #8
112da0c48c4Sopenharmony_ci#.Lsizeless1:
113da0c48c4Sopenharmony_ci#	nop #9
114da0c48c4Sopenharmony_ci#	nop #10
115da0c48c4Sopenharmony_ci#	.size global_outer, . - global_outer
116da0c48c4Sopenharmony_ci#	nop #11
117da0c48c4Sopenharmony_ci#	.org 0x200
118da0c48c4Sopenharmony_ci#	nop #0
119da0c48c4Sopenharmony_ci#local_outer:
120da0c48c4Sopenharmony_ci#	nop #1
121da0c48c4Sopenharmony_ci#	nop #2
122da0c48c4Sopenharmony_ci#	.globl global_in_local
123da0c48c4Sopenharmony_ci#global_in_local:
124da0c48c4Sopenharmony_ci#	nop #3
125da0c48c4Sopenharmony_ci#	nop #4
126da0c48c4Sopenharmony_ci#	.size global_in_local, . - global_in_local
127da0c48c4Sopenharmony_ci#local_in_local:
128da0c48c4Sopenharmony_ci#	nop #5 
129da0c48c4Sopenharmony_ci#	nop #6 
130da0c48c4Sopenharmony_ci#	.size local_in_local, . - local_in_local
131da0c48c4Sopenharmony_ci#	nop #7
132da0c48c4Sopenharmony_ci#	nop #8
133da0c48c4Sopenharmony_ci#.Lsizeless2:
134da0c48c4Sopenharmony_ci#	nop #9
135da0c48c4Sopenharmony_ci#	nop #10
136da0c48c4Sopenharmony_ci#	.size local_outer, . - local_outer
137da0c48c4Sopenharmony_ci#	nop #11
138da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile49 \
139da0c48c4Sopenharmony_ci    		0 1 2 3 4 5 6 7 8 9 \
140da0c48c4Sopenharmony_ci		0x100 0x101 0x102 0x103 0x104 0x105 \
141da0c48c4Sopenharmony_ci		0x106 0x107 0x108 0x109 0x10a 0x10b \
142da0c48c4Sopenharmony_ci		0x200 0x201 0x202 0x203 0x204 0x205 \
143da0c48c4Sopenharmony_ci		0x206 0x207 0x208 0x209 0x20a 0x20b <<\EOF
144da0c48c4Sopenharmony_ci(.text)+0
145da0c48c4Sopenharmony_ci??:0
146da0c48c4Sopenharmony_cisizeless_foo
147da0c48c4Sopenharmony_ci??:0
148da0c48c4Sopenharmony_cisizeless_foo+0x1
149da0c48c4Sopenharmony_ci??:0
150da0c48c4Sopenharmony_cisized_bar
151da0c48c4Sopenharmony_ci??:0
152da0c48c4Sopenharmony_cisized_bar+0x1
153da0c48c4Sopenharmony_ci??:0
154da0c48c4Sopenharmony_cisized_bar+0x2
155da0c48c4Sopenharmony_ci??:0
156da0c48c4Sopenharmony_cisized_bar+0x3
157da0c48c4Sopenharmony_ci??:0
158da0c48c4Sopenharmony_ci(.text)+0x7
159da0c48c4Sopenharmony_ci??:0
160da0c48c4Sopenharmony_ci(.text)+0x8
161da0c48c4Sopenharmony_ci??:0
162da0c48c4Sopenharmony_cisizeless_x
163da0c48c4Sopenharmony_ci??:0
164da0c48c4Sopenharmony_cisizeless_x+0xf7
165da0c48c4Sopenharmony_ci??:0
166da0c48c4Sopenharmony_ciglobal_outer
167da0c48c4Sopenharmony_ci??:0
168da0c48c4Sopenharmony_ciglobal_outer+0x1
169da0c48c4Sopenharmony_ci??:0
170da0c48c4Sopenharmony_ciglobal_in_global
171da0c48c4Sopenharmony_ci??:0
172da0c48c4Sopenharmony_ciglobal_in_global+0x1
173da0c48c4Sopenharmony_ci??:0
174da0c48c4Sopenharmony_ciglobal_outer+0x4
175da0c48c4Sopenharmony_ci??:0
176da0c48c4Sopenharmony_ciglobal_outer+0x5
177da0c48c4Sopenharmony_ci??:0
178da0c48c4Sopenharmony_ciglobal_outer+0x6
179da0c48c4Sopenharmony_ci??:0
180da0c48c4Sopenharmony_ciglobal_outer+0x7
181da0c48c4Sopenharmony_ci??:0
182da0c48c4Sopenharmony_ciglobal_outer+0x8
183da0c48c4Sopenharmony_ci??:0
184da0c48c4Sopenharmony_ciglobal_outer+0x9
185da0c48c4Sopenharmony_ci??:0
186da0c48c4Sopenharmony_ci(.text)+0x10b
187da0c48c4Sopenharmony_ci??:0
188da0c48c4Sopenharmony_ci(.text)+0x200
189da0c48c4Sopenharmony_ci??:0
190da0c48c4Sopenharmony_cilocal_outer
191da0c48c4Sopenharmony_ci??:0
192da0c48c4Sopenharmony_cilocal_outer+0x1
193da0c48c4Sopenharmony_ci??:0
194da0c48c4Sopenharmony_ciglobal_in_local
195da0c48c4Sopenharmony_ci??:0
196da0c48c4Sopenharmony_ciglobal_in_local+0x1
197da0c48c4Sopenharmony_ci??:0
198da0c48c4Sopenharmony_cilocal_in_local
199da0c48c4Sopenharmony_ci??:0
200da0c48c4Sopenharmony_cilocal_in_local+0x1
201da0c48c4Sopenharmony_ci??:0
202da0c48c4Sopenharmony_cilocal_outer+0x6
203da0c48c4Sopenharmony_ci??:0
204da0c48c4Sopenharmony_cilocal_outer+0x7
205da0c48c4Sopenharmony_ci??:0
206da0c48c4Sopenharmony_cilocal_outer+0x8
207da0c48c4Sopenharmony_ci??:0
208da0c48c4Sopenharmony_cilocal_outer+0x9
209da0c48c4Sopenharmony_ci??:0
210da0c48c4Sopenharmony_ci(.text)+0x20b
211da0c48c4Sopenharmony_ci??:0
212da0c48c4Sopenharmony_ciEOF
213da0c48c4Sopenharmony_ci
214da0c48c4Sopenharmony_ci#	.macro global label size
215da0c48c4Sopenharmony_ci#\label:	.globl \label
216da0c48c4Sopenharmony_ci#	.size \label, \size
217da0c48c4Sopenharmony_ci#	.endm
218da0c48c4Sopenharmony_ci#	.macro weak label size
219da0c48c4Sopenharmony_ci#\label:	.weak \label
220da0c48c4Sopenharmony_ci#	.size \label, \size
221da0c48c4Sopenharmony_ci#	.endm
222da0c48c4Sopenharmony_ci#	.macro local label size
223da0c48c4Sopenharmony_ci#\label:	.size \label, \size
224da0c48c4Sopenharmony_ci#	.endm
225da0c48c4Sopenharmony_ci#	.macro offset val
226da0c48c4Sopenharmony_ci#	.ifne (. - _start) - \val
227da0c48c4Sopenharmony_ci#	.err
228da0c48c4Sopenharmony_ci#	.endif
229da0c48c4Sopenharmony_ci#	.byte \val
230da0c48c4Sopenharmony_ci#	.endm
231da0c48c4Sopenharmony_ci#
232da0c48c4Sopenharmony_ci#_start:
233da0c48c4Sopenharmony_ci#	offset 0
234da0c48c4Sopenharmony_ci#
235da0c48c4Sopenharmony_ci#	local glocal, 1
236da0c48c4Sopenharmony_ci#	weak gweak, 1
237da0c48c4Sopenharmony_ci#	global gglobal1, 2
238da0c48c4Sopenharmony_ci#	global gglobal2, 1
239da0c48c4Sopenharmony_ci#	global gglobal3, 1
240da0c48c4Sopenharmony_ci#	offset 1
241da0c48c4Sopenharmony_ci#	/* Symbols end here.  */
242da0c48c4Sopenharmony_ci#	offset 2
243da0c48c4Sopenharmony_ci#	/* gglobal1 ends here.  */
244da0c48c4Sopenharmony_ci#	offset 3
245da0c48c4Sopenharmony_ci#
246da0c48c4Sopenharmony_ci#	local g0local, 0
247da0c48c4Sopenharmony_ci#	weak g0weak, 0
248da0c48c4Sopenharmony_ci#	global g0global1, 0
249da0c48c4Sopenharmony_ci#	global g0global2, 0
250da0c48c4Sopenharmony_ci#	offset 4
251da0c48c4Sopenharmony_ci#
252da0c48c4Sopenharmony_ci#	local wlocal, 1
253da0c48c4Sopenharmony_ci#	weak wweak1, 2
254da0c48c4Sopenharmony_ci#	weak wweak2, 1
255da0c48c4Sopenharmony_ci#	weak wweak3, 1
256da0c48c4Sopenharmony_ci#	offset 5
257da0c48c4Sopenharmony_ci#	/* Symbols end here.  */
258da0c48c4Sopenharmony_ci#	offset 6
259da0c48c4Sopenharmony_ci#	/* wweak1 ends here.  */
260da0c48c4Sopenharmony_ci#	offset 7
261da0c48c4Sopenharmony_ci#
262da0c48c4Sopenharmony_ci#	local w0local, 0
263da0c48c4Sopenharmony_ci#	weak w0weak1, 0
264da0c48c4Sopenharmony_ci#	weak w0weak2, 0
265da0c48c4Sopenharmony_ci#	offset 8
266da0c48c4Sopenharmony_ci#
267da0c48c4Sopenharmony_ci#	local llocal1, 2
268da0c48c4Sopenharmony_ci#	local llocal2, 1
269da0c48c4Sopenharmony_ci#	local llocal3, 1
270da0c48c4Sopenharmony_ci#	offset 9
271da0c48c4Sopenharmony_ci#	/* Symbols end here.  */
272da0c48c4Sopenharmony_ci#	offset 10
273da0c48c4Sopenharmony_ci#	/* llocal1 ends here.  */
274da0c48c4Sopenharmony_ci#	offset 11
275da0c48c4Sopenharmony_ci#
276da0c48c4Sopenharmony_ci#	local l0local1, 0
277da0c48c4Sopenharmony_ci#	local l0local2, 0
278da0c48c4Sopenharmony_ci#	offset 12
279da0c48c4Sopenharmony_citestfiles testfile64
280da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile64 1 4 5 8 9 c <<\EOF
281da0c48c4Sopenharmony_cigglobal2
282da0c48c4Sopenharmony_ci??:0
283da0c48c4Sopenharmony_cig0global2
284da0c48c4Sopenharmony_ci??:0
285da0c48c4Sopenharmony_ciwweak2
286da0c48c4Sopenharmony_ci??:0
287da0c48c4Sopenharmony_ciw0weak2
288da0c48c4Sopenharmony_ci??:0
289da0c48c4Sopenharmony_cillocal2
290da0c48c4Sopenharmony_ci??:0
291da0c48c4Sopenharmony_cil0local2
292da0c48c4Sopenharmony_ci??:0
293da0c48c4Sopenharmony_ciEOF
294da0c48c4Sopenharmony_ci
295da0c48c4Sopenharmony_citestfiles testfile65
296da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S --core=testfile65 0x7fff94bffa30 <<\EOF
297da0c48c4Sopenharmony_ci__vdso_time
298da0c48c4Sopenharmony_ci??:0
299da0c48c4Sopenharmony_ciEOF
300da0c48c4Sopenharmony_ci
301da0c48c4Sopenharmony_ci#	.section	".text"
302da0c48c4Sopenharmony_ci#	.globl _start
303da0c48c4Sopenharmony_ci#	.section	".opd","aw"
304da0c48c4Sopenharmony_ci#_start:	.quad	.L._start,.TOC.@tocbase
305da0c48c4Sopenharmony_ci#	.previous
306da0c48c4Sopenharmony_ci#	.type	_start, @function
307da0c48c4Sopenharmony_ci#.L._start:
308da0c48c4Sopenharmony_ci#	.byte	0x7d, 0x82, 0x10, 0x08
309da0c48c4Sopenharmony_ci#	.size	_start,.-.L._start
310da0c48c4Sopenharmony_citestfiles testfile66 testfile66.core
311da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -x -e testfile66 _start 0x2d8 0x2db 0x2dc 0x103d0 0x103d3 0x103d4<<EOF
312da0c48c4Sopenharmony_ci_start (.text)
313da0c48c4Sopenharmony_ci??:0
314da0c48c4Sopenharmony_ci_start (.text)
315da0c48c4Sopenharmony_ci??:0
316da0c48c4Sopenharmony_ci_start+0x3 (.text)
317da0c48c4Sopenharmony_ci??:0
318da0c48c4Sopenharmony_ci()+0x2dc
319da0c48c4Sopenharmony_ci??:0
320da0c48c4Sopenharmony_ci_start (.opd)
321da0c48c4Sopenharmony_ci??:0
322da0c48c4Sopenharmony_ci_start+0x3 (.opd)
323da0c48c4Sopenharmony_ci??:0
324da0c48c4Sopenharmony_ci()+0x103d4
325da0c48c4Sopenharmony_ci??:0
326da0c48c4Sopenharmony_ciEOF
327da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -x -e testfile66 --core=testfile66.core _start 0x461b02d8 0x461c03d0<<\EOF
328da0c48c4Sopenharmony_ci_start (.text)
329da0c48c4Sopenharmony_ci??:0
330da0c48c4Sopenharmony_ci_start (.text)
331da0c48c4Sopenharmony_ci??:0
332da0c48c4Sopenharmony_ci_start (.opd)
333da0c48c4Sopenharmony_ci??:0
334da0c48c4Sopenharmony_ciEOF
335da0c48c4Sopenharmony_ci
336da0c48c4Sopenharmony_citestfiles testfile69.core testfile69.so
337da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line --core=./testfile69.core -S 0x7f0bc6a33535 0x7f0bc6a33546 <<\EOF
338da0c48c4Sopenharmony_cilibstatic+0x9
339da0c48c4Sopenharmony_ci??:0
340da0c48c4Sopenharmony_cilibglobal+0x9
341da0c48c4Sopenharmony_ci??:0
342da0c48c4Sopenharmony_ciEOF
343da0c48c4Sopenharmony_ci
344da0c48c4Sopenharmony_citestfiles testfile70.exec testfile70.core
345da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile70.exec --core=testfile70.core 0x7ff2cfe9b6b5 <<\EOF
346da0c48c4Sopenharmony_cimain+0x9
347da0c48c4Sopenharmony_ci??:0
348da0c48c4Sopenharmony_ciEOF
349da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S --core=testfile70.core -e testfile70.exec 0x7ff2cfe9b6b5 <<\EOF
350da0c48c4Sopenharmony_cimain+0x9
351da0c48c4Sopenharmony_ci??:0
352da0c48c4Sopenharmony_ciEOF
353da0c48c4Sopenharmony_ci
354da0c48c4Sopenharmony_citestfiles test-core-lib.so test-core.core test-core.exec
355da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/addr2line -S -e test-core.exec --core=test-core.core 0x7f67f2aaf619 <<\EOF
356da0c48c4Sopenharmony_cilibfunc+0x9
357da0c48c4Sopenharmony_ci??:0
358da0c48c4Sopenharmony_ciEOF
359da0c48c4Sopenharmony_ci
360da0c48c4Sopenharmony_ciexit 0
361