|
1 <?xml version="1.0" encoding="utf-8"?> |
|
2 <!-- |
|
3 Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved. |
|
4 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
5 |
|
6 This code is free software; you can redistribute it and/or modify it |
|
7 under the terms of the GNU General Public License version 2 only, as |
|
8 published by the Free Software Foundation. |
|
9 |
|
10 This code is distributed in the hope that it will be useful, but WITHOUT |
|
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
13 version 2 for more details (a copy is included in the LICENSE file that |
|
14 accompanied this code). |
|
15 |
|
16 You should have received a copy of the GNU General Public License version |
|
17 2 along with this work; if not, write to the Free Software Foundation, |
|
18 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
19 |
|
20 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
|
21 CA 95054 USA or visit www.sun.com if you need additional information or |
|
22 have any questions. |
|
23 |
|
24 --> |
|
25 |
|
26 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
|
27 version="1.0"> |
|
28 |
|
29 <xsl:import href="jvmtiLib.xsl"/> |
|
30 |
|
31 <xsl:output method="text" omit-xml-declaration="yes"/> |
|
32 |
|
33 <xsl:template match="/"> |
|
34 <xsl:apply-templates select="specification"/> |
|
35 </xsl:template> |
|
36 |
|
37 <xsl:template match="specification"> |
|
38 |
|
39 <xsl:call-template name="intro"/> |
|
40 |
|
41 <xsl:text>/* Derived Base Types */ |
|
42 </xsl:text> |
|
43 <xsl:apply-templates select="//basetype"/> |
|
44 |
|
45 <xsl:text> |
|
46 |
|
47 /* Constants */ |
|
48 </xsl:text> |
|
49 <xsl:apply-templates select="//constants"/> |
|
50 |
|
51 <xsl:text> |
|
52 |
|
53 /* Errors */ |
|
54 |
|
55 typedef enum { |
|
56 </xsl:text> |
|
57 <xsl:for-each select="//errorid"> |
|
58 <xsl:sort select="@num" data-type="number"/> |
|
59 <xsl:apply-templates select="." mode="enum"/> |
|
60 <xsl:text>, |
|
61 </xsl:text> |
|
62 <xsl:if test="position() = last()"> |
|
63 <xsl:text> JVMTI_ERROR_MAX = </xsl:text> |
|
64 <xsl:value-of select="@num"/> |
|
65 </xsl:if> |
|
66 </xsl:for-each> |
|
67 <xsl:text> |
|
68 } jvmtiError; |
|
69 </xsl:text> |
|
70 <xsl:apply-templates select="eventsection" mode="enum"/> |
|
71 |
|
72 <xsl:text> |
|
73 /* Pre-Declarations */ |
|
74 </xsl:text> |
|
75 <xsl:apply-templates select="//typedef|//uniontypedef" mode="early"/> |
|
76 |
|
77 <xsl:text> |
|
78 /* Function Types */ |
|
79 </xsl:text> |
|
80 <xsl:apply-templates select="//callback"/> |
|
81 |
|
82 <xsl:text> |
|
83 |
|
84 /* Structure Types */ |
|
85 </xsl:text> |
|
86 <xsl:apply-templates select="//typedef|//uniontypedef" mode="body"/> |
|
87 <xsl:apply-templates select="//capabilitiestypedef"/> |
|
88 |
|
89 <xsl:apply-templates select="eventsection" mode="body"/> |
|
90 |
|
91 <xsl:apply-templates select="functionsection"/> |
|
92 |
|
93 <xsl:call-template name="outro"/> |
|
94 |
|
95 </xsl:template> |
|
96 |
|
97 <xsl:template name="intro"> |
|
98 <xsl:call-template name="includeHeader"/> |
|
99 <xsl:text> |
|
100 /* Include file for the Java(tm) Virtual Machine Tool Interface */ |
|
101 |
|
102 #ifndef _JAVA_JVMTI_H_ |
|
103 #define _JAVA_JVMTI_H_ |
|
104 |
|
105 #include "jni.h" |
|
106 |
|
107 #ifdef __cplusplus |
|
108 extern "C" { |
|
109 #endif |
|
110 |
|
111 enum { |
|
112 JVMTI_VERSION_1 = 0x30010000, |
|
113 JVMTI_VERSION_1_0 = 0x30010000, |
|
114 JVMTI_VERSION_1_1 = 0x30010100, |
|
115 |
|
116 JVMTI_VERSION = 0x30000000 + (</xsl:text> |
|
117 <xsl:value-of select="//specification/@majorversion"/> |
|
118 <xsl:text> * 0x10000) + (</xsl:text> |
|
119 <xsl:value-of select="//specification/@minorversion"/> |
|
120 <xsl:text> * 0x100)</xsl:text> |
|
121 <xsl:variable name="micro"> |
|
122 <xsl:call-template name="microversion"/> |
|
123 </xsl:variable> |
|
124 <xsl:choose> |
|
125 <xsl:when test="string($micro)='dev'"> |
|
126 <xsl:text> /* checked out - </xsl:text> |
|
127 </xsl:when> |
|
128 <xsl:otherwise> |
|
129 <xsl:text> + </xsl:text> |
|
130 <xsl:value-of select="$micro"/> |
|
131 <xsl:text> /* </xsl:text> |
|
132 </xsl:otherwise> |
|
133 </xsl:choose> |
|
134 <xsl:text>version: </xsl:text> |
|
135 <xsl:call-template name="showversion"/> |
|
136 <xsl:text> */ |
|
137 }; |
|
138 |
|
139 JNIEXPORT jint JNICALL |
|
140 Agent_OnLoad(JavaVM *vm, char *options, void *reserved); |
|
141 |
|
142 JNIEXPORT jint JNICALL |
|
143 Agent_OnAttach(JavaVM* vm, char* options, void* reserved); |
|
144 |
|
145 JNIEXPORT void JNICALL |
|
146 Agent_OnUnload(JavaVM *vm); |
|
147 |
|
148 /* Forward declaration of the environment */ |
|
149 |
|
150 struct _jvmtiEnv; |
|
151 |
|
152 struct jvmtiInterface_1_; |
|
153 |
|
154 #ifdef __cplusplus |
|
155 typedef _jvmtiEnv jvmtiEnv; |
|
156 #else |
|
157 typedef const struct jvmtiInterface_1_ *jvmtiEnv; |
|
158 #endif /* __cplusplus */ |
|
159 |
|
160 </xsl:text> |
|
161 </xsl:template> |
|
162 |
|
163 <xsl:template name="outro"> |
|
164 <xsl:text> |
|
165 |
|
166 #ifdef __cplusplus |
|
167 } /* extern "C" */ |
|
168 #endif /* __cplusplus */ |
|
169 |
|
170 #endif /* !_JAVA_JVMTI_H_ */ |
|
171 |
|
172 </xsl:text> |
|
173 </xsl:template> |
|
174 |
|
175 <xsl:template match="eventsection" mode="enum"> |
|
176 <xsl:text> |
|
177 /* Event IDs */ |
|
178 |
|
179 typedef enum { |
|
180 </xsl:text> |
|
181 <xsl:for-each select="event"> |
|
182 <xsl:sort select="@num" data-type="number"/> |
|
183 <xsl:if test="position()=1"> |
|
184 <xsl:text> JVMTI_MIN_EVENT_TYPE_VAL = </xsl:text> |
|
185 <xsl:value-of select="@num"/> |
|
186 <xsl:text>, |
|
187 </xsl:text> |
|
188 </xsl:if> |
|
189 <xsl:apply-templates select="." mode="enum"/> |
|
190 <xsl:text>, |
|
191 </xsl:text> |
|
192 <xsl:if test="position()=last()"> |
|
193 <xsl:text> JVMTI_MAX_EVENT_TYPE_VAL = </xsl:text> |
|
194 <xsl:value-of select="@num"/> |
|
195 </xsl:if> |
|
196 </xsl:for-each> |
|
197 <xsl:text> |
|
198 } jvmtiEvent; |
|
199 |
|
200 </xsl:text> |
|
201 </xsl:template> |
|
202 |
|
203 <xsl:template match="eventsection" mode="body"> |
|
204 <xsl:text> |
|
205 |
|
206 /* Event Definitions */ |
|
207 |
|
208 typedef void (JNICALL *jvmtiEventReserved)(void); |
|
209 |
|
210 </xsl:text> |
|
211 <xsl:apply-templates select="event" mode="definition"> |
|
212 <xsl:sort select="@id"/> |
|
213 </xsl:apply-templates> |
|
214 |
|
215 <xsl:text> |
|
216 /* Event Callback Structure */ |
|
217 |
|
218 typedef struct { |
|
219 </xsl:text> |
|
220 <xsl:call-template name="eventStruct"> |
|
221 <xsl:with-param name="events" select="event"/> |
|
222 <xsl:with-param name="index" select="0"/> |
|
223 <xsl:with-param name="started" select="false"/> |
|
224 <xsl:with-param name="comment" select="'Yes'"/> |
|
225 </xsl:call-template> |
|
226 <xsl:text>} jvmtiEventCallbacks; |
|
227 </xsl:text> |
|
228 |
|
229 </xsl:template> |
|
230 |
|
231 |
|
232 <xsl:template match="event" mode="definition"> |
|
233 <xsl:text> |
|
234 typedef void (JNICALL *jvmtiEvent</xsl:text> |
|
235 <xsl:value-of select="@id"/> |
|
236 <xsl:text>) |
|
237 (jvmtiEnv *jvmti_env</xsl:text> |
|
238 <xsl:apply-templates select="parameters" mode="signature"> |
|
239 <xsl:with-param name="comma"> |
|
240 <xsl:text>, |
|
241 </xsl:text> |
|
242 </xsl:with-param> |
|
243 </xsl:apply-templates> |
|
244 <xsl:text>); |
|
245 </xsl:text> |
|
246 </xsl:template> |
|
247 |
|
248 <xsl:template match="functionsection"> |
|
249 <xsl:text> |
|
250 |
|
251 /* Function Interface */ |
|
252 |
|
253 typedef struct jvmtiInterface_1_ { |
|
254 |
|
255 </xsl:text> |
|
256 <xsl:call-template name="funcStruct"> |
|
257 <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/> |
|
258 <xsl:with-param name="index" select="1"/> |
|
259 </xsl:call-template> |
|
260 |
|
261 <xsl:text>} jvmtiInterface_1; |
|
262 |
|
263 struct _jvmtiEnv { |
|
264 const struct jvmtiInterface_1_ *functions; |
|
265 #ifdef __cplusplus |
|
266 |
|
267 </xsl:text> |
|
268 <xsl:apply-templates select="category" mode="cppinline"/> |
|
269 <xsl:text> |
|
270 #endif /* __cplusplus */ |
|
271 }; |
|
272 </xsl:text> |
|
273 |
|
274 </xsl:template> |
|
275 |
|
276 <xsl:template name="funcStruct"> |
|
277 <xsl:param name="funcs"/> |
|
278 <xsl:param name="index"/> |
|
279 <xsl:variable name="thisFunction" select="$funcs[@num=$index]"/> |
|
280 <xsl:text> /* </xsl:text> |
|
281 <xsl:number value="$index" format=" 1"/> |
|
282 <xsl:text> : </xsl:text> |
|
283 <xsl:choose> |
|
284 <xsl:when test="count($thisFunction)=1"> |
|
285 <xsl:value-of select="$thisFunction/synopsis"/> |
|
286 <xsl:text> */ |
|
287 jvmtiError (JNICALL *</xsl:text> |
|
288 <xsl:value-of select="$thisFunction/@id"/> |
|
289 <xsl:text>) (jvmtiEnv* env</xsl:text> |
|
290 <xsl:apply-templates select="$thisFunction/parameters" mode="signature"> |
|
291 <xsl:with-param name="comma"> |
|
292 <xsl:text>, |
|
293 </xsl:text> |
|
294 </xsl:with-param> |
|
295 </xsl:apply-templates> |
|
296 <xsl:text>)</xsl:text> |
|
297 </xsl:when> |
|
298 <xsl:otherwise> |
|
299 <xsl:text> RESERVED */ |
|
300 void *reserved</xsl:text> |
|
301 <xsl:value-of select="$index"/> |
|
302 </xsl:otherwise> |
|
303 </xsl:choose> |
|
304 <xsl:text>; |
|
305 |
|
306 </xsl:text> |
|
307 <xsl:if test="count($funcs[@num > $index]) > 0"> |
|
308 <xsl:call-template name="funcStruct"> |
|
309 <xsl:with-param name="funcs" select="$funcs"/> |
|
310 <xsl:with-param name="index" select="1+$index"/> |
|
311 </xsl:call-template> |
|
312 </xsl:if> |
|
313 </xsl:template> |
|
314 |
|
315 |
|
316 <xsl:template match="function"> |
|
317 <xsl:text> jvmtiError (JNICALL *</xsl:text> |
|
318 <xsl:value-of select="@id"/> |
|
319 <xsl:text>) (jvmtiEnv* env</xsl:text> |
|
320 <xsl:apply-templates select="parameters" mode="signature"/> |
|
321 <xsl:text>); |
|
322 |
|
323 </xsl:text> |
|
324 </xsl:template> |
|
325 |
|
326 <xsl:template match="category" mode="cppinline"> |
|
327 <xsl:apply-templates select="function[count(@hide)=0]" mode="cppinline"/> |
|
328 </xsl:template> |
|
329 |
|
330 <xsl:template match="function" mode="cppinline"> |
|
331 <xsl:text> |
|
332 jvmtiError </xsl:text> |
|
333 <xsl:value-of select="@id"/> |
|
334 <xsl:text>(</xsl:text> |
|
335 <xsl:apply-templates select="parameters" mode="signaturenoleadcomma"/> |
|
336 <xsl:text>) { |
|
337 return functions-></xsl:text> |
|
338 <xsl:value-of select="@id"/> |
|
339 <xsl:text>(this</xsl:text> |
|
340 <xsl:for-each select="parameters"> |
|
341 <xsl:for-each select="param"> |
|
342 <xsl:if test="@id != '...' and count(jclass/@method) = 0"> |
|
343 <xsl:text>, </xsl:text> |
|
344 <xsl:value-of select="@id"/> |
|
345 </xsl:if> |
|
346 </xsl:for-each> |
|
347 </xsl:for-each> |
|
348 <xsl:text>); |
|
349 } |
|
350 </xsl:text> |
|
351 </xsl:template> |
|
352 |
|
353 |
|
354 <xsl:template match="basetype"> |
|
355 <xsl:if test="count(definition)!=0"> |
|
356 <xsl:text> |
|
357 </xsl:text> |
|
358 <xsl:apply-templates select="definition"/> |
|
359 </xsl:if> |
|
360 </xsl:template> |
|
361 |
|
362 <xsl:template match="constants"> |
|
363 <xsl:text> |
|
364 |
|
365 /* </xsl:text> |
|
366 <xsl:value-of select="@label"/> |
|
367 <xsl:text> */ |
|
368 </xsl:text> |
|
369 <xsl:choose> |
|
370 <xsl:when test="@kind='enum'"> |
|
371 <xsl:apply-templates select="." mode="enum"/> |
|
372 </xsl:when> |
|
373 <xsl:otherwise> |
|
374 <xsl:apply-templates select="." mode="constants"/> |
|
375 </xsl:otherwise> |
|
376 </xsl:choose> |
|
377 </xsl:template> |
|
378 |
|
379 <xsl:template match="callback"> |
|
380 <xsl:text> |
|
381 typedef </xsl:text> |
|
382 <xsl:apply-templates select="child::*[position()=1]" mode="signature"/> |
|
383 <xsl:text> (JNICALL *</xsl:text> |
|
384 <xsl:value-of select="@id"/> |
|
385 <xsl:text>) |
|
386 (</xsl:text> |
|
387 <xsl:for-each select="parameters"> |
|
388 <xsl:apply-templates select="param[position()=1]" mode="signature"/> |
|
389 <xsl:for-each select="param[position()>1]"> |
|
390 <xsl:text>, </xsl:text> |
|
391 <xsl:apply-templates select="." mode="signature"/> |
|
392 </xsl:for-each> |
|
393 </xsl:for-each> |
|
394 <xsl:text>); |
|
395 </xsl:text> |
|
396 </xsl:template> |
|
397 |
|
398 <xsl:template match="capabilitiestypedef"> |
|
399 <xsl:text> |
|
400 </xsl:text> |
|
401 <xsl:apply-templates select="." mode="genstruct"/> |
|
402 <xsl:text> |
|
403 </xsl:text> |
|
404 </xsl:template> |
|
405 |
|
406 <xsl:template match="typedef" mode="early"> |
|
407 <xsl:text>struct _</xsl:text> |
|
408 <xsl:value-of select="@id"/> |
|
409 <xsl:text>; |
|
410 </xsl:text> |
|
411 <xsl:text>typedef struct _</xsl:text> |
|
412 <xsl:value-of select="@id"/> |
|
413 <xsl:text> </xsl:text> |
|
414 <xsl:value-of select="@id"/> |
|
415 <xsl:text>; |
|
416 </xsl:text> |
|
417 </xsl:template> |
|
418 |
|
419 <xsl:template match="typedef" mode="body"> |
|
420 <xsl:text>struct _</xsl:text> |
|
421 <xsl:value-of select="@id"/> |
|
422 <xsl:text> { |
|
423 </xsl:text> |
|
424 <xsl:apply-templates select="field" mode="signature"/> |
|
425 <xsl:text>}; |
|
426 </xsl:text> |
|
427 </xsl:template> |
|
428 |
|
429 <xsl:template match="uniontypedef" mode="early"> |
|
430 <xsl:text>union _</xsl:text> |
|
431 <xsl:value-of select="@id"/> |
|
432 <xsl:text>; |
|
433 </xsl:text> |
|
434 <xsl:text>typedef union _</xsl:text> |
|
435 <xsl:value-of select="@id"/> |
|
436 <xsl:text> </xsl:text> |
|
437 <xsl:value-of select="@id"/> |
|
438 <xsl:text>; |
|
439 </xsl:text> |
|
440 </xsl:template> |
|
441 |
|
442 <xsl:template match="uniontypedef" mode="body"> |
|
443 <xsl:text>union _</xsl:text> |
|
444 <xsl:value-of select="@id"/> |
|
445 <xsl:text> { |
|
446 </xsl:text> |
|
447 <xsl:apply-templates select="field" mode="signature"/> |
|
448 <xsl:text>}; |
|
449 </xsl:text> |
|
450 </xsl:template> |
|
451 |
|
452 </xsl:stylesheet> |