You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
253 lines
8.9 KiB
253 lines
8.9 KiB
#! /bin/sh
|
|
# Copyright (C) 2011-2013 Red Hat, Inc.
|
|
# This file is part of elfutils.
|
|
#
|
|
# This file 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.
|
|
#
|
|
# elfutils 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/>.
|
|
|
|
. $srcdir/test-subr.sh
|
|
|
|
|
|
# testfile52.c:
|
|
# #include <stdlib.h>
|
|
# int foo() { exit(0); }
|
|
#
|
|
# gcc -m32 -g -shared testfile52-32.c -o testfile52-32.so
|
|
# eu-strip -f testfile52-32.so.debug testfile52-32.so
|
|
# cp testfile52-32.so testfile52-32.prelink.so
|
|
# prelink -N testfile52-32.prelink.so
|
|
# cp testfile52-32.so testfile52-32.noshdrs.so
|
|
# prelink -r 0x42000000 testfile52-32.noshdrs.so
|
|
# eu-strip --remove-comment --strip-sections testfile52-32.noshdrs.so
|
|
|
|
testfiles testfile52-32.so testfile52-32.so.debug
|
|
testfiles testfile52-32.prelink.so testfile52-32.noshdrs.so
|
|
tempfiles testmaps52-32 testfile52-32.noshdrs.so.debug
|
|
ln -snf testfile52-32.so.debug testfile52-32.noshdrs.so.debug
|
|
|
|
cat > testmaps52-32 <<EOF
|
|
00111000-00112000 r-xp 00000000 fd:01 1 `pwd`/testfile52-32.so
|
|
00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile52-32.so
|
|
41000000-41001000 r-xp 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so
|
|
41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so
|
|
42000000-42001000 r-xp 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so
|
|
42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so
|
|
EOF
|
|
|
|
# Prior to commit 1743d7f, libdwfl would fail on the second address,
|
|
# because it didn't notice that prelink added a 0x20-byte offset from
|
|
# what the .debug file reports.
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-32 \
|
|
0x11140c 0x4100042d 0x4200040e <<\EOF
|
|
foo
|
|
/home/jistone/src/elfutils/tests/testfile52-32.c:2
|
|
foo+0x1
|
|
/home/jistone/src/elfutils/tests/testfile52-32.c:2
|
|
foo+0x2
|
|
/home/jistone/src/elfutils/tests/testfile52-32.c:2
|
|
EOF
|
|
|
|
# Repeat testfile52 for -m64. The particular REL>RELA issue doesn't exist, but
|
|
# we'll make sure the rest works anyway.
|
|
testfiles testfile52-64.so testfile52-64.so.debug
|
|
testfiles testfile52-64.prelink.so testfile52-64.noshdrs.so
|
|
tempfiles testmaps52-64 testfile52-64.noshdrs.so.debug
|
|
ln -snf testfile52-64.so.debug testfile52-64.noshdrs.so.debug
|
|
|
|
cat > testmaps52-64 <<EOF
|
|
1000000000-1000001000 r-xp 00000000 fd:11 1 `pwd`/testfile52-64.so
|
|
1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile52-64.so
|
|
1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile52-64.so
|
|
3000000000-3000001000 r-xp 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so
|
|
3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile52-64.prelink.so
|
|
3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so
|
|
3800000000-3800001000 r-xp 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
|
|
3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
|
|
3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
|
|
EOF
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-64 \
|
|
0x100000056c 0x300000056d 0x380000056e <<\EOF
|
|
foo
|
|
/home/jistone/src/elfutils/tests/testfile52-64.c:2
|
|
foo+0x1
|
|
/home/jistone/src/elfutils/tests/testfile52-64.c:2
|
|
foo+0x2
|
|
/home/jistone/src/elfutils/tests/testfile52-64.c:2
|
|
EOF
|
|
|
|
|
|
# testfile53.c:
|
|
# char foo[0x1000];
|
|
# int main() { return 0; }
|
|
#
|
|
# gcc -m32 -g testfile53-32.c -o testfile53-32
|
|
# eu-strip -f testfile53-32.debug testfile53-32
|
|
# cp testfile53-32 testfile53-32.prelink
|
|
# prelink -N testfile53-32.prelink
|
|
testfiles testfile53-32 testfile53-32.debug testfile53-32.prelink
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32 0x8048394 0x8048395 <<\EOF
|
|
main
|
|
/home/jistone/src/elfutils/tests/testfile53-32.c:2
|
|
main+0x1
|
|
/home/jistone/src/elfutils/tests/testfile53-32.c:2
|
|
EOF
|
|
|
|
# prelink shuffled some of the sections, but .text is in the same place.
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32.prelink 0x8048396 0x8048397 <<\EOF
|
|
main+0x2
|
|
/home/jistone/src/elfutils/tests/testfile53-32.c:2
|
|
main+0x3
|
|
/home/jistone/src/elfutils/tests/testfile53-32.c:2
|
|
EOF
|
|
|
|
# Repeat testfile53 in 64-bit, except use foo[0x800] to achieve the same
|
|
# prelink section shuffling.
|
|
testfiles testfile53-64 testfile53-64.debug testfile53-64.prelink
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64 0x400474 0x400475 <<\EOF
|
|
main
|
|
/home/jistone/src/elfutils/tests/testfile53-64.c:2
|
|
main+0x1
|
|
/home/jistone/src/elfutils/tests/testfile53-64.c:2
|
|
EOF
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64.prelink 0x400476 0x400477 <<\EOF
|
|
main+0x2
|
|
/home/jistone/src/elfutils/tests/testfile53-64.c:2
|
|
main+0x3
|
|
/home/jistone/src/elfutils/tests/testfile53-64.c:2
|
|
EOF
|
|
|
|
|
|
# testfile54.c:
|
|
# extern void * stdin;
|
|
# static void * pstdin = &stdin;
|
|
# void * const foo = &pstdin;
|
|
#
|
|
# gcc -m32 -g -shared -nostartfiles testfile54-32.c -o testfile54-32.so
|
|
# eu-strip -f testfile54-32.so.debug testfile54-32.so
|
|
# cp testfile54-32.so testfile54-32.prelink.so
|
|
# prelink -N testfile54-32.prelink.so
|
|
# cp testfile54-32.so testfile54-32.noshdrs.so
|
|
# prelink -r 0x42000000 testfile54-32.noshdrs.so
|
|
# eu-strip --remove-comment --strip-sections testfile54-32.noshdrs.so
|
|
testfiles testfile54-32.so testfile54-32.so.debug
|
|
testfiles testfile54-32.prelink.so testfile54-32.noshdrs.so
|
|
tempfiles testmaps54-32
|
|
|
|
# Note we have no testfile54-32.noshdrs.so.debug link here, so
|
|
# this is testing finding the symbols in .dynsym via PT_DYNAMIC.
|
|
|
|
cat > testmaps54-32 <<EOF
|
|
00111000-00112000 r--p 00000000 fd:01 1 `pwd`/testfile54-32.so
|
|
00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile54-32.so
|
|
41000000-41001000 r--p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so
|
|
41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so
|
|
42000000-42001000 r--p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so
|
|
42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so
|
|
EOF
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-32 \
|
|
0x1111fc 0x1122a4 0x410001fd 0x410012a5 0x420001fe <<\EOF
|
|
foo
|
|
??:0
|
|
pstdin
|
|
??:0
|
|
foo+0x1
|
|
??:0
|
|
pstdin+0x1
|
|
??:0
|
|
foo+0x2
|
|
??:0
|
|
EOF
|
|
|
|
# Repeat testfile64 in 64-bit
|
|
testfiles testfile54-64.so testfile54-64.so.debug
|
|
testfiles testfile54-64.prelink.so testfile54-64.noshdrs.so
|
|
tempfiles testmaps54-64
|
|
|
|
# Note we have no testfile54-64.noshdrs.so.debug link here, so
|
|
# this is testing finding the symbols in .dynsym via PT_DYNAMIC.
|
|
|
|
cat > testmaps54-64 <<EOF
|
|
1000000000-1000001000 r--p 00000000 fd:11 1 `pwd`/testfile54-64.so
|
|
1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile54-64.so
|
|
1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile54-64.so
|
|
3000000000-3000001000 r--p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so
|
|
3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile54-64.prelink.so
|
|
3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so
|
|
3800000000-3800001000 r--p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
|
|
3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
|
|
3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
|
|
EOF
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-64 \
|
|
0x10000002f8 0x1000200448 0x30000002f9 0x3000200449 0x38000002fa <<\EOF
|
|
foo
|
|
??:0
|
|
pstdin
|
|
??:0
|
|
foo+0x1
|
|
??:0
|
|
pstdin+0x1
|
|
??:0
|
|
foo+0x2
|
|
??:0
|
|
EOF
|
|
|
|
|
|
# testfile55.c:
|
|
# extern void *stdin;
|
|
# int main() { return !stdin; }
|
|
#
|
|
# gcc -m32 -g testfile55-32.c -o testfile55-32
|
|
# eu-strip -f testfile55-32.debug testfile55-32
|
|
# cp testfile55-32 testfile55-32.prelink
|
|
# prelink -N testfile55-32.prelink
|
|
testfiles testfile55-32 testfile55-32.debug testfile55-32.prelink
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32 0x80483b4 0x80483b5 <<\EOF
|
|
main
|
|
/home/jistone/src/elfutils/tests/testfile55-32.c:2
|
|
main+0x1
|
|
/home/jistone/src/elfutils/tests/testfile55-32.c:2
|
|
EOF
|
|
|
|
# prelink splits .bss into .dynbss+.bss, so the start of .bss changes, but the
|
|
# total size remains the same, and .text doesn't move at all.
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32.prelink 0x80483b6 0x80483b7 <<\EOF
|
|
main+0x2
|
|
/home/jistone/src/elfutils/tests/testfile55-32.c:2
|
|
main+0x3
|
|
/home/jistone/src/elfutils/tests/testfile55-32.c:2
|
|
EOF
|
|
|
|
# Repeat testfile55 in 64-bit
|
|
testfiles testfile55-64 testfile55-64.debug testfile55-64.prelink
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64 0x4004b4 0x4004b5 <<\EOF
|
|
main
|
|
/home/jistone/src/elfutils/tests/testfile55-64.c:2
|
|
main+0x1
|
|
/home/jistone/src/elfutils/tests/testfile55-64.c:2
|
|
EOF
|
|
|
|
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64.prelink 0x4004b6 0x4004b7 <<\EOF
|
|
main+0x2
|
|
/home/jistone/src/elfutils/tests/testfile55-64.c:2
|
|
main+0x3
|
|
/home/jistone/src/elfutils/tests/testfile55-64.c:2
|
|
EOF
|