Skip to content

Commit

Permalink
rust/arm 32-bit: skip Rust stack probing on debug builds
Browse files Browse the repository at this point in the history
In 32-bit arm debug mode, Rust stack probing doesn't appear to
work. Disable it as a temporary measure.

Error message on QEMU virt/cortex-a7:
[   40.708784] rust_stack_probing: Rust stack probing sample (init)
[   40.722177] ------------[ cut here ]------------
[   40.722308] 8<--- cut here ---
[   40.722319] Unable to handle kernel paging request at virtual address aaaaad02
[   40.722326] pgd = (ptrval)
[   40.722344] [aaaaad02] *pgd=00000000
[   40.722367] Internal error: Oops: 5 [#1] SMP ARM
[   40.722373] Modules linked in: rust_stack_probing(+) [last unloaded: rust_miscdev]
[   40.722397] CPU: 1 PID: 39 Comm: kworker/1:2 Tainted: G        W         5.12.0-rc4-gc5e3c2361cdd-dirty #1
[   40.722404] Hardware name: Generic DT based system
[   40.722409] PC is at do_page_fault+0x80/0x3bc
[   40.722415] LR is at do_translation_fault+0x30/0xe8
[   40.722420] pc : [<c0553f78>]    lr : [<c0553e40>]    psr: 60000193
[   40.722426] sp : c403a030  ip : 00000051  fp : c0a1280c
[   40.722432] r10: aaaaad02  r9 : c403a000  r8 : 00000005
[   40.722438] r7 : 00000005  r6 : c403a0a8  r5 : 00000005  r4 : c403a0a8
[   40.722445] r3 : c403a0a8  r2 : c403a0a8  r1 : c403a00c  r0 : aaaaaaaa
[   40.722451] Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment none
[   40.722457] Control: 10c5387d  Table: 4401806a  DAC: 00000051
[   40.722474] Process kworker/1:2 (pid: 39, stack limit = 0x(ptrval))
[   40.722480] Stack: (0xc403a030 to 0xc403a000)
[   40.722486] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722492] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722499] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722504] Exception stack(0xc403a0a8 to 0xc403a0f0)
[   40.722510] a0a0:                   aaaaaaaa c403a00c c403a170 c403a170 c403a170 00000005
[   40.722517] a0c0: c403a170 00000005 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a0f8
[   40.722523] a0e0: c0553e40 c0553f78 60000193 ffffffff
[   40.722529] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722535] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722541] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722548] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722553] Exception stack(0xc403a170 to 0xc403a1b8)
[   40.722559] a160:                                     aaaaaaaa c403a00c c403a238 c403a238
[   40.722565] a180: c403a238 00000005 c403a238 00000005 00000005 c403a000 aaaaad02 c0a1280c
[   40.722572] a1a0: 00000051 c403a1c0 c0553e40 c0553f78 60000193 ffffffff
[   40.722578] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722584] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722590] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722597] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722602] Exception stack(0xc403a238 to 0xc403a280)
[   40.722608] a220:                                                       aaaaaaaa c403a00c
[   40.722615] a240: c403a300 c403a300 c403a300 00000005 c403a300 00000005 00000005 c403a000
[   40.722621] a260: aaaaad02 c0a1280c 00000051 c403a288 c0553e40 c0553f78 60000193 ffffffff
[   40.722628] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722634] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722640] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722646] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722652] Exception stack(0xc403a300 to 0xc403a348)
[   40.722658] a300: aaaaaaaa c403a00c c403a3c c403a3c c403a3c 00000005 c403a3c 00000005
[   40.722665] a320: 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a350 c0553e40 c0553f78
[   40.722671] a340: 60000193 ffffffff
[   40.722677] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722683] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722689] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722696] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722702] Exception stack(0xc403a3c8 to 0xc403a410)
[   40.722708] a3c0:                   aaaaaaaa c403a00c c403a490 c403a490 c403a490 00000005
[   40.722714] a3e0: c403a490 00000005 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a418
[   40.722720] a400: c0553e40 c0553f78 60000193 ffffffff
[   40.722726] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722732] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722738] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722745] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722750] Exception stack(0xc403a490 to 0xc403a4d8)
[   40.722756] a480:                                     aaaaaaaa c403a00c c403a558 c403a558
[   40.722762] a4a0: c403a558 00000005 c403a558 00000005 00000005 c403a000 aaaaad02 c0a1280c
[   40.722769] a4c0: 00000051 c403a4e0 c0553e40 c0553f78 60000193 ffffffff
[   40.722775] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722781] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722788] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722794] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722800] Exception stack(0xc403a558 to 0xc403a5a0)
[   40.722806] a540:                                                       aaaaaaaa c403a00c
[   40.722812] a560: c403a620 c403a620 c403a620 00000005 c403a620 00000005 00000005 c403a000
[   40.722818] a580: aaaaad02 c0a1280c 00000051 c403a5a8 c0553e40 c0553f78 60000193 ffffffff
[   40.722825] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722831] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722837] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722844] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722850] Exception stack(0xc403a620 to 0xc403a668)
[   40.722855] a620: aaaaaaaa c403a00c c403a6e8 c403a6e8 c403a6e8 00000005 c403a6e8 00000005
[   40.722862] a640: 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a670 c0553e40 c0553f78
[   40.722868] a660: 60000193 ffffffff
[   40.722873] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722879] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722886] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722892] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722898] Exception stack(0xc403a6e8 to 0xc403a730)
[   40.722903] a6e0:                   aaaaaaaa c403a00c c403a7b0 c403a7b0 c403a7b0 00000005
[   40.722909] a700: c403a7b0 00000005 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a738
[   40.722915] a720: c0553e40 c0553f78 60000193 ffffffff
[   40.722920] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722927] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.722950] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.722957] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.722963] Exception stack(0xc403a7b0 to 0xc403a7f8)
[   40.722970] a7a0:                                     aaaaaaaa c403a00c c403a878 c403a878
[   40.722976] a7c0: c403a878 00000005 c403a878 00000005 00000005 c403a000 aaaaad02 c0a1280c
[   40.722983] a7e0: 00000051 c403a800 c0553e40 c0553f78 60000193 ffffffff
[   40.722989] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.722996] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.723003] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.723010] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.723016] Exception stack(0xc403a878 to 0xc403a8c0)
[   40.723022] a860:                                                       aaaaaaaa c403a00c
[   40.723029] a880: c403a940 c403a940 c403a940 00000005 c403a940 00000005 00000005 c403a000
[   40.723035] a8a0: aaaaad02 c0a1280c 00000051 c403a8c8 c0553e40 c0553f78 60000193 ffffffff
[   40.723042] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.723048] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.723055] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.723062] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.723068] Exception stack(0xc403a940 to 0xc403a988)
[   40.723074] a940: aaaaaaaa c403a00c c403aa08 c403aa08 c403aa08 00000005 c403aa08 00000005
[   40.723081] a960: 00000005 c403a000 aaaaad02 c0a1280c 00000051 c403a990 c0553e40 c0553f78
[   40.723087] a980: 60000193 ffffffff
[   40.723093] [<c0100a5c>] (__dabt_svc) from [<c0553f78>] (do_page_fault+0x80/0x3bc)
[   40.723099] [<c0553f78>] (do_page_fault) from [<c0553e40>] (do_translation_fault+0x30/0xe8)
[   40.723106] [<c0553e40>] (do_translation_fault) from [<c0116660>] (do_DataAbort+0x3c/0xc4)
[   40.723113] [<c0116660>] (do_DataAbort) from [<c0100a5c>] (__dabt_svc+0x5c/0xa0)
[   40.723119] Exception stack(0xc403aa08 to 0xc403aa50)
[   40.723125] aa00:                   aaaaaaaa c403a00c c403aad0 c403aad0 c403aad0 00000005
[   40.723144] aa20: c403aad0 00000005 00000005 c403a000 aaaaad02 c0a1280c 00000051 c4
[   40.723195] Lost 157 message(s)!
[   40.723449] CPU0: stopping
[   40.804702] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G      D W         5.12.0-rc4-gc5e3c2361cdd-dirty #1
[   40.805864] Hardware name: Generic DT based system
[   40.806561] [<c0111a74>] (unwind_backtrace) from [<c010d140>] (show_stack+0x10/0x14)
[   40.808075] [<c010d140>] (show_stack) from [<c0452d28>] (dump_stack+0xbc/0x110)
[   40.808935] [<c0452d28>] (dump_stack) from [<c0110978>] (ipi_cpu_stop+0x6c/0x78)
[   40.809717] [<c0110978>] (ipi_cpu_stop) from [<c01106b4>] (ipi_handler+0x0/0x20)
[   40.810485] [<c01106b4>] (ipi_handler) from [<00000014>] (0x14)

Signed-off-by: Sven Van Asbroeck <[email protected]>
  • Loading branch information
Sven Van Asbroeck committed Apr 15, 2021
1 parent 85ddb14 commit a4fa98c
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions samples/rust/rust_stack_probing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@ impl KernelModule for RustStackProbing {
fn init() -> KernelResult<Self> {
pr_info!("Rust stack probing sample (init)\n");

// Including this large variable on the stack will trigger
// stack probing on the supported archs.
// This will verify that stack probing does not lead to
// any errors if we need to link `__rust_probestack`.
let x: [u64; 514] = core::hint::black_box([5; 514]);
pr_info!("Large array has length: {}\n", x.len());
if cfg!(all(target_arch = "arm", CONFIG_DEBUG_KERNEL)) {
pr_warn!("Skip Rust stack probing on arm 32-bit debug builds\n");
} else {
// Including this large variable on the stack will trigger
// stack probing on the supported archs.
// This will verify that stack probing does not lead to
// any errors if we need to link `__rust_probestack`.
let x: [u64; 514] = core::hint::black_box([5; 514]);
pr_info!("Large array has length: {}\n", x.len());
}

Ok(RustStackProbing)
}
Expand Down

0 comments on commit a4fa98c

Please sign in to comment.