Mercurial > flash_v2
diff packages/kernel/current/src/debug/dbg-thread-demux.c @ 101:c37d3a9e1b28 ecos-sw-2000-06-16
Merge from eCos master repository on 2000-06-16-07:47:03-BST
| author | jlarmour |
|---|---|
| date | Fri, 16 Jun 2000 16:43:59 +0000 |
| parents | 435cced73e2f |
| children | 6b5f480c6929 |
line wrap: on
line diff
--- a/packages/kernel/current/src/debug/dbg-thread-demux.c +++ b/packages/kernel/current/src/debug/dbg-thread-demux.c @@ -41,6 +41,7 @@ // //========================================================================*/ +#include <cyg/hal/hal_arch.h> /* This file implements system calls out from the ROM debug stub into the operating environment. @@ -84,78 +85,53 @@ static int dbg_thread_syscall_rmt( union dbg_thread_syscall_parms * p ) { - switch (id) + int ret; + CYGARC_HAL_SAVE_GP(); + switch (id) { - case dbg_null_func : return 1 ; /* test the syscall apparatus */ + case dbg_null_func : + ret = 1 ; /* test the syscall apparatus */ + break; #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT case dbg_capabilities_func : - return dbg_thread_capabilities(p->cap_parms.abilities) ; - break ; + ret = dbg_thread_capabilities(p->cap_parms.abilities) ; + break ; case dbg_currthread_func : - return dbg_currthread(p->currthread_parms.ref) ; - break ; + ret = dbg_currthread(p->currthread_parms.ref) ; + break ; case dbg_threadlist_func : - return dbg_threadlist(p->threadlist_parms.startflag, - p->threadlist_parms.lastid, - p->threadlist_parms.nextthreadid) ; - break ; + ret = dbg_threadlist(p->threadlist_parms.startflag, + p->threadlist_parms.lastid, + p->threadlist_parms.nextthreadid) ; + break ; case dbg_threadinfo_func : - return dbg_threadinfo(p->info_parms.ref, - p->info_parms.info - ) ; - break ; + ret = dbg_threadinfo(p->info_parms.ref, + p->info_parms.info ) ; + break ; case dbg_getthreadreg_func : - return dbg_getthreadreg(p->reg_parms.thread, - p->reg_parms.regcount, - p->reg_parms.registers) ; - break ; + ret = dbg_getthreadreg(p->reg_parms.thread, + p->reg_parms.regcount, + p->reg_parms.registers) ; + break ; case dbg_setthreadreg_func : - return dbg_setthreadreg(p->reg_parms.thread, - p->reg_parms.regcount, - p->reg_parms.registers) ; - break ; + ret = dbg_setthreadreg(p->reg_parms.thread, + p->reg_parms.regcount, + p->reg_parms.registers) ; + break ; case dbg_scheduler_func : - return dbg_scheduler(p->scheduler_parms.thread, - p->scheduler_parms.lock, - p->scheduler_parms.mode) ; - break ; + ret = dbg_scheduler(p->scheduler_parms.thread, + p->scheduler_parms.lock, + p->scheduler_parms.mode) ; + break ; #endif /* CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT */ default : - return 0 ; /* failure due to non-implementation */ + ret = 0 ; /* failure due to non-implementation */ } + CYGARC_HAL_RESTORE_GP(); + return ret; } -// ------------------------------------------------------------------------- -// When Cygmon calls us on the MIPS It has its own value in GP. We need to -// save that and set our own before proceeding. - -#ifdef CYGPKG_HAL_MIPS -static int dbg_thread_syscall_rmt_1( - enum dbg_syscall_ids id, - union dbg_thread_syscall_parms * p - ) -{ - - register long gp_save; - int r; - asm volatile ( "move %0,$28;" - ".extern _gp;" - "la $gp,_gp;" - : "=r"(gp_save) - ); - - r = dbg_thread_syscall_rmt( id, p ); - - asm volatile ( "move $gp,%0;" :: "r"(gp_save) ); - - return r; - -} -#endif - -// ------------------------------------------------------------------------- - #define DBG_SYSCALL_THREAD_VEC_NUM 15 #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT @@ -179,11 +155,7 @@ void patch_dbg_syscalls(void * vector) #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT -#ifdef CYGPKG_HAL_MIPS - f[DBG_SYSCALL_THREAD_VEC_NUM] = dbg_thread_syscall_rmt_1 ; -#else f[DBG_SYSCALL_THREAD_VEC_NUM] = dbg_thread_syscall_rmt ; -#endif #endif
