annotate packages/kernel/current/src/debug/dbg_gdb.cxx @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents 3111d98ba7b3
children d3fbcdfa1b2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 /*==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 // dbg_gdb.c
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5 // GDB Debugging Interface
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19 // the License.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
23 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
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 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
32 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
33 // Contributors: nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
34 // Date: 1998-08-22
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 // Purpose: GDB Debugging Interface
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
36 // Description: Interface for calls from GDB stubs into the OS. These
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 // currently mostly support thread awareness.
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 //####DESCRIPTIONEND####
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 //========================================================================*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 #include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 #include <pkgconf/hal.h> // CYG_HAL_USE_ROM_MONITOR_CYGMON
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 #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
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 #include <cyg/kernel/ktypes.h>
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 #include <cyg/kernel/thread.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 #include <cyg/kernel/sched.hxx>
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 #include <cyg/kernel/thread.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <cyg/kernel/sched.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 #include <cyg/hal/hal_arch.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #include <cyg/hal/hal_stub.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 extern "C"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 #include <cyg/hal/dbg-threads-api.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #define USE_ID 1
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 #if (CYG_BYTEORDER == CYG_LSBFIRST)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 unsigned long swap32(unsigned long x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 unsigned long r = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 r |= (x>>24)&0xFF;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 r |= ((x>>16)&0xFF)<<8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 r |= ((x>>8)&0xFF)<<16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 r |= ((x)&0xFF)<<24;
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 return r;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 }
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 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 #define swap32(x) ((unsigned long)(x))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 externC int dbg_thread_capabilities(struct dbg_capabilities * cpb)
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 cpb->mask1 = has_thread_current |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 has_thread_registers |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 has_thread_reg_change |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 has_thread_list |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 has_thread_info ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 static void dbg_make_threadref(Cyg_Thread *thread, threadref *ref )
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 cyg_uint16 id = thread->get_unique_id();
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 #if USE_ID
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 ((unsigned long *)ref)[0] = (unsigned long)thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 ((unsigned long *)ref)[1] = (unsigned long)swap32(id);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 ((unsigned long *)ref)[1] = (unsigned long)thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 ((unsigned long *)ref)[0] = (unsigned long)id;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 static Cyg_Thread *dbg_get_thread( threadref *ref)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 #if USE_ID
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 cyg_uint16 id = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 id = (cyg_uint16)swap32(((unsigned long *)ref)[1]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 Cyg_Thread *th = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 while( th != 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 if( th->get_unique_id() == id ) break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 th = th->get_list_next();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 // if( thread->get_unique_id() != id ) th = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 cyg_uint16 id = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 Cyg_Thread *thread = (Cyg_Thread *)(((unsigned long *)ref)[1]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 id = (cyg_uint16)(((unsigned long *)ref)[0]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 // Validate the thread.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 Cyg_Thread *th = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 while( th != 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 if( th == thread ) break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 th = th->get_list_next();
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 // if( thread->get_unique_id() != id ) th = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 return th;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 externC int dbg_currthread(threadref * varparm)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 Cyg_Thread *thread = Cyg_Scheduler::get_current_thread();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 dbg_make_threadref(thread, varparm );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 externC int dbg_currthread_id(void)
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 Cyg_Thread *thread = Cyg_Scheduler::get_current_thread();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 return thread->get_unique_id ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 externC int dbg_threadlist(int startflag,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
175 threadref * lastthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
176 threadref * next_thread)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 Cyg_Thread *thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 if( startflag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 thread = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 dbg_make_threadref(thread, next_thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 thread = dbg_get_thread(lastthreadid);
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 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 thread = thread->get_list_next();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 dbg_make_threadref(thread, next_thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196
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 // Some support routines for manufacturing thread info strings
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 static char *dbg_addstr(char *s, char *t)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 while( (*s++ = *t++) != 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 return s-1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 static char *dbg_addint(char *s, int n, int base)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 char buf[16];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 char sign = '+';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 cyg_count8 bpos;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 char *digits = "0123456789ABCDEF";
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( n < 0 ) n = -n, sign = '-';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 /* Set pos to start */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 bpos = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 /* construct digits into buffer in reverse order */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 if( n == 0 ) buf[bpos++] = '0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 else while( n != 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 cyg_ucount8 d = n % base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 buf[bpos++] = digits[d];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 n /= base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 /* set sign if negative. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 if( sign == '-' )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 buf[bpos] = sign;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 else bpos--;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 /* Now write it out in correct order. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 while( bpos >= 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 *s++ = buf[bpos--];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 *s = 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 return s;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 static char *dbg_adddec(char *s, int x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 return dbg_addint(s, x, 10);
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
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 externC int dbg_threadinfo(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
252 threadref * threadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
253 struct cygmon_thread_debug_info * info)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 static char statebuf[60];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 Cyg_Thread *thread = dbg_get_thread(threadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 if( thread == 0 ) return 0;
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 info->context_exists = 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 char *sbp = statebuf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 char *s;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 if( thread->get_state() & Cyg_Thread::SUSPENDED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 sbp = dbg_addstr( sbp, "suspended+");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270 switch( thread->get_state() & ~Cyg_Thread::SUSPENDED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 case Cyg_Thread::RUNNING:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 s = "running"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 case Cyg_Thread::SLEEPING:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 s = "sleeping"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 case Cyg_Thread::COUNTSLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 s = "counted sleep"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 case Cyg_Thread::CREATING:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 s = "creating"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280 case Cyg_Thread::EXITED:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 s = "exited"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 s = "unknown state"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 }
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 sbp = dbg_addstr( sbp, s );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 sbp = dbg_addstr( sbp, ", Priority: " );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 sbp = dbg_adddec( sbp, thread->get_priority() );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 info->thread_display = statebuf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 #ifdef CYGVAR_KERNEL_THREADS_NAME
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 info->unique_thread_name = thread->get_name();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 info->unique_thread_name = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 info->more_display = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
303 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
304
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 externC int dbg_getthreadreg(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
306 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
307 int regcount, /* count of registers in the array */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
308 void * regval) /* fillin this array */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
309 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
310 Cyg_Thread *thread = dbg_get_thread(osthreadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
313
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 if( thread == Cyg_Scheduler::get_current_thread() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 #if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 // We have no state for the current thread, Cygmon has
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 // got that and we cannot get at it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 #elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
321 // registers hold the state of the current thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
322 __stub_copy_registers ((target_register_t *)regval, registers);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 HAL_SavedRegisters *regs = thread->get_saved_context();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 if( regs == 0 ) return 0;
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 HAL_GET_GDB_REGISTERS (regval, regs);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 }
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 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 //--------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
339
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 externC int dbg_setthreadreg(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
341 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
342 int regcount , /* number of registers */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
343 void * regval)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 Cyg_Thread *thread = dbg_get_thread(osthreadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 if( thread == Cyg_Scheduler::get_current_thread() )
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 #if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 // We have no state for the current thread, Cygmon has
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 // got that and we cannot get at it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 #elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
356 // registers hold the state of the current thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
357 __stub_copy_registers (registers, (target_register_t *)regval);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 HAL_SavedRegisters *regs = thread->get_saved_context();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 if( regs == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 HAL_SET_GDB_REGISTERS (regs, regval);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 return 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
373 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
374 // Thread scheduler control for debugger.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
375 // Arguments:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
376 // osthreadid : must match currently executing thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
377 // Future use: change the currently executing thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
378 // lock : 0 == unlock scheduler, 1 == lock scheduler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
379 // mode : 0 == single-instruction step, 1 == free running
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
380 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
381 // Return values:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
382 // 1 == success
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
383 // 0 == failure
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
384 // -1 == request that the caller handle this itself
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
385 // (eg.by disabling interrupts)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
386 //
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 externC int dbg_scheduler(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
389 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
390 int lock, /* 0 == unlock, 1 == lock */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
391 int mode) /* 0 == step, 1 == continue */
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 #if 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
394 /* Minimal implementation: let stub do the work. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
395 return -1; // Stub will disable interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
396 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
397 Cyg_Thread *thread = dbg_get_thread(osthreadid);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
398
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
399 if( thread == 0 ) return 0; // fail
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
400
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
401 if( thread == Cyg_Scheduler::get_current_thread() )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
402 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
403 // OK to proceed
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 if (lock)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
406 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
407 Cyg_Scheduler::lock();
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 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
410 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
411 if (Cyg_Scheduler::get_sched_lock() >= 1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
412 Cyg_Scheduler::unlock_simple();
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 return 1; // success
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
415 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
416 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
417 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
418 // Cannot accept any thread other than current one
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
419 return 0; // fail
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
420 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
421 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
422 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
423
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
424
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 #endif // CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 // End of dbg_gdb.cxx