diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/librdbg/src/m68k/excep_f.c | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/c/src/librdbg/src/m68k/excep_f.c b/c/src/librdbg/src/m68k/excep_f.c deleted file mode 100644 index 5f75f6696f..0000000000 --- a/c/src/librdbg/src/m68k/excep_f.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - ************************************************************************** - * - * Component = - * - * Synopsis = rdbg/m68k/excep_f.c - * - * $Id$ - * - ************************************************************************** - */ - -#include <rtems.h> -#include <rtems/error.h> -#include <assert.h> -#include <errno.h> -#include <rdbg/rdbg.h> -#include <rdbg/servrpc.h> - - int -ExcepToSig (Exception_context * ctx) -{ - int excep = getExcNum (ctx); - - switch (excep) { - case 2: - return 10; - break; /* bus error */ - case 3: - return 10; - break; /* address error */ - case 4: - return 4; - break; /* illegal instruction */ - case 5: - return 8; - break; /* zero divide */ - case 6: - return 8; - break; /* chk instruction */ - case 7: - return 8; - break; /* trapv instruction */ - case 8: - return 11; - break; /* privilege violation */ - case 9: - return 5; - break; /* trace trap */ - case 10: - return 4; - break; /* line 1010 emulator */ - case 11: - return 4; - break; /* line 1111 emulator */ - - /* - * Coprocessor protocol violation. Using a standard MMU or FPU - * this cannot be triggered by software. Call it a SIGBUS. - */ - case 13: - return 10; - break; - - case 31: - return 2; - break; /* interrupt */ - case 33: - return 5; - break; /* monitor breakpoint */ - case 34: - return 2; - break; /* lets use this for SCC1 interrupt */ - case 35: - return 5; - break; /* rdbg breakpoint */ - case 36: - return 2; - break; /* enter RDBG */ - /* - * This is a trap #8 instruction. Apparently it is someone's software - * convention for some sort of SIGFPE condition. Whose? How many - * people are being screwed by having this code the way it is? - * Is there a clean solution? - */ - case 40: - return 8; - break; /* floating point err */ - - case 47: - return 5; - break; /* rdbg breakpoint */ - - case 48: - return 8; - break; /* floating point err */ - case 49: - return 8; - break; /* floating point err */ - case 50: - return 8; - break; /* zero divide */ - case 51: - return 8; - break; /* underflow */ - case 52: - return 8; - break; /* operand error */ - case 53: - return 8; - break; /* overflow */ - case 54: - return 8; - break; /* NAN */ - default: - return 7; /* "software generated" */ - } - return SIGKILL; -} - -/*----- Breakpoint Exception management -----*/ - - /* - * Handler for Breakpoint Exceptions : - * software breakpoints. - */ - - void -BreakPointExcHdl (CPU_Exception_frame * ctx) -{ - rtems_status_code status; - rtems_id continueSemId; - - connect_rdbg_exception (); /* monitor stub changes trace vector */ - if ((justSaveContext) && (ctx->vecnum == 47)) { /* break */ - PushSavedExceptCtx (_Thread_Executing->Object.id, ctx); - justSaveContext = 0; - } else { - if (ctx->vecnum != 9) { /* trace */ - NbSerializedCtx++; - rtems_semaphore_obtain (serializeSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); - NbSerializedCtx--; - } - - currentTargetThread = _Thread_Executing->Object.id; - -#ifdef DDEBUG - printk ("----------------------------------------------------------\n"); - printk ("Exception %d caught at PC %x by thread %d\n", - ctx->vecnum, ctx->pc, _Thread_Executing->Object.id); - printk ("----------------------------------------------------------\n"); - printk ("Processor execution context at time of the fault was :\n"); - printk ("----------------------------------------------------------\n"); - printk ("\t A0 = %x\n", ctx->a0); - printk ("\t A1 = %x\n", ctx->a1); - printk ("\t A2 = %x\n", ctx->a2); - printk ("\t A3 = %x\n", ctx->a3); - printk ("\t A4 = %x\n", ctx->a4); - printk ("\t A5 = %x\n", ctx->a5); - printk ("\t A6 = %x\n", ctx->a6); - printk ("\t A7 = %x\n", ctx->a7); - printk ("\t D0 = %x\n", ctx->d0); - printk ("\t D1 = %x\n", ctx->d1); - printk ("\t D2 = %x\n", ctx->d2); - printk ("\t D3 = %x\n", ctx->d3); - printk ("\t D4 = %x\n", ctx->d4); - printk ("\t D5 = %x\n", ctx->d5); - printk ("\t D6 = %x\n", ctx->d6); - printk ("\t D7 = %x\n", ctx->d7); - printk ("\t SR = %x\n", ctx->sr); -#endif - - status = rtems_semaphore_create (rtems_build_name ('D', 'B', 'G', 'c'), - 0, - RTEMS_FIFO | - RTEMS_COUNTING_SEMAPHORE | - RTEMS_NO_INHERIT_PRIORITY | - RTEMS_NO_PRIORITY_CEILING | - RTEMS_LOCAL, 0, &continueSemId); - if (status != RTEMS_SUCCESSFUL) - rtems_panic ("Can't create continue semaphore: `%s'\n", - rtems_status_text (status)); - - PushExceptCtx (_Thread_Executing->Object.id, continueSemId, ctx); - - switch (ctx->vecnum) { - case 9: /* trace */ - DPRINTF ((" TRACE EXCEPTION !!!\n")); - ctx->sr &= ~(1 << 15); - ExitForSingleStep--; - rtems_semaphore_release (wakeupEventSemId); - break; - - case 47: /* trap #15 */ - DPRINTF ((" BREAKPOINT EXCEPTION !!!\n")); - rtems_semaphore_release (wakeupEventSemId); - break; - - case 36: /* trap #4 */ - DPRINTF ((" ENTER RDBG !!!\n")); - rtems_semaphore_release (wakeupEventSemId); - break; - - default: - DPRINTF ((" OTHER EXCEPTION !!!\n")); - rtems_semaphore_release (wakeupEventSemId); - break; - } - - rtems_semaphore_obtain (continueSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT); - - PopExceptCtx (_Thread_Executing->Object.id); - rtems_semaphore_delete (continueSemId); - } - - connect_rdbg_exception (); /* monitor stub changes trace vector */ -} |