annotate packages/hal/common/current/src/generic-stub.c @ 912:82d5a3544347

* cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM. * src/generic-stub.c: as above.
author jlarmour
date Tue, 08 Apr 2003 01:13:14 +0000
parents 4747af8ef0ef
children 609c8b1447ee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1 #include "board.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5 /* Eventually, this should default to ON */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
6 #if USE_GDBSTUB_PROTOTYPES
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
7 #include "stub-tservice.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
8 #include "generic-stub.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
9 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
10 // Function declarations (prevents compiler warnings)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
11 int stubhex (unsigned char ch);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
12 static void unlock_thread_scheduler (void);
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
13 static uint32 crc32 (target_addr_t mem, int len, uint32 crc);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
14 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
16 #include "thread-pkts.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
17 /* Defines function macros if thread support is not selected in board.h */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
18
145
2e9a636d9de9 Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents: 138
diff changeset
19 #ifdef __ECOS__
2e9a636d9de9 Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents: 138
diff changeset
20 char GDB_stubs_version[] CYGBLD_ATTRIB_WEAK =
2e9a636d9de9 Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents: 138
diff changeset
21 "eCos GDB stubs - built " __DATE__ " / " __TIME__;
2e9a636d9de9 Merge from eCos master repository on 2000-12-21-14:18:40-GMT
jlarmour
parents: 138
diff changeset
22 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
23
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
26 THIS SOFTWARE IS NOT COPYRIGHTED
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
28 HP offers the following for use in the public domain. HP makes no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 warranty with regard to the software or it's performance and the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 user accepts the software "AS IS" with all faults.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 /****************************************************************************
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 * Module name: remcom.c $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 * Revision: 1.34 $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 * Date: 91/03/09 12:29:49 $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 * Contributor: Lake Stevens Instrument Division$
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 * Description: low level support for gdb debugger. $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 * Considerations: only works on target hardware $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 * Written by: Glenn Engel $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 * ModuleState: Experimental $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 * NOTES: See Below $
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 *
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 48
diff changeset
55 * Modified for SPARC by Stu Grossman, Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 48
diff changeset
56 * Modified for generic CygMON stub support by Bob Manson, Red Hat.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 * To enable debugger support, two things need to happen. One, a
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
59 * call to set_debug_traps () is necessary in order to allow any breakpoints
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 * or error conditions to be properly intercepted and reported to gdb.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 * Two, a breakpoint needs to be generated to begin communication. This
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
62 * is most easily accomplished by a call to breakpoint (). Breakpoint ()
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 * simulates a breakpoint by executing a trap #1.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 *************
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 * The following gdb commands are supported:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 * command function Return value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 * g return the value of the CPU registers hex data or ENN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 * G set the value of the CPU registers OK or ENN
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 * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 * c Resume at current address SNN ( signal NN)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 * cAA..AA Continue at address AA..AA SNN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 * s Step one instruction SNN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 * sAA..AA Step one instruction from AA..AA SNN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 * k kill
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 * ? What was the last sigval ? SNN (signal NN)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 *
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
87 * bBB..BB Set baud rate to BB..BB OK or BNN, then sets
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
88 * baud rate
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 * All commands and responses are sent with a packet which includes a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 * checksum. A packet consists of
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 * $<packet info>#<checksum>.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 * where
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 * <packet info> :: <characters representing the command or response>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 * <checksum> :: < two hex digits computed as modulo 256 sum of <packetinfo>>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 * When a packet is received, it is first acknowledged with either '+' or '-'.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 * '+' indicates a successful transfer. '-' indicates a failed transfer.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 * Example:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 * Host: Reply:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 * $m0,10#2a +$00010203040506070809101112131415#42
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 *
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 ****************************************************************************/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
109 #ifdef __ECOS__
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
110
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
111 // We cannot share memcpy and memset with the rest of the system since
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
112 // the user may want to step through it.
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
113 static inline void*
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
114 _memcpy(void* dest, void* src, int size)
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
115 {
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
116 unsigned char* __d = (unsigned char*) dest;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
117 unsigned char* __s = (unsigned char*) src;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
118
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
119 while(size--)
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
120 *__d++ = *__s++;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
121
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
122 return dest;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
123 }
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
124
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
125 static inline void*
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
126 _memset(void* s, int c, int size)
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
127 {
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
128 unsigned char* __s = (unsigned char*) s;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
129 unsigned char __c = (unsigned char) c;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
130
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
131 while(size--)
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
132 *__s++ = __c;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
133
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
134 return s;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
135 }
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
136
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
137 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
138 #include <string.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
139 #include <signal.h>
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
140 #define _memcpy memcpy
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
141 #define _memset memset
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
142 #endif // __ECOS__
0
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 /* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 /* at least NUMREGBYTES*2 are needed for register packets */
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
147 #ifdef __ECOS__
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
148 #ifdef NUMREGBYTES
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
149 #define BUFMAX (32 + (NUMREGBYTES*2))
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
150 #else
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 #define BUFMAX 2048
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
152 #endif
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
153 #else
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
154 #define BUFMAX 2048
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
155 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
157 static int initialized = 0; /* !0 means we've been initialized */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
158
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 static int process_exception (int sigval);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 static void do_nothing (void); /* and do it gracefully */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 static int syscall_do_nothing (int);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
162
895
4747af8ef0ef Leave out unused static buffers if not supporting program args.
gthomas
parents: 317
diff changeset
163 #ifdef CYGSEM_ECOS_SUPPORTS_PROGRAM_ARGS
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
164 void __free_program_args (void);
895
4747af8ef0ef Leave out unused static buffers if not supporting program args.
gthomas
parents: 317
diff changeset
165 static char *__add_program_arg (int argnum, uint32 arglen);
4747af8ef0ef Leave out unused static buffers if not supporting program args.
gthomas
parents: 317
diff changeset
166 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 volatile __PFI __process_exception_vec = process_exception;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 volatile __PFV __process_exit_vec = do_nothing;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 volatile __PFI __process_syscall_vec = syscall_do_nothing;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 volatile __PFI __process_signal_vec = NULL;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
172 volatile __PFV __init_vec = NULL;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
173 volatile __PFV __cleanup_vec = NULL;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
174
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 static const char hexchars[] = "0123456789abcdef";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
177 static void process_query (char *pkt);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
178 static void process_set (char *pkt);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 char
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 __tohex (int c)
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 return hexchars [c & 15];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
186 #define __tohex(c) hexchars[(c) & 15]
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 #ifndef NUMREGS_GDB
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 #define NUMREGS_GDB NUMREGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 /* One pushback character. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 int ungot_char = -1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 static int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 readDebugChar (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 if (ungot_char > 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 int result = ungot_char;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 ungot_char = -1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 return result;
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 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 return getDebugChar ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 /* Convert ch from a hex digit to an int. */
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 int
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
211 stubhex (ch)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
212 unsigned char ch;
0
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 if (ch >= 'a' && ch <= 'f')
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 return ch-'a'+10;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 if (ch >= '0' && ch <= '9')
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 return ch-'0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 if (ch >= 'A' && ch <= 'F')
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 return ch-'A'+10;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 return -1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
223 void
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
224 __getpacket (buffer)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 char *buffer;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 {
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
227 struct gdb_packet packet;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
228 int res;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
230 packet.state = 0;
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
231 packet.contents = buffer;
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
232 packet.err = 0;
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
233 while ((res = __add_char_to_packet (readDebugChar () & 0xff, &packet)) != 1) {
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
234 if (res == -2) {
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
235 putDebugChar ('-'); // Tell host packet was not processed
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
236 // Reset for the next packet
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
237 packet.state = 0;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
238 packet.err = 0;
184
022f1e506033 Merge from eCos master repository on 2001-10-02-17:59:22-BST
jlarmour
parents: 182
diff changeset
239 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 int
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
244 __add_char_to_packet (ch, packet)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
245 unsigned int ch;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
246 struct gdb_packet *packet;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 if (packet->state == 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 if (ch == '$')
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
251 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
252 packet->state = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
253 packet->length = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
254 packet->checksum = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
255 packet->xmitcsum = -1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
256 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 if (packet->state == 1)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 {
198
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
262 if (packet->length == BUFMAX)
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
263 {
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
264 packet->state = 0;
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
265 packet->err = 1;
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
266 }
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
267 else if (ch == '#')
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
268 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
269 packet->contents[packet->length] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
270 packet->state = 2;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
271 }
198
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
272 else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
273 {
198
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
274 packet->checksum += ch;
ea3f0bd33a73 Merge from eCos master repository on 2001-12-07-11:40:47-GMT
jlarmour
parents: 196
diff changeset
275 packet->contents[packet->length++] = ch;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
276 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 if (packet->state == 2)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 packet->xmitcsum = stubhex (ch) << 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 packet->state = 3;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 if (packet->state == 3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
289 packet->xmitcsum |= stubhex (ch);
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
290 if (packet->err) {
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
291 // Packet was too long - just tell the consumer
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
292 return -2;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
293 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 if ((packet->checksum & 255) != packet->xmitcsum)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
295 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
296 putDebugChar ('-'); /* failed checksum */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
297 packet->state = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
298 return -1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
299 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
301 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
302 putDebugChar ('+'); /* successful transfer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
303 /* if a sequence char is present, reply the sequence ID */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
304 if (packet->contents[2] == ':')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
305 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
306 uint32 count = packet->length;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
307 uint32 i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
308 putDebugChar (packet->contents[0]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
309 putDebugChar (packet->contents[1]);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
310 /* remove sequence chars from buffer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
311 for (i=3; i <= count; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
312 packet->contents[i-3] = packet->contents[i];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
313 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
314 return 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
315 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 /* We should never get here. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 packet->state = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 return -1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 /* send the packet in buffer. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
324 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
325 __putpacket (buffer)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
326 char *buffer;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 unsigned char checksum;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
329 uint32 count;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 unsigned char ch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332 /* $<packet info>#<checksum>. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 do
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 putDebugChar ('$');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 checksum = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 count = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 while ((ch = buffer[count]))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
340 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
341 putDebugChar (ch);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
342 checksum += ch;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
343 count += 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
344 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 putDebugChar ('#');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 putDebugChar (hexchars[(checksum >> 4) & 0xf]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 putDebugChar (hexchars[checksum & 0xf]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 while ((readDebugChar () & 0x7f) != '+');
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
354 char __remcomInBuffer[BUFMAX];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
355 char __remcomOutBuffer[BUFMAX];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 /* Indicate to caller of mem2hex or hex2mem that there has been an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 error. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 volatile int __mem_fault = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
361
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
362 #ifndef TARGET_HAS_OWN_MEM_FUNCS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
363 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
364 * _target_readmem_hook / _target_writemem_hook:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
365 * Allow target to get involved in reading/writing memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
366 *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
367 * If these hooks are defined by the target, they will be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
368 * called for each user program memory access. Otherwise, the stub
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
369 * will simply dereference a pointer to access user program memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
370 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
371
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
372 unsigned char (*_target_readmem_hook) (unsigned char* addr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
373 void (*_target_writemem_hook) (unsigned char* addr,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
374 unsigned char value);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
375
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
376 static unsigned char
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
377 get_target_byte (volatile unsigned char *address)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
379 if (_target_readmem_hook) /* target needs to control memory access */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
380 return _target_readmem_hook ((unsigned char *) address);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
381 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
382 return *address;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
383 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
384
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
385 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
386 put_target_byte (volatile unsigned char *address, unsigned char value)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
387 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
388 if (_target_writemem_hook) /* target needs to control memory access */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
389 _target_writemem_hook ((unsigned char *) address, value);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
390 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
391 *address = value;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
392 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
393
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
394 /* These are the "arguments" to __do_read_mem and __do_write_mem,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
395 which are passed as globals to avoid squeezing them thru
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
396 __set_mem_fault_trap. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
397
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
398 static volatile target_register_t memCount;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
399 static volatile unsigned char *memSrc, *memDst;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
401 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
402 * __do_read_mem:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
403 * Copy from target memory to trusted memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
404 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
405
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
406 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
407 __do_read_mem (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
408 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
409 __mem_fault = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
410 while (memCount)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
411 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
412 unsigned char ch = get_target_byte (memSrc++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
413
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
414 if (__mem_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
415 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
416 *memDst++ = ch;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
417 memCount--;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
418 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
421 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
422 * __do_write_mem:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
423 * Copy from trusted memory to target memory.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
424 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
425
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427 __do_write_mem (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
428 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
429 __mem_fault = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
430 while (memCount)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
431 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
432 unsigned char ch = *memSrc++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
433
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
434 put_target_byte (memDst++, ch);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
435 if (__mem_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
436 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
437 memCount--;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
439 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
441 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
442 * __read_mem_safe:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
443 * Get contents of target memory, abort on error.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
444 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
445
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 int
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
447 __read_mem_safe (void *dst, target_register_t src, int count)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
449 memCount = count;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
450 memSrc = (unsigned char *) src;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
451 memDst = (unsigned char *) dst;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
452 __set_mem_fault_trap (__do_read_mem);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
453 return count - memCount; /* return number of bytes successfully read */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
456 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
457 * __write_mem_safe:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
458 * Set contents of target memory, abort on error.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
459 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
460
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 __write_mem_safe (unsigned char *src, target_register_t dst, int count)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
464 memCount = count;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
465 memSrc = (unsigned char *) src;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
466 memDst = (unsigned char *) dst;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
467 __set_mem_fault_trap (__do_write_mem);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
468 return count - memCount; /* return number of bytes successfully read */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
470
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
471 #endif /* TARGET_HAS_OWN_MEM_FUNCS */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
472
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
473 /* These are the "arguments" to __mem2hex_helper and __hex2mem_helper,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
474 which are passed as globals to avoid squeezing them thru
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
475 __set_mem_fault_trap. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
476
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
477 static int hexMemCount;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
478 static char *hexMemSrc, *hexMemDst;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
479 static int may_fault_mode;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
480 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
481 static int progMem;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
482 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
483
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
484 /* Hamburger helper? */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
485 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
486 __mem2hex_helper (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
487 {
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
488 union {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
489 unsigned long long_val;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
490 unsigned char bytes[sizeof(long)];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
491 } val;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
492 int len, i;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
493 unsigned char ch;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
494 __mem_fault = 0;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
495 while (hexMemCount > 0) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
496 if (may_fault_mode) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
497 if ((hexMemCount >= sizeof(long)) &&
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
498 (((target_register_t)hexMemSrc & (sizeof(long)-1)) == 0)) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
499 // Should be safe to access via a long
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
500 len = sizeof(long);
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
501 } else if ((hexMemCount >= sizeof(short)) &&
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
502 (((target_register_t)hexMemSrc & (sizeof(short)-1)) == 0)) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
503 // Should be safe to access via a short
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
504 len = sizeof(short);
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
505 } else {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
506 len = 1;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
507 }
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
508 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
509 if (progMem)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
510 __read_progmem_safe(&val.bytes[0], hexMemSrc, len);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
511 else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
512 #endif
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
513 __read_mem_safe(&val.bytes[0], hexMemSrc, len);
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
514 } else {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
515 len = 1;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
516 val.bytes[0] = *hexMemSrc;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
517 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
518 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
519 return;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
520
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
521 for (i = 0; i < len; i++) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
522 ch = val.bytes[i];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
523 *(hexMemDst++) = hexchars[(ch >> 4) & 0xf];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
524 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
525 return;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
526 *(hexMemDst++) = hexchars[ch & 0xf];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
527 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
528 return;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
529 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
530 hexMemCount -= len;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
531 hexMemSrc += len;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
532 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
533 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
534
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
535 /* Convert the memory pointed to by MEM into HEX, placing result in BUF.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
536 * Return a pointer to the last char put in buf (NUL). In case of a memory
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
537 * fault, return 0.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 * If MAY_FAULT is non-zero, then we will handle memory faults by returning
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
539 * a 0 (and assume that MEM is a pointer into the user program), else we
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
540 * treat a fault like any other fault in the stub (and assume that MEM is
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
541 * a pointer into the stub's memory).
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
544 char *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
545 __mem2hex (mem, buf, count, may_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
546 char *mem;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
547 char *buf;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 int count;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 int may_fault;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
551 hexMemDst = (unsigned char *) buf;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
552 hexMemSrc = (unsigned char *) mem;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
553 hexMemCount = count;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
554 may_fault_mode = may_fault;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
555 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
556 progMem = 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
557 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
558
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
559 if (may_fault)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
561 if (__set_mem_fault_trap (__mem2hex_helper))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
562 return 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
564 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
565 __mem2hex_helper ();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
567 *hexMemDst = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
569 return (char *) hexMemDst;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
572 /* Convert the target memory identified by MEM into HEX, placing result in BUF.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
573 * Return a pointer to the last char put in buf (NUL). In case of a memory
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
574 * fault, return 0.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
575 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
576
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
577 static char *
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
578 __mem2hex_safe (target_addr_t mem, char *buf, int count)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
579 {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
580 hexMemDst = (unsigned char *) buf;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
581 hexMemSrc = (unsigned char *) TARGET_ADDR_TO_PTR(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
582 hexMemCount = count;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
583 may_fault_mode = 1;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
584 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
585 progMem = TARGET_ADDR_IS_PROGMEM(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
586 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
587
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
588 if (__set_mem_fault_trap (__mem2hex_helper))
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
589 return 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
590
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
591 *hexMemDst = 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
592
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
593 return (char *) hexMemDst;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
594 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
595
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
596
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
597
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
598 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
599 __hex2mem_helper (void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 {
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
601 union {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
602 unsigned long long_val;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
603 unsigned char bytes[sizeof(long)];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
604 } val;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
605 int len, i;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
606 unsigned char ch = '\0';
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
608 __mem_fault = 0;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
609 while (hexMemCount > 0 && *hexMemSrc) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
610 if (may_fault_mode) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
611 if ((hexMemCount >= sizeof(long)) &&
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
612 (((target_register_t)hexMemDst & (sizeof(long)-1)) == 0)) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
613 len = sizeof(long);
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
614 } else if ((hexMemCount >= sizeof(short)) &&
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
615 (((target_register_t)hexMemDst & (sizeof(short)-1)) == 0)) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
616 len = sizeof(short);
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
617 } else {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
618 len = 1;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
619 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
620 } else {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
621 len = 1;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
622 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
623
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
624 for (i = 0; i < len; i++) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
625 // Check for short data?
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
626 ch = stubhex (*(hexMemSrc++)) << 4;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
627 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
628 return;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
629 ch |= stubhex (*(hexMemSrc++));
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
630 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
631 return;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
632 val.bytes[i] = ch;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
633 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
634
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
635 if (may_fault_mode) {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
636 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
637 if (progMem)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
638 __write_progmem_safe (&val.bytes[0], hexMemDst, len);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
639 else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
640 #endif
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
641 __write_mem_safe (&val.bytes[0], hexMemDst, len);
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
642 } else
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
643 *hexMemDst = ch;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
644
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
645 if (__mem_fault)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
646 return;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
647 hexMemCount -= len;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
648 hexMemDst += len;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
650 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
651
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
652 /* Convert COUNT bytes of the hex array pointed to by BUF into binary
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
653 to be placed in MEM. Return a pointer to the character AFTER the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
654 last byte written.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
655
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
656 If MAY_FAULT is set, we will return a non-zero value if a memory
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
657 fault occurs (and we assume that MEM is a pointer into the user
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
658 program). Otherwise, we will take a trap just like any other memory
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
659 fault (and assume that MEM points into the stub's memory). */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
661 char *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
662 __hex2mem (buf, mem, count, may_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
663 char *buf;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
664 char *mem;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
665 int count;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
666 int may_fault;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
667 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
668 hexMemSrc = (unsigned char *) buf;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
669 hexMemDst = (unsigned char *) mem;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
670 hexMemCount = count;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
671 may_fault_mode = may_fault;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
672 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
673 progMem = 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
674 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
676 if (may_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
677 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
678 if (__set_mem_fault_trap (__hex2mem_helper))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
679 return 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
680 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
681 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
682 __hex2mem_helper ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
683
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
684 return (char *) hexMemDst;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
685 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
686
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
687 /* Convert COUNT bytes of the hex array pointed to by BUF into binary
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
688 to be placed in target MEM. Return a pointer to the character AFTER
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
689 the last byte written.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
690 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
691 char *
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
692 __hex2mem_safe (char *buf, target_addr_t mem, int count)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
693 {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
694 hexMemSrc = (unsigned char *) buf;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
695 hexMemDst = (unsigned char *) TARGET_ADDR_TO_PTR(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
696 hexMemCount = count;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
697 may_fault_mode = 1;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
698 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
699 progMem = TARGET_ADDR_IS_PROGMEM(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
700 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
701
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
702 if (__set_mem_fault_trap (__hex2mem_helper))
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
703 return 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
704
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
705 return (char *) hexMemDst;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
706 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
707
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
708
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
709 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
710 set_debug_traps (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
711 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
712 __install_traps ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
713 initialized = 1; /* FIXME: Change this to dbg_stub_initialized */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 * While we find nice hex chars, build an int.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 * Return number of chars processed.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
721 unsigned int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
722 __hexToInt (char **ptr, target_register_t *intValue)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 int numChars = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 int hexValue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 *intValue = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 while (**ptr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
731 hexValue = stubhex (**ptr);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 if (hexValue < 0)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
733 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 *intValue = (*intValue << 4) | hexValue;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 numChars ++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 (*ptr)++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 return (numChars);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
744 /*
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
745 * While we find nice hex chars, build a target memory address.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
746 * Return number of chars processed.
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
747 */
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
748
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
749 unsigned int
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
750 __hexToAddr (char **ptr, target_addr_t *val)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
751 {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
752 int numChars = 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
753 int hexValue;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
754
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
755 *val = 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
756
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
757 while (**ptr)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
758 {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
759 hexValue = stubhex (**ptr);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
760 if (hexValue < 0)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
761 break;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
762
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
763 *val = (*val << 4) | hexValue;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
764 numChars ++;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
765
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
766 (*ptr)++;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
767 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
768
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
769 return (numChars);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
770 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
771
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
772
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774 * Complement of __hexToInt: take an int of size "numBits",
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 * convert it to a hex string. Return length of (unterminated) output.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 unsigned int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 __intToHex (char *ptr, target_register_t intValue, int numBits)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 int numChars = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783 if (intValue == 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
785 *(ptr++) = '0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
786 *(ptr++) = '0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
787 return 2;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
788 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 numBits = (numBits + 7) / 8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
791 while (numBits)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
792 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 int v = (intValue >> ((numBits - 1) * 8));
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 if (v || (numBits == 1))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
795 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
796 v = v & 255;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
797 *(ptr++) = __tohex ((v / 16) & 15);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
798 *(ptr++) = __tohex (v & 15);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
799 numChars += 2;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
800 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 numBits--;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804 return (numChars);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
807 #if DEBUG_THREADS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
808 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
809 * Kernel Thread Control
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
810 *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
811 * If the current thread is set to other than zero (or minus one),
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
812 * then ask the kernel to lock it's scheduler so that only that thread
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
813 * can run.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
814 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
815
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
816 static unsigned char did_lock_scheduler = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
817 static unsigned char did_disable_interrupts = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
818
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
819 /* Pointer to "kernel call" for scheduler control */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
820 static int (*schedlock_fn) (int, int, long) = stub_lock_scheduler;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
821
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
822 /* Pointer to target stub call for disabling interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
823 Target stub will initialize this if it can. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
824 int (*__disable_interrupts_hook) (int); /* don't initialize here! */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
825 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
826
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
827 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
828 lock_thread_scheduler (int kind) /* "step" or "continue" */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
829 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
830 #if DEBUG_THREADS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
831 int ret = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
832
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
833 /* GDB will signal its desire to run a single thread
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
834 by setting _gdb_cont_thread to non-zero / non-negative. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
835 if (_gdb_cont_thread <= 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
836 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
837
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
838 if (schedlock_fn) /* kernel call */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
839 ret = (*schedlock_fn) (1, kind, _gdb_cont_thread);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
840
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
841 if (ret == 1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
842 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
843 did_lock_scheduler = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
844 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
845 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
846
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
847 if (schedlock_fn == 0 || /* no kernel scheduler call */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
848 ret == -1) /* kernel asks stub to handle it */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
849 if (__disable_interrupts_hook) /* target stub has capability */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
850 if ((*__disable_interrupts_hook) (1))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
851 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
852 did_disable_interrupts = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
853 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
854 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
855 #endif /* DEBUG_THREADS */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
856 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
857
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
858 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
859 unlock_thread_scheduler ()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
860 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
861 #if DEBUG_THREADS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
862 if (did_lock_scheduler)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
863 if (schedlock_fn) /* kernel call */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
864 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
865 (*schedlock_fn) (0, 0, _gdb_cont_thread);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
866 /* I could check the return value, but
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
867 what would I do if it failed??? */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
868 did_lock_scheduler = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
869 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
870 if (did_disable_interrupts)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
871 if (__disable_interrupts_hook) /* target stub call */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
872 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
873 (*__disable_interrupts_hook) (0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
874 /* Again, I could check the return value, but
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
875 what would I do if it failed??? */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
876 did_disable_interrupts = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
877 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
878 #endif /* DEBUG_THREADS */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
879 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
880
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
881 #ifdef CYGPKG_CYGMON
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
882 int processing_breakpoint_function = 0;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
883 #endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
884
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 __handle_exception (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
888 int sigval = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
889
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
890 #ifdef TARGET_HAS_NEXT_STEP
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
891 if (! __next_step_done ())
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
892 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
893 __clear_breakpoints ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
894 __install_breakpoints ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
895 __single_step ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
896 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
897 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
898 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
899
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
900 #ifdef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
901 // We need to unpack the registers before they are accessed.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
902 if (__cleanup_vec != NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
903 __cleanup_vec ();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904
136
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
905 #if defined(CYGSEM_REDBOOT_BSP_SYSCALLS)
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
906 // Temporary support for gnupro bsp SWIs
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
907 if (__is_bsp_syscall())
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
908 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
909 sigval = hal_syscall_handler();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
910 if (0 == sigval)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
911 {
136
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
912 if (__init_vec != NULL)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
913 __init_vec ();
136
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
914 return;
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
915 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
916 }
136
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
917 #endif
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
918
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
919 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
920 // Special case for GDB BREAKs. This flag is set by cyg_stub_cleanup.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
921 if (cyg_hal_gdb_break) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
922 cyg_hal_gdb_break = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
923 sigval = SIGINT;
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
924 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
925 #endif
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
926
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
927 // Only compute sigval if it wasn't already computed (in
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
928 // hal_syscall_handler or as a result of a GDB async break)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
929 if (0 == sigval)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
930 sigval = __computeSignal (__get_trap_number ());
136
a9ac27ec7abc Merge from eCos master repository on 2000-11-17-18:24:25-GMT
jlarmour
parents: 132
diff changeset
931
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
932 #else // __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933 /* reply to host that an exception has occurred */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934 sigval = __computeSignal (__get_trap_number ());
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
935 #endif // __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
936
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
937 if (__is_breakpoint_function ())
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
938 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
939 #ifdef CYGPKG_CYGMON
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
940 processing_breakpoint_function = 1;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
941 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 __skipinst ();
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
943 } else {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
944 #ifdef CYGPKG_CYGMON
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
945 processing_breakpoint_function = 0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
946 #endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
947 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
949 #ifndef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
950 if (__cleanup_vec != NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
951 __cleanup_vec ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
952 #endif // !__ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
953
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
954 __clear_breakpoints ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
955
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
956 /* Undo effect of previous single step. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
957 unlock_thread_scheduler ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
958 __clear_single_step ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
959
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
960 #ifdef __ECOS__
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
961 /* Need to flush the data and instruction cache here, as we may have
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
962 removed a breakpoint in __single_step - and we may be sharing
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
963 some code with the application! */
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
964
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
965 __data_cache (CACHE_FLUSH) ;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
966 __instruction_cache (CACHE_FLUSH) ;
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
967 #endif
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
968
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
969 #ifdef SIGSYSCALL
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
970 if (sigval == SIGSYSCALL)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 int val;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973 /* Do the skipinst FIRST. */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
974 #ifndef SYSCALL_PC_AFTER_INST
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975 __skipinst ();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
976 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977 val = __process_syscall_vec (__get_syscall_num ());
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
978 if (val < 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
979 sigval = -val;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
980 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
981 sigval = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
982 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
983
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
984 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
986 /* Indirect function call to stub, cygmon monitor or other */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
987 if (sigval != 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
988 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
989 while (__process_exception_vec (sigval))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
990 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
991 /* Empty! */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
992 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
993 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
995 __install_breakpoints ();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
996
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
997 if (__init_vec != NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
998 __init_vec ();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1000
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1001 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1002 * _get_trace_register_hook:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1003 * This function pointer will be non-zero if the trace component
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1004 * wants to intercept requests for register values.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1005 *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1006 * FIXME: evidently I need a new hook for large registers...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1007 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1008
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1009 int (*_get_trace_register_hook) (regnames_t, target_register_t *);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1010
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1011 void
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1012 stub_format_registers(char *packet, char *ptr)
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1013 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1014 int regnum;
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1015 int sr = 0, er = NUMREGS_GDB;
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1016
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1017 if (packet[0] == 'p')
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1018 {
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1019 target_register_t regno;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1020 char *p = &packet[1];
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1021 if (__hexToInt (&p, &regno))
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1022 {
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1023 sr = regno;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1024 er = regno + 1;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1025 }
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1026 else
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1027 {
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1028 strcpy (ptr, "INVALID");
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1029 return;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1030 }
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1031 }
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1032
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1033 for (regnum = sr; regnum < er; regnum++)
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1034 {
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1035 /* We need to compensate for the value offset within the
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1036 register. */
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1037 char dummyDat[32];
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1038 target_register_t addr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1039 char *vptr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1040 int reg_valid = 1;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1041
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1042 #ifdef TARGET_HAS_LARGE_REGISTERS
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1043 if (sizeof (target_register_t) < REGSIZE (regnum)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1044 get_register_as_bytes (regnum, dummyDat);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1045 vptr = dummyDat;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1046 } else
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1047 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1048 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1049 if (_get_trace_register_hook)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1050 reg_valid = _get_trace_register_hook (regnum, &addr);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1051 else
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
1052 {
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1053 addr = get_register (regnum);
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
1054 #ifdef CYGHWR_REGISTER_VALIDITY_CHECKING
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
1055 reg_valid = get_register_valid (regnum);
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
1056 #endif
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 112
diff changeset
1057 }
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1058 vptr = ((char *) &addr);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1059 if (sizeof (addr) > REGSIZE(regnum)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1060 /* May need to cope with endian-ness */
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1061
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1062 #if !defined(__LITTLE_ENDIAN__) && !defined(_LITTLE_ENDIAN)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1063 vptr += sizeof (addr) - REGSIZE (regnum);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1064 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1065 } else if (sizeof (addr) < REGSIZE (regnum)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1066 int off = REGSIZE (regnum) - sizeof (addr);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1067 int x;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1068 char extend_val = 0;
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1069
121
6bd9d475ed4b Merge from eCos master repository on 2000-09-04-20:50:20-BST
jlarmour
parents: 115
diff changeset
1070 #ifdef CYGARC_SIGN_EXTEND_REGISTERS
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1071 {
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1072 unsigned long bits_in_addr = (sizeof(addr) << 3); // ie Size in bytes * 8
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1073 target_register_t sign_bit_mask = (1 << (bits_in_addr - 1));
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1074 if ((addr & sign_bit_mask) == sign_bit_mask)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1075 extend_val = ~0;
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1076 }
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1077 #endif
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1078
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1079 #if defined(__LITTLE_ENDIAN__) || defined(_LITTLE_ENDIAN)
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1080 for (x = 0; x < off; x++)
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1081 dummyDat[x + sizeof(addr)] = extend_val;
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1082 _memcpy (dummyDat, &addr, sizeof (addr));
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1083 #else
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1084 for (x = 0; x < off; x++)
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1085 dummyDat[x] = extend_val;
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1086 _memcpy (dummyDat + off, &addr, sizeof (addr));
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1087 #endif
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1088 vptr = dummyDat;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1089 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1090 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1091 if (reg_valid) { /* we have a valid reg value */
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1092 ptr = __mem2hex (vptr, ptr, REGSIZE (regnum), 0);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1093 } else {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1094 /* Trace component returned a failure code.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1095 This means that the register value is not available.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1096 We'll fill it with 'x's, and GDB will understand. */
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1097 _memset (ptr, 'x', 2 * REGSIZE (regnum));
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1098 ptr += 2 * REGSIZE (regnum);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1099 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1100 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1101 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1102
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1103 void
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1104 stub_update_registers(char *in_ptr, char *out_ptr)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1105 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1106 char *ptr = &in_ptr[1];
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1107 int x;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1108 int sr = 0, er = NUMREGS_GDB;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1109
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1110 if (*in_ptr == 'P') {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1111 target_register_t regno;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1112
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1113 if (__hexToInt (&ptr, &regno) && (*ptr++ == '=')) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1114
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1115 sr = regno;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1116 er = regno + 1;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1117 } else {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1118 strcpy (out_ptr, "P01");
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1119 return;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1120 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1121 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1122
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1123 for (x = sr; x < er; x++) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1124 target_register_t value = 0;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1125 char *vptr;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1126
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1127 #ifdef TARGET_HAS_LARGE_REGISTERS
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1128 if (sizeof (target_register_t) < REGSIZE (x)) {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1129 char dummyDat [32];
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1130
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1131 __hex2mem (ptr, dummyDat, REGSIZE (x), 0);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1132 put_register_as_bytes (x, dummyDat);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1133 } else
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1134 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1135 {
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1136 vptr = ((char *) &value);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1137 #if !defined(__LITTLE_ENDIAN__) && !defined(_LITTLE_ENDIAN)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1138 vptr += sizeof (value) - REGSIZE (x);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1139 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1140 __hex2mem (ptr, vptr, REGSIZE (x), 0);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1141 put_register (x, value);
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1142 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1143 ptr += REGSIZE (x) * 2;
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1144 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1145
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1146 strcpy (out_ptr, "OK");
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1147 }
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1148
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1149 int
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1150 __process_packet (char *packet)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1151 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1152 int is_binary = 0;
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1153 #if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE)
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1154 int is_Z = 0;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1155 #endif
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1156
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1157 __remcomOutBuffer[0] = 0;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1158 switch (packet[0])
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1159 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1160 case '?':
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1161 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1162 int sigval = __computeSignal (__get_trap_number ());
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1163 __remcomOutBuffer[0] = 'S';
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1164 __remcomOutBuffer[1] = hexchars[(sigval >> 4) & 0xf];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1165 __remcomOutBuffer[2] = hexchars[sigval & 0xf];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1166 __remcomOutBuffer[3] = 0;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1167 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1168 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1169
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 34
diff changeset
1170 #ifdef __ECOS__
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 34
diff changeset
1171 #if !defined(CYG_HAL_STARTUP_RAM) // Only for ROM based stubs
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1172 #if 0 // Disable to avoid conflict with stub-breakpoint z/Z-packets
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1173 case 'z':
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1174 /* report IO buffer sizes so download can achieve optimal
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1175 download speed */
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1176 {
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1177 int i;
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1178 i = __intToHex (__remcomOutBuffer, BUFMAX, 32);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1179 __remcomOutBuffer[i] = 0;
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1180 break;
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1181 }
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1182 #endif
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1183 case 'd':
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1184 /* toggle debug flag */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1185 strcpy(__remcomOutBuffer, GDB_stubs_version);
78
59d97b6ba612 Merge from eCos master repository on 2000-03-28-19:50:47-BST
jlarmour
parents: 64
diff changeset
1186 break;
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 34
diff changeset
1187 #endif
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 34
diff changeset
1188 #endif // __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1189
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1190 case 'q':
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1191 /* general query packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1192 process_query (&packet[1]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1193 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1194
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1195 case 'Q':
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1196 /* general set packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1197 process_set (&packet[1]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1198 break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1199
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1200 case 'p': /* return the value of a single CPU register */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1201 case 'g': /* return the value of the CPU registers */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1202 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1203 stub_format_registers(&packet[0], __remcomOutBuffer);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1204 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1205 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1206
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1207 case 'A': /* set program arguments */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1208 {
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
1209 #ifdef CYGSEM_ECOS_SUPPORTS_PROGRAM_ARGS
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1210 if (packet[1] == '\0')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1211 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1212 __free_program_args ();
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1213 strcpy (__remcomOutBuffer, "OK");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1214 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1215 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1216 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1217 target_register_t arglen, argnum;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1218 char *ptr = &packet[1];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1220 while (1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1221 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1222 if (__hexToInt (&ptr, &arglen)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1223 && (*ptr++ == ',')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1224 && __hexToInt (&ptr, &argnum)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1225 && (*ptr++ == ','))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1226 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1227 if (arglen > 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1228 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1229 char *s = __add_program_arg (argnum, arglen);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1230 if (s != NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1231 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1232 __hex2mem (ptr, s, arglen, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1233 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1234 ptr += arglen * 2;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1235 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1236
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1237 if (*ptr == ',')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1238 ptr++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1239 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1240 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1241 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1242 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1243 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1244 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1245 if (*ptr == '\0')
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1246 strcpy (__remcomOutBuffer, "OK");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1247 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1248 strcpy (__remcomOutBuffer, "E01");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1249 }
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
1250 #else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1251 strcpy (__remcomOutBuffer, "E01");
163
0d2b193a635f Merge from eCos master repository on 2001-06-22-17:38:39-BST
jlarmour
parents: 162
diff changeset
1252 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1253 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1254 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1255
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1256 case 'P':
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1257 case 'G': /* set the value of the CPU registers - return OK */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1258 {
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1259 char *in_ptr = &packet[0];
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1260 char *out_ptr = __remcomOutBuffer;
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
1261 stub_update_registers(in_ptr, out_ptr);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1262 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1263 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1264
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1265 case 'm': /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1266 /* Try to read %x,%x. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1267 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1268 target_register_t length;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1269 char *ptr = &packet[1];
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1270 target_addr_t addr;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1271
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1272 if (__hexToAddr (&ptr, &addr)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1273 && *ptr++ == ','
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1274 && __hexToInt (&ptr, &length))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1275 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1276 if (__mem2hex_safe (addr, __remcomOutBuffer, length))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1277 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1278
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1279 strcpy (__remcomOutBuffer, "E03");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1280 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1281 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1282 strcpy (__remcomOutBuffer, "E01");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1283 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1284 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1285
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1286 case 'X':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1287 /* XAA..AA,LLLL: Write LLLL escaped binary bytes at address AA.AA */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1288 is_binary = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1289 /* fall through */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1290 case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1291 /* Try to read '%x,%x:'. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1292 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1293 target_register_t length;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1294 char *ptr = &packet[1], buf[128];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1295 int i;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1296 target_addr_t addr;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1297
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1298 if (__hexToAddr (&ptr, &addr)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1299 && *ptr++ == ','
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1300 && __hexToInt (&ptr, &length)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1301 && *ptr++ == ':')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1302 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1303 /* GDB sometimes sends an impossible length */
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1304 if (length < 0 || length >= BUFMAX)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1305 strcpy (__remcomOutBuffer, "E01");
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1306
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1307 else if (is_binary)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1308 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1309 while (length > 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1310 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1311 for (i = 0; i < sizeof(buf) && i < length; i++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1312 if ((buf[i] = *ptr++) == 0x7d)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1313 buf[i] = 0x20 | (*ptr++ & 0xff);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1314
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1315 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1316 if (TARGET_ADDR_IS_PROGMEM(addr)) {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1317 if (__write_progmem_safe (buf, (void *)TARGET_ADDR_TO_PTR(addr), i) != i)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1318 break;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1319 } else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1320 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1321 if (__write_mem_safe (buf, (void *)TARGET_ADDR_TO_PTR(addr), i) != i)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1322 break;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1323
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1324
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1325 length -= i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1326 addr += i;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1327 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1328 if (length <= 0)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1329 strcpy (__remcomOutBuffer, "OK");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1330 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1331 strcpy (__remcomOutBuffer, "E03");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1332 }
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1333 else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1334 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1335 if (__hex2mem_safe (ptr, addr, length) != NULL)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1336 strcpy (__remcomOutBuffer, "OK");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1337 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1338 strcpy (__remcomOutBuffer, "E03");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1339 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1340 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1341 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1342 strcpy (__remcomOutBuffer, "E02");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1343 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1344 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1345
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1346 case 'S':
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1347 case 's': /* sAA..AA Step from address AA..AA (optional) */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1348 case 'C':
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1349 case 'c': /* cAA..AA Continue at address AA..AA (optional) */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1350 /* try to read optional parameter, pc unchanged if no parm */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1351
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1352 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1353 char *ptr = &packet[1];
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1354 target_addr_t addr;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1355 target_register_t sigval = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1356
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1357 if (packet[0] == 'C' || packet[0] == 'S')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1358 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1359 __hexToInt (&ptr, &sigval);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1360 if (*ptr == ';')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1361 ptr++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1362 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1363
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1364 if (__hexToAddr (&ptr, &addr))
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1365 set_pc ((target_register_t)TARGET_ADDR_TO_PTR(addr));
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1366
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1367 /* Need to flush the instruction cache here, as we may have
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1368 deposited a breakpoint, and the icache probably has no way of
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1369 knowing that a data ref to some location may have changed
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1370 something that is in the instruction cache. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1371
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1372 #ifdef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1373 __data_cache (CACHE_FLUSH) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1374 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1375 __instruction_cache (CACHE_FLUSH) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1376
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1377 /* If we have a function to handle signals, call it. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1378 if (sigval != 0 && __process_signal_vec != NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1379 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1380 /* If 0 is returned, we either ignored the signal or invoked a user
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1381 handler. Otherwise, the user program should die. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1382 if (! __process_signal_vec (sigval))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1383 sigval = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1384 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1385
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1386 if (sigval != 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1387 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1388 sigval = SIGKILL; /* Always nuke the program */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1389 __kill_program (sigval);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1390 return 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1391 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1392
48
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1393 #ifdef __ECOS__
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1394 // CASE 102327 - watchpoints fight with output, so do not step
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1395 // through $O packet output routines.
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1396 #ifdef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1397 if ( cyg_hal_gdb_break_is_set() ) {
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1398 packet[0] = 'c'; // Force it to be a "continue" instead of step.
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1399 cyg_hal_gdb_running_step = 1; // And tell the hal_stub...
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1400 }
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1401 #endif
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1402 #endif
1370c5e55234 Merge from eCos master repository on 1999-10-25-21:18:27-BST
jlarmour
parents: 46
diff changeset
1403
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1404 /* Set machine state to force a single step. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1405 if (packet[0] == 's' || packet[0] == 'S')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1406 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1407 lock_thread_scheduler (0); /* 0 == single-step */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1408 #ifdef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1409 // PR 19845 workaround:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1410 // Make sure the single-step magic affects the correct registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1411 _registers = &registers[0];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1412 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1413 __single_step ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1414 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1415 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1416 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1417 lock_thread_scheduler (1); /* 1 == continue */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1418 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1419
28
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1420 #ifdef __ECOS__
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1421 /* Need to flush the data and instruction cache here, as we may have
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1422 deposited a breakpoint in __single_step. */
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1423
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1424 __data_cache (CACHE_FLUSH) ;
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1425 __instruction_cache (CACHE_FLUSH) ;
138
289bf90c6a9b Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents: 136
diff changeset
1426 hal_flush_output();
28
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1427 #endif
18ee5a9c102e Merge from eCos master repository on 1999-08-09-17:04:48-BST
jlarmour
parents: 2
diff changeset
1428
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1429 return -1;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1430 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1431
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1432 case 'D' : /* detach */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1433 __putpacket (__remcomOutBuffer);
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1434 /* fall through */
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 163
diff changeset
1435 case 'k' : /* kill the program */
138
289bf90c6a9b Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents: 136
diff changeset
1436 #ifdef __ECOS__
289bf90c6a9b Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents: 136
diff changeset
1437 hal_flush_output();
289bf90c6a9b Merge from eCos master repository on 2000-11-24-06:43:05-GMT
jlarmour
parents: 136
diff changeset
1438 #endif
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1439 #ifdef CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1440 { // Reset the timer to default and cancel any callback
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1441 extern void sys_profile_reset(void);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1442 sys_profile_reset();
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1443 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1444 #endif // CYGSEM_REDBOOT_BSP_SYSCALLS_GPROF
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1445 __process_exit_vec ();
154
e2d866e32dac Merge from eCos master repository on 2001-02-26-23:18:05-GMT
jlarmour
parents: 151
diff changeset
1446 return -1;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1447
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1448 case 'r': /* Reset */
162
2395031e7a66 Merge from eCos master repository on 2001-06-15-06:43:03-BST
jlarmour
parents: 156
diff changeset
1449 /* With the next 'k' packet, reset the board */
2395031e7a66 Merge from eCos master repository on 2001-06-15-06:43:03-BST
jlarmour
parents: 156
diff changeset
1450 __process_exit_vec = &__reset;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1451 break;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1452
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1453 case 'H':
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1454 STUB_PKT_CHANGETHREAD (packet+1, __remcomOutBuffer, 300) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1455 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1456 case 'T' :
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1457 STUB_PKT_THREAD_ALIVE (packet+1, __remcomOutBuffer, 300) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1458 break ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1459 case 'B':
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1460 /* breakpoint */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1461 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1462 target_register_t addr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1463 char mode;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1464 char *ptr = &packet[1];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1465 if (__hexToInt (&ptr, &addr) && *(ptr++) == ',')
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1466 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1467 mode = *(ptr++);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1468 if (mode == 'C')
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 145
diff changeset
1469 __remove_breakpoint (addr,0);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1470 else
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 145
diff changeset
1471 __set_breakpoint (addr,0);
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1472 strcpy (__remcomOutBuffer, "OK");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1473 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1474 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1475 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1476 strcpy (__remcomOutBuffer, "E01");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1477 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1478 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1479 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1480
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1481 case 'b': /* bBB... Set baud rate to BB... */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1482 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1483 target_register_t baudrate;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1484
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1485 char *ptr = &packet[1];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1486 if (!__hexToInt (&ptr, &baudrate))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1487 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1488 strcpy (__remcomOutBuffer, "B01");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1489 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1490 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1491
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1492 __putpacket ("OK"); /* Ack before changing speed */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1493 __set_baud_rate (baudrate);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1494 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1495 }
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1496
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1497 #if defined(CYGNUM_HAL_BREAKPOINT_LIST_SIZE) && (CYGNUM_HAL_BREAKPOINT_LIST_SIZE > 0)
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1498 case 'Z':
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1499 is_Z = 1;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1500 case 'z':
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1501 {
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1502 char *ptr = &packet[1];
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1503 target_register_t ztype, addr, length;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1504 int err;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1505 target_addr_t taddr;
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1506
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1507 if (__hexToInt (&ptr, &ztype) && *(ptr++) == ',')
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1508 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1509 if (__hexToAddr (&ptr, &taddr))
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1510 {
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1511 if (*(ptr++) == ',')
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1512 {
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1513 /* When there is a comma, there must be a length */
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1514 if (!__hexToInt (&ptr, &length))
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1515 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1516 strcpy (__remcomOutBuffer, "E02");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1517 break;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1518 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1519 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1520 else
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1521 length = 0;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1522
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1523 addr = (target_register_t)TARGET_ADDR_TO_PTR(taddr);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1524
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1525 switch (ztype)
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1526 {
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1527 case ZTYPE_SW_BREAKPOINT:
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1528 /* sw breakpoint */
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1529 if (is_Z)
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 145
diff changeset
1530 err = __set_breakpoint(addr,length);
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1531 else
151
25e238959bae Merge from eCos master repository on 2001-02-12-23:44:24-GMT
jlarmour
parents: 145
diff changeset
1532 err = __remove_breakpoint(addr,length);
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1533 if (!err)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1534 strcpy (__remcomOutBuffer, "OK");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1535 else
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1536 strcpy (__remcomOutBuffer, "E02");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1537 break;
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1538 case ZTYPE_HW_BREAKPOINT:
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1539 #if defined(HAL_STUB_HW_BREAKPOINT_LIST_SIZE) && (HAL_STUB_HW_BREAKPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1540 if (is_Z)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1541 err = __set_hw_breakpoint(addr, length);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1542 else
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1543 err = __remove_hw_breakpoint(addr, length);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1544 if (!err)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1545 strcpy (__remcomOutBuffer, "OK");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1546 else
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1547 #endif
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1548 strcpy (__remcomOutBuffer, "E02");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1549 break;
317
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1550 case ZTYPE_HW_WATCHPOINT_WRITE:
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1551 case ZTYPE_HW_WATCHPOINT_READ:
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1552 case ZTYPE_HW_WATCHPOINT_ACCESS:
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1553 #if defined(HAL_STUB_HW_WATCHPOINT_LIST_SIZE) && (HAL_STUB_HW_WATCHPOINT_LIST_SIZE > 0)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1554 if (is_Z)
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1555 err = __set_hw_watchpoint(addr, length, ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1556 else
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1557 err = __remove_hw_watchpoint(addr, length, ztype);
4882695334f2 HW watch/breakpoint support change
msalter
parents: 208
diff changeset
1558 if (!err)
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1559 strcpy (__remcomOutBuffer, "OK");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1560 else
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1561 #endif
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1562 strcpy (__remcomOutBuffer, "E02");
132
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1563 break;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1564 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1565 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1566 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1567 break;
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1568 }
0ae0bc38e387 Merge from eCos master repository on 2000-10-31-00:30:36-GMT
jlarmour
parents: 130
diff changeset
1569 #endif // Z packet support
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1570 #ifdef CYGPKG_HAL_GDB_FILEIO // File I/O over the GDB remote protocol
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1571 case 'F':
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1572 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1573 extern void cyg_hal_gdbfileio_process_F_packet( char *, char *);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1574 cyg_hal_gdbfileio_process_F_packet( packet, __remcomOutBuffer );
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1575 return -1;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1576 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1577 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1578 default:
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1579 __process_target_packet (packet, __remcomOutBuffer, 300);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1580 break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1581 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1582
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1583 /* reply to the request */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1584 __putpacket (__remcomOutBuffer);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1585 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1586 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1587
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1588 static void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1589 send_t_packet (int sigval)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1590 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1591 __build_t_packet (sigval, __remcomOutBuffer);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1592 __putpacket (__remcomOutBuffer);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1593 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1594
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1595 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1596 * This function does all command procesing for interfacing to gdb.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1597 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1598
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1599 static int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1600 process_exception (int sigval)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1601 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1602 int status;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1603
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1604 /* Nasty. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1605 if (ungot_char < 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1606 send_t_packet (sigval);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1607
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1608 do {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1609 __getpacket (__remcomInBuffer);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1610 status = __process_packet (__remcomInBuffer);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1611 } while (status == 0);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1612
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1613 if (status < 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1614 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1615 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1616 return 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1617 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1618
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1619 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1620 __send_exit_status (int status)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1621 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1622 __remcomOutBuffer[0] = 'W';
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1623 __remcomOutBuffer[1] = hexchars[(status >> 4) & 0xf];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1624 __remcomOutBuffer[2] = hexchars[status & 0xf];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1625 __remcomOutBuffer[3] = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1626 __putpacket (__remcomOutBuffer);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1627 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1628
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1629 /* Read up to MAXLEN bytes from the remote GDB client, and store in DEST
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1630 (which is a pointer in the user program). BLOCK indicates what mode
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1631 is being used; if it is set, we will wait for MAXLEN bytes to be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1632 entered. Otherwise, the function will return immediately with whatever
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1633 bytes are waiting to be read.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1634
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1635 The value returned is the number of bytes read. A -1 indicates that an
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1636 error of some sort occurred. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1637
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1638 int
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1639 __get_gdb_input (target_register_t dest, int maxlen, int block)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1640 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1641 char buf[4];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1642 int len, i;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1643 char d;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1644
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1645 buf[0] = 'I';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1646 buf[1] = '0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1647 buf[2] = block ? '0' : '1';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1648 buf[3] = 0;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1649 __putpacket (buf);
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1650 __getpacket (__remcomInBuffer);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1651 if (__remcomInBuffer[0] != 'I')
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1652 return -1;
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1653 len = stubhex (__remcomInBuffer[1]) * 16 + stubhex (__remcomInBuffer[2]);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1654 for (i = 0; i < len; i++)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1655 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1656 d = stubhex (__remcomInBuffer[3 + i * 2]) * 16;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1657 d |= stubhex (__remcomInBuffer[3 + i * 2 + 1]);
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
1658 __write_mem_safe (&d, (void *)(dest + i), 1);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1659 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1660 /* Write the trailing \0. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1661 d = '\0';
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
1662 __write_mem_safe (&d, (void *)(dest + i), 1);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1663 return len;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1664 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1665
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1666 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1667 __output_hex_value (target_register_t i)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1668 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1669 char buf[32], *ptr=buf+31;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1670 unsigned int x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1671
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1672 *ptr = 0;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1673 for (x = 0; x < (sizeof (i) * 2); x++)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1674 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1675 *(--ptr) = hexchars[i & 15];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1676 i = i >> 4;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1677 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1678 while (*ptr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1679 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1680 putDebugChar (*(ptr++));
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1681 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1682 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1683
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1684 /* Write the C-style string pointed to by STR to the GDB comm port. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1685 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1686 __putDebugStr (char *str)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1687 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1688 while (*str)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1689 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1690 putDebugChar (*str);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1691 str++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1692 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1693 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1694
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1695 /* Send STRING_LEN bytes of STR to GDB, using 'O' packets.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1696 STR is assumed to be in the program being debugged. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1697
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1698 int
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1699 __output_gdb_string (target_register_t str, int string_len)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1700 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1701 /* We will arbitrarily limit output packets to less than 400 bytes. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1702 static char buf[400];
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1703 int x;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1704 int len;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1705
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1706 if (string_len == 0)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1707 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1708 /* We can't do strlen on a user pointer. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1709 return -1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1710 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1711
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1712 len = string_len;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1713 while (len > 0)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1714 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1715 int packetlen = ((len < 175) ? len : 175);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1716 buf[0] = 'O';
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1717 for (x = 0; x < packetlen; x++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1718 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1719 char c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1720
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
1721 __read_mem_safe (&c, (void *)(str + x), 1);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1722 buf[x*2+1] = hexchars[(c >> 4) & 0xf];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1723 buf[x*2+2] = hexchars[c % 16];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1724 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1725 str += x;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1726 len -= x;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1727 buf[x*2+1] = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1728 __putpacket (buf);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1729 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1730 return string_len;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1731 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1732
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1733 static void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1734 do_nothing (void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1735 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1736 /* mmmm */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1737 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1738
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1739 static int
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1740 syscall_do_nothing (int junk)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1741 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1742 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1743 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1744
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1745 /* Start the stub running. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1746 void
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1747 __switch_to_stub (void)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1748 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1749 __process_exception_vec = process_exception;
112
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1750 #ifdef CYGPKG_CYGMON
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1751 // Cygmon will have consumed the '$' character for this packet.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1752 // Let's put one in the unget buffer.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1753 // Actually, Cygmon does an unget, but since it uses different
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1754 // unget handling, we need to do this here.
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1755 ungetDebugChar('$');
02ea4320376c Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents: 78
diff changeset
1756 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1757 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1758
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1759 #if ! defined(BOARD_SPECIFIC_STUB_INIT)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1760 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1761 initialize_stub (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1762 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1763 set_debug_traps ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1764 /* FIXME: This function should be renamed to specifically init the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1765 hardware required by debug operations. If initHardware is implemented at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1766 all, it should be called before main ().
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1767 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1768 initHardware () ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1769 /* This acks any stale packets , NOT an effective solution */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1770 putDebugChar ('+');
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1771 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1772 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1773
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1774 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1775 ungetDebugChar (int c)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1776 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1777 ungot_char = c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1778 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1779
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1780 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1781 __kill_program (int sigval)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1782 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1783 __remcomOutBuffer[0] = 'X';
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1784 __remcomOutBuffer[1] = hexchars[(sigval >> 4) & 15];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1785 __remcomOutBuffer[2] = hexchars[sigval & 15];
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1786 __remcomOutBuffer[3] = 0;
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1787 __putpacket (__remcomOutBuffer);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1788 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1789
895
4747af8ef0ef Leave out unused static buffers if not supporting program args.
gthomas
parents: 317
diff changeset
1790 #ifdef CYGSEM_ECOS_SUPPORTS_PROGRAM_ARGS
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1791 #define MAX_ARG_COUNT 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1792 #define MAX_ARGDATA 128
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1793
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1794 static char *program_argv [MAX_ARG_COUNT];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1795 static int program_argc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1796 static int last_program_arg;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1797 static char program_argstr [MAX_ARGDATA], *argptr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1798 static int args_initted = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1799
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1800 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1801 __free_program_args (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1802 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1803 last_program_arg = -1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1804 program_argc = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1805 program_argv [0] = NULL;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1806 argptr = program_argstr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1807 args_initted = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1808 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1809
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1810 static char *
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1811 __add_program_arg (int argc, uint32 len)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1812 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1813 char *res;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1814
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1815 if (! args_initted)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1816 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1817 __free_program_args ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1818 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1819
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1820 if ((argc >= (MAX_ARG_COUNT - 1))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1821 || ((argptr - program_argstr + len) > MAX_ARGDATA))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1822 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1823 return NULL;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1824 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1825
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1826 if (argc != last_program_arg)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1827 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1828 if (argc >= program_argc)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1829 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1830 program_argc = argc + 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1831 program_argv [program_argc] = NULL;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1832 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1833 program_argv [argc] = argptr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1834 last_program_arg = argc;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1835 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1836
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1837 res = argptr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1838 argptr += len;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1839
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1840 return res;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1841 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1842
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1843 void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1844 __set_program_args (int argc, char **argv)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1845 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1846 int x;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1847
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1848 __free_program_args ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1849 if (argc)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1850 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1851 for (x = 0; x < argc; x++)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1852 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1853 uint32 len = strlen (argv[x])+1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1854 char *s = __add_program_arg (x, len);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1855
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1856 if (s == NULL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1857 return;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1858
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
1859 _memcpy (s, argv[x], len);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1860 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1861 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1862 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1863
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1864 char **
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1865 __get_program_args (target_register_t argcPtr)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1866 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1867 if (!args_initted)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1868 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1869 __free_program_args ();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1870 }
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
1871 __write_mem_safe ((char *) &program_argc, (void *)argcPtr, sizeof (program_argc));
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1872 return program_argv;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1873 }
895
4747af8ef0ef Leave out unused static buffers if not supporting program args.
gthomas
parents: 317
diff changeset
1874 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1875
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1876 /* Table used by the crc32 function to calcuate the checksum. */
912
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1877 #ifdef CYGDBG_HAL_CRCTABLE_LOCATION_RAM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1878 static uint32 crc32_table[256];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1879 static int tableInit = 0;
912
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1880 #else
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1881 static const uint32 crc32_table[256]={
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1882 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1883 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1884 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1885 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1886 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1887 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1888 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1889 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1890 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1891 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1892 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1893 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1894 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1895 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1896 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1897 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1898 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1899 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1900 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1901 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1902 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1903 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1904 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1905 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1906 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1907 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1908 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1909 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1910 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1911 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1912 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1913 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4,
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1914 };
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1915 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1916
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1917 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1918 Calculate a CRC-32 using LEN bytes of PTR. CRC is the initial CRC
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1919 value.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1920 PTR is assumed to be a pointer in the user program. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1921
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1922 static uint32
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1923 crc32 (target_addr_t mem, int len, uint32 crc)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1924 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1925 unsigned char *ptr = (unsigned char *)TARGET_ADDR_TO_PTR(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1926 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1927 int is_progmem = TARGET_ADDR_IS_PROGMEM(mem);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1928 #endif
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1929
912
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1930 #ifdef CYGDBG_HAL_CRCTABLE_RAM
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1931 if (! tableInit)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1932 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1933 /* Initialize the CRC table and the decoding table. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1934 uint32 i, j;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1935 uint32 c;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1936
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1937 tableInit = 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1938 for (i = 0; i < 256; i++)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1939 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1940 for (c = i << 24, j = 8; j > 0; --j)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1941 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1942 crc32_table[i] = c;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1943 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1944 }
912
82d5a3544347 * cdl/debugging.cdl: Allow CRC to be allocated in ROM as well as RAM.
jlarmour
parents: 895
diff changeset
1945 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1946
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1947 __mem_fault = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1948 while (len--)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1949 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1950 unsigned char ch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1951
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1952 #ifdef TARGET_HAS_HARVARD_MEMORY
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1953 if (is_progmem)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1954 __read_progmem_safe (&ch, (void *)ptr, 1);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1955 else
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1956 #endif
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents: 28
diff changeset
1957 __read_mem_safe (&ch, (void *)ptr, 1);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1958 if (__mem_fault)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1959 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1960 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1961 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1962 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ ch) & 255];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1963 ptr++;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1964 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1965 return crc;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1966 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1967
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1968 /* Handle the 'q' request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1969
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1970 static void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1971 process_query (char *pkt)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1972 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1973 __remcomOutBuffer[0] = '\0';
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1974 #ifdef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1975 if ('C' == pkt[0] &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1976 'R' == pkt[1] &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1977 'C' == pkt[2] &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1978 ':' == pkt[3])
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1979 #else // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1980 if (strncmp (pkt, "CRC:", 4) == 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1981 #endif // __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1982 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1983 target_addr_t startmem;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1984 target_register_t length;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1985 uint32 our_crc;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1986
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1987 pkt += 4;
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1988 if (__hexToAddr (&pkt, &startmem)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1989 && *(pkt++) == ','
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1990 && __hexToInt (&pkt, &length))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1991 {
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 154
diff changeset
1992 our_crc = crc32 (startmem, length, 0xffffffff);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1993 if (__mem_fault)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1994 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1995 strcpy (__remcomOutBuffer, "E01");
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1996 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1997 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1998 {
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
1999 int numb = __intToHex (__remcomOutBuffer + 1, our_crc, 32);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2000 __remcomOutBuffer[0] = 'C';
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2001 __remcomOutBuffer[numb + 1] = 0;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2002 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2003 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2004 return;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2005 }
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2006 #ifdef CYG_HAL_STUB_PROCESS_QUERY
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2007 else if (CYG_HAL_STUB_PROCESS_QUERY (pkt, __remcomOutBuffer, sizeof(__remcomOutBuffer)))
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2008 return;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2009 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2010 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2011 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2012 char ch ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2013 char * subpkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2014 ch = *pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2015 subpkt = pkt + 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2016 switch (ch)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2017 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2018 case 'L' : /* threadlistquery */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2019 STUB_PKT_GETTHREADLIST (subpkt, __remcomOutBuffer, 300);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2020 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2021 case 'P' : /* Thread or process information request */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2022 STUB_PKT_GETTHREADINFO (subpkt, __remcomOutBuffer, 300);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2023 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2024 case 'C' : /* current thread query */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2025 STUB_PKT_CURRTHREAD(subpkt, __remcomOutBuffer, sizeof(__remcomOutBuffer));
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2026 break;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2027 default:
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2028 __process_target_query (pkt, __remcomOutBuffer, 300);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2029 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2030 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2031 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2032 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2033
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2034 /* Handle the 'Q' request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2035
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2036 static void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2037 process_set (char *pkt)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2038 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2039 char ch ;
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2040
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2041 #ifdef CYG_HAL_STUB_PROCESS_SET
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2042 if (CYG_HAL_STUB_PROCESS_SET (pkt, __remcomOutBuffer, sizeof(__remcomOutBuffer)))
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2043 return;
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2044 #endif
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 184
diff changeset
2045
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2046 ch = *pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2047 switch (ch)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2048 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2049 case 'p' : /* Set current process or thread */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2050 /* reserve the packet id even if support is not present */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2051 /* Dont strip the 'p' off the header, there are several variations of
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
2052 this packet */
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2053 STUB_PKT_CHANGETHREAD (pkt, __remcomOutBuffer, 300) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2054 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2055 default:
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 198
diff changeset
2056 __process_target_set (pkt, __remcomOutBuffer, 300);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2057 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2058 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2059 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2060 #endif // CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS