diff options
Diffstat (limited to 'tests/run-readelf-aranges.sh')
-rwxr-xr-x | tests/run-readelf-aranges.sh | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/tests/run-readelf-aranges.sh b/tests/run-readelf-aranges.sh new file mode 100755 index 00000000..3fc3c546 --- /dev/null +++ b/tests/run-readelf-aranges.sh @@ -0,0 +1,161 @@ +#! /bin/sh +# Copyright (C) 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 + +# Tests readelf --debug-dump=aranges and --debug-dump=decodedaranges +# +# - foobarbaz.h +# +# int bar (); +# int baz (int i); +# +# - bar.c +# +# #include "foobarbaz.h" +# +# static int bi; +# +# static int +# barbaz (int i) +# { +# return i * 2 - 1; +# } +# +# __attribute__ ((constructor)) void +# nobar () +# { +# bi = 1; +# } +# +# int +# bar () +# { +# bi++; +# return barbaz (bi); +# } +# +# - foo.c +# +# include "foobarbaz.h" +# +# static int fi = 0; +# +# static int +# foo (int i, int j) +# { +# if (i > j) +# return i - j + fi; +# else +# return (2 * j) - i + fi; +# } +# +# int +# main (int argc, char **argv) +# { +# int a = bar (); +# int b = baz (a + argc); +# int r = foo (a, b) - 1; +# +# return r - 48; +# } +# +# - baz.c +# include "foobarbaz.h" +# +# static int bj; +# +# static int +# bazbaz (int j) +# { +# return bj * j - bar (); +# } +# +# __attribute__ ((constructor)) void +# nobaz () +# { +# bj = 1; +# } +# +# int +# baz (int i) +# { +# if (i < 0) +# return bazbaz (i); +# else +# { +# while (i-- > 0) +# bj += bar (); +# } +# return bazbaz (i); +# } +# +# gcc -g -O2 -m32 -c baz.c +# gcc -g -O2 -m32 -c bar.c +# gcc -g -O2 -m32 -c foo.c +# gcc -g -O2 -m32 -o testfilefoobarbaz foo.o bar.o baz.o + +testfiles testfilefoobarbaz + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=aranges testfilefoobarbaz <<EOF + +DWARF section [27] '.debug_aranges' at offset 0x1044: + +Table at offset 0: + + Length: 28 + DWARF version: 2 + CU offset: 0 + Address size: 4 + Segment size: 0 + + 0x080482f0 <main>..0x08048323 <main+0x33> + +Table at offset 32: + + Length: 36 + DWARF version: 2 + CU offset: 136 + Address size: 4 + Segment size: 0 + + 0x08048440 <bar>..0x08048451 <bar+0x11> + 0x08048330 <nobar>..0x0804833a <nobar+0xa> + +Table at offset 72: + + Length: 36 + DWARF version: 2 + CU offset: 1d1 + Address size: 4 + Segment size: 0 + + 0x08048460 <baz>..0x080484bb <baz+0x5b> + 0x08048340 <nobaz>..0x0804834a <nobaz+0xa> +EOF + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedaranges testfilefoobarbaz <<\EOF + +DWARF section [27] '.debug_aranges' at offset 0x1044 contains 5 entries: + [0] start: 0x080482f0, length: 52, CU DIE offset: 11 + [1] start: 0x08048330, length: 11, CU DIE offset: 321 + [2] start: 0x08048340, length: 11, CU DIE offset: 476 + [3] start: 0x08048440, length: 18, CU DIE offset: 321 + [4] start: 0x08048460, length: 92, CU DIE offset: 476 +EOF + +exit 0 |