#! /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