diff options
Diffstat (limited to 'scripts/check-local-export')
| -rwxr-xr-x | scripts/check-local-export | 36 | 
1 files changed, 21 insertions, 15 deletions
diff --git a/scripts/check-local-export b/scripts/check-local-export index da745e2743b7..6ccc2f467416 100755 --- a/scripts/check-local-export +++ b/scripts/check-local-export @@ -8,11 +8,31 @@  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  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. @@ -37,21 +57,7 @@ do  	if [[ ${name} == __ksymtab_* ]]; then  		export_symbols+=(${name#__ksymtab_})  	fi - -	# 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. -	# -	# 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: -	#   done < <(${NM} --quiet ${1}) -done < <(${NM} ${1} 2>/dev/null || { echo "${0}: ${NM} failed" >&2; false; } ) - -# Catch error in the process substitution -wait $! +done  for name in "${export_symbols[@]}"  do  | 
