diff packages/hal/arm/arch/current/src/arm_stub.c @ 36:e97d78785e2d ecos-sw-1999-09-12

Merge from eCos master repository on 1999-09-12-15:40:34-BST
author jlarmour
date Sun, 12 Sep 1999 15:26:05 +0000
parents 29bc183297e1
children e7ba79f6d3a8
line wrap: on
line diff
--- a/packages/hal/arm/arch/current/src/arm_stub.c
+++ b/packages/hal/arm/arch/current/src/arm_stub.c
@@ -32,6 +32,7 @@
 #define TRUE  1
 #endif
 
+
 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
 #include <cyg/hal/dbg-threads-api.h>    // dbg_currthread_id
 #endif
@@ -40,7 +41,16 @@
 
 int __computeSignal (unsigned int trap_number)
 {
+    // should also catch CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION here but we
+    // can't tell the different between a real one and a breakpoint :-(
     switch (trap_number) {
+    case CYGNUM_HAL_VECTOR_ABORT_PREFETCH:      // Fall through
+    case CYGNUM_HAL_VECTOR_ABORT_DATA:          // Fall through
+    case CYGNUM_HAL_VECTOR_reserved:
+        return SIGBUS;
+    case CYGNUM_HAL_VECTOR_IRQ:
+    case CYGNUM_HAL_VECTOR_FIQ:
+        return SIGINT;
     default:
         return SIGTRAP;
     }
@@ -48,12 +58,12 @@ int __computeSignal (unsigned int trap_n
 
 
 /* Return the trap number corresponding to the last-taken trap. */
-
+volatile int jifl;
 int __get_trap_number (void)
 {
     // The vector is not not part of the GDB register set so get it
     // directly from the save context.
-    return _hal_registers->vector >> 8;
+    return _hal_registers->vector;
 }
 
 /* Set the currently-saved pc register value to PC. This also updates NPC
@@ -77,6 +87,7 @@ void set_pc (target_register_t pc)
 static unsigned long *ss_saved_pc = NULL_PTR;
 static unsigned long ss_saved_instr;
 
+
 #define FIXME() {diag_printf("FIXME - %s\n", __FUNCTION__); }
 
 static int
@@ -391,4 +402,5 @@ void __skipinst (void)
     put_register (PC, get_register (PC) + 4);
 }
 
+
 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS