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 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel