* [PATCH v2] rust: build: remap path to avoid absolute path
@ 2026-02-26 15:21 Gary Guo
2026-02-26 19:21 ` Nicolas Schier
2026-03-06 10:07 ` Miguel Ojeda
0 siblings, 2 replies; 3+ messages in thread
From: Gary Guo @ 2026-02-26 15:21 UTC (permalink / raw)
To: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: Thomas Weißschuh , Janne Grunau, Asahi Lina, linux-kbuild,
linux-kernel, rust-for-linux
From: Gary Guo <gary@garyguo.net>
When building with a out directory (O=), absolute paths can end up in the
file name in `#[track_caller]` or the panic message. This is not desirable
as this leaks the exact path being used to build the kernel and means that
the same location can appear in two forms (relative or absolute).
This is reported by Asahi [1] and is being workaround in [2] previously to
force everything to be absolute path. Using absolute path for everything
sovles the inconsistency, however it does not address the reproducibility
issue. So, fix this by remap all absolute paths to srctree to relative path
instead.
This is previously attemped in commit dbdffaf50ff9 ("kbuild, rust: use
-fremap-path-prefix to make paths relative") but that was reverted as
remapping debug info causes some tool (e.g. objdump) to be unable to find
sources. Therefore, use `--remap-path-scope` to only remap macros but leave
debuginfo untouched. `--remap-path-scope` is only stable in Rust 1.95, so
use `rustc-option` to detect its presence. This feature has been available
as `-Zremap-path-scope` for all versions that we support; hwoever due to
bugs in the Rust compiler, it does not work reliably until 1.94. I opted to
not enable it for 1.94 as it's just a single version that we missed.
This change can be validated by building a kernel with O=, strip debug info
on vmlinux, and then check if the absolute path exists in `strings
vmlinux`, e.g. `strings vmlinux |grep \/home`.
Reported-by: Janne Grunau <j@jannau.net>
Reported-by: Asahi Lina <lina+kernel@asahilina.net>
Closes: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/Per-call-site.20data.20and.20lock.20class.20keys/near/572466559 [1]
Link: https://github.com/AsahiLinux/linux/commit/54ab88878869036c9d6620101bfe17a81e88c2f9 [2]
Signed-off-by: Gary Guo <gary@garyguo.net>
---
Changes since v1:
- Restrict remap scope to macro only
- Add to RUSTFLAGS instead of adding directly to scripts/Makefile.build
---
Makefile | 3 +++
rust/Makefile | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index e944c6e71e81..f6a54bf1db00 100644
--- a/Makefile
+++ b/Makefile
@@ -1113,6 +1113,9 @@ KBUILD_CFLAGS += -fno-builtin-wcslen
# change __FILE__ to the relative path to the source directory
ifdef building_out_of_srctree
KBUILD_CPPFLAGS += -fmacro-prefix-map=$(srcroot)/=
+ifeq ($(call rustc-option-yn, --remap-path-scope=macro),y)
+KBUILD_RUSTFLAGS += --remap-path-prefix=$(srcroot)/= --remap-path-scope=macro
+endif
endif
# include additional Makefiles when needed
diff --git a/rust/Makefile b/rust/Makefile
index 629b3bdd2b20..9a04022643ce 100644
--- a/rust/Makefile
+++ b/rust/Makefile
@@ -148,7 +148,8 @@ doctests_modifiers_workaround := $(rustdoc_modifiers_workaround)$(if $(call rust
quiet_cmd_rustdoc = RUSTDOC $(if $(rustdoc_host),H, ) $<
cmd_rustdoc = \
OBJTREE=$(abspath $(objtree)) \
- $(RUSTDOC) $(filter-out $(skip_flags) --remap-path-prefix=%,$(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \
+ $(RUSTDOC) $(filter-out $(skip_flags) --remap-path-prefix=% --remap-path-scope=%, \
+ $(if $(rustdoc_host),$(rust_common_flags),$(rust_flags))) \
$(rustc_target_flags) -L$(objtree)/$(obj) \
-Zunstable-options --generate-link-to-definition \
--output $(rustdoc_output) \
@@ -334,7 +335,7 @@ quiet_cmd_rustdoc_test_kernel = RUSTDOC TK $<
rm -rf $(objtree)/$(obj)/test/doctests/kernel; \
mkdir -p $(objtree)/$(obj)/test/doctests/kernel; \
OBJTREE=$(abspath $(objtree)) \
- $(RUSTDOC) --test $(filter-out --remap-path-prefix=%,$(rust_flags)) \
+ $(RUSTDOC) --test $(filter-out --remap-path-prefix=% --remap-path-scope=%,$(rust_flags)) \
-L$(objtree)/$(obj) --extern ffi --extern pin_init \
--extern kernel --extern build_error --extern macros \
--extern bindings --extern uapi \
base-commit: 877552aa875839314afad7154b5a561889e87ea9
--
2.51.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v2] rust: build: remap path to avoid absolute path
2026-02-26 15:21 [PATCH v2] rust: build: remap path to avoid absolute path Gary Guo
@ 2026-02-26 19:21 ` Nicolas Schier
2026-03-06 10:07 ` Miguel Ojeda
1 sibling, 0 replies; 3+ messages in thread
From: Nicolas Schier @ 2026-02-26 19:21 UTC (permalink / raw)
To: Gary Guo
Cc: Nathan Chancellor, Miguel Ojeda, Boqun Feng, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, Thomas Weißschuh, Janne Grunau, Asahi Lina,
linux-kbuild, linux-kernel, rust-for-linux
On Thu, Feb 26, 2026 at 03:21:11PM +0000, Gary Guo wrote:
> From: Gary Guo <gary@garyguo.net>
>
> When building with a out directory (O=), absolute paths can end up in the
> file name in `#[track_caller]` or the panic message. This is not desirable
> as this leaks the exact path being used to build the kernel and means that
> the same location can appear in two forms (relative or absolute).
>
> This is reported by Asahi [1] and is being workaround in [2] previously to
> force everything to be absolute path. Using absolute path for everything
> sovles the inconsistency, however it does not address the reproducibility
> issue. So, fix this by remap all absolute paths to srctree to relative path
> instead.
>
> This is previously attemped in commit dbdffaf50ff9 ("kbuild, rust: use
> -fremap-path-prefix to make paths relative") but that was reverted as
> remapping debug info causes some tool (e.g. objdump) to be unable to find
> sources. Therefore, use `--remap-path-scope` to only remap macros but leave
> debuginfo untouched. `--remap-path-scope` is only stable in Rust 1.95, so
> use `rustc-option` to detect its presence. This feature has been available
> as `-Zremap-path-scope` for all versions that we support; hwoever due to
> bugs in the Rust compiler, it does not work reliably until 1.94. I opted to
> not enable it for 1.94 as it's just a single version that we missed.
>
> This change can be validated by building a kernel with O=, strip debug info
> on vmlinux, and then check if the absolute path exists in `strings
> vmlinux`, e.g. `strings vmlinux |grep \/home`.
>
> Reported-by: Janne Grunau <j@jannau.net>
> Reported-by: Asahi Lina <lina+kernel@asahilina.net>
> Closes: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/Per-call-site.20data.20and.20lock.20class.20keys/near/572466559 [1]
> Link: https://github.com/AsahiLinux/linux/commit/54ab88878869036c9d6620101bfe17a81e88c2f9 [2]
> Signed-off-by: Gary Guo <gary@garyguo.net>
> ---
> Changes since v1:
> - Restrict remap scope to macro only
> - Add to RUSTFLAGS instead of adding directly to scripts/Makefile.build
> ---
> Makefile | 3 +++
> rust/Makefile | 5 +++--
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
Acked-by: Nicolas Schier <nsc@kernel.org> # kbuild
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v2] rust: build: remap path to avoid absolute path
2026-02-26 15:21 [PATCH v2] rust: build: remap path to avoid absolute path Gary Guo
2026-02-26 19:21 ` Nicolas Schier
@ 2026-03-06 10:07 ` Miguel Ojeda
1 sibling, 0 replies; 3+ messages in thread
From: Miguel Ojeda @ 2026-03-06 10:07 UTC (permalink / raw)
To: Gary Guo
Cc: Nathan Chancellor, Nicolas Schier, Miguel Ojeda, Boqun Feng,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Thomas Weißschuh,
Janne Grunau, Asahi Lina, linux-kbuild, linux-kernel,
rust-for-linux
On Thu, Feb 26, 2026 at 4:21 PM Gary Guo <gary@kernel.org> wrote:
>
> From: Gary Guo <gary@garyguo.net>
>
> When building with a out directory (O=), absolute paths can end up in the
> file name in `#[track_caller]` or the panic message. This is not desirable
> as this leaks the exact path being used to build the kernel and means that
> the same location can appear in two forms (relative or absolute).
>
> This is reported by Asahi [1] and is being workaround in [2] previously to
> force everything to be absolute path. Using absolute path for everything
> sovles the inconsistency, however it does not address the reproducibility
> issue. So, fix this by remap all absolute paths to srctree to relative path
> instead.
>
> This is previously attemped in commit dbdffaf50ff9 ("kbuild, rust: use
> -fremap-path-prefix to make paths relative") but that was reverted as
> remapping debug info causes some tool (e.g. objdump) to be unable to find
> sources. Therefore, use `--remap-path-scope` to only remap macros but leave
> debuginfo untouched. `--remap-path-scope` is only stable in Rust 1.95, so
> use `rustc-option` to detect its presence. This feature has been available
> as `-Zremap-path-scope` for all versions that we support; hwoever due to
> bugs in the Rust compiler, it does not work reliably until 1.94. I opted to
> not enable it for 1.94 as it's just a single version that we missed.
>
> This change can be validated by building a kernel with O=, strip debug info
> on vmlinux, and then check if the absolute path exists in `strings
> vmlinux`, e.g. `strings vmlinux |grep \/home`.
>
> Reported-by: Janne Grunau <j@jannau.net>
> Reported-by: Asahi Lina <lina+kernel@asahilina.net>
> Closes: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/Per-call-site.20data.20and.20lock.20class.20keys/near/572466559 [1]
> Link: https://github.com/AsahiLinux/linux/commit/54ab88878869036c9d6620101bfe17a81e88c2f9 [2]
> Signed-off-by: Gary Guo <gary@garyguo.net>
Applied to `rust-fixes` -- thanks everyone!
[ Reworded for few typos. - Miguel ]
Cheers,
Miguel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-03-06 10:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-26 15:21 [PATCH v2] rust: build: remap path to avoid absolute path Gary Guo
2026-02-26 19:21 ` Nicolas Schier
2026-03-06 10:07 ` Miguel Ojeda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox