1#! /bin/sh 2# Copyright (C) 2013 Red Hat, Inc. 3# This file is part of elfutils. 4# 5# This file is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 3 of the License, or 8# (at your option) any later version. 9# 10# elfutils is distributed in the hope that it will be useful, but 11# WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18. $srcdir/test-subr.sh 19 20# Tests readelf --debug-dump=aranges and --debug-dump=decodedaranges 21# 22# - foobarbaz.h 23# 24# int bar (); 25# int baz (int i); 26# 27# - bar.c 28# 29# #include "foobarbaz.h" 30# 31# static int bi; 32# 33# static int 34# barbaz (int i) 35# { 36# return i * 2 - 1; 37# } 38# 39# __attribute__ ((constructor)) void 40# nobar () 41# { 42# bi = 1; 43# } 44# 45# int 46# bar () 47# { 48# bi++; 49# return barbaz (bi); 50# } 51# 52# - foo.c 53# 54# include "foobarbaz.h" 55# 56# static int fi = 0; 57# 58# static int 59# foo (int i, int j) 60# { 61# if (i > j) 62# return i - j + fi; 63# else 64# return (2 * j) - i + fi; 65# } 66# 67# int 68# main (int argc, char **argv) 69# { 70# int a = bar (); 71# int b = baz (a + argc); 72# int r = foo (a, b) - 1; 73# 74# return r - 48; 75# } 76# 77# - baz.c 78# include "foobarbaz.h" 79# 80# static int bj; 81# 82# static int 83# bazbaz (int j) 84# { 85# return bj * j - bar (); 86# } 87# 88# __attribute__ ((constructor)) void 89# nobaz () 90# { 91# bj = 1; 92# } 93# 94# int 95# baz (int i) 96# { 97# if (i < 0) 98# return bazbaz (i); 99# else 100# { 101# while (i-- > 0) 102# bj += bar (); 103# } 104# return bazbaz (i); 105# } 106# 107# gcc -g -O2 -m32 -c baz.c 108# gcc -g -O2 -m32 -c bar.c 109# gcc -g -O2 -m32 -c foo.c 110# gcc -g -O2 -m32 -o testfilefoobarbaz foo.o bar.o baz.o 111 112testfiles testfilefoobarbaz 113 114testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=aranges testfilefoobarbaz <<EOF 115 116DWARF section [27] '.debug_aranges' at offset 0x1044: 117 118Table at offset 0: 119 120 Length: 28 121 DWARF version: 2 122 CU offset: 0 123 Address size: 4 124 Segment size: 0 125 126 0x080482f0 <main>..0x08048323 <main+0x33> 127 128Table at offset 32: 129 130 Length: 36 131 DWARF version: 2 132 CU offset: 136 133 Address size: 4 134 Segment size: 0 135 136 0x08048440 <bar>..0x08048451 <bar+0x11> 137 0x08048330 <nobar>..0x0804833a <nobar+0xa> 138 139Table at offset 72: 140 141 Length: 36 142 DWARF version: 2 143 CU offset: 1d1 144 Address size: 4 145 Segment size: 0 146 147 0x08048460 <baz>..0x080484bb <baz+0x5b> 148 0x08048340 <nobaz>..0x0804834a <nobaz+0xa> 149EOF 150 151testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedaranges testfilefoobarbaz <<\EOF 152 153DWARF section [27] '.debug_aranges' at offset 0x1044 contains 5 entries: 154 [0] start: 0x080482f0, length: 52, CU DIE offset: 11 155 [1] start: 0x08048330, length: 11, CU DIE offset: 321 156 [2] start: 0x08048340, length: 11, CU DIE offset: 476 157 [3] start: 0x08048440, length: 18, CU DIE offset: 321 158 [4] start: 0x08048460, length: 92, CU DIE offset: 476 159EOF 160 161exit 0 162