Created
January 4, 2020 01:04
-
-
Save mcdoll/22365c871885f6b31ed2f24cbd85c3e0 to your computer and use it in GitHub Desktop.
atomic_cxchg_acq crashing on arm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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