Skip to content

Commit bcbdca6

Browse files
authored
Merge pull request #3404 from xen0n/detect-loongarch-uapi
rustup-init.sh: Check for kernel UAPI compatibility on LoongArch
2 parents 4e602fb + db4b177 commit bcbdca6

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

rustup-init.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,67 @@ get_endianness() {
240240
fi
241241
}
242242

243+
# Detect the Linux/LoongArch UAPI flavor, with all errors being non-fatal.
244+
# Returns 0 or 234 in case of successful detection, 1 otherwise (/tmp being
245+
# noexec, or other causes).
246+
check_loongarch_uapi() {
247+
need_cmd base64
248+
249+
local _tmp
250+
if ! _tmp="$(ensure mktemp)"; then
251+
return 1
252+
fi
253+
254+
# Minimal Linux/LoongArch UAPI detection, exiting with 0 in case of
255+
# upstream ("new world") UAPI, and 234 (-EINVAL truncated) in case of
256+
# old-world (as deployed on several early commercial Linux distributions
257+
# for LoongArch).
258+
#
259+
# See https://gist.github.com/xen0n/5ee04aaa6cecc5c7794b9a0c3b65fc7f for
260+
# source to this helper binary.
261+
ignore base64 -d > "$_tmp" <<EOF
262+
f0VMRgIBAQAAAAAAAAAAAAIAAgEBAAAAeAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAQQAAAEAAOAAB
263+
AAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAJAAAAAAAAAAkAAAAAAAAAAAA
264+
AQAAAAAABCiAAwUAFQAGABUAByCAAwsYggMAACsAC3iBAwAAKwAxen0n
265+
EOF
266+
267+
ignore chmod u+x "$_tmp"
268+
if [ ! -x "$_tmp" ]; then
269+
ignore rm "$_tmp"
270+
return 1
271+
fi
272+
273+
"$_tmp"
274+
local _retval=$?
275+
276+
ignore rm "$_tmp"
277+
return "$_retval"
278+
}
279+
280+
ensure_loongarch_uapi() {
281+
check_loongarch_uapi
282+
case $? in
283+
0)
284+
return 0
285+
;;
286+
234)
287+
echo >&2
288+
echo 'Your Linux kernel does not provide the ABI required by this Rust' >&2
289+
echo 'distribution. Please check with your OS provider for how to obtain a' >&2
290+
echo 'compatible Rust package for your system.' >&2
291+
echo >&2
292+
exit 1
293+
;;
294+
*)
295+
echo "Warning: Cannot determine current system's ABI flavor, continuing anyway." >&2
296+
echo >&2
297+
echo 'Note that the official Rust distribution only works with the upstream' >&2
298+
echo 'kernel ABI. Installation will fail if your running kernel happens to be' >&2
299+
echo 'incompatible.' >&2
300+
;;
301+
esac
302+
}
303+
243304
get_architecture() {
244305
local _ostype _cputype _bitness _arch _clibtype
245306
_ostype="$(uname -s)"
@@ -393,6 +454,7 @@ get_architecture() {
393454
;;
394455
loongarch64)
395456
_cputype=loongarch64
457+
ensure_loongarch_uapi
396458
;;
397459
*)
398460
err "unknown CPU type: $_cputype"

0 commit comments

Comments
 (0)