arm64: rust: Enable Rust support for AArch64
This commit provides the build flags for Rust for AArch64. The core Rust support already in the kernel does the rest. This enables the PAC ret and BTI options in the Rust build flags to match the options that are used when building C. The Rust samples have been tested with this commit. Signed-off-by: Jamie Cunliffe <Jamie.Cunliffe@arm.com> Acked-by: Will Deacon <will@kernel.org> Tested-by: Dirk Behme <dirk.behme@de.bosch.com> Tested-by: Boqun Feng <boqun.feng@gmail.com> Acked-by: Miguel Ojeda <ojeda@kernel.org> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Alice Ryhl <aliceryhl@google.com> Tested-by: Fabien Parent <fabien.parent@linaro.org> Link: https://lore.kernel.org/r/20231020155056.3495121-3-Jamie.Cunliffe@arm.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
f82811e22b
commit
724a75ac95
@ -15,6 +15,7 @@ support corresponds to ``S`` values in the ``MAINTAINERS`` file.
|
|||||||
============= ================ ==============================================
|
============= ================ ==============================================
|
||||||
Architecture Level of support Constraints
|
Architecture Level of support Constraints
|
||||||
============= ================ ==============================================
|
============= ================ ==============================================
|
||||||
|
``arm64`` Maintained Little Endian only.
|
||||||
``loongarch`` Maintained -
|
``loongarch`` Maintained -
|
||||||
``um`` Maintained ``x86_64`` only.
|
``um`` Maintained ``x86_64`` only.
|
||||||
``x86`` Maintained ``x86_64`` only.
|
``x86`` Maintained ``x86_64`` only.
|
||||||
|
@ -229,6 +229,7 @@ config ARM64
|
|||||||
select HAVE_FUNCTION_ARG_ACCESS_API
|
select HAVE_FUNCTION_ARG_ACCESS_API
|
||||||
select MMU_GATHER_RCU_TABLE_FREE
|
select MMU_GATHER_RCU_TABLE_FREE
|
||||||
select HAVE_RSEQ
|
select HAVE_RSEQ
|
||||||
|
select HAVE_RUST if CPU_LITTLE_ENDIAN
|
||||||
select HAVE_STACKPROTECTOR
|
select HAVE_STACKPROTECTOR
|
||||||
select HAVE_SYSCALL_TRACEPOINTS
|
select HAVE_SYSCALL_TRACEPOINTS
|
||||||
select HAVE_KPROBES
|
select HAVE_KPROBES
|
||||||
|
@ -41,6 +41,8 @@ KBUILD_CFLAGS += -mgeneral-regs-only \
|
|||||||
KBUILD_CFLAGS += $(call cc-disable-warning, psabi)
|
KBUILD_CFLAGS += $(call cc-disable-warning, psabi)
|
||||||
KBUILD_AFLAGS += $(compat_vdso)
|
KBUILD_AFLAGS += $(compat_vdso)
|
||||||
|
|
||||||
|
KBUILD_RUSTFLAGS += --target=aarch64-unknown-none -Ctarget-feature="-neon"
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
|
|
||||||
@ -65,7 +67,9 @@ endif
|
|||||||
|
|
||||||
ifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
|
ifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
|
||||||
KBUILD_CFLAGS += -mbranch-protection=pac-ret+bti
|
KBUILD_CFLAGS += -mbranch-protection=pac-ret+bti
|
||||||
|
KBUILD_RUSTFLAGS += -Zbranch-protection=bti,pac-ret
|
||||||
else ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
|
else ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
|
||||||
|
KBUILD_RUSTFLAGS += -Zbranch-protection=pac-ret
|
||||||
ifeq ($(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET),y)
|
ifeq ($(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET),y)
|
||||||
KBUILD_CFLAGS += -mbranch-protection=pac-ret
|
KBUILD_CFLAGS += -mbranch-protection=pac-ret
|
||||||
else
|
else
|
||||||
|
@ -297,6 +297,7 @@ bindgen_skip_c_flags := -mno-fp-ret-in-387 -mpreferred-stack-boundary=% \
|
|||||||
|
|
||||||
# Derived from `scripts/Makefile.clang`.
|
# Derived from `scripts/Makefile.clang`.
|
||||||
BINDGEN_TARGET_x86 := x86_64-linux-gnu
|
BINDGEN_TARGET_x86 := x86_64-linux-gnu
|
||||||
|
BINDGEN_TARGET_arm64 := aarch64-linux-gnu
|
||||||
BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
|
BINDGEN_TARGET := $(BINDGEN_TARGET_$(SRCARCH))
|
||||||
|
|
||||||
# All warnings are inhibited since GCC builds are very experimental,
|
# All warnings are inhibited since GCC builds are very experimental,
|
||||||
|
@ -148,7 +148,9 @@ fn main() {
|
|||||||
let mut ts = TargetSpec::new();
|
let mut ts = TargetSpec::new();
|
||||||
|
|
||||||
// `llvm-target`s are taken from `scripts/Makefile.clang`.
|
// `llvm-target`s are taken from `scripts/Makefile.clang`.
|
||||||
if cfg.has("X86_64") {
|
if cfg.has("ARM64") {
|
||||||
|
panic!("arm64 uses the builtin rustc aarch64-unknown-none target");
|
||||||
|
} else if cfg.has("X86_64") {
|
||||||
ts.push("arch", "x86_64");
|
ts.push("arch", "x86_64");
|
||||||
ts.push(
|
ts.push(
|
||||||
"data-layout",
|
"data-layout",
|
||||||
|
Loading…
Reference in New Issue
Block a user