Merge a0c04bd55a ("Merge tag 'kbuild-fixes-v6.11' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild") into android-mainline
Steps on the way to v6.11-rc1 Signed-off-by: Lee Jones <joneslee@google.com> Change-Id: Idc35b6a19365ad7bf4bed9a0d24596a36e4732c6
This commit is contained in:
@@ -5,4 +5,4 @@
|
||||
# -mstack-protector-guard-reg, added by
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81708
|
||||
|
||||
echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -m32 -O0 -fstack-protector -mstack-protector-guard-reg=fs -mstack-protector-guard-symbol=__stack_chk_guard - -o - 2> /dev/null | grep -q "%fs"
|
||||
echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -m32 -O0 -fstack-protector -mstack-protector-guard-reg=fs -mstack-protector-guard-symbol=__stack_chk_guard - -o - 2> /dev/null | grep -q "%fs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -m64 -O0 -mcmodel=kernel -fno-PIE -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
|
||||
echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -m64 -O0 -mcmodel=kernel -fno-PIE -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
|
||||
|
||||
@@ -74,7 +74,7 @@ ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEA
|
||||
echo "/lib/modules/%{KERNELRELEASE}"
|
||||
|
||||
for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
|
||||
devname softdep symbols symbols.bin; do
|
||||
devname softdep symbols symbols.bin weakdep; do
|
||||
echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
|
||||
done
|
||||
|
||||
|
||||
@@ -50,6 +50,6 @@ fi
|
||||
cat << EOF
|
||||
|
||||
%changelog
|
||||
* $(LC_ALL=C; date +'%a %b %d %Y') ${name} <${email}>
|
||||
* $(LC_ALL=C date +'%a %b %d %Y') ${name} <${email}>
|
||||
- Custom built Linux kernel.
|
||||
EOF
|
||||
|
||||
@@ -117,20 +117,16 @@ if [ "$rust_compiler_cversion" -lt "$rust_compiler_min_cversion" ]; then
|
||||
echo >&2 "***"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$rust_compiler_cversion" -gt "$rust_compiler_min_cversion" ]; then
|
||||
echo >&2 "***"
|
||||
echo >&2 "*** Rust compiler '$RUSTC' is too new. This may or may not work."
|
||||
echo >&2 "*** Your version: $rust_compiler_version"
|
||||
echo >&2 "*** Expected version: $rust_compiler_min_version"
|
||||
echo >&2 "***"
|
||||
warning=1
|
||||
fi
|
||||
|
||||
# Check that the Rust bindings generator is suitable.
|
||||
#
|
||||
# Non-stable and distributions' versions may have a version suffix, e.g. `-dev`.
|
||||
#
|
||||
# The dummy parameter `workaround-for-0.69.0` is required to support 0.69.0
|
||||
# (https://github.com/rust-lang/rust-bindgen/pull/2678). It can be removed when
|
||||
# the minimum version is upgraded past that (0.69.1 already fixed the issue).
|
||||
rust_bindings_generator_output=$( \
|
||||
LC_ALL=C "$BINDGEN" --version 2>/dev/null
|
||||
LC_ALL=C "$BINDGEN" --version workaround-for-0.69.0 2>/dev/null
|
||||
) || rust_bindings_generator_code=$?
|
||||
if [ -n "$rust_bindings_generator_code" ]; then
|
||||
echo >&2 "***"
|
||||
@@ -165,13 +161,18 @@ if [ "$rust_bindings_generator_cversion" -lt "$rust_bindings_generator_min_cvers
|
||||
echo >&2 "***"
|
||||
exit 1
|
||||
fi
|
||||
if [ "$rust_bindings_generator_cversion" -gt "$rust_bindings_generator_min_cversion" ]; then
|
||||
echo >&2 "***"
|
||||
echo >&2 "*** Rust bindings generator '$BINDGEN' is too new. This may or may not work."
|
||||
echo >&2 "*** Your version: $rust_bindings_generator_version"
|
||||
echo >&2 "*** Expected version: $rust_bindings_generator_min_version"
|
||||
echo >&2 "***"
|
||||
warning=1
|
||||
if [ "$rust_bindings_generator_cversion" -eq 6600 ] ||
|
||||
[ "$rust_bindings_generator_cversion" -eq 6601 ]; then
|
||||
# Distributions may have patched the issue (e.g. Debian did).
|
||||
if ! "$BINDGEN" $(dirname $0)/rust_is_available_bindgen_0_66.h >/dev/null; then
|
||||
echo >&2 "***"
|
||||
echo >&2 "*** Rust bindings generator '$BINDGEN' versions 0.66.0 and 0.66.1 may not"
|
||||
echo >&2 "*** work due to a bug (https://github.com/rust-lang/rust-bindgen/pull/2567),"
|
||||
echo >&2 "*** unless patched (like Debian's)."
|
||||
echo >&2 "*** Your version: $rust_bindings_generator_version"
|
||||
echo >&2 "***"
|
||||
warning=1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check that the `libclang` used by the Rust bindings generator is suitable.
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#define A "\0"
|
||||
@@ -54,18 +54,34 @@ else:
|
||||
""")
|
||||
|
||||
@classmethod
|
||||
def generate_bindgen(cls, version_stdout, libclang_stderr):
|
||||
def generate_bindgen(cls, version_stdout, libclang_stderr, version_0_66_patched=False):
|
||||
if libclang_stderr is None:
|
||||
libclang_case = f"raise SystemExit({cls.bindgen_default_bindgen_libclang_failure_exit_code})"
|
||||
else:
|
||||
libclang_case = f"print({repr(libclang_stderr)}, file=sys.stderr)"
|
||||
|
||||
if version_0_66_patched:
|
||||
version_0_66_case = "pass"
|
||||
else:
|
||||
version_0_66_case = "raise SystemExit(1)"
|
||||
|
||||
return cls.generate_executable(f"""#!/usr/bin/env python3
|
||||
import sys
|
||||
if "rust_is_available_bindgen_libclang.h" in " ".join(sys.argv):
|
||||
print({repr(libclang_stderr)}, file=sys.stderr)
|
||||
{libclang_case}
|
||||
elif "rust_is_available_bindgen_0_66.h" in " ".join(sys.argv):
|
||||
{version_0_66_case}
|
||||
else:
|
||||
print({repr(version_stdout)})
|
||||
""")
|
||||
|
||||
@classmethod
|
||||
def generate_bindgen_version(cls, stdout):
|
||||
return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr)
|
||||
def generate_bindgen_version(cls, stdout, version_0_66_patched=False):
|
||||
return cls.generate_bindgen(stdout, cls.bindgen_default_bindgen_libclang_stderr, version_0_66_patched)
|
||||
|
||||
@classmethod
|
||||
def generate_bindgen_libclang_failure(cls):
|
||||
return cls.generate_bindgen(cls.bindgen_default_bindgen_version_stdout, None)
|
||||
|
||||
@classmethod
|
||||
def generate_bindgen_libclang(cls, stderr):
|
||||
@@ -89,6 +105,7 @@ else:
|
||||
cls.rust_default_sysroot = subprocess.check_output(("rustc", "--print", "sysroot")).decode().strip()
|
||||
|
||||
cls.bindgen_default_bindgen_version_stdout = f"bindgen {cls.bindgen_default_version}"
|
||||
cls.bindgen_default_bindgen_libclang_failure_exit_code = 42
|
||||
cls.bindgen_default_bindgen_libclang_stderr = f"scripts/rust_is_available_bindgen_libclang.h:2:9: warning: clang version {cls.llvm_default_version} [-W#pragma-messages], err: false"
|
||||
|
||||
cls.default_rustc = cls.generate_rustc(f"rustc {cls.rustc_default_version}")
|
||||
@@ -193,11 +210,6 @@ else:
|
||||
result = self.run_script(self.Expected.FAILURE, { "RUSTC": rustc })
|
||||
self.assertIn(f"Rust compiler '{rustc}' is too old.", result.stderr)
|
||||
|
||||
def test_rustc_new_version(self):
|
||||
rustc = self.generate_rustc("rustc 1.999.0 (a8314ef7d 2099-06-27)")
|
||||
result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "RUSTC": rustc })
|
||||
self.assertIn(f"Rust compiler '{rustc}' is too new. This may or may not work.", result.stderr)
|
||||
|
||||
def test_bindgen_nonexecutable(self):
|
||||
result = self.run_script(self.Expected.FAILURE, { "BINDGEN": self.nonexecutable })
|
||||
self.assertIn(f"Running '{self.nonexecutable}' to check the Rust bindings generator version failed with", result.stderr)
|
||||
@@ -226,21 +238,24 @@ else:
|
||||
result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen })
|
||||
self.assertIn(f"Rust bindings generator '{bindgen}' is too old.", result.stderr)
|
||||
|
||||
def test_bindgen_new_version(self):
|
||||
bindgen = self.generate_bindgen_version("bindgen 0.999.0")
|
||||
result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "BINDGEN": bindgen })
|
||||
self.assertIn(f"Rust bindings generator '{bindgen}' is too new. This may or may not work.", result.stderr)
|
||||
def test_bindgen_bad_version_0_66_0_and_0_66_1(self):
|
||||
for version in ("0.66.0", "0.66.1"):
|
||||
with self.subTest(version=version):
|
||||
bindgen = self.generate_bindgen_version(f"bindgen {version}")
|
||||
result = self.run_script(self.Expected.SUCCESS_WITH_WARNINGS, { "BINDGEN": bindgen })
|
||||
self.assertIn(f"Rust bindings generator '{bindgen}' versions 0.66.0 and 0.66.1 may not", result.stderr)
|
||||
|
||||
def test_bindgen_bad_version_0_66_0_and_0_66_1_patched(self):
|
||||
for version in ("0.66.0", "0.66.1"):
|
||||
with self.subTest(version=version):
|
||||
bindgen = self.generate_bindgen_version(f"bindgen {version}", True)
|
||||
result = self.run_script(self.Expected.SUCCESS, { "BINDGEN": bindgen })
|
||||
|
||||
def test_bindgen_libclang_failure(self):
|
||||
for env in (
|
||||
{ "LLVM_CONFIG_PATH": self.missing },
|
||||
{ "LIBCLANG_PATH": self.missing },
|
||||
{ "CLANG_PATH": self.missing },
|
||||
):
|
||||
with self.subTest(env=env):
|
||||
result = self.run_script(self.Expected.FAILURE, env | { "PATH": os.environ["PATH"], "BINDGEN": "bindgen" })
|
||||
self.assertIn("Running 'bindgen' to check the libclang version (used by the Rust", result.stderr)
|
||||
self.assertIn("bindings generator) failed with code ", result.stderr)
|
||||
bindgen = self.generate_bindgen_libclang_failure()
|
||||
result = self.run_script(self.Expected.FAILURE, { "BINDGEN": bindgen })
|
||||
self.assertIn(f"Running '{bindgen}' to check the libclang version (used by the Rust", result.stderr)
|
||||
self.assertIn(f"bindings generator) failed with code {self.bindgen_default_bindgen_libclang_failure_exit_code}. This may be caused by", result.stderr)
|
||||
|
||||
def test_bindgen_libclang_unexpected_version(self):
|
||||
bindgen = self.generate_bindgen_libclang("scripts/rust_is_available_bindgen_libclang.h:2:9: warning: clang version unexpected [-W#pragma-messages], err: false")
|
||||
|
||||
Reference in New Issue
Block a user