diff packages/hal/sh/arch/current/include/sh_stub.h @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents
children e0c0827131d1
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/hal/sh/arch/current/include/sh_stub.h
@@ -0,0 +1,120 @@
+#ifndef CYGONCE_HAL_SH_STUB_H
+#define CYGONCE_HAL_SH_STUB_H
+
+//==========================================================================
+//
+//      sh_stub.h
+//
+//      SH stub defines
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    jskov
+// Contributors: jskov,
+// Date:         1999-05-18
+// Purpose:      Define SH stub stuff
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/hal/hal_intr.h>           // CYGNUM_HAL_EXCEPTION_TRAP
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NUMREGS    59
+
+#define REGSIZE( _x_ ) (4)
+
+typedef unsigned long target_register_t;
+
+enum regnames {
+    R0, R1, R2, R3, R4, R5, R6, R7, 
+    R8, R9, R10, R11, R12, R13, R14, R15,
+    PC, PR, GBR, VBR, MACH, MACL, SR,
+    FPUL, FPSCR,
+    FP0, FP1, FP2, FP3, FP4, FP5, FP6, FP7,
+    FP8, FP9, FP10, FP11, FP12, FP13, FP14, FP15,
+    SSR, SPC, ROB0, ROB1
+};
+
+// For convenience
+#define SP              R15
+#define FP              R14
+
+typedef enum regnames regnames_t;
+
+/* Given a trap value TRAP, return the corresponding signal. */
+extern int __computeSignal (unsigned int trap_number);
+
+/* Return the SPARC trap number corresponding to the last-taken trap. */
+extern int __get_trap_number (void);
+
+/* Return the currently-saved value corresponding to register REG. */
+extern target_register_t get_register (regnames_t reg);
+
+/* Store VALUE in the register corresponding to WHICH. */
+extern void put_register (regnames_t which, target_register_t value);
+
+/* Set the currently-saved pc register value to PC. This also updates NPC
+   as needed. */
+extern void set_pc (target_register_t pc);
+
+/* Set things up so that the next user resume will execute one instruction.
+   This may be done by setting breakpoints or setting a single step flag
+   in the saved user registers, for example. */
+void __single_step (void);
+
+/* Clear the single-step state. */
+void __clear_single_step (void);
+
+/* If the breakpoint we hit is in the breakpoint() instruction, return a
+   non-zero value. */
+extern int __is_breakpoint_function (void);
+
+/* Skip the current instruction. */
+extern void __skipinst (void);
+
+extern void __install_breakpoints (void);
+
+extern void __clear_breakpoints (void);
+
+// We have to rewind the PC in case of a breakpoint.
+#define HAL_STUB_PLATFORM_STUBS_FIXUP()                         \
+    CYG_MACRO_START                                             \
+    if (CYGNUM_HAL_EXCEPTION_TRAP == __get_trap_number())       \
+        put_register(PC, get_register(PC) - 2);                 \
+    CYG_MACRO_END
+
+#ifdef __cplusplus
+}   /* extern "C" */
+#endif
+
+#endif // ifndef CYGONCE_HAL_PPC_STUB_H