Mercurial > ecos
annotate packages/hal/common/current/include/hal_stub.h @ 136:a9ac27ec7abc ecos-sw-2000-11-17
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
| author | jlarmour |
|---|---|
| date | Fri, 17 Nov 2000 23:16:43 +0000 |
| parents | 6ed91473a1cd |
| children | 289bf90c6a9b |
| rev | line source |
|---|---|
| 2 | 1 #ifndef CYGONCE_HAL_HAL_STUB_H |
| 2 #define CYGONCE_HAL_HAL_STUB_H | |
| 3 | |
| 4 //============================================================================= | |
| 5 // | |
| 6 // hal_stub.h | |
| 7 // | |
| 8 // HAL header for GDB stub support. | |
| 9 // | |
| 10 //============================================================================= | |
| 11 //####COPYRIGHTBEGIN#### | |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
12 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
13 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
14 // The contents of this file are subject to the Red Hat eCos Public License |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
15 // Version 1.1 (the "License"); you may not use this file except in |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
16 // compliance with the License. You may obtain a copy of the License at |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
17 // http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
18 // |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
19 // Software distributed under the License is distributed on an "AS IS" |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
20 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
21 // License for the specific language governing rights and limitations under |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
22 // the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
23 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
24 // The Original Code is eCos - Embedded Configurable Operating System, |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
25 // released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
26 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
27 // The Initial Developer of the Original Code is Red Hat. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
28 // Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
29 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
30 // All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
31 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
54
diff
changeset
|
32 // |
| 2 | 33 //####COPYRIGHTEND#### |
| 34 //============================================================================= | |
| 35 //#####DESCRIPTIONBEGIN#### | |
| 36 // | |
| 37 // Author(s): jskov | |
| 38 // Contributors:jskov | |
| 39 // Date: 1999-02-12 | |
| 40 // Purpose: Generic HAL stub header. | |
| 41 // Usage: #include <cyg/hal/hal_stub.h> | |
|
54
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
42 // Description: This header is included by generic-stub.c to provide an |
|
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
43 // interface to the eCos-specific stub implementation. It is |
|
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
44 // not to be included by user code, and is only placed in a |
|
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
45 // publically accessible directory so that platform stub packages |
|
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
46 // are able to include it if required. |
|
f10165814f1e
Merge from eCos master repository on 1999-11-19-22:24:39-GMT
jlarmour
parents:
50
diff
changeset
|
47 // |
| 2 | 48 //####DESCRIPTIONEND#### |
| 49 // | |
| 50 //============================================================================= | |
| 51 | |
| 52 #include <pkgconf/hal.h> | |
| 53 | |
| 54 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS | |
| 55 #define USE_GDBSTUB_PROTOTYPES 0 // avoid stub-tservice.h atm | |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
56 #ifndef __ECOS__ |
| 2 | 57 #define __ECOS__ // use to mark eCos hacks |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
58 #endif |
| 2 | 59 |
| 60 #include <cyg/hal/basetype.h> // HAL_LABEL_NAME | |
| 61 #include <cyg/hal/hal_arch.h> // HAL header | |
|
34
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
2
diff
changeset
|
62 #include <cyg/infra/cyg_type.h> // cyg_uint32 and CYG_BYTEORDER |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
63 |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
64 #ifndef __CYGMON_TYPES |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
65 #define __CYGMON_TYPES |
| 2 | 66 typedef cyg_uint32 uint32; |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
67 typedef cyg_int32 int32; |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
68 #endif // __CYGMON_TYPES |
| 2 | 69 |
| 70 #include <cyg/hal/plf_stub.h> | |
| 71 #include <cyg/hal/generic-stub.h> | |
| 72 | |
| 73 #ifdef __cplusplus | |
| 74 extern "C" { | |
| 75 #endif | |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
76 #if 0 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
77 } // to make below format correctly. |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
78 #endif |
| 2 | 79 |
| 80 //----------------------------------------------------------------------------- | |
| 81 // Definitions for generic-stub.c | |
| 82 | |
| 83 #define __set_mem_fault_trap(x) ({__mem_fault = 0; x(); __mem_fault;}) | |
| 84 | |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
85 #if (CYG_BYTEORDER==CYG_LSBFIRST) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
86 # if !defined(__LITTLE_ENDIAN__) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
87 # define __LITTLE_ENDIAN__ |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
88 # endif |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
89 # if !defined(_LITTLE_ENDIAN) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
90 # define _LITTLE_ENDIAN |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
66
diff
changeset
|
91 # endif |
|
34
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
2
diff
changeset
|
92 #endif |
|
29bc183297e1
Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
2
diff
changeset
|
93 |
| 2 | 94 //---------------------------------------------------------------------------- |
| 95 // Signal definitions to avoid 'signal.h'/ | |
| 96 #define SIGHUP 1 /* hangup */ | |
| 97 #define SIGINT 2 /* interrupt */ | |
| 98 #define SIGQUIT 3 /* quit */ | |
| 99 #define SIGILL 4 /* illegal instruction (not reset when caught) */ | |
| 100 #define SIGTRAP 5 /* trace trap (not reset when caught) */ | |
| 101 #define SIGIOT 6 /* IOT instruction */ | |
| 102 #define SIGABRT 6 /* used by abort, replace SIGIOT in the future */ | |
| 103 #define SIGEMT 7 /* EMT instruction */ | |
| 104 #define SIGFPE 8 /* floating point exception */ | |
| 105 #define SIGKILL 9 /* kill (cannot be caught or ignored) */ | |
| 106 #define SIGBUS 10 /* bus error */ | |
| 107 #define SIGSEGV 11 /* segmentation violation */ | |
| 108 #define SIGSYS 12 /* bad argument to system call */ | |
| 109 #define SIGPIPE 13 /* write on a pipe with no one to read it */ | |
| 110 #define SIGALRM 14 /* alarm clock */ | |
| 111 #define SIGTERM 15 /* software termination signal from kill */ | |
| 112 | |
| 113 //---------------------------------------------------------------------------- | |
| 114 // Thread support. This setting is used in thread-pkts.h | |
| 115 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT | |
| 116 #define DEBUG_THREADS 1 | |
| 117 #else | |
| 118 #define DEBUG_THREADS 0 | |
| 119 #endif | |
| 120 | |
| 121 // The function stub_copy_registers() is statically defined in | |
| 122 // thread-packets.c, but in eCos this external stub is defined as it | |
| 123 // is used in dbg_gdb.cxx. | |
| 124 externC void __stub_copy_registers(target_register_t *dest, | |
| 125 target_register_t *src); | |
| 126 | |
| 127 //---------------------------------------------------------------------------- | |
|
136
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
128 // Hardware Watch/Breakpoint support. These are the possible return values |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
129 // of HAL_STUB_IS_STOPPED_BY_HARDWARE(). |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
130 #define HAL_STUB_HW_STOP_NONE 0 // target did not stop for hw watch/break |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
131 #define HAL_STUB_HW_STOP_BREAK 1 // target stopped for hw breakpoint |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
132 #define HAL_STUB_HW_STOP_WATCH 2 // target stopped for write-only watchpoint |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
133 #define HAL_STUB_HW_STOP_RWATCH 3 // target stopped for read-only watchpoint |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
134 #define HAL_STUB_HW_STOP_AWATCH 4 // target stopped for access watchpoint |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
135 |
|
a9ac27ec7abc
Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents:
115
diff
changeset
|
136 //---------------------------------------------------------------------------- |
| 2 | 137 // Memory accessor functions. |
| 138 #define TARGET_HAS_OWN_MEM_FUNCS | |
| 139 | |
| 140 //---------------------------------------------------------------------------- | |
| 141 // Target extras?! | |
| 142 extern int __process_target_query(char * pkt, char * out, int maxOut); | |
| 143 extern int __process_target_set(char * pkt, char * out, int maxout); | |
| 144 extern int __process_target_packet(char * pkt, char * out, int maxout); | |
| 145 | |
| 146 //--------------------------------------------------------------------------- | |
| 147 // Declarations to avoid compiler warnings. | |
| 148 | |
| 149 // Set the baud rate for the current serial port. | |
| 150 extern void __set_baud_rate (int baud); | |
| 151 | |
| 152 // Write C to the current serial port. | |
| 153 extern void putDebugChar (int c); | |
| 154 | |
| 155 // Read one character from the current serial port. | |
| 156 extern int getDebugChar (void); | |
| 157 | |
| 158 // Push CH back onto the debug stream. | |
| 159 extern void ungetDebugChar (int ch); | |
| 160 | |
| 161 // Reset the board. | |
| 162 extern void __reset (void); | |
| 163 | |
| 164 // Multi-bp support. | |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
165 #ifndef __set_breakpoint |
| 2 | 166 extern int __set_breakpoint (target_register_t addr); |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
167 #endif |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
168 #ifndef __remove_breakpoint |
| 2 | 169 extern int __remove_breakpoint (target_register_t addr); |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
170 #endif |
| 2 | 171 |
| 172 /* Install the standard set of trap handlers for the stub. */ | |
| 173 extern void __install_traps (void); | |
| 174 | |
| 175 /* Address in text section of a breakpoint instruction. */ | |
| 176 | |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
177 #ifndef BREAKINST_DEFINED |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
178 #define BREAKINST_DEFINED |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
112
diff
changeset
|
179 extern void _breakinst (void); |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
180 #endif |
| 2 | 181 |
| 182 /* The opcode for a breakpoint instruction. */ | |
| 183 | |
| 184 extern unsigned long __break_opcode (void); | |
| 185 | |
| 186 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT | |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
187 // This one may assume a valid saved interrupt context on some platforms |
| 2 | 188 extern void cyg_hal_gdb_interrupt (target_register_t pc); |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
189 // This one does not; use from CRITICAL_IO_REGION macros below. |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
190 extern void cyg_hal_gdb_place_break (target_register_t pc); |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
191 // Remove a break from either above - or not if cyg_hal_gdb_running_step |
| 2 | 192 extern int cyg_hal_gdb_remove_break (target_register_t pc); |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
193 // Bool: is such a breakpoint set? |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
194 extern int cyg_hal_gdb_break_is_set (void); |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
195 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
196 /* This is used so that the generic stub can tell |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
197 * cyg_hal_gdb_remove_break() not to bother when we are avoiding stepping |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
198 * through a critical region ie. hal_diag_write_char() usually - that |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
199 * shares the GDB IO device. |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
200 */ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
201 extern volatile int cyg_hal_gdb_running_step; |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
202 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
203 // Use these in hal_diag.c when about to write a whole $O packet to GDB. |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
204 // NB they require __builtin_return_address() to work: if your platform |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
205 // does not support this, use HAL_DISABLE_INTERRUPTS &c instead. |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
206 |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
207 #if 1 // Can use the address of a label: this is more portable |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
208 |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
209 // This macro may already have been defined by the architecture HAL |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
210 #ifndef CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
211 #define CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION( _old_ ) \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
212 do { \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
213 HAL_DISABLE_INTERRUPTS(_old_); \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
214 cyg_hal_gdb_place_break( (target_register_t)&&cyg_hal_gdb_break_place ); \ |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
215 } while ( 0 ) |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
216 #endif |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
217 |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
218 #define CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION( _old_ ) \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
219 do { \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
220 cyg_hal_gdb_remove_break( (target_register_t)&&cyg_hal_gdb_break_place ); \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
221 HAL_RESTORE_INTERRUPTS(_old_); \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
222 cyg_hal_gdb_break_place: \ |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
223 } while ( 0 ) |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
224 |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
225 #else // use __builtin_return_address instead. |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
226 |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
227 #define CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION( _old_ ) \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
228 do { \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
229 HAL_DISABLE_INTERRUPTS(_old_); \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
230 cyg_hal_gdb_place_break((target_register_t)__builtin_return_address(0)); \ |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
231 } while ( 0 ) |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
232 |
|
78
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
233 #define CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION( _old_ ) \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
234 do { \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
235 cyg_hal_gdb_remove_break((target_register_t)__builtin_return_address(0)); \ |
|
59d97b6ba612
Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents:
72
diff
changeset
|
236 HAL_RESTORE_INTERRUPTS(_old_); \ |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
237 } while ( 0 ) |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
238 |
|
50
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
239 #endif |
|
a0774359f013
Merge from eCos master repository on 1999-11-02-17:02:15-GMT
jlarmour
parents:
48
diff
changeset
|
240 |
|
48
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
241 #else // NO debug_gdb_break_support |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
242 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
243 // so define these just to do interrupts: |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
244 #define CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION( _old_ ) \ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
245 HAL_DISABLE_INTERRUPTS(_old_) |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
246 |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
247 #define CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION( _old_ ) \ |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
248 HAL_RESTORE_INTERRUPTS(_old_) |
|
1370c5e55234
Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents:
34
diff
changeset
|
249 |
| 2 | 250 #endif |
| 251 | |
| 252 //---------------------------------------------------------------------------- | |
| 253 // eCos extensions to the stub | |
| 254 | |
| 255 extern void hal_output_gdb_string(target_register_t str, int string_len); | |
| 256 | |
| 257 extern target_register_t registers[]; // The current saved registers. | |
| 258 extern target_register_t * _registers ; | |
| 259 extern HAL_SavedRegisters *_hal_registers; | |
| 260 | |
| 261 extern int cyg_hal_gdb_break; | |
| 262 | |
| 263 //--------------------------------------------------------------------------- | |
| 264 // Local strcpy/strlen functions removes libc dependency. | |
| 265 static inline char *strcpy( char *s, const char *t) | |
| 266 { | |
| 267 char *r = s; | |
| 268 | |
| 269 while( *t ) *s++ = *t++; | |
| 270 | |
| 271 // Terminate the copied string. | |
| 272 *s = 0; | |
| 273 | |
| 274 return r; | |
| 275 } | |
| 276 | |
| 277 static inline int strlen( const char *s ) | |
| 278 { | |
| 279 int r = 0; | |
| 280 while( *s++ ) r++; | |
| 281 return r; | |
| 282 } | |
| 283 | |
| 284 //----------------------------------------------------------------------------- | |
| 285 // Repeat the cache definitions here to avoid too much hackery in | |
| 286 // generic-stub.h | |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
287 /* Flush the instruction cache. */ |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
288 extern void flush_i_cache (void); |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
289 |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
290 /* Flush the data cache. */ |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
291 extern void __flush_d_cache (void); |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
78
diff
changeset
|
292 |
| 2 | 293 typedef enum { |
| 294 CACHE_NOOP, CACHE_ENABLE, CACHE_DISABLE, CACHE_FLUSH | |
| 295 } cache_control_t; | |
| 296 | |
| 297 /* Perform the specified operation on the instruction cache. | |
| 298 Returns 1 if the cache is enabled, 0 otherwise. */ | |
| 299 extern int __instruction_cache (cache_control_t request); | |
| 300 /* Perform the specified operation on the data cache. | |
| 301 Returns 1 if the cache is enabled, 0 otherwise. */ | |
| 302 extern int __data_cache (cache_control_t request); | |
| 303 | |
| 304 #ifdef __cplusplus | |
| 305 } // extern "C" | |
| 306 #endif | |
| 307 | |
| 308 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS | |
| 309 | |
| 310 //----------------------------------------------------------------------------- | |
| 311 #endif // CYGONCE_HAL_HAL_STUB_H | |
| 312 // End of hal_stub.h |
