1 | /* threadinfo.c |
---|
2 | * |
---|
3 | * Routines to print out information about threads. |
---|
4 | */ |
---|
5 | |
---|
6 | #include "system.h" |
---|
7 | #include <stdlib.h> |
---|
8 | |
---|
9 | #define PTR unsigned int |
---|
10 | #define PTR_MASK "0x%08x" |
---|
11 | |
---|
12 | /* |
---|
13 | * Return a pointer to a string describing the object type. |
---|
14 | */ |
---|
15 | |
---|
16 | const char * _Objects_Type_to_String( Objects_Control * object ) |
---|
17 | { |
---|
18 | switch( _Objects_Get_class( object->id ) ) { |
---|
19 | case OBJECTS_NO_CLASS: |
---|
20 | return "NO_CLASS"; |
---|
21 | |
---|
22 | case OBJECTS_INTERNAL_THREADS: |
---|
23 | return "INTERNAL_THREADS"; |
---|
24 | |
---|
25 | case OBJECTS_RTEMS_TASKS: |
---|
26 | return "RTEMS_TASKS"; |
---|
27 | |
---|
28 | case OBJECTS_POSIX_THREADS: |
---|
29 | return "POSIX_THREADS"; |
---|
30 | |
---|
31 | case OBJECTS_ITRON_TASKS: |
---|
32 | return "ITRON_TASKS"; |
---|
33 | |
---|
34 | case OBJECTS_RTEMS_TIMERS: |
---|
35 | return "RTEMS_TIMERS"; |
---|
36 | |
---|
37 | case OBJECTS_RTEMS_SEMAPHORES: |
---|
38 | return "RTEMS_SEMAPHORES"; |
---|
39 | |
---|
40 | case OBJECTS_RTEMS_MESSAGE_QUEUES: |
---|
41 | return "RTEMS_MESSAGE_QUEUES"; |
---|
42 | |
---|
43 | case OBJECTS_RTEMS_PARTITIONS: |
---|
44 | return "RTEMS_PARTITIONS"; |
---|
45 | |
---|
46 | case OBJECTS_RTEMS_REGIONS: |
---|
47 | return "RTEMS_REGIONS"; |
---|
48 | |
---|
49 | case OBJECTS_RTEMS_PORTS: |
---|
50 | return "RTEMS_PORTS"; |
---|
51 | |
---|
52 | case OBJECTS_RTEMS_PERIODS: |
---|
53 | return "RTEMS_PERIODS"; |
---|
54 | |
---|
55 | case OBJECTS_RTEMS_EXTENSIONS: |
---|
56 | return "RTEMS_EXTENSIONS"; |
---|
57 | |
---|
58 | case OBJECTS_POSIX_KEYS: |
---|
59 | return "POSIX_KEYS"; |
---|
60 | |
---|
61 | case OBJECTS_POSIX_INTERRUPTS: |
---|
62 | return "POSIX_INTERRUPTS"; |
---|
63 | |
---|
64 | case OBJECTS_POSIX_MESSAGE_QUEUES: |
---|
65 | return "POSIX_MESSAGE_QUEUES"; |
---|
66 | |
---|
67 | case OBJECTS_POSIX_MUTEXES: |
---|
68 | return "POSIX_MUTEXES"; |
---|
69 | |
---|
70 | case OBJECTS_POSIX_SEMAPHORES: |
---|
71 | return "POSIX_SEMAPHORES"; |
---|
72 | |
---|
73 | case OBJECTS_POSIX_CONDITION_VARIABLES: |
---|
74 | return "POSIX_CONDITION_VARIABLES"; |
---|
75 | |
---|
76 | case OBJECTS_ITRON_EVENTFLAGS: |
---|
77 | return "ITRON_EVENTFLAGS"; |
---|
78 | |
---|
79 | case OBJECTS_ITRON_MAILBOXES: |
---|
80 | return "ITRON_MAILBOXES"; |
---|
81 | |
---|
82 | case OBJECTS_ITRON_MESSAGE_BUFFERS: |
---|
83 | return "ITRON_MESSAGE_BUFFERS"; |
---|
84 | |
---|
85 | case OBJECTS_ITRON_PORTS: |
---|
86 | return "ITRON_PORTS"; |
---|
87 | |
---|
88 | case OBJECTS_ITRON_SEMAPHORES: |
---|
89 | return "ITRON_SEMAPHORES"; |
---|
90 | |
---|
91 | case OBJECTS_ITRON_VARIABLE_MEMORY_POOLS: |
---|
92 | return "ITRON_VARIABLE_MEMORY_POOLS"; |
---|
93 | |
---|
94 | case OBJECTS_ITRON_FIXED_MEMORY_POOLS: |
---|
95 | return "ITRON_FIXED_MEMORY_POOLS"; |
---|
96 | |
---|
97 | default: |
---|
98 | return "UNKNOWN"; |
---|
99 | } |
---|
100 | } |
---|
101 | |
---|
102 | |
---|
103 | /* |
---|
104 | * Return a pointer to a string describing the thread state |
---|
105 | */ |
---|
106 | |
---|
107 | const char * _Thread_State_to_String( States_Control state ) |
---|
108 | { |
---|
109 | States_Control orig_state = state; |
---|
110 | int i; |
---|
111 | int first_entry = TRUE; |
---|
112 | static char buffer[256]; |
---|
113 | static const char *desc[] = { |
---|
114 | "READY", /* 0 - 0x00000 */ |
---|
115 | "DORMANT", /* 1 - 0x00001 */ |
---|
116 | "SUSPENDED", /* 2 - 0x00002 */ |
---|
117 | "TRANSIENT", /* 3 - 0x00004 */ |
---|
118 | "DELAYING", /* 4 - 0x00008 */ |
---|
119 | "WAITING_FOR_TIME", /* 5 - 0x00010 */ |
---|
120 | "WAITING_FOR_BUFFER", /* 6 - 0x00020 */ |
---|
121 | "WAITING_FOR_SEGMENT", /* 7 - 0x00040 */ |
---|
122 | "WAITING_FOR_MESSAGE", /* 8 - 0x00080 */ |
---|
123 | "WAITING_FOR_EVENT", /* 9 - 0x00100 */ |
---|
124 | "WAITING_FOR_SEMAPHORE", /* 10 - 0x00200 */ |
---|
125 | "WAITING_FOR_MUTEX", /* 11 - 0x00400 */ |
---|
126 | "WAITING_FOR_CONDITION_VARIABLE", /* 12 - 0x00800 */ |
---|
127 | "WAITING_FOR_JOIN_AT_EXIT", /* 13 - 0x01000 */ |
---|
128 | "WAITING_FOR_RPC_REPLY", /* 14 - 0x02000 */ |
---|
129 | "WAITING_FOR_PERIOD", /* 15 - 0x04000 */ |
---|
130 | "WAITING_FOR_SIGNAL", /* 16 - 0x08000 */ |
---|
131 | "INTERRUPTIBLE_BY_SIGNAL", /* 17 - 0x10000 */ |
---|
132 | "UNKNOWN" /* 18 - all higher bits */ |
---|
133 | }; |
---|
134 | |
---|
135 | if( state == STATES_READY ) |
---|
136 | return desc[0]; |
---|
137 | |
---|
138 | memset( buffer, '\0', sizeof( buffer ) ); |
---|
139 | for ( i = 1; i < 18; i++ ) { |
---|
140 | if ( state & 0x1 ) { |
---|
141 | if ( !first_entry ) { |
---|
142 | strcat ( buffer, " | " ); |
---|
143 | } |
---|
144 | strcat ( buffer, desc[i] ); |
---|
145 | first_entry = FALSE; |
---|
146 | } |
---|
147 | state = state >> 1; |
---|
148 | } |
---|
149 | |
---|
150 | if ( state != 0 ) { |
---|
151 | if ( !first_entry ) { |
---|
152 | strcat ( buffer, " | " ); |
---|
153 | } |
---|
154 | strcat ( buffer, desc[18] ); |
---|
155 | } |
---|
156 | |
---|
157 | return buffer; |
---|
158 | } |
---|
159 | |
---|
160 | |
---|
161 | /* |
---|
162 | * Callback function to print out thread Ids, thread priorities, and thread stack |
---|
163 | * information. |
---|
164 | */ |
---|
165 | |
---|
166 | unsigned32 print_thread_info( Thread_Control *thread, void * arg ) |
---|
167 | { |
---|
168 | printf( "Thread ID 0x%08x at "PTR_MASK"\n", thread->Object.id, (PTR)thread ); |
---|
169 | printf( "\ttype = %s\n", _Objects_Type_to_String( &(thread->Object) ) ); |
---|
170 | printf( "\tstate = %s\n", _Thread_State_to_String( thread->current_state ) ); |
---|
171 | printf( "\treal priority = %d\n", thread->real_priority ); |
---|
172 | printf( "\tcurrent priority = %d\n", thread->current_priority ); |
---|
173 | printf( "\tstack base = "PTR_MASK"\n", (PTR)thread->Start.Initial_stack.area ); |
---|
174 | printf( "\tstack size = 0x%08x\n", thread->Start.Initial_stack.size ); |
---|
175 | /* printf( "\tstack pointer = "PTR_MASK"\n", */ |
---|
176 | printf( "\n" ); |
---|
177 | return 0; |
---|
178 | } |
---|