From 1c99d9f200fee6a2fe708d2b9263cd48fbeddf9b Mon Sep 17 00:00:00 2001 From: alfred gedeon Date: Tue, 22 Dec 2020 22:39:33 -0800 Subject: [PATCH] Prevent optimization in reset handler for QEMU MPS2 (#484) --- .../Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c | 5 ++++- FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c index 7ae42769d..06ea98b50 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c +++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c @@ -41,7 +41,10 @@ void __attribute__((weak)) EthernetISR (void); extern uint32_t _estack, _sidata, _sdata, _edata, _sbss, _ebss; -__attribute__((naked)) void Reset_Handler(void) +/* Prevent optimization so gcc does not replace code with memcpy */ +__attribute__((optimize("O0"))) +__attribute__((naked)) +void Reset_Handler(void) { // set stack pointer __asm volatile ("ldr r0, =_estack"); diff --git a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c index 7ae42769d..1b09e8d9a 100644 --- a/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c +++ b/FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c @@ -41,8 +41,11 @@ void __attribute__((weak)) EthernetISR (void); extern uint32_t _estack, _sidata, _sdata, _edata, _sbss, _ebss; -__attribute__((naked)) void Reset_Handler(void) - { +/* Prevent optimization so gcc does not replace code with memcpy */ +__attribute__((optimize("O0"))) +__attribute__((naked)) +void Reset_Handler(void) +{ // set stack pointer __asm volatile ("ldr r0, =_estack"); __asm volatile ("mov sp, r0");