Skip to content

Instantly share code, notes, and snippets.

@mcdoll
Created January 4, 2020 01:04
Show Gist options
  • Save mcdoll/22365c871885f6b31ed2f24cbd85c3e0 to your computer and use it in GitHub Desktop.
Save mcdoll/22365c871885f6b31ed2f24cbd85c3e0 to your computer and use it in GitHub Desktop.
atomic_cxchg_acq crashing on arm
{
"arch": "arm",
"data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64",
"env": "",
"executables": true,
"features": "+strict-align,+v7,+a8",
"linker-flavor": "ld.lld",
"linker": "rust-lld",
"llvm-target": "arm-none-eabi",
"max-atomic-width": 64,
"os": "none",
"target-c-int-width": "32",
"target-endian": "little",
"target-pointer-width": "32",
"vendor": "unknown",
"panic-strategy": "abort"
}
Rust code:
pub extern fn kernel_main() -> ! {
let mut serial = uart::Uart::new(uart::UartNumber::Uart0);
let mut test_u8: u8 = 0;
let (output, _) = unsafe { intrinsics::atomic_cxchg_acq(&mut test_u8, 0, 1) };
if output != 0 { writeln!(serial, "Kernel is running.").unwrap(); }
loop {};
}
Corresponding assembler code
c00101f0 rustybeagle::kernel_main::h8e440f3903a19ccb:
c00101f0: 28 d0 4d e2 sub sp, sp, #40
c00101f4: 00 00 a0 e3 mov r0, #0
c00101f8: 00 10 09 e3 <unknown>
c00101fc: 04 00 cd e5 strb r0, [sp, #4]
c0010200: e0 14 44 e3 <unknown>
c0010204: 0b 00 cd e5 strb r0, [sp, #11]
c0010208: 0b 00 8d e2 add r0, sp, #11
c001020c: 00 10 8d e5 str r1, [sp]
c0010210: 01 10 a0 e3 mov r1, #1
c0010214: 9f 2f d0 e1 ldrexb r2, [r0]
c0010218: 00 00 52 e3 cmp r2, #0
c001021c: 04 00 00 1a bne #16 <rustybeagle::kernel_main::h8e440f3903a19ccb+0x44>
c0010220: 91 2f c0 e1 strexb r2, r1, [r0]
c0010224: 00 00 52 e3 cmp r2, #0
c0010228: f9 ff ff 1a bne #-28 <rustybeagle::kernel_main::h8e440f3903a19ccb+0x24>
c001022c: 5b f0 7f f5 <unknown>
c0010230: 15 00 00 ea b #84 <rustybeagle::kernel_main::h8e440f3903a19ccb+0x9c>
c0010234: 78 10 9f e5 ldr r1, [pc, #120]
c0010238: 0d 20 a0 e1 mov r2, sp
c001023c: 74 00 9f e5 ldr r0, [pc, #116]
c0010240: 1f f0 7f f5 <unknown>
c0010244: 5b f0 7f f5 <unknown>
c0010248: 0c 20 8d e5 str r2, [sp, #12]
c001024c: 00 20 a0 e3 mov r2, #0
c0010250: 04 30 a0 e3 mov r3, #4
c0010254: 24 20 8d e5 str r2, [sp, #36]
c0010258: 00 00 8f e0 add r0, pc, r0
c001025c: 20 30 8d e5 str r3, [sp, #32]
c0010260: 01 10 8f e0 add r1, pc, r1
c0010264: 1c 20 8d e5 str r2, [sp, #28]
c0010268: 18 20 8d e5 str r2, [sp, #24]
c001026c: 01 20 a0 e3 mov r2, #1
c0010270: 14 20 8d e5 str r2, [sp, #20]
c0010274: 10 20 8d e2 add r2, sp, #16
c0010278: 10 00 8d e5 str r0, [sp, #16]
c001027c: 0c 00 8d e2 add r0, sp, #12
c0010280: fb 01 00 eb bl #2028 <core::fmt::write::hc32d22bf39a50971>
c0010284: 00 00 50 e3 cmp r0, #0
c0010288: 00 00 00 1a bne #0 <rustybeagle::kernel_main::h8e440f3903a19ccb+0xa0>
c001028c: fe ff ff ea b #-8 <rustybeagle::kernel_main::h8e440f3903a19ccb+0x9c>
c0010290: 24 00 9f e5 ldr r0, [pc, #36]
c0010294: 10 20 8d e2 add r2, sp, #16
c0010298: 20 30 9f e5 ldr r3, [pc, #32]
c001029c: 2b 10 a0 e3 mov r1, #43
c00102a0: 00 00 8f e0 add r0, pc, r0
c00102a4: 03 30 8f e0 add r3, pc, r3
c00102a8: 0f e0 a0 e1 mov lr, pc
c00102ac: 0e 01 00 ea b #1080 <core::result::unwrap_failed::h2bd4e4401d575dbd>
c00102b0: fe de ff e7 trap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment