Blame tests/run-prelink-addr-test.sh

Packit Service 97d2fb
#! /bin/sh
Packit Service 97d2fb
# Copyright (C) 2011-2013 Red Hat, Inc.
Packit Service 97d2fb
# This file is part of elfutils.
Packit Service 97d2fb
#
Packit Service 97d2fb
# This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
# it under the terms of the GNU General Public License as published by
Packit Service 97d2fb
# the Free Software Foundation; either version 3 of the License, or
Packit Service 97d2fb
# (at your option) any later version.
Packit Service 97d2fb
#
Packit Service 97d2fb
# elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
# WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 97d2fb
# GNU General Public License for more details.
Packit Service 97d2fb
#
Packit Service 97d2fb
# You should have received a copy of the GNU General Public License
Packit Service 97d2fb
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 97d2fb
Packit Service 97d2fb
. $srcdir/test-subr.sh
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
# testfile52.c:
Packit Service 97d2fb
#   #include <stdlib.h>
Packit Service 97d2fb
#   int foo() { exit(0); }
Packit Service 97d2fb
#
Packit Service 97d2fb
# gcc -m32 -g -shared testfile52-32.c -o testfile52-32.so
Packit Service 97d2fb
# eu-strip -f testfile52-32.so.debug testfile52-32.so
Packit Service 97d2fb
# cp testfile52-32.so testfile52-32.prelink.so
Packit Service 97d2fb
# prelink -N testfile52-32.prelink.so
Packit Service 97d2fb
# cp testfile52-32.so testfile52-32.noshdrs.so
Packit Service 97d2fb
# prelink -r 0x42000000 testfile52-32.noshdrs.so
Packit Service 97d2fb
# eu-strip --remove-comment --strip-sections testfile52-32.noshdrs.so
Packit Service 97d2fb
Packit Service 97d2fb
testfiles testfile52-32.so testfile52-32.so.debug
Packit Service 97d2fb
testfiles testfile52-32.prelink.so testfile52-32.noshdrs.so
Packit Service 97d2fb
tempfiles testmaps52-32 testfile52-32.noshdrs.so.debug
Packit Service 97d2fb
ln -snf testfile52-32.so.debug testfile52-32.noshdrs.so.debug
Packit Service 97d2fb
Packit Service 97d2fb
cat > testmaps52-32 <
Packit Service 97d2fb
00111000-00112000 r-xp 00000000 fd:01 1 `pwd`/testfile52-32.so
Packit Service 97d2fb
00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile52-32.so
Packit Service 97d2fb
41000000-41001000 r-xp 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so
Packit Service 97d2fb
41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile52-32.prelink.so
Packit Service 97d2fb
42000000-42001000 r-xp 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so
Packit Service 97d2fb
42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile52-32.noshdrs.so
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# Prior to commit 1743d7f, libdwfl would fail on the second address,
Packit Service 97d2fb
# because it didn't notice that prelink added a 0x20-byte offset from
Packit Service 97d2fb
# what the .debug file reports.
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-32 \
Packit Service 97d2fb
    0x11140c 0x4100042d 0x4200040e <<\EOF
Packit Service 97d2fb
foo
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-32.c:2
Packit Service 97d2fb
foo+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-32.c:2
Packit Service 97d2fb
foo+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-32.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# Repeat testfile52 for -m64.  The particular REL>RELA issue doesn't exist, but
Packit Service 97d2fb
# we'll make sure the rest works anyway.
Packit Service 97d2fb
testfiles testfile52-64.so testfile52-64.so.debug
Packit Service 97d2fb
testfiles testfile52-64.prelink.so testfile52-64.noshdrs.so
Packit Service 97d2fb
tempfiles testmaps52-64 testfile52-64.noshdrs.so.debug
Packit Service 97d2fb
ln -snf testfile52-64.so.debug testfile52-64.noshdrs.so.debug
Packit Service 97d2fb
Packit Service 97d2fb
cat > testmaps52-64 <
Packit Service 97d2fb
1000000000-1000001000 r-xp 00000000 fd:11 1 `pwd`/testfile52-64.so
Packit Service 97d2fb
1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile52-64.so
Packit Service 97d2fb
1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile52-64.so
Packit Service 97d2fb
3000000000-3000001000 r-xp 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so
Packit Service 97d2fb
3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile52-64.prelink.so
Packit Service 97d2fb
3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile52-64.prelink.so
Packit Service 97d2fb
3800000000-3800001000 r-xp 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
Packit Service 97d2fb
3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
Packit Service 97d2fb
3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile52-64.noshdrs.so
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps52-64 \
Packit Service 97d2fb
    0x100000056c 0x300000056d 0x380000056e <<\EOF
