[PATCH v2] libdebugger: Fix for ARMv7-M with -O0 optimization
chrisj at rtems.org
chrisj at rtems.org
Tue Apr 9 07:53:09 UTC 2019
From: Chris Johns <chrisj at rtems.org>
---
cpukit/libdebugger/rtems-debugger-arm.c | 24 ++++++++++++++++++----
cpukit/libdebugger/rtems-debugger-server.c | 2 +-
2 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/cpukit/libdebugger/rtems-debugger-arm.c b/cpukit/libdebugger/rtems-debugger-arm.c
index c71af42a02..9e6650886f 100644
--- a/cpukit/libdebugger/rtems-debugger-arm.c
+++ b/cpukit/libdebugger/rtems-debugger-arm.c
@@ -734,7 +734,7 @@ target_exception(CPU_Exception_frame* frame)
* Note, the code currently assumes cp15 has been set up to match the
* instruction set being used.
*/
-#define EXCEPTION_ENTRY_EXC() \
+#define EXCEPTION_ENTRY_EXC_V4() \
__asm__ volatile( \
ASM_ARM_MODE \
"sub sp, %[frame_size]\n" /* alloc the frame and CPSR */ \
@@ -777,7 +777,7 @@ target_exception(CPU_Exception_frame* frame)
#define EXCEPTION_ENTRY_FPU(frame_fpu_size)
#endif /* ARM_MULTILIB_VFP */
-#define EXCEPTION_ENTRY_THREAD(_frame) \
+#define EXCEPTION_ENTRY_THREAD_V4(_frame) \
__asm__ volatile( \
ASM_ARM_MODE \
"ldr lr, [sp]\n" /* recover the link reg */ \
@@ -861,7 +861,7 @@ target_exception(CPU_Exception_frame* frame)
* Note, the code currently assumes cp15 has been set up to match the
* instruction set being used.
*/
-#define EXCEPTION_EXIT_THREAD(_frame) \
+#define EXCEPTION_EXIT_THREAD_V4(_frame) \
__asm__ volatile( \
ASM_ARM_MODE \
"mov r0, %[i_frame]\n" /* get the frame */ \
@@ -901,7 +901,7 @@ target_exception(CPU_Exception_frame* frame)
[i_frame] "r" (_frame) \
: "r0", "r1", "r2", "r3", "r4", "r5", "r6", "memory")
-#define EXCEPTION_EXIT_EXC() \
+#define EXCEPTION_EXIT_EXC_V4() \
__asm__ volatile( \
ASM_ARM_MODE \
"ldr lr, [sp]\n" /* recover the link reg */ \
@@ -913,6 +913,22 @@ target_exception(CPU_Exception_frame* frame)
: [frame_size] "i" (EXCEPTION_FRAME_SIZE) \
: "memory")
+/**
+ * ARM Variant support.
+ */
+#if defined(ARM_MULTILIB_ARCH_V4)
+ #define EXCEPTION_ENTRY_EXC() EXCEPTION_ENTRY_EXC_V4()
+ #define EXCEPTION_ENTRY_THREAD(_frame) EXCEPTION_ENTRY_THREAD_V4(_frame)
+ #define EXCEPTION_EXIT_THREAD(_frame) EXCEPTION_EXIT_THREAD_V4(_frame)
+ #define EXCEPTION_EXIT_EXC() EXCEPTION_EXIT_EXC_V4()
+#elif defined(ARM_MULTILIB_ARCH_V7M)
+ #define EXCEPTION_ENTRY_EXC() (void) arm_switch_reg
+ #define EXCEPTION_ENTRY_THREAD(_frame) (_frame) = NULL
+ #define EXCEPTION_EXIT_THREAD(_frame) (_frame) = NULL
+ #define EXCEPTION_EXIT_EXC() (void) arm_switch_reg
+#else
+ #error ARM architecture is not supported.
+#endif
static void __attribute__((naked))
target_exception_undefined_instruction(void)
diff --git a/cpukit/libdebugger/rtems-debugger-server.c b/cpukit/libdebugger/rtems-debugger-server.c
index 298bb95989..de841292cb 100644
--- a/cpukit/libdebugger/rtems-debugger-server.c
+++ b/cpukit/libdebugger/rtems-debugger-server.c
@@ -1646,7 +1646,7 @@ remote_packets(uint8_t* buffer, size_t size)
static void
rtems_debugger_events(rtems_task_argument arg)
{
- int r;
+ int r = 0;
if (rtems_debugger_verbose())
rtems_debugger_printf("rtems-db: events running\n");
--
2.19.1
More information about the devel
mailing list