1 //========================================================================
5 // OpenRISC-specific definitions for remote debugging via gdb
7 //========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //========================================================================
41 //#####DESCRIPTIONBEGIN####
44 // Contributors:Red Hat, nickg, dmoseley
46 // Purpose: OpenRISC-specific definitions for gdb stubs support
49 //####DESCRIPTIONEND####
51 //=============================================================================
53 #ifndef CYGONCE_HAL_OPENRISC_STUB_H
54 #define CYGONCE_HAL_OPENRISC_STUB_H
56 #include <pkgconf/system.h>
57 #include <pkgconf/hal.h>
59 #ifdef CYGPKG_IO_SERIAL
60 #include <pkgconf/io_serial.h>
63 #include <cyg/hal/hal_diag.h>
65 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
67 #include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM, externC
69 #define HAL_STUB_PLATFORM_INIT_SERIAL() HAL_DIAG_INIT()
71 #define HAL_STUB_PLATFORM_GET_CHAR() \
74 HAL_DIAG_READ_CHAR(_ch_); \
78 #define HAL_STUB_PLATFORM_PUT_CHAR(c) HAL_DIAG_WRITE_CHAR((c))
80 #define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int,(baud))
82 #define HAL_STUB_PLATFORM_RESET() HAL_DIAG_INIT()
84 #define HAL_STUB_PLATFORM_INIT() HAL_DIAG_INIT()
86 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
88 // 32 GPRs + 32 VFRs + PC reg + SR reg
91 // VFR regs are unimplemented so they are 0 bytes in length
92 #define REGSIZE( _x_ ) ((((_x_) <= R31) || ((_x_) > VFR31)) ? 4 : 0)
94 typedef unsigned long target_register_t;
97 R0, SP, R2, R3, R4, R5, R6, R7,
98 R8, R9, R10, R11, R12, R13, R14, R15,
99 R16, R17, R18, R19, R20, R21, R22, R23,
100 R24, R25, R26, R27, R28, R29, R30, R31,
103 // Vector/Float registers, which are as yet unimplemented,
104 // but defined in the or32 gdb back-end.
106 VFR0, VFR1, VFR2, VFR3, VFR4, VFR5, VFR6, VFR7,
107 VFR8, VFR9, VFR10, VFR11, VFR12, VFR13, VFR14, VFR15,
108 VFR16, VFR17, VFR18, VFR19, VFR20, VFR21, VFR22, VFR23,
109 VFR24, VFR25, VFR26, VFR27, VFR28, VFR29, VFR30, VFR31,
111 // Special-purpose registers
115 typedef enum regnames regnames_t;
117 // Override generic stubs get_register() and use arch-specific version
118 #define CYGARC_STUB_REGISTER_ACCESS_DEFINED
120 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT)
121 #define HAL_GET_PROFILE_INFO( _thepc_, _thesp_ ) \
123 extern HAL_SavedRegisters *hal_saved_interrupt_state; \
124 if ( hal_saved_interrupt_state ) { \
125 (_thepc_) = (char *)(hal_saved_interrupt_state->pc); \
126 (_thesp_) = (char *)(hal_saved_interrupt_state->sp); \
131 /* Given a trap value TRAP, return the corresponding signal. */
132 externC int __computeSignal (unsigned int trap_number);
134 /* Return the trap number corresponding to the last-taken trap. */
135 externC int __get_trap_number (void);
137 /* Return the currently-saved value corresponding to register REG. */
138 externC target_register_t get_register (regnames_t reg);
140 /* Store VALUE in the register corresponding to WHICH. */
141 externC void put_register (regnames_t which, target_register_t value);
143 /* Set the currently-saved pc register value to PC. This also updates NPC
145 externC void set_pc (target_register_t pc);
147 /* Set things up so that the next user resume will execute one instruction.
148 This may be done by setting breakpoints or setting a single step flag
149 in the saved user registers, for example. */
150 externC void __single_step (void);
152 /* Clear the single-step state. */
153 externC void __clear_single_step (void);
155 /* If the breakpoint we hit is in the breakpoint() instruction, return a
157 externC int __is_breakpoint_function (void);
159 /* Skip the current instruction. */
160 externC void __skipinst (void);
162 externC void __install_breakpoints (void);
164 externC void __clear_breakpoints (void);
166 #endif // ifndef CYGONCE_HAL_OPENRISC_STUB_H
168 // EOF openrisc_stub.h