annotate packages/kernel/current/src/debug/dbg_gdb.cxx @ 208:e0c0827131d1 ecos

Merge from eCos master repository on 2002-05-20-20:11:54-BST
author jlarmour
date Mon, 20 May 2002 22:19:26 +0000
parents b939e9cada46
children d2c90368aeef
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 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
12 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
14 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
16 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
20 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
21 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
22 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
25 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
27 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
28 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
30 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
32 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
34 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
38 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 156
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
0
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 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
43 // Author(s): nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
44 // Contributors: nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
45 // Date: 1998-08-22
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 // Purpose: GDB Debugging Interface
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
47 // Description: Interface for calls from GDB stubs into the OS. These
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 // currently mostly support thread awareness.
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 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 //
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55 #include <pkgconf/hal.h> // CYG_HAL_USE_ROM_MONITOR_CYGMON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
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 #include <cyg/kernel/ktypes.h>
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/kernel/thread.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #include <cyg/kernel/sched.hxx>
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 #include <cyg/kernel/thread.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 #include <cyg/kernel/sched.inl>
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 #include <cyg/hal/hal_arch.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 #include <cyg/hal/hal_stub.h>
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 extern "C"
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 #include <cyg/hal/dbg-threads-api.h>
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 #define USE_ID 1
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 #if (CYG_BYTEORDER == CYG_LSBFIRST)
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 unsigned long swap32(unsigned long x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 unsigned long r = 0;
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 r |= (x>>24)&0xFF;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 r |= ((x>>16)&0xFF)<<8;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 r |= ((x>>8)&0xFF)<<16;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 r |= ((x)&0xFF)<<24;
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 return r;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 #else
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 #define swap32(x) ((unsigned long)(x))
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 #endif
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 externC int dbg_thread_capabilities(struct dbg_capabilities * cpb)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 cpb->mask1 = has_thread_current |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 has_thread_registers |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 has_thread_reg_change |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 has_thread_list |
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 has_thread_info ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 return 1 ;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 static void dbg_make_threadref(Cyg_Thread *thread, threadref *ref )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 {
30
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
113 // The following test tries to avoid accessing uninitialized pointers.
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
114 // This can happen if we take a breakpoint before the data is copied
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
115 // or the BSS zeroed. We currently assume that RAM will reset to zero
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
116 // or 0xff. If it is random, we have no hope.
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
117
641b639be825 Merge from eCos master repository on 1999-08-16-22:01:37-BST
jlarmour
parents: 14
diff changeset
118 if( (CYG_ADDRWORD)thread == 0 || (CYG_ADDRWORD)thread == 0xffffffff )
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
119 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
120 ((unsigned long *)ref)[0] = 0;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
121 ((unsigned long *)ref)[1] = 0;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
122 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
123 else
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
124 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
125 cyg_uint16 id = thread->get_unique_id();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 #if USE_ID
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
128 ((unsigned long *)ref)[0] = (unsigned long)thread;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
129 ((unsigned long *)ref)[1] = (unsigned long)swap32(id);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 #else
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
131 ((unsigned long *)ref)[1] = (unsigned long)thread;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
132 ((unsigned long *)ref)[0] = (unsigned long)id;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133 #endif
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 2
diff changeset
134 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 static Cyg_Thread *dbg_get_thread( threadref *ref)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 #if USE_ID
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 cyg_uint16 id = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 id = (cyg_uint16)swap32(((unsigned long *)ref)[1]);
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 Cyg_Thread *th = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 while( 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 if( th->get_unique_id() == id ) break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 th = th->get_list_next();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 }
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 // if( thread->get_unique_id() != id ) th = 0;
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 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 cyg_uint16 id = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 Cyg_Thread *thread = (Cyg_Thread *)(((unsigned long *)ref)[1]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 id = (cyg_uint16)(((unsigned long *)ref)[0]);
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 // Validate the thread.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 Cyg_Thread *th = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 while( th != 0 )
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 if( th == thread ) break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 th = th->get_list_next();
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 // if( thread->get_unique_id() != id ) th = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 #endif
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 return th;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 //--------------------------------------------------------------------------
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 externC int dbg_currthread(threadref * varparm)
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 Cyg_Thread *thread = Cyg_Scheduler::get_current_thread();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 dbg_make_threadref(thread, varparm );
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 return 1 ;
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
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
156
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
189 externC int dbg_thread_id(threadref *threadid)
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
190 {
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
191 Cyg_Thread *thread = dbg_get_thread(threadid);
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
192 if( thread == 0 ) return 0;
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
193 return thread->get_unique_id ();
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
194 }
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
195
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
196 //--------------------------------------------------------------------------
b939e9cada46 Merge from eCos master repository on 2001-03-29-21:44:39-BST
jlarmour
parents: 66
diff changeset
197
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 externC int dbg_currthread_id(void)
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 Cyg_Thread *thread = Cyg_Scheduler::get_current_thread();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 return thread->get_unique_id ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 externC int dbg_threadlist(int startflag,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207 threadref * lastthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 threadref * next_thread)
0
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 Cyg_Thread *thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 if( startflag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 thread = Cyg_Thread::get_list_head();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 dbg_make_threadref(thread, next_thread);
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 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 thread = dbg_get_thread(lastthreadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 thread = thread->get_list_next();
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 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 dbg_make_threadref(thread, next_thread);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 return 1 ;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 // Some support routines for manufacturing thread info strings
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 static char *dbg_addstr(char *s, char *t)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 while( (*s++ = *t++) != 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 return s-1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 }
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 static char *dbg_addint(char *s, int n, int base)
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 char buf[16];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 char sign = '+';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 cyg_count8 bpos;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
244 char *digits = "0123456789ABCDEF";
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 if( n < 0 ) n = -n, sign = '-';
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 /* Set pos to start */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 bpos = 0;
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 /* construct digits into buffer in reverse order */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 if( n == 0 ) buf[bpos++] = '0';
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 else while( n != 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 cyg_ucount8 d = n % base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 buf[bpos++] = digits[d];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 n /= base;
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 /* set sign if negative. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 if( sign == '-' )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
262 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263 buf[bpos] = sign;
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 else bpos--;
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 /* Now write it out in correct order. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 while( bpos >= 0 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
269 *s++ = buf[bpos--];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
270
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 *s = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273 return s;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 static char *dbg_adddec(char *s, int x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 return dbg_addint(s, x, 10);
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
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 externC int dbg_threadinfo(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
284 threadref * threadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
285 struct cygmon_thread_debug_info * info)
0
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 static char statebuf[60];
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 Cyg_Thread *thread = dbg_get_thread(threadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 if( thread == 0 ) return 0;
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 info->context_exists = 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294 char *sbp = statebuf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 char *s;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
296
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
297 if( thread->get_state() & Cyg_Thread::SUSPENDED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
298 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
299 sbp = dbg_addstr( sbp, "suspended+");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 }
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 switch( thread->get_state() & ~Cyg_Thread::SUSPENDED )
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 case Cyg_Thread::RUNNING:
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
305 if ( Cyg_Scheduler::get_current_thread() == thread ) {
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
306 s = "running"; break;
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
307 }
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
308 else if ( thread->get_state() & Cyg_Thread::SUSPENDED ) {
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
309 s = ""; sbp--; /*kill '+'*/ break;
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
310 }
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
311 else {
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
312 s = "ready"; break;
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
313 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 case Cyg_Thread::SLEEPING:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 s = "sleeping"; break;
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
316 case Cyg_Thread::COUNTSLEEP | Cyg_Thread::SLEEPING:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 case Cyg_Thread::COUNTSLEEP:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 s = "counted sleep"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 case Cyg_Thread::CREATING:
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
320 s = "creating"; sbp = statebuf; break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 case Cyg_Thread::EXITED:
14
01ce82f3e11a Merge from eCos master repository on 1999-06-11-17:05:41-BST
jlarmour
parents: 10
diff changeset
322 s = "exited"; sbp = statebuf; break;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324 s = "unknown state"; break;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 }
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 sbp = dbg_addstr( sbp, s );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 sbp = dbg_addstr( sbp, ", Priority: " );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 sbp = dbg_adddec( sbp, thread->get_priority() );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 info->thread_display = statebuf;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 #ifdef CYGVAR_KERNEL_THREADS_NAME
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 info->unique_thread_name = thread->get_name();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 info->unique_thread_name = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 #endif
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 info->more_display = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 externC int dbg_getthreadreg(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
347 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
348 int regcount, /* count of registers in the array */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
349 void * regval) /* fillin this array */
0
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 Cyg_Thread *thread = dbg_get_thread(osthreadid);
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 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 if( thread == Cyg_Scheduler::get_current_thread() )
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 #if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 // We have no state for the current thread, Cygmon has
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 // got that and we cannot get at it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 #elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
362 // registers hold the state of the current thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
363 __stub_copy_registers ((target_register_t *)regval, registers);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 else
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 HAL_SavedRegisters *regs = thread->get_saved_context();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 if( regs == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 HAL_GET_GDB_REGISTERS (regval, regs);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 return 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 //--------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
380
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 externC int dbg_setthreadreg(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
382 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
383 int regcount , /* number of registers */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
384 void * regval)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 Cyg_Thread *thread = dbg_get_thread(osthreadid);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 if( thread == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 if( thread == Cyg_Scheduler::get_current_thread() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 #if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 // We have no state for the current thread, Cygmon has
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 // got that and we cannot get at it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 #elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
397 // registers hold the state of the current thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
398 __stub_copy_registers (registers, (target_register_t *)regval);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 HAL_SavedRegisters *regs = thread->get_saved_context();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 if( regs == 0 ) return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 HAL_SET_GDB_REGISTERS (regs, regval);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 return 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
414 //--------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
415 // Thread scheduler control for debugger.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
416 // Arguments:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
417 // osthreadid : must match currently executing thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
418 // Future use: change the currently executing thread.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
419 // lock : 0 == unlock scheduler, 1 == lock scheduler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
420 // mode : 0 == single-instruction step, 1 == free running
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 // Return values:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
423 // 1 == success
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
424 // 0 == failure
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
425 // -1 == request that the caller handle this itself
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 // (eg.by disabling interrupts)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427 //
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 externC int dbg_scheduler(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
430 threadref * osthreadid,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
431 int lock, /* 0 == unlock, 1 == lock */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
432 int mode) /* 0 == step, 1 == continue */
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 #if 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
435 /* Minimal implementation: let stub do the work. */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
436 return -1; // Stub will disable interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
437 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438 Cyg_Thread *thread = dbg_get_thread(osthreadid);
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 if( thread == 0 ) return 0; // fail
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 if( thread == Cyg_Scheduler::get_current_thread() )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
443 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
444 // OK to proceed
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
445
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
446 if (lock)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
447 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
448 Cyg_Scheduler::lock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
449 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
450 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
451 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
452 if (Cyg_Scheduler::get_sched_lock() >= 1)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
453 Cyg_Scheduler::unlock_simple();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
454 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
455 return 1; // success
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 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
458 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
459 // Cannot accept any thread other than current one
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
460 return 0; // fail
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
461 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
462 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
463 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
464
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
465
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 #endif // CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468 //--------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
469 // End of dbg_gdb.cxx