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# // g++ x.cpp -g -fPIC -olibx.so -shared -O3 -fvisibility=hidden 21*7304104dSAndroid Build Coastguard Worker# 22*7304104dSAndroid Build Coastguard Worker# void foobar() 23*7304104dSAndroid Build Coastguard Worker# { 24*7304104dSAndroid Build Coastguard Worker# __asm__ ( "nop" ::: ); 25*7304104dSAndroid Build Coastguard Worker# } 26*7304104dSAndroid Build Coastguard Worker# 27*7304104dSAndroid Build Coastguard Worker# void fubar() 28*7304104dSAndroid Build Coastguard Worker# { 29*7304104dSAndroid Build Coastguard Worker# __asm__ ( "nop" ::: ); 30*7304104dSAndroid Build Coastguard Worker# } 31*7304104dSAndroid Build Coastguard Worker# 32*7304104dSAndroid Build Coastguard Worker# void bar() 33*7304104dSAndroid Build Coastguard Worker# { 34*7304104dSAndroid Build Coastguard Worker# foobar(); 35*7304104dSAndroid Build Coastguard Worker# } 36*7304104dSAndroid Build Coastguard Worker# 37*7304104dSAndroid Build Coastguard Worker# void baz() 38*7304104dSAndroid Build Coastguard Worker# { 39*7304104dSAndroid Build Coastguard Worker# fubar(); 40*7304104dSAndroid Build Coastguard Worker# } 41*7304104dSAndroid Build Coastguard Worker# 42*7304104dSAndroid Build Coastguard Worker# void foo() 43*7304104dSAndroid Build Coastguard Worker# { 44*7304104dSAndroid Build Coastguard Worker# bar(); 45*7304104dSAndroid Build Coastguard Worker# baz(); 46*7304104dSAndroid Build Coastguard Worker# } 47*7304104dSAndroid Build Coastguard Worker# 48*7304104dSAndroid Build Coastguard Worker# void fu() 49*7304104dSAndroid Build Coastguard Worker# { 50*7304104dSAndroid Build Coastguard Worker# __asm__ ( "nop" ::: ); 51*7304104dSAndroid Build Coastguard Worker# fubar(); 52*7304104dSAndroid Build Coastguard Worker# foobar(); 53*7304104dSAndroid Build Coastguard Worker# } 54*7304104dSAndroid Build Coastguard Worker 55*7304104dSAndroid Build Coastguard Workertestfiles testfile-inlines 56*7304104dSAndroid Build Coastguard Worker 57*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005a0 <<\EOF 58*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 59*7304104dSAndroid Build Coastguard WorkerEOF 60*7304104dSAndroid Build Coastguard Worker 61*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005a1 <<\EOF 62*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:6 63*7304104dSAndroid Build Coastguard WorkerEOF 64*7304104dSAndroid Build Coastguard Worker 65*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005b0 <<\EOF 66*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 67*7304104dSAndroid Build Coastguard WorkerEOF 68*7304104dSAndroid Build Coastguard Worker 69*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005b1 <<\EOF 70*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:11 71*7304104dSAndroid Build Coastguard WorkerEOF 72*7304104dSAndroid Build Coastguard Worker 73*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005c0 <<\EOF 74*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 75*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 76*7304104dSAndroid Build Coastguard WorkerEOF 77*7304104dSAndroid Build Coastguard Worker 78*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005d0 <<\EOF 79*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 80*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 81*7304104dSAndroid Build Coastguard WorkerEOF 82*7304104dSAndroid Build Coastguard Worker 83*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005e0 <<\EOF 84*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 85*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 86*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:25 87*7304104dSAndroid Build Coastguard WorkerEOF 88*7304104dSAndroid Build Coastguard Worker 89*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005e1 <<\EOF 90*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 91*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 92*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:26 93*7304104dSAndroid Build Coastguard WorkerEOF 94*7304104dSAndroid Build Coastguard Worker 95*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005f1 <<\EOF 96*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 97*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:32 98*7304104dSAndroid Build Coastguard WorkerEOF 99*7304104dSAndroid Build Coastguard Worker 100*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -i -e testfile-inlines 0x00000000000005f2 <<\EOF 101*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 102*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:33 103*7304104dSAndroid Build Coastguard WorkerEOF 104*7304104dSAndroid Build Coastguard Worker 105*7304104dSAndroid Build Coastguard Worker# All together now (plus function names). 106*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -f -i -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF 107*7304104dSAndroid Build Coastguard Workerfoobar 108*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 109*7304104dSAndroid Build Coastguard Workerfoobar 110*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:6 111*7304104dSAndroid Build Coastguard Workerfubar 112*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 113*7304104dSAndroid Build Coastguard Workerfubar 114*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:11 115*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:15 in _Z3barv 116*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 117*7304104dSAndroid Build Coastguard Workerbar 118*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 119*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:20 in _Z3bazv 120*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 121*7304104dSAndroid Build Coastguard Workerbaz 122*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 123*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:15 in _Z3foov 124*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 125*7304104dSAndroid Build Coastguard Workerbar 126*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 127*7304104dSAndroid Build Coastguard Worker_Z3foov 128*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:25 129*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:20 in _Z3foov 130*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 131*7304104dSAndroid Build Coastguard Workerbaz 132*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 133*7304104dSAndroid Build Coastguard Worker_Z3foov 134*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:26 135*7304104dSAndroid Build Coastguard Worker_Z2fuv 136*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:31 137*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:32 in _Z2fuv 138*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 139*7304104dSAndroid Build Coastguard Worker_Z2fuv 140*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:32 141*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:33 in _Z2fuv 142*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 143*7304104dSAndroid Build Coastguard Worker_Z2fuv 144*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:33 145*7304104dSAndroid Build Coastguard WorkerEOF 146*7304104dSAndroid Build Coastguard Worker 147*7304104dSAndroid Build Coastguard Worker# All together now (plus function names plus addresses). 148*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line -a -f -i -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF 149*7304104dSAndroid Build Coastguard Worker0x00000000000005a0 150*7304104dSAndroid Build Coastguard Workerfoobar 151*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 152*7304104dSAndroid Build Coastguard Worker0x00000000000005a1 153*7304104dSAndroid Build Coastguard Workerfoobar 154*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:6 155*7304104dSAndroid Build Coastguard Worker0x00000000000005b0 156*7304104dSAndroid Build Coastguard Workerfubar 157*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 158*7304104dSAndroid Build Coastguard Worker0x00000000000005b1 159*7304104dSAndroid Build Coastguard Workerfubar 160*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:11 161*7304104dSAndroid Build Coastguard Worker0x00000000000005c0 162*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:15 in _Z3barv 163*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 164*7304104dSAndroid Build Coastguard Workerbar 165*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 166*7304104dSAndroid Build Coastguard Worker0x00000000000005d0 167*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:20 in _Z3bazv 168*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 169*7304104dSAndroid Build Coastguard Workerbaz 170*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 171*7304104dSAndroid Build Coastguard Worker0x00000000000005e0 172*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:15 in _Z3foov 173*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 174*7304104dSAndroid Build Coastguard Workerbar 175*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:15 176*7304104dSAndroid Build Coastguard Worker_Z3foov 177*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:25 178*7304104dSAndroid Build Coastguard Worker0x00000000000005e1 179*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:20 in _Z3foov 180*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 181*7304104dSAndroid Build Coastguard Workerbaz 182*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:20 183*7304104dSAndroid Build Coastguard Worker_Z3foov 184*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:26 185*7304104dSAndroid Build Coastguard Worker0x00000000000005f0 186*7304104dSAndroid Build Coastguard Worker_Z2fuv 187*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:31 188*7304104dSAndroid Build Coastguard Worker0x00000000000005f1 189*7304104dSAndroid Build Coastguard Workerfubar inlined at /tmp/x.cpp:32 in _Z2fuv 190*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:10 191*7304104dSAndroid Build Coastguard Worker_Z2fuv 192*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:32 193*7304104dSAndroid Build Coastguard Worker0x00000000000005f2 194*7304104dSAndroid Build Coastguard Workerfoobar inlined at /tmp/x.cpp:33 in _Z2fuv 195*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:5 196*7304104dSAndroid Build Coastguard Worker_Z2fuv 197*7304104dSAndroid Build Coastguard Worker/tmp/x.cpp:33 198*7304104dSAndroid Build Coastguard WorkerEOF 199*7304104dSAndroid Build Coastguard Worker 200*7304104dSAndroid Build Coastguard Worker# All together now (plus function names and addresses and pretty) 201*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line --pretty-print -a -f -i -e testfile-inlines 0x00000000000005a0 0x00000000000005a1 0x00000000000005b0 0x00000000000005b1 0x00000000000005c0 0x00000000000005d0 0x00000000000005e0 0x00000000000005e1 0x00000000000005f0 0x00000000000005f1 0x00000000000005f2 <<\EOF 202*7304104dSAndroid Build Coastguard Worker0x00000000000005a0: foobar at /tmp/x.cpp:5 203*7304104dSAndroid Build Coastguard Worker0x00000000000005a1: foobar at /tmp/x.cpp:6 204*7304104dSAndroid Build Coastguard Worker0x00000000000005b0: fubar at /tmp/x.cpp:10 205*7304104dSAndroid Build Coastguard Worker0x00000000000005b1: fubar at /tmp/x.cpp:11 206*7304104dSAndroid Build Coastguard Worker0x00000000000005c0: foobar at /tmp/x.cpp:5 207*7304104dSAndroid Build Coastguard Worker (inlined by) bar at /tmp/x.cpp:15 208*7304104dSAndroid Build Coastguard Worker0x00000000000005d0: fubar at /tmp/x.cpp:10 209*7304104dSAndroid Build Coastguard Worker (inlined by) baz at /tmp/x.cpp:20 210*7304104dSAndroid Build Coastguard Worker0x00000000000005e0: foobar at /tmp/x.cpp:5 211*7304104dSAndroid Build Coastguard Worker (inlined by) bar at /tmp/x.cpp:15 212*7304104dSAndroid Build Coastguard Worker (inlined by) _Z3foov at /tmp/x.cpp:25 213*7304104dSAndroid Build Coastguard Worker0x00000000000005e1: fubar at /tmp/x.cpp:10 214*7304104dSAndroid Build Coastguard Worker (inlined by) baz at /tmp/x.cpp:20 215*7304104dSAndroid Build Coastguard Worker (inlined by) _Z3foov at /tmp/x.cpp:26 216*7304104dSAndroid Build Coastguard Worker0x00000000000005f0: _Z2fuv at /tmp/x.cpp:31 217*7304104dSAndroid Build Coastguard Worker0x00000000000005f1: fubar at /tmp/x.cpp:10 218*7304104dSAndroid Build Coastguard Worker (inlined by) _Z2fuv at /tmp/x.cpp:32 219*7304104dSAndroid Build Coastguard Worker0x00000000000005f2: foobar at /tmp/x.cpp:5 220*7304104dSAndroid Build Coastguard Worker (inlined by) _Z2fuv at /tmp/x.cpp:33 221*7304104dSAndroid Build Coastguard WorkerEOF 222*7304104dSAndroid Build Coastguard Worker 223*7304104dSAndroid Build Coastguard Worker# == x.cpp == 224*7304104dSAndroid Build Coastguard Worker# g++ x.cpp -g -fPIC -olibx.so -shared -O0 -flto 225*7304104dSAndroid Build Coastguard Worker# 226*7304104dSAndroid Build Coastguard Worker# __attribute__((always_inline)) inline 227*7304104dSAndroid Build Coastguard Worker# int foobar(int i) 228*7304104dSAndroid Build Coastguard Worker# { 229*7304104dSAndroid Build Coastguard Worker# return i + 1; 230*7304104dSAndroid Build Coastguard Worker# } 231*7304104dSAndroid Build Coastguard Worker# 232*7304104dSAndroid Build Coastguard Worker# __attribute__((always_inline)) inline 233*7304104dSAndroid Build Coastguard Worker# int fubar(int i) 234*7304104dSAndroid Build Coastguard Worker# { 235*7304104dSAndroid Build Coastguard Worker# return i + 1; 236*7304104dSAndroid Build Coastguard Worker# } 237*7304104dSAndroid Build Coastguard Worker# 238*7304104dSAndroid Build Coastguard Worker# __attribute__((always_inline)) inline 239*7304104dSAndroid Build Coastguard Worker# int bar(int i) 240*7304104dSAndroid Build Coastguard Worker# { 241*7304104dSAndroid Build Coastguard Worker# return fubar(i++); 242*7304104dSAndroid Build Coastguard Worker# } 243*7304104dSAndroid Build Coastguard Worker# 244*7304104dSAndroid Build Coastguard Worker# __attribute__((always_inline)) inline 245*7304104dSAndroid Build Coastguard Worker# int foo(int i) 246*7304104dSAndroid Build Coastguard Worker# { 247*7304104dSAndroid Build Coastguard Worker# return foobar(i++); 248*7304104dSAndroid Build Coastguard Worker# } 249*7304104dSAndroid Build Coastguard Worker# 250*7304104dSAndroid Build Coastguard Worker# int fu(int i) 251*7304104dSAndroid Build Coastguard Worker# { 252*7304104dSAndroid Build Coastguard Worker# return foo(i++) + bar(i++); 253*7304104dSAndroid Build Coastguard Worker# } 254*7304104dSAndroid Build Coastguard Worker 255*7304104dSAndroid Build Coastguard Workertestfiles testfile-inlines-lto 256*7304104dSAndroid Build Coastguard Worker 257*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_top_builddir}/src/addr2line --pretty -fi -e testfile-inlines-lto 0x1118 0x1137 <<\EOF 258*7304104dSAndroid Build Coastguard Worker_Z6foobari at /tmp/x.cpp:4:14 259*7304104dSAndroid Build Coastguard Worker (inlined by) _Z3fooi at /tmp/x.cpp:22:16 260*7304104dSAndroid Build Coastguard Worker (inlined by) _Z2fui at /tmp/x.cpp:27:13 261*7304104dSAndroid Build Coastguard Worker_Z5fubari at /tmp/x.cpp:10:14 262*7304104dSAndroid Build Coastguard Worker (inlined by) _Z3bari at /tmp/x.cpp:16:15 263*7304104dSAndroid Build Coastguard Worker (inlined by) _Z2fui at /tmp/x.cpp:27:24 264*7304104dSAndroid Build Coastguard WorkerEOF 265*7304104dSAndroid Build Coastguard Worker 266*7304104dSAndroid Build Coastguard Workerexit 0 267