diff options
-rw-r--r-- | cortex-m-rt/asm.s | 9 | ||||
-rw-r--r-- | cortex-m-rt/bin/thumbv6m-none-eabi.a | bin | 920 -> 882 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7em-none-eabi.a | bin | 920 -> 882 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7em-none-eabihf.a | bin | 920 -> 882 bytes | |||
-rw-r--r-- | cortex-m-rt/bin/thumbv7m-none-eabi.a | bin | 920 -> 882 bytes | |||
-rw-r--r-- | cortex-m-rt/link.x.in | 2 | ||||
-rw-r--r-- | cortex-m-rt/macros/src/lib.rs | 1 | ||||
-rw-r--r-- | cortex-m-rt/src/lib.rs | 1 |
8 files changed, 10 insertions, 3 deletions
diff --git a/cortex-m-rt/asm.s b/cortex-m-rt/asm.s index a5748a5..4636bc3 100644 --- a/cortex-m-rt/asm.s +++ b/cortex-m-rt/asm.s @@ -1,7 +1,10 @@ - .section .text.HardFault + # LLD requires that the section flags are explicitly set here + .section .HardFault, "ax" .global HardFault + # .type and .thumb_func are both required; otherwise its Thumb bit does not + # get set and an invalid vector table is generated + .type HardFault,%function .thumb_func HardFault: - push {r0, lr} mrs r0, MSP - bl UserHardFault + b UserHardFault diff --git a/cortex-m-rt/bin/thumbv6m-none-eabi.a b/cortex-m-rt/bin/thumbv6m-none-eabi.a Binary files differindex 4a2f178..9857abc 100644 --- a/cortex-m-rt/bin/thumbv6m-none-eabi.a +++ b/cortex-m-rt/bin/thumbv6m-none-eabi.a diff --git a/cortex-m-rt/bin/thumbv7em-none-eabi.a b/cortex-m-rt/bin/thumbv7em-none-eabi.a Binary files differindex e5ffd6f..3f8b8fe 100644 --- a/cortex-m-rt/bin/thumbv7em-none-eabi.a +++ b/cortex-m-rt/bin/thumbv7em-none-eabi.a diff --git a/cortex-m-rt/bin/thumbv7em-none-eabihf.a b/cortex-m-rt/bin/thumbv7em-none-eabihf.a Binary files differindex e5ffd6f..3f8b8fe 100644 --- a/cortex-m-rt/bin/thumbv7em-none-eabihf.a +++ b/cortex-m-rt/bin/thumbv7em-none-eabihf.a diff --git a/cortex-m-rt/bin/thumbv7m-none-eabi.a b/cortex-m-rt/bin/thumbv7m-none-eabi.a Binary files differindex d3cc07e..43c843e 100644 --- a/cortex-m-rt/bin/thumbv7m-none-eabi.a +++ b/cortex-m-rt/bin/thumbv7m-none-eabi.a diff --git a/cortex-m-rt/link.x.in b/cortex-m-rt/link.x.in index fde4e70..e6e0d3b 100644 --- a/cortex-m-rt/link.x.in +++ b/cortex-m-rt/link.x.in @@ -86,6 +86,8 @@ SECTIONS .text _stext : { *(.text .text.*); + *(.HardFault); + *(.UserHardFault); } > FLASH /* ### .rodata */ diff --git a/cortex-m-rt/macros/src/lib.rs b/cortex-m-rt/macros/src/lib.rs index 50cea38..0032837 100644 --- a/cortex-m-rt/macros/src/lib.rs +++ b/cortex-m-rt/macros/src/lib.rs @@ -394,6 +394,7 @@ pub fn exception(args: TokenStream, input: TokenStream) -> TokenStream { quote!( #[export_name = "UserHardFault"] + #[link_section = ".UserHardFault"] #(#attrs)* pub #unsafety extern "C" fn #hash(#arg) -> ! { extern crate cortex_m_rt; diff --git a/cortex-m-rt/src/lib.rs b/cortex-m-rt/src/lib.rs index 7488cc9..5fb5057 100644 --- a/cortex-m-rt/src/lib.rs +++ b/cortex-m-rt/src/lib.rs @@ -532,6 +532,7 @@ pub unsafe extern "C" fn Reset() -> ! { #[allow(unused_variables)] #[doc(hidden)] +#[link_section = ".UserHardFault"] #[no_mangle] pub unsafe extern "C" fn UserHardFault_(ef: &ExceptionFrame) -> ! { loop { |