Packit Service 97d2fb
foo
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-64.c:2
Packit Service 97d2fb
foo+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-64.c:2
Packit Service 97d2fb
foo+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile52-64.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
# testfile53.c:
Packit Service 97d2fb
#   char foo[0x1000];
Packit Service 97d2fb
#   int main() { return 0; }
Packit Service 97d2fb
#
Packit Service 97d2fb
# gcc -m32 -g testfile53-32.c -o testfile53-32
Packit Service 97d2fb
# eu-strip -f testfile53-32.debug testfile53-32
Packit Service 97d2fb
# cp testfile53-32 testfile53-32.prelink
Packit Service 97d2fb
# prelink -N testfile53-32.prelink
Packit Service 97d2fb
testfiles testfile53-32 testfile53-32.debug testfile53-32.prelink
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32 0x8048394 0x8048395 <<\EOF
Packit Service 97d2fb
main
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-32.c:2
Packit Service 97d2fb
main+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-32.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# prelink shuffled some of the sections, but .text is in the same place.
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-32.prelink 0x8048396 0x8048397 <<\EOF
Packit Service 97d2fb
main+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-32.c:2
Packit Service 97d2fb
main+0x3
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-32.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# Repeat testfile53 in 64-bit, except use foo[0x800] to achieve the same
Packit Service 97d2fb
# prelink section shuffling.
Packit Service 97d2fb
testfiles testfile53-64 testfile53-64.debug testfile53-64.prelink
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64 0x400474 0x400475 <<\EOF
Packit Service 97d2fb
main
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-64.c:2
Packit Service 97d2fb
main+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-64.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile53-64.prelink 0x400476 0x400477 <<\EOF
Packit Service 97d2fb
main+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-64.c:2
Packit Service 97d2fb
main+0x3
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile53-64.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
# testfile54.c:
Packit Service 97d2fb
#   extern void * stdin;
Packit Service 97d2fb
#   static void * pstdin = &stdin;
Packit Service 97d2fb
#   void * const foo = &pstdin;
Packit Service 97d2fb
#
Packit Service 97d2fb
# gcc -m32 -g -shared -nostartfiles testfile54-32.c -o testfile54-32.so
Packit Service 97d2fb
# eu-strip -f testfile54-32.so.debug testfile54-32.so
Packit Service 97d2fb
# cp testfile54-32.so testfile54-32.prelink.so
Packit Service 97d2fb
# prelink -N testfile54-32.prelink.so
Packit Service 97d2fb
# cp testfile54-32.so testfile54-32.noshdrs.so
Packit Service 97d2fb
# prelink -r 0x42000000 testfile54-32.noshdrs.so
Packit Service 97d2fb
# eu-strip --remove-comment --strip-sections testfile54-32.noshdrs.so
Packit Service 97d2fb
testfiles testfile54-32.so testfile54-32.so.debug
Packit Service 97d2fb
testfiles testfile54-32.prelink.so testfile54-32.noshdrs.so
Packit Service 97d2fb
tempfiles testmaps54-32
Packit Service 97d2fb
Packit Service 97d2fb
# Note we have no testfile54-32.noshdrs.so.debug link here, so
Packit Service 97d2fb
# this is testing finding the symbols in .dynsym via PT_DYNAMIC.
Packit Service 97d2fb
Packit Service 97d2fb
cat > testmaps54-32 <
Packit Service 97d2fb
00111000-00112000 r--p 00000000 fd:01 1 `pwd`/testfile54-32.so
Packit Service 97d2fb
00112000-00113000 rw-p 00000000 fd:01 1 `pwd`/testfile54-32.so
Packit Service 97d2fb
41000000-41001000 r--p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so
Packit Service 97d2fb
41001000-41002000 rw-p 00000000 fd:01 2 `pwd`/testfile54-32.prelink.so
Packit Service 97d2fb
42000000-42001000 r--p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so
Packit Service 97d2fb
42001000-42002000 rw-p 00000000 fd:01 3 `pwd`/testfile54-32.noshdrs.so
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-32 \
Packit Service 97d2fb
    0x1111fc 0x1122a4 0x410001fd 0x410012a5 0x420001fe <<\EOF
