summaryrefslogtreecommitdiffstats
path: root/c/src/librdbg/src/m68k/excep_f.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/librdbg/src/m68k/excep_f.c265
1 files changed, 155 insertions, 110 deletions
diff --git a/c/src/librdbg/src/m68k/excep_f.c b/c/src/librdbg/src/m68k/excep_f.c
index aadf23387b..5f75f6696f 100644
--- a/c/src/librdbg/src/m68k/excep_f.c
+++ b/c/src/librdbg/src/m68k/excep_f.c
@@ -17,54 +17,107 @@
#include <rdbg/rdbg.h>
#include <rdbg/servrpc.h>
-int
-ExcepToSig (Exception_context *ctx)
+ 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;
+ 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 -----*/
/*
@@ -72,101 +125,93 @@ ExcepToSig (Exception_context *ctx)
* software breakpoints.
*/
-void
-BreakPointExcHdl(CPU_Exception_frame *ctx)
+ 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 */
+ 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 */
+ } else {
+ if (ctx->vecnum != 9) { /* trace */
NbSerializedCtx++;
- rtems_semaphore_obtain(serializeSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+ 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);
+ 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);
+ 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));
+ rtems_status_text (status));
PushExceptCtx (_Thread_Executing->Object.id, continueSemId, ctx);
-
- switch (ctx->vecnum){
- case 9 : /* trace */
- DPRINTF((" TRACE EXCEPTION !!!\n"));
+
+ switch (ctx->vecnum) {
+ case 9: /* trace */
+ DPRINTF ((" TRACE EXCEPTION !!!\n"));
ctx->sr &= ~(1 << 15);
- ExitForSingleStep-- ;
- rtems_semaphore_release( wakeupEventSemId );
- break;
+ ExitForSingleStep--;
+ rtems_semaphore_release (wakeupEventSemId);
+ break;
- case 47 : /* trap #15 */
- DPRINTF((" BREAKPOINT EXCEPTION !!!\n"));
- 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 );
+ case 36: /* trap #4 */
+ DPRINTF ((" ENTER RDBG !!!\n"));
+ rtems_semaphore_release (wakeupEventSemId);
break;
default:
- DPRINTF((" OTHER EXCEPTION !!!\n"));
- rtems_semaphore_release( wakeupEventSemId );
+ DPRINTF ((" OTHER EXCEPTION !!!\n"));
+ rtems_semaphore_release (wakeupEventSemId);
break;
}
- rtems_semaphore_obtain(continueSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
-
+ rtems_semaphore_obtain (continueSemId, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
+
PopExceptCtx (_Thread_Executing->Object.id);
- rtems_semaphore_delete(continueSemId);
+ rtems_semaphore_delete (continueSemId);
}
- connect_rdbg_exception(); /* monitor stub changes trace vector */
+ connect_rdbg_exception (); /* monitor stub changes trace vector */
}
-
-
-