1 #!/bin/sh !! 1 #!/usr/bin/awk -f 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # !! 3 # extract linker version number from stdin and turn into single number 4 # Print the linker name and its version in a 5 !! 4 { 5 # Also, perform the minimum version check. !! 5 gsub(".*\\)", ""); 6 !! 6 gsub(".*version ", ""); 7 set -e !! 7 gsub("-.*", ""); 8 !! 8 split($1,a, "."); 9 # Convert the version string x.y.z to a canoni !! 9 print a[1]*100000000 + a[2]*1000000 + a[3]*10000; 10 get_canonical_version() !! 10 exit 11 { !! 11 } 12 IFS=. << 13 set -- $1 << 14 << 15 # If the 2nd or 3rd field is missing, << 16 # << 17 # The 4th field, if present, is ignore << 18 # This occurs in development snapshots << 19 echo $((10000 * $1 + 100 * ${2:-0} + $ << 20 } << 21 << 22 orig_args="$@" << 23 << 24 # Get the first line of the --version output. << 25 IFS=' << 26 ' << 27 set -- $(LC_ALL=C "$@" --version) << 28 << 29 # Split the line on spaces. << 30 IFS=' ' << 31 set -- $1 << 32 << 33 min_tool_version=$(dirname $0)/min-tool-versio << 34 << 35 if [ "$1" = GNU -a "$2" = ld ]; then << 36 shift $(($# - 1)) << 37 version=$1 << 38 min_version=$($min_tool_version binuti << 39 name=BFD << 40 disp_name="GNU ld" << 41 elif [ "$1" = GNU -a "$2" = gold ]; then << 42 echo "gold linker is not supported as << 43 exit 1 << 44 else << 45 while [ $# -gt 1 -a "$1" != "LLD" ]; d << 46 shift << 47 done << 48 << 49 if [ "$1" = LLD ]; then << 50 version=$2 << 51 min_version=$($min_tool_versio << 52 name=LLD << 53 disp_name=LLD << 54 else << 55 echo "$orig_args: unknown link << 56 exit 1 << 57 fi << 58 fi << 59 << 60 # There may be something after the version, su << 61 # release number (like Fedora's "2.34-4.fc32") << 62 # added before the "compatible with GNU linker << 63 # after just numbers and periods. << 64 version=${version%%[!0-9.]*} << 65 << 66 cversion=$(get_canonical_version $version) << 67 min_cversion=$(get_canonical_version $min_vers << 68 << 69 if [ "$cversion" -lt "$min_cversion" ]; then << 70 echo >&2 "***" << 71 echo >&2 "*** Linker is too old." << 72 echo >&2 "*** Your $disp_name versio << 73 echo >&2 "*** Minimum $disp_name ver << 74 echo >&2 "***" << 75 exit 1 << 76 fi << 77 << 78 echo $name $cversion <<
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.