Running `make rusttest` with `ARCH=` set to an architecture other than the host's may fail in the future, e.g. `ARCH=arm64` on an x86_64 host: error: alignment must be a power of 2 --> rust/kernel/jump_label.rs:51:13 | 51 | include!(concat!(env!("OBJTREE"), "/rust/kernel/generated_arch_static_branch_asm.rs")); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | note: instantiated into assembly here --> <inline asm>:3:10 | 3 | .align 3 | ^ The reason is that `rusttest` builds the kernel crate as a host library: it passes the `CONFIG_*` cfgs of the configured architecture, but not `--target`, so code generation happens for the host. `arch_static_branch!` then selects the arch-specific inline asm arm based on CONFIG_*, and the host assembler rejects it. This does not happen with the current master because `arch_static_branch!` has no user inside the kernel crate itself yet, but fix it now to avoid surprises later.
Unified · Split
| @@ -44,6 +44,7 @@ const _: &str = include!(concat!( · 43 unmodified lines | |||
| 44 | 44 | ||
| 45 | #[macro_export] | 45 | #[macro_export] |
| 46 | #[doc(hidden)] | 46 | #[doc(hidden)] |
| 47 | #[cfg(not(testlib))] | ||
| 47 | #[cfg(CONFIG_JUMP_LABEL)] | 48 | #[cfg(CONFIG_JUMP_LABEL)] |
| 48 | macro_rules! arch_static_branch { | 49 | macro_rules! arch_static_branch { |
| 49 | ($key:path, $keytyp:ty, $field:ident, $branch:expr) => {'my_label: { | 50 | ($key:path, $keytyp:ty, $field:ident, $branch:expr) => {'my_label: { |
| @@ -61,6 +62,17 @@ macro_rules! arch_static_branch { · 11 unmodified lines | |||
| 61 | }}; | 62 | }}; |
| 62 | } | 63 | } |
| 63 | 64 | ||
| 65 | #[macro_export] | ||
| 66 | #[doc(hidden)] | ||
| 67 | #[cfg(testlib)] | ||
| 68 | #[cfg(CONFIG_JUMP_LABEL)] | ||
| 69 | macro_rules! arch_static_branch { | ||
| 70 | ($key:path, $keytyp:ty, $field:ident, $branch:expr) => { | ||
| 71 | // The asm falls through until patched, which never happens on the host. | ||
| 72 | false | ||
| 73 | }; | ||
| 74 | } | ||
| 75 | |||
| 64 | #[cfg(CONFIG_JUMP_LABEL)] | 76 | #[cfg(CONFIG_JUMP_LABEL)] |
| 65 | pub use arch_static_branch; | 77 | pub use arch_static_branch; |
| 66 | 78 | ||