* [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool`
@ 2024-07-25 18:33 Miguel Ojeda
2024-07-25 18:33 ` [PATCH v3 6/6] objtool/kbuild/rust: enable objtool for Rust Miguel Ojeda
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Miguel Ojeda @ 2024-07-25 18:33 UTC (permalink / raw)
To: Josh Poimboeuf, Peter Zijlstra, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, Masahiro Yamada
Cc: x86, H. Peter Anvin, Nathan Chancellor, Nicolas Schier,
Miguel Ojeda, Wedson Almeida Filho, Alex Gaynor, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, rust-for-linux, linux-kernel, patches, linux-kbuild
Hi,
This is just v2 with the helper function suggested by Peter.
I dropped Benno's and Alice's Tested-bys from the modified patch, just
in case, but the logic should be equivalent.
Cheers,
Miguel
v3:
- Added `is_rust_noreturn()` helper function (Peter).
- Reworded a couple bits.
v2: https://lore.kernel.org/rust-for-linux/20240724161501.1319115-1-ojeda@kernel.org/
v1: https://lore.kernel.org/rust-for-linux/20231023174449.251550-1-ojeda@kernel.org/
Miguel Ojeda (6):
rust: module: add static pointer to `{init,cleanup}_module()`
x86/rust: support MITIGATION_RETPOLINE
x86/rust: support MITIGATION_RETHUNK
x86/rust: support MITIGATION_SLS
objtool/rust: list `noreturn` Rust functions
objtool/kbuild/rust: enable objtool for Rust
arch/x86/Makefile | 7 ++++-
rust/Makefile | 22 +++++++++------
rust/macros/module.rs | 12 +++++++++
scripts/Makefile.build | 9 +++++--
scripts/generate_rust_target.rs | 15 +++++++++++
tools/objtool/check.c | 48 ++++++++++++++++++++++++++++++++-
tools/objtool/noreturns.h | 2 ++
7 files changed, 103 insertions(+), 12 deletions(-)
base-commit: b1263411112305acf2af728728591465becb45b0
--
2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 6/6] objtool/kbuild/rust: enable objtool for Rust
2024-07-25 18:33 [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Miguel Ojeda
@ 2024-07-25 18:33 ` Miguel Ojeda
2024-07-25 19:10 ` [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Benno Lossin
2024-08-18 21:34 ` Miguel Ojeda
2 siblings, 0 replies; 4+ messages in thread
From: Miguel Ojeda @ 2024-07-25 18:33 UTC (permalink / raw)
To: Josh Poimboeuf, Peter Zijlstra, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, Masahiro Yamada
Cc: x86, H. Peter Anvin, Nathan Chancellor, Nicolas Schier,
Miguel Ojeda, Wedson Almeida Filho, Alex Gaynor, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, rust-for-linux, linux-kernel, patches, linux-kbuild
Now that we should be `objtool`-warning free, enable `objtool` for
Rust too.
Before this patch series, we were already getting warnings under e.g. IBT
builds, since those would see Rust code via `vmlinux.o`.
Tested-by: Alice Ryhl <aliceryhl@google.com>
Tested-by: Benno Lossin <benno.lossin@proton.me>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
rust/Makefile | 22 ++++++++++++++--------
scripts/Makefile.build | 9 +++++++--
2 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/rust/Makefile b/rust/Makefile
index bf05e65365da..1756238b641d 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -344,7 +344,8 @@ quiet_cmd_rustc_library = $(if $(skip_clippy),RUSTC,$(RUSTC_OR_CLIPPY_QUIET)) L
--crate-type rlib -L$(objtree)/$(obj) \
--crate-name $(patsubst %.o,%,$(notdir $@)) $< \
--sysroot=/dev/null \
- $(if $(rustc_objcopy),;$(OBJCOPY) $(rustc_objcopy) $@)
+ $(if $(rustc_objcopy),;$(OBJCOPY) $(rustc_objcopy) $@) \
+ $(cmd_objtool)
rust-analyzer:
$(Q)$(srctree)/scripts/generate_rust_analyzer.py \
@@ -366,44 +367,49 @@ ifneq ($(or $(CONFIG_ARM64),$(and $(CONFIG_RISCV),$(CONFIG_64BIT))),)
__ashlti3 __lshrti3
endif
+define rule_rustc_library
+ $(call cmd_and_fixdep,rustc_library)
+ $(call cmd,gen_objtooldep)
+endef
+
$(obj)/core.o: private skip_clippy = 1
$(obj)/core.o: private skip_flags = -Wunreachable_pub
$(obj)/core.o: private rustc_objcopy = $(foreach sym,$(redirect-intrinsics),--redefine-sym $(sym)=__rust$(sym))
$(obj)/core.o: private rustc_target_flags = $(core-cfgs)
$(obj)/core.o: $(RUST_LIB_SRC)/core/src/lib.rs FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
ifdef CONFIG_X86_64
$(obj)/core.o: scripts/target.json
endif
$(obj)/compiler_builtins.o: private rustc_objcopy = -w -W '__*'
$(obj)/compiler_builtins.o: $(src)/compiler_builtins.rs $(obj)/core.o FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
$(obj)/alloc.o: private skip_clippy = 1
$(obj)/alloc.o: private skip_flags = -Wunreachable_pub
$(obj)/alloc.o: private rustc_target_flags = $(alloc-cfgs)
$(obj)/alloc.o: $(RUST_LIB_SRC)/alloc/src/lib.rs $(obj)/compiler_builtins.o FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
$(obj)/build_error.o: $(src)/build_error.rs $(obj)/compiler_builtins.o FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
$(obj)/bindings.o: $(src)/bindings/lib.rs \
$(obj)/compiler_builtins.o \
$(obj)/bindings/bindings_generated.rs \
$(obj)/bindings/bindings_helpers_generated.rs FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
$(obj)/uapi.o: $(src)/uapi/lib.rs \
$(obj)/compiler_builtins.o \
$(obj)/uapi/uapi_generated.rs FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
$(obj)/kernel.o: private rustc_target_flags = --extern alloc \
--extern build_error --extern macros --extern bindings --extern uapi
$(obj)/kernel.o: $(src)/kernel/lib.rs $(obj)/alloc.o $(obj)/build_error.o \
$(obj)/libmacros.so $(obj)/bindings.o $(obj)/uapi.o FORCE
- +$(call if_changed_dep,rustc_library)
+ +$(call if_changed_rule,rustc_library)
endif # CONFIG_RUST
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index efacca63c897..72b1232b1f7d 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -288,10 +288,15 @@ rust_common_cmd = \
# would not match each other.
quiet_cmd_rustc_o_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
- cmd_rustc_o_rs = $(rust_common_cmd) --emit=obj=$@ $<
+ cmd_rustc_o_rs = $(rust_common_cmd) --emit=obj=$@ $< $(cmd_objtool)
+
+define rule_rustc_o_rs
+ $(call cmd_and_fixdep,rustc_o_rs)
+ $(call cmd,gen_objtooldep)
+endef
$(obj)/%.o: $(obj)/%.rs FORCE
- +$(call if_changed_dep,rustc_o_rs)
+ +$(call if_changed_rule,rustc_o_rs)
quiet_cmd_rustc_rsi_rs = $(RUSTC_OR_CLIPPY_QUIET) $(quiet_modtag) $@
cmd_rustc_rsi_rs = \
--
2.45.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool`
2024-07-25 18:33 [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Miguel Ojeda
2024-07-25 18:33 ` [PATCH v3 6/6] objtool/kbuild/rust: enable objtool for Rust Miguel Ojeda
@ 2024-07-25 19:10 ` Benno Lossin
2024-08-18 21:34 ` Miguel Ojeda
2 siblings, 0 replies; 4+ messages in thread
From: Benno Lossin @ 2024-07-25 19:10 UTC (permalink / raw)
To: Miguel Ojeda, Josh Poimboeuf, Peter Zijlstra, Thomas Gleixner,
Ingo Molnar, Borislav Petkov, Dave Hansen, Masahiro Yamada
Cc: x86, H. Peter Anvin, Nathan Chancellor, Nicolas Schier,
Wedson Almeida Filho, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl,
rust-for-linux, linux-kernel, patches, linux-kbuild
On 25.07.24 20:33, Miguel Ojeda wrote:
> Hi,
>
> This is just v2 with the helper function suggested by Peter.
>
> I dropped Benno's and Alice's Tested-bys from the modified patch, just
> in case, but the logic should be equivalent.
I re-ran my tests and the results are the same as with v1.
Tested-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> Cheers,
> Miguel
>
> v3:
> - Added `is_rust_noreturn()` helper function (Peter).
> - Reworded a couple bits.
>
> v2: https://lore.kernel.org/rust-for-linux/20240724161501.1319115-1-ojeda@kernel.org/
> v1: https://lore.kernel.org/rust-for-linux/20231023174449.251550-1-ojeda@kernel.org/
>
> Miguel Ojeda (6):
> rust: module: add static pointer to `{init,cleanup}_module()`
> x86/rust: support MITIGATION_RETPOLINE
> x86/rust: support MITIGATION_RETHUNK
> x86/rust: support MITIGATION_SLS
> objtool/rust: list `noreturn` Rust functions
> objtool/kbuild/rust: enable objtool for Rust
>
> arch/x86/Makefile | 7 ++++-
> rust/Makefile | 22 +++++++++------
> rust/macros/module.rs | 12 +++++++++
> scripts/Makefile.build | 9 +++++--
> scripts/generate_rust_target.rs | 15 +++++++++++
> tools/objtool/check.c | 48 ++++++++++++++++++++++++++++++++-
> tools/objtool/noreturns.h | 2 ++
> 7 files changed, 103 insertions(+), 12 deletions(-)
>
>
> base-commit: b1263411112305acf2af728728591465becb45b0
> --
> 2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool`
2024-07-25 18:33 [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Miguel Ojeda
2024-07-25 18:33 ` [PATCH v3 6/6] objtool/kbuild/rust: enable objtool for Rust Miguel Ojeda
2024-07-25 19:10 ` [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Benno Lossin
@ 2024-08-18 21:34 ` Miguel Ojeda
2 siblings, 0 replies; 4+ messages in thread
From: Miguel Ojeda @ 2024-08-18 21:34 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Josh Poimboeuf, Peter Zijlstra, Thomas Gleixner, Ingo Molnar,
Borislav Petkov, Dave Hansen, Masahiro Yamada, x86,
H. Peter Anvin, Nathan Chancellor, Nicolas Schier,
Wedson Almeida Filho, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
rust-for-linux, linux-kernel, patches, linux-kbuild
On Thu, Jul 25, 2024 at 8:35 PM Miguel Ojeda <ojeda@kernel.org> wrote:
>
> Miguel Ojeda (6):
> rust: module: add static pointer to `{init,cleanup}_module()`
> x86/rust: support MITIGATION_RETPOLINE
> x86/rust: support MITIGATION_RETHUNK
> x86/rust: support MITIGATION_SLS
> objtool/rust: list `noreturn` Rust functions
> objtool/kbuild/rust: enable objtool for Rust
>
> arch/x86/Makefile | 7 ++++-
> rust/Makefile | 22 +++++++++------
> rust/macros/module.rs | 12 +++++++++
> scripts/Makefile.build | 9 +++++--
> scripts/generate_rust_target.rs | 15 +++++++++++
> tools/objtool/check.c | 48 ++++++++++++++++++++++++++++++++-
> tools/objtool/noreturns.h | 2 ++
> 7 files changed, 103 insertions(+), 12 deletions(-)
Applied to `rust-next` -- thanks everyone!
In the `noreturn` patch:
[ Kees agrees this should be automated and Peter says:
So it would be fairly simple to make objtool consume a magic section
emitted by the compiler.. I think we've asked the compiler folks
for that at some point even, but I don't have clear recollections.
We will ask upstream Rust about it. And if they agree, then perhaps
we can get Clang/GCC to implement something similar too -- for this
sort of thing we can take advantage of the shorter cycles of `rustc`
as well as their unstable features concept to experiment.
Gary proposed using DWARF (though it would need to be available), and
wrote a proof of concept script using the `object` and `gimli` crates:
https://gist.github.com/nbdd0121/449692570622c2f46a29ad9f47c3379a
- Miguel ]
[ Added `len_mismatch_fail` symbol for new `kernel` crate code merged
since then as well as 3 more `core::panicking` symbols that appear
in `RUST_DEBUG_ASSERTIONS=y` builds. - Miguel ]
Cheers,
Miguel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-08-18 21:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-25 18:33 [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Miguel Ojeda
2024-07-25 18:33 ` [PATCH v3 6/6] objtool/kbuild/rust: enable objtool for Rust Miguel Ojeda
2024-07-25 19:10 ` [PATCH v3 0/6] Rust: support `CPU_MITIGATIONS` and enable `objtool` Benno Lossin
2024-08-18 21:34 ` Miguel Ojeda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox