On 22/08/03 12:40PM, Masahiro Yamada wrote: > On Wed, Aug 3, 2022 at 3:49 AM Owen Rafferty <owen@xxxxxxxxxxxxxxxx> wrote: > > > > Remove the bash build dependency for those who otherwise do not have it > > installed. This should also provide a slight speedup. > > I do not know if this is worth the effort, > but do you have any benchmark on how fast it is? To be clear, I'm not asking for every single bash script in the tree to be rewritten in posix shell -- it was only this script that made bash a hard dependency (on x86 at least). For a configuration suitable for my system w/ 4 HT cores: bash real8m 47.79s user54m 30.91s sys13m 56.88s sh (dash) real7m 34.94s user46m 42.63s sys11m 54.02s > > > > Signed-off-by: Owen Rafferty <owen@xxxxxxxxxxxxxxxx> > > --- > > scripts/check-local-export | 62 +++++++++++++++++--------------------- > > 1 file changed, 28 insertions(+), 34 deletions(-) > > > > diff --git a/scripts/check-local-export b/scripts/check-local-export > > index 6ccc2f467416..08fa4c989244 100755 > > --- a/scripts/check-local-export > > +++ b/scripts/check-local-export > > @@ -1,4 +1,4 @@ > > -#!/usr/bin/env bash > > +#!/bin/sh > > # SPDX-License-Identifier: GPL-2.0-only > > # > > # Copyright (C) 2022 Masahiro Yamada <masahiroy@xxxxxxxxxx> > > @@ -8,31 +8,11 @@ > > > > set -e > > > > -# catch errors from ${NM} > > -set -o pipefail > > - > > -# Run the last element of a pipeline in the current shell. > > -# Without this, the while-loop would be executed in a subshell, and > > -# the changes made to 'symbol_types' and 'export_symbols' would be lost. > > -shopt -s lastpipe > > - > > -declare -A symbol_types > > -declare -a export_symbols > > +symbol_types="" > > +export_symbols="" > > > > exit_code=0 > > > > -# If there is no symbol in the object, ${NM} (both GNU nm and llvm-nm) shows > > -# 'no symbols' diagnostic (but exits with 0). It is harmless and hidden by > > -# '2>/dev/null'. However, it suppresses real error messages as well. Add a > > -# hand-crafted error message here. > > -# > > -# TODO: > > -# Use --quiet instead of 2>/dev/null when we upgrade the minimum version of > > -# binutils to 2.37, llvm to 13.0.0. > > -# Then, the following line will be really simple: > > -# ${NM} --quiet ${1} | > > - > > -{ ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; false; } } | > > while read value type name > > do > > # Skip the line if the number of fields is less than 3. > > @@ -46,26 +26,40 @@ do > > # case 2) > > # For Clang LTO, llvm-nm outputs a line with type 't' but empty name: > > # "---------------- t" > > - if [[ -z ${name} ]]; then > > + if [ -z ${name} ]; then > > continue > > fi > > > > - # save (name, type) in the associative array > > - symbol_types[${name}]=${type} > > + # save (name, type) in "associative array" > > + symbol_types="$symbol_types ${name},${type}" > > > > # append the exported symbol to the array > > - if [[ ${name} == __ksymtab_* ]]; then > > - export_symbols+=(${name#__ksymtab_}) > > - fi > > -done > > + case ${name} in __ksymtab_*) > > + export_symbols="$export_symbols ${name#__ksymtab_}" > > + esac > > > > -for name in "${export_symbols[@]}" > > +# If there is no symbol in the object, ${NM} (both GNU nm and llvm-nm) shows > > +# 'no symbols' diagnostic (but exits with 0). It is harmless and hidden by > > +# '2>/dev/null'. However, it suppresses real error messages as well. Add a > > +# hand-crafted error message here. > > +# > > +# TODO: > > +# Use --quiet instead of 2>/dev/null when we upgrade the minimum version of > > +# binutils to 2.37, llvm to 13.0.0. > > +# Then, the following line will be simple: > > +# $(${NM} --quiet ${1} || kill -INT $$) > > +done <<EOF > > +$( ${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; kill -INT $$; }) > > +EOF > > + > > +for name in $export_symbols > > do > > - # nm(3) says "If lowercase, the symbol is usually local" > > - if [[ ${symbol_types[$name]} =~ [a-z] ]]; then > > + type="${symbol_types##* $name,}" > > + type="${type%% *}" > > + case ${type} in [a-z]) > > echo "$@: error: local symbol '${name}' was exported" >&2 > > exit_code=1 > > - fi > > + esac > > done > > > > exit ${exit_code} > > -- > > 2.37.1 > > > > > -- > Best Regards > Masahiro Yamada