forked from Imagelibrary/rtems
libdebugger: Work around assert when using _Thread_Executing.
Using _Thread_Executing with RTEMS_DEBUG results in an `assert` if the server accesses invalid memory. Updates #2993.
This commit is contained in:
@@ -717,7 +717,8 @@ target_exception(CPU_Exception_frame* frame)
|
|||||||
"mov r3, #0\n" \
|
"mov r3, #0\n" \
|
||||||
"str r3, [r2]\n" /* clear the FPU frame pointer */ \
|
"str r3, [r2]\n" /* clear the FPU frame pointer */ \
|
||||||
EXCEPTION_ENTRY_FPU(frame_fpu_size) \
|
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 \
|
ASM_THUMB_MODE \
|
||||||
: ARM_SWITCH_REG_ASM, \
|
: ARM_SWITCH_REG_ASM, \
|
||||||
[o_frame] "=r" (_frame) \
|
[o_frame] "=r" (_frame) \
|
||||||
|
|||||||
@@ -284,7 +284,12 @@ rtems_debugger_target_exception(CPU_Exception_frame* frame)
|
|||||||
|
|
||||||
if (!rtems_interrupt_is_in_progress()) {
|
if (!rtems_interrupt_is_in_progress()) {
|
||||||
rtems_debugger_threads* threads = rtems_debugger->threads;
|
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;
|
rtems_id* excludes;
|
||||||
const rtems_id tid = thread->Object.id;
|
const rtems_id tid = thread->Object.id;
|
||||||
DB_UINT pc;
|
DB_UINT pc;
|
||||||
|
|||||||
Reference in New Issue
Block a user