1*7304104dSAndroid Build Coastguard Worker#! /bin/sh 2*7304104dSAndroid Build Coastguard Worker# Copyright (C) 2005, 2013 Red Hat, Inc. 3*7304104dSAndroid Build Coastguard Worker# This file is part of elfutils. 4*7304104dSAndroid Build Coastguard Worker# Written by Ulrich Drepper <[email protected]>, 2005. 5*7304104dSAndroid Build Coastguard Worker# 6*7304104dSAndroid Build Coastguard Worker# This file is free software; you can redistribute it and/or modify 7*7304104dSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 8*7304104dSAndroid Build Coastguard Worker# the Free Software Foundation; either version 3 of the License, or 9*7304104dSAndroid Build Coastguard Worker# (at your option) any later version. 10*7304104dSAndroid Build Coastguard Worker# 11*7304104dSAndroid Build Coastguard Worker# elfutils is distributed in the hope that it will be useful, but 12*7304104dSAndroid Build Coastguard Worker# WITHOUT ANY WARRANTY; without even the implied warranty of 13*7304104dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*7304104dSAndroid Build Coastguard Worker# GNU General Public License for more details. 15*7304104dSAndroid Build Coastguard Worker# 16*7304104dSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 17*7304104dSAndroid Build Coastguard Worker# along with this program. If not, see <http://www.gnu.org/licenses/>. 18*7304104dSAndroid Build Coastguard Worker 19*7304104dSAndroid Build Coastguard Worker. $srcdir/test-subr.sh 20*7304104dSAndroid Build Coastguard Worker 21*7304104dSAndroid Build Coastguard Workertestfiles testfile testfile2 testfile8 22*7304104dSAndroid Build Coastguard Worker 23*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile testfile2 testfile8 <<\EOF 24*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/new-bu/build/ttt/m.c:5:main 25*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/new-bu/build/ttt/b.c:4:bar 26*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/new-bu/build/ttt/f.c:3:foo 27*7304104dSAndroid Build Coastguard Worker/shoggoth/drepper/b.c:4:bar 28*7304104dSAndroid Build Coastguard Worker/shoggoth/drepper/f.c:3:foo 29*7304104dSAndroid Build Coastguard Worker/shoggoth/drepper/m.c:5:main 30*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:107:main 31*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:159:print_version 32*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:173:parse_opt 33*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:201:more_help 34*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:217:process_file 35*7304104dSAndroid Build Coastguard Worker/usr/include/sys/stat.h:375:stat64 36*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:291:crc32_file 37*7304104dSAndroid Build Coastguard Worker/home/drepper/gnu/elfutils/build/src/../../src/strip.c:313:handle_elf 38*7304104dSAndroid Build Coastguard WorkerEOF 39*7304104dSAndroid Build Coastguard Worker 40*7304104dSAndroid Build Coastguard Worker# = nested_funcs.c = 41*7304104dSAndroid Build Coastguard Worker# 42*7304104dSAndroid Build Coastguard Worker# static int 43*7304104dSAndroid Build Coastguard Worker# foo (int x) 44*7304104dSAndroid Build Coastguard Worker# { 45*7304104dSAndroid Build Coastguard Worker# int bar (int y) 46*7304104dSAndroid Build Coastguard Worker# { 47*7304104dSAndroid Build Coastguard Worker# return x - y; 48*7304104dSAndroid Build Coastguard Worker# } 49*7304104dSAndroid Build Coastguard Worker# 50*7304104dSAndroid Build Coastguard Worker# return bar (x * 2); 51*7304104dSAndroid Build Coastguard Worker# } 52*7304104dSAndroid Build Coastguard Worker# 53*7304104dSAndroid Build Coastguard Worker# int 54*7304104dSAndroid Build Coastguard Worker# main (int argc, char ** argv) 55*7304104dSAndroid Build Coastguard Worker# { 56*7304104dSAndroid Build Coastguard Worker# return foo (argc); 57*7304104dSAndroid Build Coastguard Worker# } 58*7304104dSAndroid Build Coastguard Worker# 59*7304104dSAndroid Build Coastguard Worker# gcc -g -o nested_funcs nested_funcs.c 60*7304104dSAndroid Build Coastguard Worker 61*7304104dSAndroid Build Coastguard Worker# = class_func.cxx = 62*7304104dSAndroid Build Coastguard Worker# 63*7304104dSAndroid Build Coastguard Worker# namespace foobar 64*7304104dSAndroid Build Coastguard Worker# { 65*7304104dSAndroid Build Coastguard Worker# class Foo 66*7304104dSAndroid Build Coastguard Worker# { 67*7304104dSAndroid Build Coastguard Worker# public: 68*7304104dSAndroid Build Coastguard Worker# int bar(int x); 69*7304104dSAndroid Build Coastguard Worker# }; 70*7304104dSAndroid Build Coastguard Worker# 71*7304104dSAndroid Build Coastguard Worker# int Foo::bar(int x) { return x - 42; } 72*7304104dSAndroid Build Coastguard Worker# }; 73*7304104dSAndroid Build Coastguard Worker# 74*7304104dSAndroid Build Coastguard Worker# int 75*7304104dSAndroid Build Coastguard Worker# main (int argc, char **argv) 76*7304104dSAndroid Build Coastguard Worker# { 77*7304104dSAndroid Build Coastguard Worker# foobar::Foo foo; 78*7304104dSAndroid Build Coastguard Worker# 79*7304104dSAndroid Build Coastguard Worker# return foo.bar (42); 80*7304104dSAndroid Build Coastguard Worker# } 81*7304104dSAndroid Build Coastguard Worker# 82*7304104dSAndroid Build Coastguard Worker# clang++ -g -o class_func class_func.cxx 83*7304104dSAndroid Build Coastguard Worker 84*7304104dSAndroid Build Coastguard Workertestfiles testfile_nested_funcs testfile_class_func 85*7304104dSAndroid Build Coastguard Worker 86*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile_nested_funcs testfile_class_func <<\EOF 87*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/nested/nested_funcs.c:2:foo 88*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/nested/nested_funcs.c:4:bar 89*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/nested/nested_funcs.c:13:main 90*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/nested/class_func.cxx:6:bar 91*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/nested/class_func.cxx:13:main 92*7304104dSAndroid Build Coastguard WorkerEOF 93*7304104dSAndroid Build Coastguard Worker 94*7304104dSAndroid Build Coastguard Worker# = testfile-lto.h = 95*7304104dSAndroid Build Coastguard Worker# struct t 96*7304104dSAndroid Build Coastguard Worker# { 97*7304104dSAndroid Build Coastguard Worker# int *p; 98*7304104dSAndroid Build Coastguard Worker# int c; 99*7304104dSAndroid Build Coastguard Worker# }; 100*7304104dSAndroid Build Coastguard Worker# 101*7304104dSAndroid Build Coastguard Worker# extern int foo (int i, struct t *t); 102*7304104dSAndroid Build Coastguard Worker 103*7304104dSAndroid Build Coastguard Worker# = testfile-lto-func.c = 104*7304104dSAndroid Build Coastguard Worker# #include "testfile-lto.h" 105*7304104dSAndroid Build Coastguard Worker# 106*7304104dSAndroid Build Coastguard Worker# int 107*7304104dSAndroid Build Coastguard Worker# foo (int i, struct t *t) 108*7304104dSAndroid Build Coastguard Worker# { 109*7304104dSAndroid Build Coastguard Worker# int j, res = 0; 110*7304104dSAndroid Build Coastguard Worker# for (j = 0; j < i && j < t->c; j++) 111*7304104dSAndroid Build Coastguard Worker# res += t->p[j]; 112*7304104dSAndroid Build Coastguard Worker# 113*7304104dSAndroid Build Coastguard Worker# return res; 114*7304104dSAndroid Build Coastguard Worker# } 115*7304104dSAndroid Build Coastguard Worker 116*7304104dSAndroid Build Coastguard Worker# = testfile-lto-main.c = 117*7304104dSAndroid Build Coastguard Worker# #include "testfile-lto.h" 118*7304104dSAndroid Build Coastguard Worker# 119*7304104dSAndroid Build Coastguard Worker# static struct t g; 120*7304104dSAndroid Build Coastguard Worker# 121*7304104dSAndroid Build Coastguard Worker# int 122*7304104dSAndroid Build Coastguard Worker# main (int argc, char **argv) 123*7304104dSAndroid Build Coastguard Worker# { 124*7304104dSAndroid Build Coastguard Worker# int i; 125*7304104dSAndroid Build Coastguard Worker# int j[argc]; 126*7304104dSAndroid Build Coastguard Worker# g.c = argc; 127*7304104dSAndroid Build Coastguard Worker# g.p = j; 128*7304104dSAndroid Build Coastguard Worker# for (i = 0; i < argc; i++) 129*7304104dSAndroid Build Coastguard Worker# j[i] = (int) argv[i][0]; 130*7304104dSAndroid Build Coastguard Worker# return foo (3, &g); 131*7304104dSAndroid Build Coastguard Worker# } 132*7304104dSAndroid Build Coastguard Worker 133*7304104dSAndroid Build Coastguard Worker# Using gcc (GCC) 10.0.1 20200430 (Red Hat 10.0.1-0.13) 134*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-func.c 135*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-main.c 136*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -o testfile-lto-gcc10 testfile-lto-func.o testfile-lto-main.o 137*7304104dSAndroid Build Coastguard Worker 138*7304104dSAndroid Build Coastguard Workertestfiles testfile-lto-gcc10 139*7304104dSAndroid Build Coastguard Worker 140*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile-lto-gcc10 <<\EOF 141*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 142*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-func.c:4:foo 143*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 144*7304104dSAndroid Build Coastguard WorkerEOF 145*7304104dSAndroid Build Coastguard Worker 146*7304104dSAndroid Build Coastguard Worker# Using gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3) 147*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-func.c 148*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-main.c 149*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -o testfile-lto-gcc8 testfile-lto-func.o testfile-lto-main.o 150*7304104dSAndroid Build Coastguard Worker 151*7304104dSAndroid Build Coastguard Workertestfiles testfile-lto-gcc8 152*7304104dSAndroid Build Coastguard Worker 153*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile-lto-gcc8 <<\EOF 154*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-func.c:4:foo 155*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 156*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 157*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-func.c:4:foo 158*7304104dSAndroid Build Coastguard WorkerEOF 159*7304104dSAndroid Build Coastguard Worker 160*7304104dSAndroid Build Coastguard Worker# gcc (GCC) 9.1.1 20190605 (Red Hat 9.1.1-2) 161*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-func.c 162*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -c testfile-lto-main.c 163*7304104dSAndroid Build Coastguard Worker# gcc -g -O2 -flto -o testfile-lto-gcc9 testfile-lto-func.o testfile-lto-main.o 164*7304104dSAndroid Build Coastguard Worker 165*7304104dSAndroid Build Coastguard Workertestfiles testfile-lto-gcc9 166*7304104dSAndroid Build Coastguard Worker 167*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile-lto-gcc9 <<\EOF 168*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 169*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-func.c:4:foo 170*7304104dSAndroid Build Coastguard Worker/home/mark/src/tests/testfile-lto-main.c:6:main 171*7304104dSAndroid Build Coastguard WorkerEOF 172*7304104dSAndroid Build Coastguard Worker 173*7304104dSAndroid Build Coastguard Worker# = dwarf5-line.c = 174*7304104dSAndroid Build Coastguard Worker# int 175*7304104dSAndroid Build Coastguard Worker# main (int argc, char **argv) 176*7304104dSAndroid Build Coastguard Worker# { 177*7304104dSAndroid Build Coastguard Worker# return 0; 178*7304104dSAndroid Build Coastguard Worker# } 179*7304104dSAndroid Build Coastguard Worker 180*7304104dSAndroid Build Coastguard Worker# Using clang version 17.0.4 (Fedora 17.0.4-1.fc39) 181*7304104dSAndroid Build Coastguard Worker# clang -gdwarf-5 -o testfile-dwarf5-line-clang dwarf5-line.c 182*7304104dSAndroid Build Coastguard Worker 183*7304104dSAndroid Build Coastguard Workertestfiles testfile-dwarf5-line-clang 184*7304104dSAndroid Build Coastguard Worker 185*7304104dSAndroid Build Coastguard Worker# Check that dwarf_decl_file can handle .debug_line file table index 0 186*7304104dSAndroid Build Coastguard Workertestrun_compare ${abs_builddir}/allfcts testfile-dwarf5-line-clang <<\EOF 187*7304104dSAndroid Build Coastguard Worker/home/amerey/test/dwarf5-line.c:2:main 188*7304104dSAndroid Build Coastguard WorkerEOF 189*7304104dSAndroid Build Coastguard Worker 190*7304104dSAndroid Build Coastguard Workerexit 0 191