1*7304104dSAndroid Build Coastguard Worker#! /usr/bin/env bash 2*7304104dSAndroid Build Coastguard Worker# Copyright (C) 2015 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 Workerif ! grep -q -F '#define _FILE_OFFSET_BITS' ${abs_top_builddir}/config.h; then 21*7304104dSAndroid Build Coastguard Worker echo "LFS testing is irrelevant on this system" 22*7304104dSAndroid Build Coastguard Worker exit 77 23*7304104dSAndroid Build Coastguard Workerfi 24*7304104dSAndroid Build Coastguard Worker 25*7304104dSAndroid Build Coastguard Worker# #include <stdio.h> 26*7304104dSAndroid Build Coastguard Worker# int main () { 27*7304104dSAndroid Build Coastguard Worker# FILE *f = fopen ("/dev/null", "r"); 28*7304104dSAndroid Build Coastguard Worker# return f == NULL; 29*7304104dSAndroid Build Coastguard Worker# } 30*7304104dSAndroid Build Coastguard Worker# 31*7304104dSAndroid Build Coastguard Worker# Built for Linux i686, without setting _FILE_OFFSET_BITS. 32*7304104dSAndroid Build Coastguard Worker# $ gcc -m32 -O2 nolfs.c -o testfile-nolfs 33*7304104dSAndroid Build Coastguard Workertestfiles testfile-nolfs 34*7304104dSAndroid Build Coastguard Worker 35*7304104dSAndroid Build Coastguard WorkerLFS_FORMAT='BEGIN { 36*7304104dSAndroid Build Coastguard Worker while ((getline < "%s") > 0) 37*7304104dSAndroid Build Coastguard Worker /^\w/ && bad[$0] 38*7304104dSAndroid Build Coastguard Worker FS="@" 39*7304104dSAndroid Build Coastguard Worker} 40*7304104dSAndroid Build Coastguard Worker/@@GLIBC_/ && $1 in bad { print $1 }' 41*7304104dSAndroid Build Coastguard Worker 42*7304104dSAndroid Build Coastguard WorkerLFS=$(printf "$LFS_FORMAT" "${abs_srcdir}/lfs-symbols") 43*7304104dSAndroid Build Coastguard Worker 44*7304104dSAndroid Build Coastguard Workermakeprint() { 45*7304104dSAndroid Build Coastguard Worker make print-$1 -C $2 |& gawk -F= "/^$1=/{ print \$2 }" 46*7304104dSAndroid Build Coastguard Worker} 47*7304104dSAndroid Build Coastguard Worker 48*7304104dSAndroid Build Coastguard Workertestrun_lfs() { 49*7304104dSAndroid Build Coastguard Worker echo "checking $1" 50*7304104dSAndroid Build Coastguard Worker if [ -e "$1" ]; then 51*7304104dSAndroid Build Coastguard Worker bad=$(testrun ${abs_top_builddir}/src/nm -u "$1" | gawk "$LFS") 52*7304104dSAndroid Build Coastguard Worker if [ -n "$bad" ]; then 53*7304104dSAndroid Build Coastguard Worker echo "$1 contains non-lfs symbols:" $bad 54*7304104dSAndroid Build Coastguard Worker exit_status=1 55*7304104dSAndroid Build Coastguard Worker fi 56*7304104dSAndroid Build Coastguard Worker else 57*7304104dSAndroid Build Coastguard Worker echo "$1 doesn't exist" 58*7304104dSAndroid Build Coastguard Worker exit_status=1 59*7304104dSAndroid Build Coastguard Worker fi 60*7304104dSAndroid Build Coastguard Worker} 61*7304104dSAndroid Build Coastguard Worker 62*7304104dSAndroid Build Coastguard Workerecho First sanity-check that LFS detection works. 63*7304104dSAndroid Build Coastguard Workerexit_status=0 64*7304104dSAndroid Build Coastguard Workertestrun_lfs ./testfile-nolfs 65*7304104dSAndroid Build Coastguard Workerif [ $exit_status -eq 0 ]; then 66*7304104dSAndroid Build Coastguard Worker echo "Didn't detect any problem with testfile-nolfs!" 67*7304104dSAndroid Build Coastguard Worker exit 99 68*7304104dSAndroid Build Coastguard Workerfi 69*7304104dSAndroid Build Coastguard Workerecho 70*7304104dSAndroid Build Coastguard Worker 71*7304104dSAndroid Build Coastguard Workerexit_status=0 72*7304104dSAndroid Build Coastguard Worker 73*7304104dSAndroid Build Coastguard Workerecho Check all normal build targets. 74*7304104dSAndroid Build Coastguard Workerfor dir in libelf libdw libasm libcpu src; do 75*7304104dSAndroid Build Coastguard Worker dir=${abs_top_builddir}/$dir 76*7304104dSAndroid Build Coastguard Worker for program in $(makeprint PROGRAMS $dir); do 77*7304104dSAndroid Build Coastguard Worker testrun_lfs $dir/$program 78*7304104dSAndroid Build Coastguard Worker done 79*7304104dSAndroid Build Coastguard Workerdone 80*7304104dSAndroid Build Coastguard Workerecho 81*7304104dSAndroid Build Coastguard Worker 82*7304104dSAndroid Build Coastguard Workerecho Check all test programs. 83*7304104dSAndroid Build Coastguard Workerdir=${abs_builddir} 84*7304104dSAndroid Build Coastguard Workerfor program in $(makeprint check_PROGRAMS $dir); do 85*7304104dSAndroid Build Coastguard Worker testrun_lfs $dir/$program 86*7304104dSAndroid Build Coastguard Workerdone 87*7304104dSAndroid Build Coastguard Workerecho 88*7304104dSAndroid Build Coastguard Worker 89*7304104dSAndroid Build Coastguard Workerexit $exit_status 90