Packit Service 97d2fb
foo
Packit Service 97d2fb
??:0
Packit Service 97d2fb
pstdin
Packit Service 97d2fb
??:0
Packit Service 97d2fb
foo+0x1
Packit Service 97d2fb
??:0
Packit Service 97d2fb
pstdin+0x1
Packit Service 97d2fb
??:0
Packit Service 97d2fb
foo+0x2
Packit Service 97d2fb
??:0
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# Repeat testfile64 in 64-bit
Packit Service 97d2fb
testfiles testfile54-64.so testfile54-64.so.debug
Packit Service 97d2fb
testfiles testfile54-64.prelink.so testfile54-64.noshdrs.so
Packit Service 97d2fb
tempfiles testmaps54-64
Packit Service 97d2fb
Packit Service 97d2fb
# Note we have no testfile54-64.noshdrs.so.debug link here, so
Packit Service 97d2fb
# this is testing finding the symbols in .dynsym via PT_DYNAMIC.
Packit Service 97d2fb
Packit Service 97d2fb
cat > testmaps54-64 <
Packit Service 97d2fb
1000000000-1000001000 r--p 00000000 fd:11 1 `pwd`/testfile54-64.so
Packit Service 97d2fb
1000001000-1000200000 ---p 00001000 fd:11 1 `pwd`/testfile54-64.so
Packit Service 97d2fb
1000200000-1000201000 rw-p 00000000 fd:11 1 `pwd`/testfile54-64.so
Packit Service 97d2fb
3000000000-3000001000 r--p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so
Packit Service 97d2fb
3000001000-3000200000 ---p 00001000 fd:11 2 `pwd`/testfile54-64.prelink.so
Packit Service 97d2fb
3000200000-3000201000 rw-p 00000000 fd:11 2 `pwd`/testfile54-64.prelink.so
Packit Service 97d2fb
3800000000-3800001000 r--p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
Packit Service 97d2fb
3800001000-3800200000 ---p 00001000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
Packit Service 97d2fb
3800200000-3800201000 rw-p 00000000 fd:11 3 `pwd`/testfile54-64.noshdrs.so
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -M testmaps54-64 \
Packit Service 97d2fb
    0x10000002f8 0x1000200448 0x30000002f9 0x3000200449 0x38000002fa <<\EOF
Packit Service 97d2fb
foo
Packit Service 97d2fb
??:0
Packit Service 97d2fb
pstdin
Packit Service 97d2fb
??:0
Packit Service 97d2fb
foo+0x1
Packit Service 97d2fb
??:0
Packit Service 97d2fb
pstdin+0x1
Packit Service 97d2fb
??:0
Packit Service 97d2fb
foo+0x2
Packit Service 97d2fb
??:0
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
# testfile55.c:
Packit Service 97d2fb
#   extern void *stdin;
Packit Service 97d2fb
#   int main() { return !stdin; }
Packit Service 97d2fb
#
Packit Service 97d2fb
# gcc -m32 -g testfile55-32.c -o testfile55-32
Packit Service 97d2fb
# eu-strip -f testfile55-32.debug testfile55-32
Packit Service 97d2fb
# cp testfile55-32 testfile55-32.prelink
Packit Service 97d2fb
# prelink -N testfile55-32.prelink
Packit Service 97d2fb
testfiles testfile55-32 testfile55-32.debug testfile55-32.prelink
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32 0x80483b4 0x80483b5 <<\EOF
Packit Service 97d2fb
main
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-32.c:2
Packit Service 97d2fb
main+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-32.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# prelink splits .bss into .dynbss+.bss, so the start of .bss changes, but the
Packit Service 97d2fb
# total size remains the same, and .text doesn't move at all.
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-32.prelink 0x80483b6 0x80483b7 <<\EOF
Packit Service 97d2fb
main+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-32.c:2
Packit Service 97d2fb
main+0x3
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-32.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
# Repeat testfile55 in 64-bit
Packit Service 97d2fb
testfiles testfile55-64 testfile55-64.debug testfile55-64.prelink
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64 0x4004b4 0x4004b5 <<\EOF
Packit Service 97d2fb
main
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-64.c:2
Packit Service 97d2fb
main+0x1
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-64.c:2
Packit Service 97d2fb
EOF
Packit Service 97d2fb
Packit Service 97d2fb
testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile55-64.prelink 0x4004b6 0x4004b7 <<\EOF
Packit Service 97d2fb
main+0x2
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-64.c:2
Packit Service 97d2fb
main+0x3
Packit Service 97d2fb
/home/jistone/src/elfutils/tests/testfile55-64.c:2
Packit Service 97d2fb
EOF