diff packages/hal/powerpc/arch/current/src/ppc_stub.c @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents 3111d98ba7b3
children 641b639be825
line wrap: on
line diff
--- a/packages/hal/powerpc/arch/current/src/ppc_stub.c
+++ b/packages/hal/powerpc/arch/current/src/ppc_stub.c
@@ -1,6 +1,6 @@
 /* ppc_stub.c - helper functions for stub, generic to all PowerPC processors
  * 
- * Copyright (c) 1998 Cygnus Support
+ * Copyright (c) 1998,1999 Cygnus Solutions
  *
  * The authors hereby grant permission to use, copy, modify, distribute,
  * and license this software and its documentation for any purpose, provided
@@ -19,72 +19,47 @@
 
 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
 
-#ifdef CYG_HAL_POWERPC_SIM
-#error "GDB Stub support not implemented for PPC SIM"
-#endif
+#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
+#include <cyg/hal/ppc_regs.h>
 
 #include <cyg/hal/hal_stub.h>
 #include <cyg/hal/hal_arch.h>
 #include <cyg/hal/hal_intr.h>
-#include <cyg/hal/ppc_regs.h>
 
 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
 #include <cyg/hal/dbg-threads-api.h>    // dbg_currthread_id
 #endif
 
-#define	SIGHUP	1	/* hangup */
-#define	SIGINT	2	/* interrupt */
-#define	SIGQUIT	3	/* quit */
-#define	SIGILL	4	/* illegal instruction (not reset when caught) */
-#define	SIGTRAP	5	/* trace trap (not reset when caught) */
-#define	SIGIOT	6	/* IOT instruction */
-#define	SIGABRT 6	/* used by abort, replace SIGIOT in the future */
-#define	SIGEMT	7	/* EMT instruction */
-#define	SIGFPE	8	/* floating point exception */
-#define	SIGKILL	9	/* kill (cannot be caught or ignored) */
-#define	SIGBUS	10	/* bus error */
-#define	SIGSEGV	11	/* segmentation violation */
-#define	SIGSYS	12	/* bad argument to system call */
-#define	SIGPIPE	13	/* write on a pipe with no one to read it */
-#define	SIGALRM	14	/* alarm clock */
-#define	SIGTERM	15	/* software termination signal from kill */
-
-/* Saved registers. */
-
-HAL_SavedRegisters *_hal_registers;
-
-target_register_t * _registers; /* A pointer to the current set of registers */
-target_register_t registers[NUMREGS];
-target_register_t alt_registers[NUMREGS] ; /* Thread or saved process state */
-
-
 /* Given a trap value TRAP, return the corresponding signal. */
 
 int __computeSignal (unsigned int trap_number)
 {
     switch (trap_number)
     {
-    case CYG_VECTOR_MACHINE_CHECK:
+    case CYGNUM_HAL_VECTOR_MACHINE_CHECK:
         /* Machine check */
-    case CYG_VECTOR_DSI:
+    case CYGNUM_HAL_VECTOR_DSI:
         /* Data access */
         return SIGSEGV;
       
-    case CYG_VECTOR_ISI:
+    case CYGNUM_HAL_VECTOR_ISI:
         /* Instruction access (Ifetch) */
-    case CYG_VECTOR_ALIGNMENT:
+    case CYGNUM_HAL_VECTOR_ALIGNMENT:
         /* Data access */
         return SIGBUS;
                     
-    case CYG_VECTOR_INTERRUPT:
+    case CYGNUM_HAL_VECTOR_INTERRUPT:
         /* External interrupt */
       return SIGINT;
 
-    case CYG_VECTOR_TRACE:
+    case CYGNUM_HAL_VECTOR_TRACE:
         /* Instruction trace */
         return SIGTRAP;
       
-    case CYG_VECTOR_PROGRAM:
+    case CYGNUM_HAL_VECTOR_PROGRAM:
+        // The register PS contains the value of SRR1 at the time of
+        // exception entry. Bits 11-15 contain information about the
+        // cause of the exception. Bits 16-31 the PS (MSR) state.
         switch ((get_register (PS) >> 17) & 0xf){
         case 1:                         /* trap */
             return SIGTRAP;
@@ -97,50 +72,50 @@ int __computeSignal (unsigned int trap_n
             return SIGTERM;
         }            
 
-    case CYG_VECTOR_RESERVED_A:
-    case CYG_VECTOR_RESERVED_B:
+    case CYGNUM_HAL_VECTOR_RESERVED_A:
+    case CYGNUM_HAL_VECTOR_RESERVED_B:
         return SIGILL;
 
-    case CYG_VECTOR_FP_UNAVAILABLE:
+    case CYGNUM_HAL_VECTOR_FP_UNAVAILABLE:
         /* FPU disabled */
-    case CYG_VECTOR_FP_ASSIST:
+    case CYGNUM_HAL_VECTOR_FP_ASSIST:
         /* FPU assist */
         return SIGFPE;
 
-    case CYG_VECTOR_DECREMENTER:
+    case CYGNUM_HAL_VECTOR_DECREMENTER:
         /* Decrementer alarm */
         return SIGALRM;
 
-    case CYG_VECTOR_SYSTEM_CALL:
+    case CYGNUM_HAL_VECTOR_SYSTEM_CALL:
         /* System call */
         return SIGSYS;
 
-#ifdef CYG_HAL_POWERPC_MP860
-    case CYG_VECTOR_SW_EMUL:
+#if defined(CYG_HAL_POWERPC_MPC8xx)
+    case CYGNUM_HAL_VECTOR_SW_EMUL:
         /* A SW_EMUL is generated instead of PROGRAM for illegal
            instructions. */
         return SIGILL;
 
-    case CYG_VECTOR_DATA_BP:
-    case CYG_VECTOR_INSTRUCTION_BP:
-    case CYG_VECTOR_PERIPHERAL_BP:
-    case CYG_VECTOR_NMI:
+    case CYGNUM_HAL_VECTOR_DATA_BP:
+    case CYGNUM_HAL_VECTOR_INSTRUCTION_BP:
+    case CYGNUM_HAL_VECTOR_PERIPHERAL_BP:
+    case CYGNUM_HAL_VECTOR_NMI:
         /* Developer port debugging exceptions. */
         return SIGTRAP;
 
-    case CYG_VECTOR_ITLB_MISS:
-    case CYG_VECTOR_DTLB_MISS:
+    case CYGNUM_HAL_VECTOR_ITLB_MISS:
+    case CYGNUM_HAL_VECTOR_DTLB_MISS:
         /* Software reload of TLB required. */
         return SIGTRAP;
 
-    case CYG_VECTOR_ITLB_ERROR:
+    case CYGNUM_HAL_VECTOR_ITLB_ERROR:
         /* Invalid instruction access. */
         return SIGBUS;
 
-    case CYG_VECTOR_DTLB_ERROR:
+    case CYGNUM_HAL_VECTOR_DTLB_ERROR:
         /* Invalid data access. */
         return SIGSEGV;
-#endif
+#endif // defined(CYG_HAL_POWERPC_MPC8xx)
         
     default:
         return SIGTERM;
@@ -157,21 +132,6 @@ int __get_trap_number (void)
     return _hal_registers->vector >> 8;
 }
 
-// Return the currently-saved value corresponding to register REG of
-// the exception context.
-target_register_t get_register (regnames_t reg)
-{
-    return registers[reg];
-}
-
-// Store VALUE in the register corresponding to WHICH in the exception
-// context.
-void put_register (regnames_t which, target_register_t value)
-{
-    registers[which] = value;
-}
-
-
 /* Set the currently-saved pc register value to PC. This also updates NPC
    as needed. */
 
@@ -191,7 +151,7 @@ void set_pc (target_register_t pc)
 
 static target_register_t irq_state;
 
-void single_step (void)
+void __single_step (void)
 {
     target_register_t msr = get_register (PS);
 
@@ -206,7 +166,7 @@ void single_step (void)
 
 /* Clear the single-step state. */
 
-void clear_single_step (void)
+void __clear_single_step (void)
 {
     target_register_t msr = get_register (PS);
 
@@ -222,12 +182,16 @@ void clear_single_step (void)
 }
 
 
-void install_breakpoints (void)
+void __install_breakpoints (void)
 {
     /* NOP since single-step HW exceptions are used instead of
        breakpoints. */
 }
 
+void __clear_breakpoints (void)
+{
+}
+
 
 /* If the breakpoint we hit is in the breakpoint() instruction, return a
    non-zero value. */
@@ -235,7 +199,7 @@ void install_breakpoints (void)
 int
 __is_breakpoint_function ()
 {
-    return get_register (PC) == (target_register_t)&_breakinst;
+    return get_register (PC) == (target_register_t)&CYG_LABEL_NAME(breakinst);
 }
 
 
@@ -248,56 +212,4 @@ void __skipinst (void)
     put_register (PC, get_register (PC) + 4);
 }
 
-
-/* Write the 'T' packet in BUFFER. SIGVAL is the signal the program
-   received. */
-
-void __build_t_packet (int sigval, char *buf)
-{
-    target_register_t addr;
-    char *ptr = buf;
-    target_register_t *sp;
-
-    sp = (target_register_t *) get_register (SP);
-
-    *ptr++ = 'T';
-    *ptr++ = __tohex (sigval >> 4);
-    *ptr++ = __tohex (sigval);
-
-#ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
-    // Include thread ID if thread manipulation is required.
-    {
-        int id;
-        
-        *ptr++ = 't';
-        *ptr++ = 'h';
-        *ptr++ = 'r';
-        *ptr++ = 'e';
-        *ptr++ = 'a';
-        *ptr++ = 'd';
-        *ptr++ = ':';
-
-        id = dbg_currthread_id ();
-        ptr = __mem2hex((char *)&id, ptr, sizeof(id), 0);
-        *ptr++ = ';';
-    }
-#endif
-
-
-    *ptr++ = __tohex (PC >> 4);
-    *ptr++ = __tohex (PC);
-    *ptr++ = ':';
-    addr = get_register (PC);
-    ptr = __mem2hex((char *)&addr, ptr, sizeof(addr), 0);
-    *ptr++ = ';';
-
-    *ptr++ = __tohex (SP >> 4);
-    *ptr++ = __tohex (SP);
-    *ptr++ = ':';
-    ptr = __mem2hex((char *)&sp, ptr, sizeof(sp), 0);
-    *ptr++ = ';';
-    
-    *ptr++ = 0;
-}
-
 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS