summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralfred gedeon <alfred2g@hotmail.com>2020-12-22 22:39:33 -0800
committerGitHub <noreply@github.com>2020-12-22 22:39:33 -0800
commit1c99d9f200fee6a2fe708d2b9263cd48fbeddf9b (patch)
tree431c6124b55e8d520b8c4f5910327cd4354e214c
parent28548e06fea4295528f84eaf02a47d1eef8e9421 (diff)
downloadfreertos-git-1c99d9f200fee6a2fe708d2b9263cd48fbeddf9b.tar.gz
Prevent optimization in reset handler for QEMU MPS2 (#484)
-rw-r--r--FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Echo_Qemu_mps2/init/startup.c5
-rw-r--r--FreeRTOS/Demo/CORTEX_M3_MPS2_QEMU_GCC/init/startup.c7
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");