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