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