From 8084ea55b787790e656b78d94bc2433bb47d8deb Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 13 Jul 2023 21:59:53 -0700 Subject: [PATCH] boards/arc/qemu_arc: Disable use of branch delay slots I spent several hours debugging a weird stack pointer corruption bug and discovered that QEMU appears to mess up register contents when an interrupt fires during the execution of a branch with a delay slot. Instead of trying to fix qemu, let's just tell the compiler to not generate code that uses the branch instructions with delay slots. Closes: #60071 Signed-off-by: Keith Packard --- boards/arc/qemu_arc/qemu_arc_em_defconfig | 1 + boards/arc/qemu_arc/qemu_arc_hs5x_defconfig | 1 + boards/arc/qemu_arc/qemu_arc_hs6x_defconfig | 1 + boards/arc/qemu_arc/qemu_arc_hs_defconfig | 1 + boards/arc/qemu_arc/qemu_arc_hs_xip_defconfig | 1 + 5 files changed, 5 insertions(+) diff --git a/boards/arc/qemu_arc/qemu_arc_em_defconfig b/boards/arc/qemu_arc/qemu_arc_em_defconfig index 0d6f4052e64..b713b193bc0 100644 --- a/boards/arc/qemu_arc/qemu_arc_em_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_em_defconfig @@ -10,3 +10,4 @@ CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_QEMU_ICOUNT_SHIFT=6 CONFIG_ARC_MPU_ENABLE=y +CONFIG_COMPILER_OPT="-fno-delayed-branch" diff --git a/boards/arc/qemu_arc/qemu_arc_hs5x_defconfig b/boards/arc/qemu_arc/qemu_arc_hs5x_defconfig index f8e50bcf3f8..9459d6f70bb 100644 --- a/boards/arc/qemu_arc/qemu_arc_hs5x_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_hs5x_defconfig @@ -10,3 +10,4 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_QEMU_ICOUNT_SHIFT=6 +CONFIG_COMPILER_OPT="-fno-delayed-branch" diff --git a/boards/arc/qemu_arc/qemu_arc_hs6x_defconfig b/boards/arc/qemu_arc/qemu_arc_hs6x_defconfig index 8ab0d4ae0f0..3d2804c33f7 100644 --- a/boards/arc/qemu_arc/qemu_arc_hs6x_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_hs6x_defconfig @@ -10,3 +10,4 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_QEMU_ICOUNT_SHIFT=6 +CONFIG_COMPILER_OPT="-fno-delayed-branch" diff --git a/boards/arc/qemu_arc/qemu_arc_hs_defconfig b/boards/arc/qemu_arc/qemu_arc_hs_defconfig index 911702aab21..5ff910926f8 100644 --- a/boards/arc/qemu_arc/qemu_arc_hs_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_hs_defconfig @@ -10,3 +10,4 @@ CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_QEMU_ICOUNT_SHIFT=6 CONFIG_ARC_MPU_ENABLE=y +CONFIG_COMPILER_OPT="-fno-delayed-branch" diff --git a/boards/arc/qemu_arc/qemu_arc_hs_xip_defconfig b/boards/arc/qemu_arc/qemu_arc_hs_xip_defconfig index bec83e7c5ae..b072c7692b6 100644 --- a/boards/arc/qemu_arc/qemu_arc_hs_xip_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_hs_xip_defconfig @@ -10,3 +10,4 @@ CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_QEMU_ICOUNT_SHIFT=6 CONFIG_ARC_MPU_ENABLE=y +CONFIG_COMPILER_OPT="-fno-delayed-branch"