annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 /* ppc_stub.c - helper functions for stub, generic to all PowerPC processors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 *
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 * Copyright (c) 1998,1999 Cygnus Solutions
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 * The authors hereby grant permission to use, copy, modify, distribute,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 * and license this software and its documentation for any purpose, provided
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 * that existing copyright notices are retained in all copies and that this
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 * notice is included verbatim in any distributions. No written agreement,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 * license, or royalty fee is required for any of the authorized uses.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 * Modifications to this software may be copyrighted by their authors
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 * and need not follow the licensing terms described here, provided that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 * the new terms are clearly indicated on the first page of each file where
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 * they apply.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 #include <stddef.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
22 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
23 #include <cyg/hal/ppc_regs.h>
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
25 #include <cyg/hal/hal_stub.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 #include <cyg/hal/hal_arch.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27 #include <cyg/hal/hal_intr.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
28
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 #include <cyg/hal/dbg-threads-api.h> // dbg_currthread_id
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 /* Given a trap value TRAP, return the corresponding signal. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 int __computeSignal (unsigned int trap_number)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 switch (trap_number)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
39 case CYGNUM_HAL_VECTOR_MACHINE_CHECK:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 /* Machine check */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
41 case CYGNUM_HAL_VECTOR_DSI:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 /* Data access */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 return SIGSEGV;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
45 case CYGNUM_HAL_VECTOR_ISI:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 /* Instruction access (Ifetch) */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
47 case CYGNUM_HAL_VECTOR_ALIGNMENT:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 /* Data access */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 return SIGBUS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
51 case CYGNUM_HAL_VECTOR_INTERRUPT:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 /* External interrupt */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 return SIGINT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
55 case CYGNUM_HAL_VECTOR_TRACE:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 /* Instruction trace */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 return SIGTRAP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
59 case CYGNUM_HAL_VECTOR_PROGRAM:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
60 // The register PS contains the value of SRR1 at the time of
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
61 // exception entry. Bits 11-15 contain information about the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
62 // cause of the exception. Bits 16-31 the PS (MSR) state.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 switch ((get_register (PS) >> 17) & 0xf){
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 case 1: /* trap */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 return SIGTRAP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 case 2: /* privileged instruction */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 case 4: /* illegal instruction */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 return SIGILL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 case 8: /* floating point */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 return SIGFPE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 default: /* should never happen! */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 return SIGTERM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
75 case CYGNUM_HAL_VECTOR_RESERVED_A:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
76 case CYGNUM_HAL_VECTOR_RESERVED_B:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 return SIGILL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
79 case CYGNUM_HAL_VECTOR_FP_UNAVAILABLE:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 /* FPU disabled */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
81 case CYGNUM_HAL_VECTOR_FP_ASSIST:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 /* FPU assist */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 return SIGFPE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
85 case CYGNUM_HAL_VECTOR_DECREMENTER:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 /* Decrementer alarm */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 return SIGALRM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
89 case CYGNUM_HAL_VECTOR_SYSTEM_CALL:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 /* System call */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 return SIGSYS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
93 #if defined(CYG_HAL_POWERPC_MPC8xx)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
94 case CYGNUM_HAL_VECTOR_SW_EMUL:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 /* A SW_EMUL is generated instead of PROGRAM for illegal
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 instructions. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 return SIGILL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
99 case CYGNUM_HAL_VECTOR_DATA_BP:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
100 case CYGNUM_HAL_VECTOR_INSTRUCTION_BP:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
101 case CYGNUM_HAL_VECTOR_PERIPHERAL_BP:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
102 case CYGNUM_HAL_VECTOR_NMI:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 /* Developer port debugging exceptions. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 return SIGTRAP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
106 case CYGNUM_HAL_VECTOR_ITLB_MISS:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
107 case CYGNUM_HAL_VECTOR_DTLB_MISS:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 /* Software reload of TLB required. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 return SIGTRAP;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
111 case CYGNUM_HAL_VECTOR_ITLB_ERROR:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 /* Invalid instruction access. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 return SIGBUS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
115 case CYGNUM_HAL_VECTOR_DTLB_ERROR:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 /* Invalid data access. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 return SIGSEGV;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
118 #endif // defined(CYG_HAL_POWERPC_MPC8xx)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 return SIGTERM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 /* Return the trap number corresponding to the last-taken trap. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 int __get_trap_number (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 // The vector is not not part of the GDB register set so get it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 // directly from the save context.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 return _hal_registers->vector >> 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 /* Set the currently-saved pc register value to PC. This also updates NPC
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 as needed. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 void set_pc (target_register_t pc)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 put_register (PC, pc);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 /*----------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145 * Single-step support
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 /* Set things up so that the next user resume will execute one instruction.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 This may be done by setting breakpoints or setting a single step flag
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 in the saved user registers, for example. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 static target_register_t irq_state;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
154 void __single_step (void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 target_register_t msr = get_register (PS);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 // Set single-step flag in the exception context.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 msr |= (MSR_SE | MSR_BE);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 // Disable interrupts.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 irq_state = msr & MSR_EE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 msr &= ~MSR_EE;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 put_register (PS, msr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 /* Clear the single-step state. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
169 void __clear_single_step (void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 target_register_t msr = get_register (PS);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 // Clear single-step flag in the exception context.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 msr &= ~(MSR_SE | MSR_BE);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 // Restore interrupt state.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 // FIXME: Should check whether the executed instruction changed the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 // interrupt state - or single-stepping a MSR changing instruction
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 // may result in a wrong EE. Not a very likely scenario though.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 msr |= irq_state;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 put_register (PS, msr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
185 void __install_breakpoints (void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 /* NOP since single-step HW exceptions are used instead of
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 breakpoints. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
191 void __clear_breakpoints (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
193 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
194
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 /* If the breakpoint we hit is in the breakpoint() instruction, return a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 non-zero value. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 __is_breakpoint_function ()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
202 return get_register (PC) == (target_register_t)&CYG_LABEL_NAME(breakinst);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 /* Skip the current instruction. Since this is only called by the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 stub when the PC points to a breakpoint or trap instruction,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 we can safely just skip 4. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 void __skipinst (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 put_register (PC, get_register (PC) + 4);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS