annotate packages/hal/common/current/src/thread-packets.c @ 2595:3ea2b2f69262

* src/thread-packets.c (threadmatch): Silence pointer signedness warning. (threadref_to_int): Ditto. * src/generic-stub.c (__mem2hex): Ditto. (__mem2hex_safe): Ditto. (__hex2mem): Ditto. (__hex2mem_safe): Ditto. * src/hal_if.c (delay_us): Ditto. * include/hal_stub.h (CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION): Instead of using a local variable to avoid compiler reordering when taking the address of a label, instead call an external function. (NB making the variable volatile isn't sufficient). * cdl/hal.cdl: Work around problem with current ARM EABI tools by using /dev/null as linker script. Should be safe with other tools. * src/hal_if.c (delay_us): use HAL_DELAY_US() rather than the fancy implementation if the port cannot provide HAL_CLOCK_READ() * cdl/common.cdl: Add CYGBLD_HAL_LINKER_GROUPED_LIBS to allow CDL setting of libraries used for GROUP() directive in linker script.
author jlarmour
date Tue, 11 Nov 2008 04:28:57 +0000
parents d2c90368aeef
children 74dbf4c3f2e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
1 //========================================================================
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
2 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
3 // thread-packets.c
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
4 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
5 // Provides multi-threaded debug support
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
6 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
7 //========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
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: 191
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
2595
3ea2b2f69262 * src/thread-packets.c (threadmatch): Silence pointer signedness
jlarmour
parents: 210
diff changeset
12 // Copyright (C) 2008 eCosCentric Limited.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
13 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
14 // 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: 191
diff changeset
15 // 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: 191
diff changeset
16 // 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: 191
diff changeset
17 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
18 // 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: 191
diff changeset
19 // 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: 191
diff changeset
20 // 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: 191
diff changeset
21 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
22 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
23 // 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: 191
diff changeset
24 // 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: 191
diff changeset
25 // 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: 191
diff changeset
26 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
27 // 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: 191
diff changeset
28 // 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: 191
diff changeset
29 // 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: 191
diff changeset
30 // 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: 191
diff changeset
31 // 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: 191
diff changeset
32 // 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: 191
diff changeset
33 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
34 // 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: 191
diff changeset
35 // 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: 191
diff changeset
36 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
38 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
39 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 191
diff changeset
40 //####ECOSGPLCOPYRIGHTEND####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
41 //========================================================================
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
42 //#####DESCRIPTIONBEGIN####
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
43 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
44 // Author(s): Red Hat, nickg
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
45 // Contributors: Red Hat, nickg
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
46 // Date: 1998-08-25
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
47 // Purpose:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
48 // Description: Provides multi-threaded debug support
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
49 // Usage:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
50 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
51 //####DESCRIPTIONEND####
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
52 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
53 //========================================================================
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 46
diff changeset
54
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
55 // Define __ECOS__; allows all eCos specific additions to be easily identified.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
56 #define __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
59 // #ifdef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #if defined(CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 && defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
64 // #endif // __ECOS__
0
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 /* FIXME: Scan this module for correct sizes of fields in packets */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
67
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
68 #ifdef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
69 #include <cyg/hal/dbg-threads-api.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
70 #else // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
71 #include "dbg-threads-api.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
72 #endif // __ECOS__
0
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 /* This file should ALWAYS define debug thread support */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 /* Dont include the object in the link if you dont need the support */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 /* This is NOT the internal unit debug flag, it is a feature control */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 #if defined(DEBUG_THREADS)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 #undef DEBUG_THREADS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
81 #define DEBUG_THREADS 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
82 #define UNIT_TEST 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
83 #define GDB_MOCKUP 0
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 #define STUB_BUF_MAX 300 /* for range checking of packet lengths */
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 #include "thread-pkts.h"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
90 #ifdef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 // Use HAL rather than board.h in eCos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 #include <cyg/hal/hal_stub.h>
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
93 #else // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
94 #include "board.h"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
95 #endif // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
96
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
97 /*
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
98 * Export the continue and "general" (context) thread IDs from GDB.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
99 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
100 int _gdb_cont_thread ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
101 int _gdb_general_thread ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 #if !defined(PKT_DEBUG)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 #define PKT_DEBUG 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 extern void output_string(char * message) ;
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 #if PKT_DEBUG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 void output_threadid(char * title,threadref * ref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 #warning "PKT_DEBUG macros engaged"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 #define PKT_TRACE(title,packet) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 { output_string(title) ; output_string(packet) ; output_string("\n") ;}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 #define PKT_TRACE(title,packet) {}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116
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 /* This is going to be irregular because the various implementations
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 have adopted different names for registers.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 It would be nice to fix them to have a common convention
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 _stub_registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122 stub_registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 alt_stub_registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 extern target_register_t * _registers ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 /* A pointer to the current set of registers */
191
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 76
diff changeset
128 extern target_register_t registers[]; /* The current saved registers */
678094f34118 Merge from eCos master repository on 2001-10-19-06:43:02-BST
jlarmour
parents: 76
diff changeset
129 extern target_register_t alt_registers[] ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 /* Thread or saved process state */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
133 static void stub_copy_registers(
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
134 target_register_t * dest,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
135 target_register_t *src
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
136 )
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 target_register_t * limit ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 limit = dest + NUMREGS ;
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 while (dest < limit) *dest++ = *src++ ;
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
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
144 #ifdef __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
145 void __stub_copy_registers(target_register_t * dest,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
146 target_register_t *src)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
147 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
148 stub_copy_registers(dest, src);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
149 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
150 #endif // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
151
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 extern int stubhex(char ch) ;
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 /* ----- STUB_PACK_NAK ----------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 /* Pack an error response into the response packet */
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 char * stub_pack_nak(char * outbuf)
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 *outbuf++ = 'E' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 *outbuf++ = '0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 *outbuf++ = '2' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 return outbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 } /* stub_pack_nak */
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 /* ----- STUB_PACK_ACK -------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 /* Pack an OK achnowledgement */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 char * stub_pack_ack(char * outbuf)
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 *outbuf++ = 'O' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 *outbuf++ = 'K' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 return outbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 } /* stub_pack_ack */
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 /* ------- STUB_UNPACK_INT ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 /* Unpack a few bytes and return its integer value */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 /* This is where I wish functions could return several values
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 I would also advance the buffer pointer */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 int stub_unpack_int(char * buff,int fieldlength)
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 int retval = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 int nibble ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 while (fieldlength)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 { nibble = stubhex(*buff++) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 retval |= nibble ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 fieldlength-- ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 if (fieldlength) retval = retval << 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 return retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 } /* stub_unpack_int */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 static char * unpack_byte(char * buf, int * value)
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 *value = stub_unpack_int(buf,2) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 return buf + 2 ;
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 static char * unpack_int(char * buf, int * value)
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 *value = stub_unpack_int(buf,8) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 return buf + 8 ;
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
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 2
diff changeset
204 /* We are NOT depending upon extensive libraries */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 static int ishex(char ch,int *val)
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 if ((ch >= 'a') && (ch <= 'f'))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 { *val =ch - 'a' + 10 ; return 1 ; }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 if ((ch >= 'A') && (ch <= 'F'))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 { *val = ch - 'A' + 10 ; return 1 ;}
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 if ((ch >= '0') && (ch <= '9'))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 { *val = ch - '0' ; return 1 ; }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 return 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 } /* ishex */
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 static char * unpack_nibble(char * buf,int * val)
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 ishex(*buf++,val) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 static const char hexchars[] = "0123456789abcdef";
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 static char * pack_hex_byte(char * pkt, unsigned char byte)
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 *pkt++ = hexchars[(byte >> 4) & 0xf] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 *pkt++ = hexchars[(byte & 0xf)] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 } /* pack_hex_byte */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
232 #ifndef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 /* ---- STUB_PACK_VARLEN_HEX ------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 /* Format a variable length stream of hex bytes */
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 static char * pack_varlen_hex(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
237 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
238 unsigned int value)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 int i ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
241 static unsigned char n[8] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 if (value == 0)
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 *pkt++ = '0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
245 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 else
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 i = 8 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 while (i-- >= 0 ) /* unpack nibbles into a char array */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
251 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
252 n[i] = value & 0x0f ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
253 value = value >> 4 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
254 }
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 2
diff changeset
255 i = 0 ; /* we had decrmented it to -1 */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 while (n[i] == 0 ) i++ ; /* drop leading zeroes */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257 while (i++ < 8) *pkt++ = hexchars[n[i]] ; /* pack the number */
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 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
260 } /* pack_varlen_hex */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
261 #endif // !__ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
262
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
263
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 /* ------ STUB_UNPACK_VARLEN_HEX -------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 /* Parse a stream of hex bytes which may be of variable length */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266 /* return the pointer to the next char */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 /* modify a varparm containing the result */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 /* A failure would look like a non-increment of the buffer pointer */
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 /* This unpacks hex strings that may have been packed using sprintf(%x) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
271 /* We assume some non-hex delimits them */
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 char * unpack_varlen_hex(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
274 char * buff, /* packet to parse */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
275 int * result)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
276 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 int nibble ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278 int retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 retval = 0 ;
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 while (ishex(*buff,&nibble))
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 buff++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 retval = retval << 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 retval |= nibble & 0x0f ;
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 *result = retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 return buff ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289 } /* stub_unpack_varlen_int */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290
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 /* ------ UNPACK_THREADID ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 /* A threadid is a 64 bit quantity */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
295 #define BUFTHREADIDSIZ 16 /* encode 64 bits in 16 chars of hex */
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 static char * unpack_threadid(char * inbuf, threadref * id)
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 char * altref ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
300 char * limit = inbuf + BUFTHREADIDSIZ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
301 int x,y ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
302 altref = (char *) id ;
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 while (inbuf < limit)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
305 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
306 x = stubhex(*inbuf++) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
307 y = stubhex(*inbuf++) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
308 *altref++ = (x << 4) | y ;
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 return inbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
311 } /* unpack_threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
312
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315 /* Pack an integer use leading zeroes */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 static char * pack_int(char * buf,int value)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 buf = pack_hex_byte(buf,(value>> 24)& 0xff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319 buf = pack_hex_byte(buf,(value >>16)& 0xff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 buf = pack_hex_byte(buf,(value >>8) & 0x0ff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321 buf = pack_hex_byte(buf,(value & 0xff)) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 } /* pack_int */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324
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 /* -------- PACK_STRING ---------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 /* This stupid string better not contain any funny characters */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 /* Also, the GDB protocol will not cope with NULLs in the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 string or at the end of it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 While is is posable to encapsulate the protocol in ays that
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 preclude filtering for # I am assuming this is a constraint.
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 static char * pack_raw_string(char * pkt,char * string)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 char ch ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 while (0 != (ch = *string++)) *pkt++ = ch ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 }
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 static char * pack_string(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
342 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
343 char * string)
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 char ch ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
346 #ifdef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 int len = 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 char *s = string;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 while( *s++ ) len++;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
350 #else // __ECOS__
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
351 int len ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
352 len = strlen(string) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
353 #endif // __ECOS
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 if (len > 200 ) len = 200 ; /* Bigger than most GDB packets, junk??? */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 pkt = pack_hex_byte(pkt,len) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
356 while (len-- > 0)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 ch = *string++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
359 if ((ch == '\0') || (ch == '#')) ch = '*' ; /* Protect encapsulation */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 *pkt++ = ch ;
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 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 } /* pack_string */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 /* ----- STUB_PACK_THREADID --------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 /* Convert a binary 64 bit threadid and pack it into a xmit buffer */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 /* Return the advanced buffer pointer */
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 static char * pack_threadid(char * pkt, threadref * id)
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 char * limit ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 unsigned char * altid ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
374 altid = (unsigned char *) id ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
375 limit = pkt + BUFTHREADIDSIZ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
376 while (pkt < limit) pkt = pack_hex_byte(pkt,*altid++) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
377 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
378 } /* stub_pack_threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 2
diff changeset
380 /* UNFORTUNATELY, not all of the extended debugging system has yet been
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 2
diff changeset
381 converted to 64 but thread references and process identifiers.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 These routines do the conversion.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 An array of bytes is the correct treatment of an opaque identifier.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 ints have endian issues.
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 static void int_to_threadref(threadref * id, int value)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389 unsigned char * scan ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 scan = (unsigned char *) id ;
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 int i = 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 while (i--) *scan++ = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 *scan++ = (value >> 24) & 0xff ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 *scan++ = (value >> 16) & 0xff ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397 *scan++ = (value >> 8) & 0xff ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 *scan++ = (value & 0xff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 static int threadref_to_int(threadref * ref)
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 int value = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 unsigned char * scan ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 int i ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406
2595
3ea2b2f69262 * src/thread-packets.c (threadmatch): Silence pointer signedness
jlarmour
parents: 210
diff changeset
407 scan = (unsigned char *) ref ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 scan += 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 i = 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 while (i-- > 0) value = (value << 8) | ((*scan++) & 0xff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 return value ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 } /* threadref_to_int */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 void copy_threadref(threadref * dest, threadref * src)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 int i ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 unsigned char * csrc, * cdest ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 csrc = (unsigned char *) src ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 cdest = (unsigned char *) dest ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420 i = 8 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 while (i--) *cdest++ = *csrc++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 int threadmatch(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 threadref * dest ,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427 threadref * src
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
428 )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 unsigned char * srcp, * destp ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 int i , result ;
2595
3ea2b2f69262 * src/thread-packets.c (threadmatch): Silence pointer signedness
jlarmour
parents: 210
diff changeset
432 srcp = (unsigned char *) src ;
3ea2b2f69262 * src/thread-packets.c (threadmatch): Silence pointer signedness
jlarmour
parents: 210
diff changeset
433 destp = (unsigned char *) dest ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434 i = 8 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 result = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 while (i-- > 0 ) result &= (*srcp++ == *destp++) ? 1 : 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 return result ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438 } /* threadmatch */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 static char * Tpkt_threadtag = "thread:" ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 /* ----- STUB_PACK_TPKT_THREADID ------------------------------------ */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 /* retreive, tag and insert a thread identifier into a T packet. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 /* Insert nothing if the thread identifier is not available */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448 char * stub_pack_Tpkt_threadid(char * pkt)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450 static threadref thread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 int fmt = 0 ; /* old format */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 PKT_TRACE("Tpkt-id","---") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 if (dbg_currthread(&thread))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 pkt = pack_raw_string(pkt,Tpkt_threadtag) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456 if (fmt)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
457 pkt = pack_threadid(pkt,&thread) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
459 /* Until GDB lengthens its thread ids, we have to MASH
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
460 the threadid into somthing shorter. PLEASE FIX GDB */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
461 pkt = pack_int(pkt,threadref_to_int(&thread)) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 *pkt++ = ';' ; /* terminate variable length int */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 *pkt = '\0' ; /* Null terminate to allow string to be printed, no++ */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 PKT_TRACE("packedTpkt","--") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
466 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
467 } /* stub_pack_Tpkt_threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
468
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
469 long stub_get_currthread (void)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
470 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
471 threadref thread ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
472
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
473 if (dbg_currthread(&thread))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
474 return threadref_to_int(&thread) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
475 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
476 return 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
477 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 void stub_pkt_currthread(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
480 char * inbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
481 char * outbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
482 int bufmax)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
483 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 threadref thread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
485 char * base_out ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 base_out = outbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488 if (dbg_currthread(&thread))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
490 *outbuf++ = 'Q' ;
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 38
diff changeset
491 *outbuf++ = 'C' ; /* FIXME: Is this a reasonable code */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
492 outbuf = pack_int(outbuf, threadref_to_int(&thread)) ; /* Short form */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 else outbuf = stub_pack_nak(outbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 *outbuf = '\0' ; /* terminate response packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496 PKT_TRACE("stub_pkt_currthread(resp) ",base_out) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 } /* stub_pkt_currthread */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 /* ----- STUB_PKT_THREAD_ALIVE --------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 /* Answer the thread alive query */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
502 static int thread_alive (int id)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
503 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
504 threadref thread ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
505 struct cygmon_thread_debug_info info ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
506
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
507 int_to_threadref(&thread, id) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
508 if (dbg_threadinfo(&thread, &info) &&
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
509 info.context_exists)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
510 return 1 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
511 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
512 return 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
513 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
514
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 void stub_pkt_thread_alive(char * inbuf,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
516 char * outbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
517 int bufmax)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 char * prebuf = inbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520 int result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 if (prebuf != (inbuf = unpack_varlen_hex(inbuf,&result)))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
524 if (thread_alive(result))
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
525 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
526 outbuf = stub_pack_ack(outbuf) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
527 *outbuf = '\0' ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
528 return ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
529 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 outbuf = stub_pack_nak(outbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532 *outbuf = '\0' ; /* terminate the response message */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 } /* stub_pkt_thread_alive */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 /* ----- STUB_PKT_CHANGETHREAD ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 /* Switch the display of registers to that of a saved context */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 /* Changing the context makes NO sense, although the packets define the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 capability. Therefore, the option to change the context back does
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 call the function to change registers. Also, there is no
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543 forced context switch.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544 'p' - New format, long long threadid, no special cases
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
545 'c' - Old format, id for continue, 32 bit threadid max, possably less
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
546 -1 means continue all threads
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547 'g' - Old Format, id for general use (other than continue)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549 replies:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 OK for success
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
551 ENN for error
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554 void stub_pkt_changethread(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
555 char * inbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
556 char * outbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
557 int bufmax)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 threadref id ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 int idefined = -1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561 char ch ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562 PKT_TRACE("setthread-pkt ",inbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 /* Parse the incoming packet for a thread identifier */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 switch (ch = *inbuf++ ) /* handle various packet formats */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 case 'p' : /* New format: mode:8,threadid:64 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568 inbuf = unpack_nibble(inbuf,&idefined) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569 inbuf = unpack_threadid(inbuf,&id) ; /* even if startflag */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 case 'c' : /* old format , specify thread for continue */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
572 if (inbuf[0] == '-' && inbuf[1] == '1') /* Hc-1 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
573 _gdb_cont_thread = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
574 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
575 inbuf = unpack_varlen_hex(inbuf, &_gdb_cont_thread) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
576
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
577 if (_gdb_cont_thread == 0 || /* revert to any old thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
578 thread_alive(_gdb_cont_thread)) /* specified thread is alive */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
579 outbuf = stub_pack_ack(outbuf) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
580 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
581 outbuf = stub_pack_nak(outbuf) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
582 break ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583 case 'g' : /* old format, specify thread for general operations */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 /* OLD format: parse a variable length hex string */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 /* OLD format consider special thread ids */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
587 inbuf = unpack_varlen_hex(inbuf, &_gdb_general_thread) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
588 int_to_threadref(&id, _gdb_general_thread) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
589 switch (_gdb_general_thread)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
590 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
591 case 0 : /* pick a thread, any thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
592 idefined = 2 ; /* select original interrupted context */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
593 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
594 case -1 : /* all threads */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
595 idefined = 2 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
596 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
597 default :
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
598 idefined = 1 ; /* select the specified thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
599 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
600 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604 outbuf = stub_pack_nak(outbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 } /* handle various packet formats */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 switch (idefined)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 case -1 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 /* Packet not supported, already NAKed, no further action */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 case 0 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 /* Switch back to interrupted context */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 _registers = &registers[0] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 case 1 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 /* copy the saved registers into the backup registers */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
619 stub_copy_registers(alt_registers,registers) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 /* The OS will now update the values it has in a saved process context*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 if (dbg_getthreadreg(&id,NUMREGS,&alt_registers[0]))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
622 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
623 /* switch the registers pointer */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
624 _registers = &alt_registers[0] ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
625 outbuf = stub_pack_ack(outbuf) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
626 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
628 outbuf = stub_pack_nak(outbuf) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 break ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
630 case 2 :
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
631 /* switch to interrupted context */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
632 outbuf = stub_pack_ack(outbuf) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
633 break ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
634 default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
635 outbuf = stub_pack_nak(outbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
636 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
637 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638 *outbuf = '\0' ; /* Terminate response pkt */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
639 } /* stub_pkt_changethread */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 /* ---- STUB_PKT_GETTHREADLIST ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 /* Get a portion of the threadlist or process list */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 /* This may be part of a multipacket transaction */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 /* It would be hard to tell in the response packet the difference
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 between the end of list and an error in threadid encoding.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 void stub_pkt_getthreadlist(char * inbuf,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
650 char * outbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
651 int bufmax)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653 char * count_ptr ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 char * done_ptr ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 char * limit ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656 int start_flag , batchsize , result , count ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 static threadref lastthread, nextthread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 #if PKT_DEBUG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 char * r_base = outbuf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 PKT_TRACE("pkt_getthreadlist: ",inbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 count = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 inbuf = unpack_nibble(inbuf,&start_flag) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 inbuf = unpack_byte(inbuf,&batchsize) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 inbuf = unpack_threadid(inbuf,&lastthread) ; /* even if startflag */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 /* Start building response packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 limit = outbuf + (bufmax - BUFTHREADIDSIZ - 10) ; /* id output packing limit */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 *outbuf++ = 'Q' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 *outbuf++ = 'M' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674 /* Default values for count and done fields, save ptr to repatch */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 count_ptr = outbuf ; /* save to repatch count */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 outbuf = pack_hex_byte(outbuf,0) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 done_ptr = outbuf ; /* Backpatched later */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678 *outbuf++ = '0' ; /* Done = 0 by default */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679 outbuf = pack_threadid(outbuf,&lastthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 /* Loop through the threadid packing */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 while ((outbuf < limit) && (count < batchsize))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 result = dbg_threadlist(start_flag,&lastthread,&nextthread) ;
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
685 start_flag = 0 ; /* redundant but effective */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 if (!result)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
687 { *done_ptr = '1' ; /* pack the done flag */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
688 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
689 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690 #if 0 /* DEBUG */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 if (threadmatch(&lastthread,&nextthread))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
692 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
693 output_string("FAIL: Threadlist, not incrementing\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
694 *done_ptr = '1' ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
695 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
696 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 count++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 outbuf = pack_threadid(outbuf,&nextthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 copy_threadref(&lastthread,&nextthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 pack_hex_byte(count_ptr,count) ;/* backpatch, Pack the count field */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 *outbuf = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 PKT_TRACE("pkt_getthreadlist(resp) ",r_base) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 } /* pkt_getthreadlist */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 /* ----- STUB_PKT_GETTHREADINFO ---------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 /* Get the detailed information about a specific thread or process */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 Encoding:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 'Q':8,'P':8,mask:16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 Mask Fields
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
718 threadid:1, # always request threadid
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
719 context_exists:2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
720 display:4,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
721 unique_name:8,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
722 more_display:16
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 void stub_pkt_getthreadinfo(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
726 char * inbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
727 char * outbuf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
728 int bufmax)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 int mask ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 int result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 threadref thread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 struct cygmon_thread_debug_info info ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 info.context_exists = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 info.thread_display = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 info.unique_thread_name = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 info.more_display = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 /* Assume the packet identification chars have already been
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 discarded by the packet demultiples routines */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 PKT_TRACE("PKT getthreadinfo",inbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 inbuf = unpack_int(inbuf,&mask) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 inbuf = unpack_threadid(inbuf,&thread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 result = dbg_threadinfo(&thread,&info) ; /* Make system call */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 if (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 *outbuf++ = 'q' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752 *outbuf++ = 'p' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 outbuf = pack_int(outbuf,mask) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 outbuf = pack_threadid(outbuf,&info.thread_id) ; /* echo threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 if (mask & 2) /* context-exists */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
756 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
757 outbuf = pack_int(outbuf,2) ; /* tag */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
758 outbuf = pack_hex_byte(outbuf,2) ; /* length */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
759 outbuf = pack_hex_byte(outbuf,info.context_exists) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
760 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 if ((mask & 4) && info.thread_display)/* display */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
762 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
763 outbuf = pack_int(outbuf,4) ; /* tag */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
764 outbuf = pack_string(outbuf,info.thread_display) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
765 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 if ((mask & 8) && info.unique_thread_name) /* unique_name */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
767 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
768 outbuf = pack_int(outbuf,8) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
769 outbuf = pack_string(outbuf,info.unique_thread_name) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
770 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 if ((mask & 16) && info.more_display) /* more display */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
772 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
773 outbuf = pack_int(outbuf,16) ; /* tag 16 */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
774 outbuf = pack_string(outbuf,info.more_display) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
775 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 PKT_TRACE("FAIL: dbg_threadinfo\n", "") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780 outbuf = stub_pack_nak(outbuf) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 *outbuf = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783 } /* stub_pkt_getthreadinfo */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
785 int stub_lock_scheduler(int lock, /* 0 to unlock, 1 to lock */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
786 int mode, /* 0 for step, 1 for continue */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
787 long id) /* current thread */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
788 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
789 threadref thread;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
791 int_to_threadref(&thread, id) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
792 return dbg_scheduler(&thread, lock, mode) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
793 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 #if GDB_MOCKUP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797 /* ------ MATCHED GDB SIDE PACKET ENCODING AND PARSING ----------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 char * pack_nibble(char * buf, int nibble)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 *buf++ = hexchars[(nibble & 0x0f)] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803 } /* pack_nibble */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805 #if 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806 static char * unpack_short(char * buf,int * value)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808 *value = stub_unpack_int(buf,4) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
809 return buf + 4 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
810 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
811
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
812 static char * pack_short(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
813 char * buf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
814 unsigned int value)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
815 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
816 buf = pack_hex_byte(buf,(value >> 8) & 0xff) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
817 buf = pack_hex_byte(buf,(value & 0xff)) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
818 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
819 } /* pack_short */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 /* Generally, I dont bury xmit and receive calls inside packet formatters
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
824 and parsers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
825 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
826
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
827
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
828
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
829
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
830 /* ----- PACK_SETTHREAD_REQUEST ------------------------------------- */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
831 /* Encoding: ??? decode gdb/remote.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
832 'Q':8,'p':8,idefined:8,threadid:32 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
833 */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
834
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
835 char * pack_setthread_request(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
836 char * buf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
837 char fmt, /* c,g or, p */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
838 int idformat ,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
839 threadref * threadid )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
840 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
841 *buf++ = fmt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
842
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 if (fmt == 'p')
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 { /* pack the long form */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 buf = pack_nibble(buf,idformat) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846 buf = pack_threadid(buf,threadid) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 { /* pack the shorter form - Serious truncation */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
850 /* There are reserved identifieds 0 , -1 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
851 int quickref = threadref_to_int(threadid) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 buf = pack_varlen_hex(buf,quickref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 *buf++ = '\0' ; /* end_of_packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
855 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
856 } /* pack_setthread_request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
857
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
858
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860 /* -------- PACK_THREADLIST-REQUEST --------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 char * pack_threadlist_request(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
865 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
866 int startflag,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
867 int threadcount,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
868 threadref * nextthread
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
869 )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871 *pkt++ = 'q' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872 *pkt++ = 'L' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
873 pkt = pack_nibble(pkt,startflag) ; /* initflag 1 bytes */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
874 pkt = pack_hex_byte(pkt,threadcount) ; /* threadcount 2 bytes */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
875 pkt = pack_threadid(pkt,nextthread) ; /* 64 bit thread identifier */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
876 *pkt = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878 } /* remote_threadlist_request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
879
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
880
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883 /* ---------- PARSE_THREADLIST_RESPONSE ------------------------------------ */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 int parse_threadlist_response(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
887 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
888 threadref * original_echo,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
889 threadref * resultlist,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
890 int * doneflag)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
892 char * limit ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 int count, resultcount , done ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894 resultcount = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 /* assume the 'q' and 'M chars have been stripped */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 PKT_TRACE("parse-threadlist-response ",pkt) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898 limit = pkt + (STUB_BUF_MAX - BUFTHREADIDSIZ) ; /* done parse past here */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
899 pkt = unpack_byte(pkt,&count) ; /* count field */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900 pkt = unpack_nibble(pkt,&done) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901 /* The first threadid is the argument threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 pkt = unpack_threadid(pkt,original_echo) ; /* should match query packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 while ((count-- > 0) && (pkt < limit))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 pkt = unpack_threadid(pkt,resultlist++) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906 resultcount++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908 if (doneflag) *doneflag = done ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909 return resultcount ; /* successvalue */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
910 } /* parse_threadlist_response */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 struct gdb_ext_thread_info
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914 threadref threadid ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915 int active ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916 char display[256] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917 char shortname[32] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918 char more_display[256] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 } ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
920
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
921
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922 /* ----- PACK_THREAD_INFO_REQUEST -------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
924 /*
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
925 threadid:1, # always request threadid
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926 context_exists:2,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 display:4,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
928 unique_name:8,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
929 more_display:16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
930 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
931
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
932 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934 char * pack_threadinfo_request(char * pkt,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
935 int mode,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
936 threadref * id
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
937 )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939 *pkt++ = 'Q' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
940 *pkt++ = 'P' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
941 pkt = pack_int(pkt,mode) ; /* mode */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 pkt = pack_threadid(pkt,id) ; /* threadid */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
943 *pkt = '\0' ; /* terminate */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
944 return pkt ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
945 } /* pack_thread_info_request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
946
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
947
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
949 static char * unpack_string(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
950 char * src,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
951 char * dest,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
952 int length)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
953 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
954 while (length--) *dest++ = *src++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
955 *dest = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
956 return src ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
957 } /* unpack_string */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
958
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
959
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
960 void output_threadid(char * title,threadref * ref)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
961 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
962 char hexid[20] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
963 pack_threadid(&hexid[0],ref) ; /* Convert threead id into hex */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
964 hexid[16] = 0 ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
965 output_string(title) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
966 output_string(&hexid[0]) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
967 output_string("\n") ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
968 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
969
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
970 /* ------ REMOTE_UPK_THREAD_INFO_RESPONSE ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971 /* Unpack the response of a detailed thread info packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 /* Encoding: i'Q':8,i'R':8,argmask:16,threadid:64,(tag:8,length:16,data:x)* */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
974 #define TAG_THREADID 1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975 #define TAG_EXISTS 2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
976 #define TAG_DISPLAY 4
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977 #define TAG_THREADNAME 8
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
978 #define TAG_MOREDISPLAY 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
979
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
980
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
981 int remote_upk_thread_info_response(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
982 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
983 threadref * expectedref ,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
984 struct gdb_ext_thread_info * info)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
986 int mask, length ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
987 unsigned int tag ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
988 threadref ref ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
989 char * limit = pkt + 500 ; /* plausable parsing limit */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
990 int retval = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
991
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
992 PKT_TRACE("upk-threadinfo ",pkt) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
993
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994 /* info->threadid = 0 ; FIXME: implement zero_threadref */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
995 info->active = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
996 info->display[0] = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
997 info->shortname[0] = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
998 info->more_display[0] = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1000 /* Assume the characters indicating the packet type have been stripped */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1001 pkt = unpack_int(pkt,&mask) ; /* arg mask */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1002 pkt = unpack_threadid(pkt , &ref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1003
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1004 if (! threadmatch(&ref,expectedref))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1005 { /* This is an answer to a different request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1006 output_string("FAIL Thread mismatch\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1007 output_threadid("ref ",&ref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1008 output_threadid("expected ",expectedref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1009 return 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1010 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1011 copy_threadref(&info->threadid,&ref) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1012
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1013 /* Loop on tagged fields , try to bail if somthing goes wrong */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1014 if (mask==0) output_string("OOPS NO MASK \n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1015
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1016 while ((pkt < limit) && mask && *pkt) /* packets are terminated with nulls */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1017 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1018 pkt = unpack_int(pkt,&tag) ; /* tag */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1019 pkt = unpack_byte(pkt,&length) ; /* length */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1020 if (! (tag & mask)) /* tags out of synch with mask */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1021 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1022 output_string("FAIL: threadinfo tag mismatch\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1023 retval = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1024 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1025 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1026 if (tag == TAG_THREADID)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1027 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1028 output_string("unpack THREADID\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1029 if (length != 16)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1030 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1031 output_string("FAIL: length of threadid is not 16\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1032 retval = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1033 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1034 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1035 pkt = unpack_threadid(pkt,&ref) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1036 mask = mask & ~ TAG_THREADID ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1037 continue ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1038 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1039 if (tag == TAG_EXISTS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1040 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1041 info->active = stub_unpack_int(pkt,length) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1042 pkt += length ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1043 mask = mask & ~(TAG_EXISTS) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1044 if (length > 8)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1045 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1046 output_string("FAIL: 'exists' length too long\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1047 retval = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1048 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1049 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1050 continue ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1051 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1052 if (tag == TAG_THREADNAME)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1053 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1054 pkt = unpack_string(pkt,&info->shortname[0],length) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1055 mask = mask & ~TAG_THREADNAME ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1056 continue ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1057 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1058 if (tag == TAG_DISPLAY)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1059 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1060 pkt = unpack_string(pkt,&info->display[0],length) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1061 mask = mask & ~TAG_DISPLAY ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1062 continue ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1063 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1064 if (tag == TAG_MOREDISPLAY)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1065 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1066 pkt = unpack_string(pkt,&info->more_display[0],length) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1067 mask = mask & ~TAG_MOREDISPLAY ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1068 continue ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1069 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1070 output_string("FAIL: unknown info tag\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1071 break ; /* Not a tag we know about */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1072 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1073 return retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1074 } /* parse-thread_info_response */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1075
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1076
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1077 /* ---- REMOTE_PACK_CURRTHREAD_REQUEST ---------------------------- */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1078 /* This is a request to emit the T packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1079
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1080 /* FORMAT: 'q':8,'C' */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1081
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1082 char * remote_pack_currthread_request(char * pkt )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1083 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1084 *pkt++ = 'q' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1085 *pkt++ = 'C' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1086 *pkt = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1087 return pkt ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1088 } /* remote_pack_currthread_request */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1089
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1090
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1091 /* ------- REMOTE_UPK_CURTHREAD_RESPONSE ----------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1092 /* Unpack the interesting part of a T packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1093
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1094
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1095 int remote_upk_currthread_response(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1096 char * pkt,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1097 int *thr ) /* Parse a T packet */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1098 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1099 int retval = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1100 PKT_TRACE("upk-currthreadresp ",pkt) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1102 #if 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1103 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1104 static char threadtag[8] = "thread" ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1105 int retval = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1106 int i , found ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1107 char ch ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1108 int quickid ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1109
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1110 /* Unpack as a t packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1111 while (((ch = *pkt++) != ':') /* scan for : thread */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1112 && (ch != '\0')) /* stop at end of packet */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1114 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1115 found = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1116 i = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1117 while ((ch = *pkt++) == threadtag[i++]) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1118 if (i == 8) /* string match "thread" */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1119 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1120 pkt = unpack_varlen_hex(pkt,&quickid) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1121 retval = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1122 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1123 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1124 retval = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1125 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1126 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1127 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1128 pkt = unpack_threadid(pkt, thr) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1129 retval = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1130 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1131 return retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1132 } /* remote_upk_currthread_response */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1133
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1134
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1135 /* -------- REMOTE_UPK-SIMPLE_ACK --------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1136 /* Decode a response which is eother "OK" or "Enn"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1137 fillin error code, fillin pkfag-1== undef, 0==nak, 1 == ack ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1138 return advanced packet pointer */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1139
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1140
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1141 char * remote_upk_simple_ack(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1142 char * buf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1143 int * pkflag,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1144 int * errcode)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1145 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1146 int lclerr = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1147 char ch = *buf++ ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1148 int retval = -1 ; /* Undefined ACK , a protocol error */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1149 if (ch == 'E') /* NAK */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1150 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1151 buf = unpack_byte(buf,&lclerr) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1152 retval = 0 ; /* transaction failed, explicitly */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1153 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1154 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1155 if ((ch == 'O') && (*buf++ == 'K')) /* ACK */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1156 retval = 1 ; /* transaction succeeded */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1157 *pkflag = retval ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1158 *errcode = lclerr ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1159 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1160 } /* remote-upk_simple_ack */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1161
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1162
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1163 /* -------- PACK_THREADALIVE_REQUEST ------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1164
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1165 char * pack_threadalive_request(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1166 char * buf,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1167 threadref * threadid)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1168 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1169 *buf++ = 'T' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1170 buf = pack_threadid(buf,threadid) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1171 *buf = '\0' ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1172 return buf ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1173 } /* pack_threadalive_request */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1174
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1175 #endif /* GDB_MOCKUP */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1176
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1177 /* ---------------------------------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1178 /* UNIT_TESTS SUBSECTION */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1179 /* ---------------------------------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1181
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1182 #if UNIT_TEST
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1183 extern void output_string(char * message) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1184 static char test_req[400] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1185 static char t_response[400] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1186
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1187
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1188
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1189 /* ----- DISPLAY_THREAD_INFO ---------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1190 /* Use local cygmon string output utiities */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1191
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1192 void display_thread_info(struct gdb_ext_thread_info * info)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1193 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1194
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1195 output_threadid("Threadid: ",&info->threadid) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1196 /* short name */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1197 output_string("Name: ") ; output_string(info->shortname) ; output_string("\n");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1198 /* format display state */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1199 output_string("State: ") ; output_string(info->display) ; output_string("\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1200 /* additional data */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1201 output_string("other: ");output_string(info->more_display);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1202 output_string("\n\n");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1203 } /* display_thread_info */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1204
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1206 /* --- CURRTHREAD-TEST -------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1207 static int currthread_test(threadref * thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1208 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1209 int result ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1210 int threadid ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1211 output_string("TEST: currthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1212 remote_pack_currthread_request(test_req) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1213 stub_pkt_currthread(test_req+2,t_response,STUB_BUF_MAX) ;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1214 result = remote_upk_currthread_response(t_response+2, &threadid) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1215 if (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1216 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1217 output_string("PASS getcurthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1218 /* FIXME: print the thread */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1219 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1220 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1221 output_string("FAIL getcurrthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1222 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1223 } /* currthread_test */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1224
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1225 /* ------ SETTHREAD_TEST ------------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1226 /* use a known thread from previous test */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1227
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1228 static int setthread_test(threadref * thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1229 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1230 int result, errcode ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1231 output_string("TEST: setthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1232
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1233 pack_setthread_request(test_req,'p',1,thread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1234 stub_pkt_changethread(test_req,t_response,STUB_BUF_MAX) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1235 remote_upk_simple_ack(t_response,&result,&errcode) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1236 switch (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1237 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1238 case 0 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1239 output_string("FAIL setthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1240 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1241 case 1 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1242 output_string("PASS setthread\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1243 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1244 default :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1245 output_string("FAIL setthread -unrecognized response\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1246 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1247 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1248 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1249 } /* setthread_test */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1250
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1251
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1252 /* ------ THREADACTIVE_TEST ---------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1253 /* use known thread */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1254 /* pack threadactive packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1255 /* process threadactive packet */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1256 /* parse threadactive response */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1257 /* check results */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1258
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1259
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1260 int threadactive_test(threadref * thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1261 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1262 int result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1263 int errcode ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1264 output_string("TEST: threadactive\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1265 pack_threadalive_request(test_req,thread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1266 stub_pkt_thread_alive(test_req+1,t_response,STUB_BUF_MAX);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1267 remote_upk_simple_ack(t_response,&result,&errcode) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1268 switch (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1269 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1270 case 0 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1271 output_string("FAIL threadalive\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1272 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1273 case 1 :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1274 output_string("PASS threadalive\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1275 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1276 default :
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1277 output_string("FAIL threadalive -unrecognized response\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1278 break ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1279 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1280 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1281 } /* threadactive_test */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1282
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1283 /* ------ REMOTE_GET_THREADINFO -------------------------------------- */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1284 int remote_get_threadinfo(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1285 threadref * threadid,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1286 int fieldset , /* TAG mask */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1287 struct gdb_ext_thread_info * info
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1288 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1289 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1290 int result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1291 pack_threadinfo_request(test_req,fieldset,threadid) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1292 stub_pkt_getthreadinfo(test_req+2,t_response,STUB_BUF_MAX) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1293 result = remote_upk_thread_info_response(t_response+2,threadid,info) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1294 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1295 } /* remote_get-thrreadinfo */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1296
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1297
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1298 static struct gdb_ext_thread_info test_info ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1299
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1300 static int get_and_display_threadinfo(threadref * thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1301 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1302 int mode ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1303 int result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1304 /* output_string("TEST: get and display threadinfo\n") ; */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1305
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1306 mode = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1307 | TAG_MOREDISPLAY | TAG_DISPLAY ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1308 result = remote_get_threadinfo(thread,mode,&test_info) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1309 if (result) display_thread_info(&test_info) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1310 #if 0 /* silent subtest */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1311 if (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1312 output_string("PASS: get_and_display threadinfo\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1313 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1314 output_string("FAIL: get_and_display threadinfo\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1315 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1316 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1317 } /* get-and-display-threadinfo */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1318
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1319
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1320
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1321 /* ----- THREADLIST_TEST ------------------------------------------ */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1322 #define TESTLISTSIZE 16
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1323 #define TLRSIZ 2
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1324 static threadref test_threadlist[TESTLISTSIZE] ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1325
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1326 static int threadlist_test(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1327 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1328 int done, i , result_count ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1329 int startflag = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1330 int result = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1331 int loopcount = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1332 static threadref nextthread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1333 static threadref echo_nextthread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1334
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1335 output_string("TEST: threadlist\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1336
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1337 done = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1338 while (! done)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1339 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1340 if (loopcount++ > 10)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1341 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1342 result = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1343 output_string("FAIL: Threadlist test -infinite loop-\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1344 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1345 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1346 pack_threadlist_request(test_req,startflag,TLRSIZ,&nextthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1347 startflag = 0 ; /* clear for later iterations */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1348 stub_pkt_getthreadlist(test_req+2,t_response,STUB_BUF_MAX);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1349 result_count = parse_threadlist_response(t_response+2,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1350 &echo_nextthread,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1351 &test_threadlist[0],&done) ;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1352 if (! threadmatch(&echo_nextthread,&nextthread))
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1353 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1354 output_string("FAIL: threadlist did not echo arg thread\n");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1355 result = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1356 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1357 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1358 if (result_count <= 0)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1359 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1360 if (done != 0)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1361 { output_string("FAIL threadlist_test, failed to get list");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1362 result = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1363 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1364 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1365 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1366 if (result_count > TLRSIZ)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1367 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1368 output_string("FAIL: threadlist response longer than requested\n") ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1369 result = 0 ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1370 break ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1371 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1372 /* Setup to resume next batch of thread references , set nestthread */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1373 copy_threadref(&nextthread,&test_threadlist[result_count-1]) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1374 /* output_threadid("last-of-batch",&nextthread) ; */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1375 i = 0 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1376 while (result_count--)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1377 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1378 if (0) /* two display alternatives */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1379 output_threadid("truncatedisplay",&test_threadlist[i++]) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1380 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1381 get_and_display_threadinfo(&test_threadlist[i++]) ;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1382 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1383
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1384 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1385 if (!result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1386 output_string("FAIL: threadlist test\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1387 else output_string("PASS: Threadlist test\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1388 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1389 } /* threadlist_test */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1390
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1391
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1392 static threadref testthread ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1393
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1394
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1395 int test_thread_support(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1396 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1397 int result = 1 ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1398 output_string("TESTING Thread support infrastructure\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1399 stub_pack_Tpkt_threadid(test_req) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1400 PKT_TRACE("packing the threadid -> ",test_req) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1401 result &= currthread_test(&testthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1402 result &= get_and_display_threadinfo(&testthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1403 result &= threadlist_test() ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1404 result &= setthread_test(&testthread) ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1405 if (result)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1406 output_string("PASS: UNITTEST Thread support\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1407 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1408 output_string("FAIL: UNITTEST Thread support\n") ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1409 return result ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1410 } /* test-thread_support */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1411 #endif /* UNIT_TEST */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1412
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1413 // #ifdef __ECOS__
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1414 #endif // ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT...
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1415 // #endif // __ECOS__