mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-21 22:47:51 -04:00
s390: Enable Rust support
Enable building Rust code on s390 by wiring the architecture into the kernel Rust infrastructure. Add s390 to the Rust arch support documentation, provide the s390 Rust target and required compiler flags, and set the bindgen target for arch/s390. Adjust the Rust target generation and minimum rustc version gating so the s390 setup is handled explicitly. The Rust toolchain uses the "s390x" triple naming for the 64 bit target. Rust support is currently incompatible with CONFIG_EXPOLINE, which relies on compiler support for the -mindirect-branch= and -mfunction_return= options. Therefore, select HAVE_RUST only when EXPOLINE is disabled. Acked-by: Miguel Ojeda <ojeda@kernel.org> Acked-by: Gary Guo <gary@garyguo.net> Acked-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Jan Polensky <japo@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
committed by
Alexander Gordeev
parent
a423d94fa1
commit
3f70ebe638
@@ -19,6 +19,7 @@ Architecture Level of support Constraints
|
||||
``arm64`` Maintained Little Endian only.
|
||||
``loongarch`` Maintained \-
|
||||
``riscv`` Maintained ``riscv64`` and LLVM/Clang only.
|
||||
``s390`` Maintained ``CONFIG_EXPOLINE`` must be disabled.
|
||||
``um`` Maintained \-
|
||||
``x86`` Maintained ``x86_64`` only.
|
||||
============= ================ ==============================================
|
||||
|
||||
@@ -248,6 +248,7 @@ config S390
|
||||
select HAVE_RELIABLE_STACKTRACE
|
||||
select HAVE_RETHOOK
|
||||
select HAVE_RSEQ
|
||||
select HAVE_RUST if !EXPOLINE
|
||||
select HAVE_SAMPLE_FTRACE_DIRECT
|
||||
select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
|
||||
select HAVE_SETUP_PER_CPU_AREA
|
||||
|
||||
@@ -35,25 +35,31 @@ KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_CC_NO_ARRAY_BOUNDS),-Wno-array-bounds)
|
||||
|
||||
KBUILD_RUSTFLAGS += --target=s390x-unknown-none-softfloat -Zpacked-stack -Ctarget-feature=+backchain
|
||||
|
||||
UTS_MACHINE := s390x
|
||||
STACK_SIZE := $(if $(CONFIG_KASAN),65536,$(if $(CONFIG_KMSAN),65536,16384))
|
||||
CHECKFLAGS += -D__s390__ -D__s390x__
|
||||
|
||||
export LD_BFD
|
||||
|
||||
mflags-$(CONFIG_MARCH_Z10) := -march=z10
|
||||
mflags-$(CONFIG_MARCH_Z196) := -march=z196
|
||||
mflags-$(CONFIG_MARCH_ZEC12) := -march=zEC12
|
||||
mflags-$(CONFIG_MARCH_Z13) := -march=z13
|
||||
mflags-$(CONFIG_MARCH_Z14) := -march=z14
|
||||
mflags-$(CONFIG_MARCH_Z15) := -march=z15
|
||||
mflags-$(CONFIG_MARCH_Z16) := -march=z16
|
||||
mflags-$(CONFIG_MARCH_Z17) := -march=z17
|
||||
march-name-$(CONFIG_MARCH_Z10) := z10
|
||||
march-name-$(CONFIG_MARCH_Z196) := z196
|
||||
march-name-$(CONFIG_MARCH_ZEC12) := zEC12
|
||||
march-name-$(CONFIG_MARCH_Z13) := z13
|
||||
march-name-$(CONFIG_MARCH_Z14) := z14
|
||||
march-name-$(CONFIG_MARCH_Z15) := z15
|
||||
march-name-$(CONFIG_MARCH_Z16) := z16
|
||||
march-name-$(CONFIG_MARCH_Z17) := z17
|
||||
|
||||
export CC_FLAGS_MARCH := $(mflags-y)
|
||||
mflags := -march=$(march-name-y)
|
||||
|
||||
aflags-y += $(mflags-y)
|
||||
cflags-y += $(mflags-y)
|
||||
export CC_FLAGS_MARCH := $(mflags)
|
||||
|
||||
aflags-y += $(mflags)
|
||||
cflags-y += $(mflags)
|
||||
|
||||
KBUILD_RUSTFLAGS += -Ctarget-cpu=$(march-name-y)
|
||||
|
||||
cflags-$(CONFIG_MARCH_Z10_TUNE) += -mtune=z10
|
||||
cflags-$(CONFIG_MARCH_Z196_TUNE) += -mtune=z196
|
||||
|
||||
@@ -403,6 +403,7 @@ BINDGEN_TARGET_x86 := x86_64-linux-gnu
|
||||
BINDGEN_TARGET_arm64 := aarch64-linux-gnu
|
||||
BINDGEN_TARGET_arm := arm-linux-gnueabi
|
||||
BINDGEN_TARGET_loongarch := loongarch64-linux-gnusf
|
||||
BINDGEN_TARGET_s390 := s390x-linux-gnu
|
||||
# This is only for i386 UM builds, which need the 32-bit target not -m32
|
||||
BINDGEN_TARGET_i386 := i386-linux-gnu
|
||||
BINDGEN_TARGET_um := $(BINDGEN_TARGET_$(SUBARCH))
|
||||
|
||||
@@ -256,6 +256,8 @@ fn main() {
|
||||
}
|
||||
} else if cfg.has("LOONGARCH") {
|
||||
panic!("loongarch uses the builtin rustc loongarch64-unknown-none-softfloat target");
|
||||
} else if cfg.has("S390") {
|
||||
panic!("s390 uses the builtin rustc s390x-unknown-none-softfloat target");
|
||||
} else {
|
||||
panic!("Unsupported architecture");
|
||||
}
|
||||
|
||||
@@ -31,7 +31,11 @@ llvm)
|
||||
fi
|
||||
;;
|
||||
rustc)
|
||||
echo 1.85.0
|
||||
if [ "$SRCARCH" = "s390" ]; then
|
||||
echo 1.96.0
|
||||
else
|
||||
echo 1.85.0
|
||||
fi
|
||||
;;
|
||||
bindgen)
|
||||
echo 0.71.1
|
||||
|
||||
Reference in New Issue
Block a user