Skip to content

Commit 0a9b05f

Browse files
ojedawangjinchao
authored andcommitted
rust: workaround rustdoc target modifiers bug
Starting with Rust 1.88.0 (released 2025-06-26), `rustdoc` complains about a target modifier mismatch in configurations where `-Zfixed-x18` is passed: error: mixing `-Zfixed-x18` will cause an ABI mismatch in crate `rust_out` | = help: the `-Zfixed-x18` flag modifies the ABI so Rust crates compiled with different values of this flag cannot be used together safely = note: unset `-Zfixed-x18` in this crate is incompatible with `-Zfixed-x18=` in dependency `core` = help: set `-Zfixed-x18=` in this crate or unset `-Zfixed-x18` in `core` = help: if you are sure this will not cause problems, you may use `-Cunsafe-allow-abi-mismatch=fixed-x18` to silence this error The reason is that `rustdoc` was not passing the target modifiers when configuring the session options, and thus it would report a mismatch that did not exist as soon as a target modifier is used in a dependency. We did not notice it in the kernel until now because `-Zfixed-x18` has been a target modifier only since 1.88.0 (and it is the only one we use so far). The issue has been reported upstream [1] and a fix has been submitted [2], including a test similar to the kernel case. [ This is now fixed upstream (thanks Guillaume for the quick review), so it will be fixed in Rust 1.90.0 (expected 2025-09-18). - Miguel ] Meanwhile, conditionally pass `-Cunsafe-allow-abi-mismatch=fixed-x18` to workaround the issue on our side. Cc: [email protected] # Needed in 6.12.y and later (Rust is pinned in older LTSs). Reported-by: Konrad Dybcio <[email protected]> Closes: https://lore.kernel.org/rust-for-linux/[email protected]/ Link: rust-lang/rust#144521 [1] Link: rust-lang/rust#144523 [2] Reviewed-by: Alice Ryhl <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Miguel Ojeda <[email protected]>
1 parent 51a9433 commit 0a9b05f

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

rust/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ core-cfgs = \
6565

6666
core-edition := $(if $(call rustc-min-version,108700),2024,2021)
6767

68+
# `rustdoc` did not save the target modifiers, thus workaround for
69+
# the time being (https://github.com/rust-lang/rust/issues/144521).
70+
rustdoc_modifiers_workaround := $(if $(call rustc-min-version,108800),-Cunsafe-allow-abi-mismatch=fixed-x18)
71+
6872
# `rustc` recognizes `--remap-path-prefix` since 1.26.0, but `rustdoc` only
6973
# since Rust 1.81.0. Moreover, `rustdoc` ICEs on out-of-tree builds since Rust
7074
# 1.82.0 (https://github.com/rust-lang/rust/issues/138520). Thus workaround both
@@ -77,6 +81,7 @@ quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
7781
-Zunstable-options --generate-link-to-definition \
7882
--output $(rustdoc_output) \
7983
--crate-name $(subst rustdoc-,,$@) \
84+
$(rustdoc_modifiers_workaround) \
8085
$(if $(rustdoc_host),,--sysroot=/dev/null) \
8186
@$(objtree)/include/generated/rustc_cfg $<
8287

@@ -215,6 +220,7 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $<
215220
--extern bindings --extern uapi \
216221
--no-run --crate-name kernel -Zunstable-options \
217222
--sysroot=/dev/null \
223+
$(rustdoc_modifiers_workaround) \
218224
--test-builder $(objtree)/scripts/rustdoc_test_builder \
219225
$< $(rustdoc_test_kernel_quiet); \
220226
$(objtree)/scripts/rustdoc_test_gen

0 commit comments

Comments
 (0)