[PATCH] libdebugger: Work around assert when using _Thread_Executing.
Chris Johns
chrisj at rtems.org
Fri Apr 14 07:15:49 UTC 2017
Using _Thread_Executing with RTEMS_DEBUG results in an `assert` if
the server accesses invalid memory.
Updates #2993.
---
cpukit/libdebugger/rtems-debugger-arm.c | 3 ++-
cpukit/libdebugger/rtems-debugger-target.c | 9 ++++++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/cpukit/libdebugger/rtems-debugger-arm.c b/cpukit/libdebugger/rtems-debugger-arm.c
index 8126c1471e..200d758a6b 100644
--- a/cpukit/libdebugger/rtems-debugger-arm.c
+++ b/cpukit/libdebugger/rtems-debugger-arm.c
@@ -717,7 +717,8 @@ target_exception(CPU_Exception_frame* frame)
"mov r3, #0\n" \
"str r3, [r2]\n" /* clear the FPU frame pointer */ \
EXCEPTION_ENTRY_FPU(frame_fpu_size) \
- "msr cpsr, r1\n" /* restore the irq mask */ \
+ "bic r1, r1, %[psr_i]\n" /* clear irq mask, debug checks */ \
+ "msr cpsr, r1\n" /* restore the state with irq mask clear */ \
ASM_THUMB_MODE \
: ARM_SWITCH_REG_ASM, \
[o_frame] "=r" (_frame) \
diff --git a/cpukit/libdebugger/rtems-debugger-target.c b/cpukit/libdebugger/rtems-debugger-target.c
index cd1565463e..42772c09c2 100644
--- a/cpukit/libdebugger/rtems-debugger-target.c
+++ b/cpukit/libdebugger/rtems-debugger-target.c
@@ -273,6 +273,8 @@ rtems_debugger_target_swbreak_remove(void)
return r;
}
+#define DIE_ON_ASSERT 0
+
rtems_debugger_target_exc_action
rtems_debugger_target_exception(CPU_Exception_frame* frame)
{
@@ -284,7 +286,12 @@ rtems_debugger_target_exception(CPU_Exception_frame* frame)
if (!rtems_interrupt_is_in_progress()) {
rtems_debugger_threads* threads = rtems_debugger->threads;
- Thread_Control* thread = _Thread_Executing;
+ #if USE_THREAD_EXECUTING
+ Thread_Control* thread = _Thread_Executing;
+ #else
+ const Per_CPU_Control* cpu = _Per_CPU_Get_snapshot();
+ Thread_Control* thread = _Per_CPU_Get_executing(cpu);
+ #endif
rtems_id* excludes;
const rtems_id tid = thread->Object.id;
DB_UINT pc;
--
2.11.0
More information about the devel
mailing list