summaryrefslogtreecommitdiffstats
path: root/c/src/librdbg/src/m68k/excep_f.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2002-02-01 17:00:01 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2002-02-01 17:00:01 +0000
commit40cf43eab4e4121a92ec95bc1366cc5b3bad4e27 (patch)
tree5aef0f81416b68a9f035ac5d14ba9278f0787c1c /c/src/librdbg/src/m68k/excep_f.c
parent2001-02-01 Mike Siers <mikes@poliac.com> (diff)
downloadrtems-40cf43eab4e4121a92ec95bc1366cc5b3bad4e27.tar.bz2
* So many patches have been posted recently on the mailing list and
because we were unable to find correct solution to compile on various linux distros (due to rpcgen incompatibilities), and because the coding style of rdbg was rather inconsistant among various pieces of code, I decided to: 1) make some cleaning regarding global coding style (using indent + manual edits), 2) incorporate/review the paches send by various people (S. Holford, T. Strauman), 3) Fix the bug due to varying rpcgen code generation in remdeb_svc.c, 4) Remove some dead code, 5) Apply a patches enabling to call enterRdbg imediately after rdbg initialization is done, NB : the paches is huge but it is mainly due to coding styke chnages. Only few lines of codes have been really changed and they do not impact rdbg functionnality (AFAIKT). * include/rdbg/servrpc.h, include/rdbg/i386/rdbg_f.h, include/rdbg/m68k/rdbg_f.h, include/rdbg/powerpc/rdbg_f.h, src/_servtgt.c, src/awk.svc, src/excep.c, src/ptrace.c, src/rdbg.c, src/remdeb.x, src/servbkpt.c, src/servcon.c, src/servrpc.c, src/servtgt.c, src/servtsp.c, src/servutil.c, src/i386/excep_f.c, src/i386/rdbg_f.c, src/i386/any/Makefile.am, src/i386/any/remdeb.h, src/i386/any/remdeb_svc.c, src/i386/any/remdeb_xdr.c, src/m68k/excep_f.c, src/m68k/rdbg_f.c, src/m68k/any/Makefile.am, src/m68k/any/remdeb.h, src/m68k/any/remdeb_svc.c, src/m68k/any/remdeb_xdr.c, src/powerpc/excep_f.c, src/powerpc/rdbg_f.c, src/powerpc/new_exception_processing/Makefile.am, src/powerpc/new_exception_processing/remdeb.h, src/powerpc/new_exception_processing/remdeb_svc.c, src/powerpc/new_exception_processing/remdeb_xdr.c: Modified.
Diffstat (limited to 'c/src/librdbg/src/m68k/excep_f.c')
-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 */
}
-
-
-