1 #ifndef CYGONCE_HAL_MIPS_STUB_H
2 #define CYGONCE_HAL_MIPS_STUB_H
3 //========================================================================
7 // MIPS-specific definitions for generic stub
9 //========================================================================
10 //####ECOSGPLCOPYRIGHTBEGIN####
11 // -------------------------------------------
12 // This file is part of eCos, the Embedded Configurable Operating System.
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
15 // eCos is free software; you can redistribute it and/or modify it under
16 // the terms of the GNU General Public License as published by the Free
17 // Software Foundation; either version 2 or (at your option) any later version.
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24 // You should have received a copy of the GNU General Public License along
25 // with eCos; if not, write to the Free Software Foundation, Inc.,
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
28 // As a special exception, if other files instantiate templates or use macros
29 // or inline functions from this file, or you compile this file and link it
30 // with other works to produce a work based on this file, this file does not
31 // by itself cause the resulting work to be covered by the GNU General Public
32 // License. However the source code for this file must still be made available
33 // in accordance with section (3) of the GNU General Public License.
35 // This exception does not invalidate any other reasons why a work based on
36 // this file might be covered by the GNU General Public License.
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
39 // at http://sources.redhat.com/ecos/ecos-license/
40 // -------------------------------------------
41 //####ECOSGPLCOPYRIGHTEND####
42 //========================================================================
43 //#####DESCRIPTIONBEGIN####
45 // Author(s): Red Hat, nickg
46 // Contributors: Red Hat, nickg, dmoseley
49 // Description: MIPS-specific definitions for generic stub
52 //####DESCRIPTIONEND####
54 //========================================================================
57 #include <pkgconf/system.h>
58 #include <pkgconf/hal_mips.h>
60 #include <cyg/hal/hal_io.h>
66 #if defined(CYGPKG_HAL_MIPS_GDB_REPORT_CP0)
73 // The simple case of 64-bit regs represented to GDB as 64-bit regs.
76 typedef unsigned long long target_register_t;
78 # ifdef CYGINT_HAL_MIPS_STUB_REPRESENT_32BIT_AS_64BIT
79 # error __mips64 & CYGINT_HAL_MIPS_STUB_REPRESENT_32BIT_AS_64BIT
82 #elif defined(CYGINT_HAL_MIPS_STUB_REPRESENT_32BIT_AS_64BIT)
84 // This is a catch-all for the common case:
85 // Even though we are only working with 32 bit registers, GDB expects 64 bits
87 typedef unsigned long target_register_t;
88 // We need to sign-extend the registers so GDB doesn't get confused.
89 #define CYGARC_SIGN_EXTEND_REGISTERS
91 // The following platform-specific cases can be removed as/when/if they
92 // get modified to implement CYGINT_HAL_MIPS_STUB_REPRESENT_32BIT_AS_64BIT
94 #elif defined(CYGPKG_HAL_MIPS_VR4300)
95 // Even though we are only working with 32 bit registers, GDB expects 64 bits
97 typedef unsigned long long target_register_t;
98 // We need to sign-extend the registers so GDB doesn't get confused.
99 #define CYGARC_SIGN_EXTEND_REGISTERS
100 #elif 0 // defined(CYGPKG_HAL_MIPS_TX49)
101 // Even though we are only working with 32 bit registers, GDB expects 64 bits
103 typedef unsigned long target_register_t;
105 // We need to sign-extend the registers so GDB doesn't get confused.
106 #define CYGARC_SIGN_EXTEND_REGISTERS
107 #elif defined(CYGPKG_HAL_MIPS_RM7000)
108 // Even though we are only working with 32 bit registers, GDB expects 64 bits
110 typedef unsigned long target_register_t;
112 // We need to sign-extend the registers so GDB doesn't get confused.
113 #define CYGARC_SIGN_EXTEND_REGISTERS
114 #elif 0 //defined(CYGPKG_HAL_MIPS_MIPS32)
115 // Even though we are only working with 32 bit registers, GDB expects 64 bits
117 typedef unsigned long target_register_t;
119 // We need to sign-extend the registers so GDB doesn't get confused.
120 #define CYGARC_SIGN_EXTEND_REGISTERS
123 // The simplest case of 32-bit regs represented to GDB as 32-bit regs.
125 typedef unsigned long target_register_t;
129 REG_ZERO, REG_AT, REG_V0, REG_V1, REG_A0, REG_A1, REG_A2, REG_A3,
130 REG_T0, REG_T1, REG_T2, REG_T3, REG_T4, REG_T5, REG_T6, REG_T7,
131 REG_S0, REG_S1, REG_S2, REG_S3, REG_S4, REG_S5, REG_S6, REG_S7,
132 REG_T8, REG_T9, REG_K0, REG_K1, REG_GP, REG_SP, REG_S8, REG_RA,
133 REG_SR, REG_LO, REG_HI, REG_BAD, REG_CAUSE, REG_PC,
134 REG_CONFIG = 84, REG_CACHE, REG_DEBUG, REG_DEPC, REG_EPC
136 #define USE_LONG_NAMES_FOR_ENUM_REGNAMES
138 typedef enum regnames regnames_t;
140 /* Given a trap value TRAP, return the corresponding signal. */
141 extern int __computeSignal (unsigned int trap_number);
143 /* Return the SPARC trap number corresponding to the last-taken trap. */
144 extern int __get_trap_number (void);
146 /* Return the currently-saved value corresponding to register REG. */
147 extern target_register_t get_register (regnames_t reg);
149 /* Store VALUE in the register corresponding to WHICH. */
150 extern void put_register (regnames_t which, target_register_t value);
152 /* Set the currently-saved pc register value to PC. This also updates NPC
154 #if !defined(SET_PC_PROTOTYPE_EXISTS) && !defined(set_pc)
155 #define SET_PC_PROTOTYPE_EXISTS
156 extern void set_pc (target_register_t pc);
159 /* Set things up so that the next user resume will execute one instruction.
160 This may be done by setting breakpoints or setting a single step flag
161 in the saved user registers, for example. */
162 #ifndef __single_step
163 void __single_step (void);
166 /* Clear the single-step state. */
167 void __clear_single_step (void);
169 extern int __is_bsp_syscall(void);
171 extern int hal_syscall_handler(void);
173 /* If the breakpoint we hit is in the breakpoint() instruction, return a
175 #ifndef __is_breakpoint_function
176 extern int __is_breakpoint_function (void);
179 /* Skip the current instruction. */
180 extern void __skipinst (void);
182 extern void __install_breakpoints (void);
184 extern void __clear_breakpoints (void);
186 extern void __install_breakpoint_list (void);
188 extern void __clear_breakpoint_list (void);
194 #endif // ifndef CYGONCE_HAL_MIPS_STUB_H