xref: /aosp_15_r20/external/elfutils/tests/run-lfs-symbols.sh (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
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