source: anotherchoice/tags/jsp-1.4.4-full-UTF8/tools/GHS/ghs_hook_bld/ghs_hook.c@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 8.5 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * 2003 by Advanced Data Controls, Corp
9 *
10 * 上記著作権者
11は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によってå…
13¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
14 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
15 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
16å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
17 * 利用と呼ぶ)することを無償で許諾する.
18 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20 * スコード中に含まれていること.
21 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
22 * 用できる形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
24å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
25 * 者
26マニュアルなど)に,上記の著作権表示,この利用条件および下記
27 * の無保証規定を掲載すること.
28 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
29 * 用できない形で再é…
30å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
31 * と.
32 * (a) 再é…
33å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
34マニュアルなど)に,上記の著
35 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
36 * (b) 再é…
37å¸ƒã®å½¢æ…
38‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
39 * 報告すること.
40 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
41 * 害からも,上記著作権者
42およびTOPPERSプロジェクトをå…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
48 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
49 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
50 *
51 * @(#) $Id: ghs_hook.c,v 1.2 2003/12/19 11:48:37 honda Exp $
52 */
53#ifdef GHS_HOOK
54#include "jsp_kernel.h"
55#include "kernel.h"
56#include "time_event.h"
57#include "task.h"
58#include "ghs_hook.h"
59
60
61#define THG_ALL THG_SYS|THG_RET|THG_DSP|THG_STS|THG_INT
62#define THF_ALL THF_TSK|THF_TSKS|THF_TEX|THF_SEM|THF_FLG|THF_DTQ|THF_MBX|THF_MPF|THF_TIM
63#ifndef GRP
64#define GRP THG_ALL
65#endif
66#ifndef SEV
67#define SEV THF_ALL
68#endif
69#ifndef TSK
70#define TSK TRACE_TNUM_TSKID
71#endif
72
73
74#define MAX_TSK 256
75
76T_ROS Ros_buf;
77
78struct GHS_TASKS {
79 B sts;
80 B pri;
81} ghs_tasks[MAX_TSK];
82
83ghs_tasks_initialize()
84{
85 INT i;
86 TCB *tcb;
87
88 for (tcb = tcb_table, i = 0; i < tmax_tskid; tcb++, i++) {
89 if(i > sizeof(ghs_tasks) / sizeof(ghs_tasks[0]))
90 return;
91 if(TSTAT_RUNNABLE(tcb->tstat)) ghs_tasks[i].sts = TTS_RDY;
92 else ghs_tasks[i].sts = TTS_DMT;
93 ghs_tasks[i].pri = EXT_TSKPRI(tcb->priority);
94 }
95}
96
97int SetEndian()
98{
99 union testme {
100 char a[2];
101 short b;
102 } testme;
103
104 testme.b = 0;
105 testme.a[0] = 1;
106 if (testme.b== 1)
107 return(0);
108 else
109 return(1);
110}
111
112void vinit_hook(void)
113{
114 int i;
115
116 Ros_buf.trace.bigendian = SetEndian();
117 Ros_buf.trace.dummy = 0;
118 Ros_buf.trace.size = BUFF_SIZE-1;
119 Ros_buf.trace.putp = 0;
120 Ros_buf.trace.getp = 0;
121 for(i = 0; i < TRACE_TNUM_TSKID-1; i++)
122 Ros_buf.hook.task_id[i] = 0;
123 for(i = 0; i < TRACE_TNUM_EVT-1; i++)
124 Ros_buf.hook.evtcode[i] = 0;
125 Ros_buf.hook.max_tid = tmax_tskid;
126 Ros_buf.hook.tnum_tskid = TRACE_TNUM_TSKID;
127 Ros_buf.hook.tnum_evt = TRACE_TNUM_EVT;
128
129 Ros_buf.hook.trc_grp = GRP;
130 Ros_buf.hook.sys_grp = SEV;
131 for(i = 0; i < TSK; i++)
132 Ros_buf.hook.task_id[i] = 1;
133
134}
135
136void ghs_hook4(int sts, int p1, int p2)
137{
138 int putp;
139
140 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 4)
141 {
142 Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
143 }
144 putp = Ros_buf.trace.putp;
145 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 4;
146 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
147 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
148 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
149 Ros_buf.trace.putp = putp;
150}
151
152void ghs_hook5(int sts, int p1, int p2, int p3)
153{
154 int putp;
155
156 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 5)
157 { Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
158 }
159 putp = Ros_buf.trace.putp;
160 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 5;
161 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
162 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
163 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
164 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;
165 Ros_buf.trace.putp = putp;
166}
167
168void ghs_hook6(int sts, int p1, int p2, int p3, int p4)
169{
170 int putp;
171
172 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 6)
173 { Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
174 }
175
176 putp = Ros_buf.trace.putp;
177 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 6;
178 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
179 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
180 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
181 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;
182 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;
183 Ros_buf.trace.putp = putp;
184}
185
186void ghs_hook7(int sts, int p1, int p2, int p3, int p4, int p5)
187{
188 int putp;
189
190 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 7)
191 { Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
192 }
193
194 putp = Ros_buf.trace.putp;
195 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 7;
196 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
197 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
198 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
199 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;
200 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;
201 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;
202 Ros_buf.trace.putp = putp;
203}
204
205void ghs_hook8(int sts, int p1, int p2, int p3, int p4, int p5, int p6)
206{
207 int putp;
208
209 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 8)
210 { Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
211 }
212 putp = Ros_buf.trace.putp;
213 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 8;
214 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
215 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
216 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
217 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;
218 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;
219 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;
220 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p6;
221 Ros_buf.trace.putp = putp;
222}
223
224void ghs_hook9(int sts, int p1, int p2, int p3, int p4, int p5, int p6, int p7)
225{
226 int putp;
227
228 while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 9)
229 { Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;
230 }
231
232 putp = Ros_buf.trace.putp;
233 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 9;
234 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;
235 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;
236 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;
237 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;
238 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;
239 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;
240 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p6;
241 Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p7;
242 Ros_buf.trace.putp = putp;
243}
244
245#endif
246
Note: See TracBrowser for help on using the repository browser.