1<?xml version="1.0" encoding="utf-8"?>
2<!--
3 Copyright (c) 2002, 2019, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 or visit www.oracle.com if you need additional information or have any
22 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
55typedef 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="include_GPL_CP_Header"/>
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
108extern "C" {
109#endif
110
111enum {
112    JVMTI_VERSION_1   = 0x30010000,
113    JVMTI_VERSION_1_0 = 0x30010000,
114    JVMTI_VERSION_1_1 = 0x30010100,
115    JVMTI_VERSION_1_2 = 0x30010200,
116    JVMTI_VERSION_9   = 0x30090000,
117    JVMTI_VERSION_11  = 0x300B0000,
118
119    JVMTI_VERSION = 0x30000000 + (</xsl:text>
120  <xsl:value-of select="$majorversion"/>
121  <xsl:text> * 0x10000) + (</xsl:text>
122  <!-- Now minorversion is always 0 -->
123  <xsl:text> 0 * 0x100)</xsl:text>
124  <xsl:variable name="micro">
125    <xsl:call-template name="microversion"/>
126  </xsl:variable>
127  <xsl:choose>
128    <xsl:when test="string($micro)='dev'">
129      <xsl:text>  /* checked out - </xsl:text>
130    </xsl:when>
131    <xsl:otherwise>
132      <xsl:text> + </xsl:text>
133      <xsl:value-of select="$micro"/>
134      <xsl:text>  /* </xsl:text>
135    </xsl:otherwise>
136  </xsl:choose>
137  <xsl:text>version: </xsl:text>
138  <xsl:call-template name="showversion"/>
139  <xsl:text> */
140};
141
142JNIEXPORT jint JNICALL
143Agent_OnLoad(JavaVM *vm, char *options, void *reserved);
144
145JNIEXPORT jint JNICALL
146Agent_OnAttach(JavaVM* vm, char* options, void* reserved);
147
148JNIEXPORT void JNICALL
149Agent_OnUnload(JavaVM *vm);
150
151    /* Forward declaration of the environment */
152
153struct _jvmtiEnv;
154
155struct jvmtiInterface_1_;
156
157#ifdef __cplusplus
158typedef _jvmtiEnv jvmtiEnv;
159#else
160typedef const struct jvmtiInterface_1_ *jvmtiEnv;
161#endif /* __cplusplus */
162
163</xsl:text>
164  </xsl:template>
165
166  <xsl:template name="outro">
167  <xsl:text>
168
169#ifdef __cplusplus
170} /* extern "C" */
171#endif /* __cplusplus */
172
173#endif /* !_JAVA_JVMTI_H_ */
174</xsl:text>
175</xsl:template>
176
177<xsl:template match="eventsection" mode="enum">
178  <xsl:text>
179    /* Event IDs */
180
181typedef enum {
182</xsl:text>
183     <xsl:for-each select="event">
184       <xsl:sort select="@num" data-type="number"/>
185       <xsl:if test="position()=1">
186         <xsl:text>    JVMTI_MIN_EVENT_TYPE_VAL = </xsl:text>
187         <xsl:value-of select="@num"/>
188         <xsl:text>,
189</xsl:text>
190       </xsl:if>
191       <xsl:apply-templates select="." mode="enum"/>
192       <xsl:text>,
193</xsl:text>
194       <xsl:if test="position()=last()">
195         <xsl:text>    JVMTI_MAX_EVENT_TYPE_VAL = </xsl:text>
196         <xsl:value-of select="@num"/>
197       </xsl:if>
198     </xsl:for-each>
199    <xsl:text>
200} jvmtiEvent;
201
202</xsl:text>
203</xsl:template>
204
205<xsl:template match="eventsection" mode="body">
206  <xsl:text>
207
208    /* Event Definitions */
209
210typedef void (JNICALL *jvmtiEventReserved)(void);
211
212</xsl:text>
213  <xsl:apply-templates select="event" mode="definition">
214    <xsl:sort select="@id"/>
215  </xsl:apply-templates>
216
217  <xsl:text>
218    /* Event Callback Structure */
219
220typedef struct {
221</xsl:text>
222  <xsl:call-template name="eventStruct">
223    <xsl:with-param name="events" select="event"/>
224    <xsl:with-param name="index" select="0"/>
225    <xsl:with-param name="started" select="false"/>
226    <xsl:with-param name="comment" select="'Yes'"/>
227  </xsl:call-template>
228  <xsl:text>} jvmtiEventCallbacks;
229</xsl:text>
230
231</xsl:template>
232
233
234<xsl:template match="event" mode="definition">
235  <xsl:text>
236typedef void (JNICALL *jvmtiEvent</xsl:text>
237  <xsl:value-of select="@id"/>
238  <xsl:text>)
239    (jvmtiEnv *jvmti_env</xsl:text>
240  <xsl:apply-templates select="parameters" mode="signature">
241    <xsl:with-param name="comma">
242      <xsl:text>,
243     </xsl:text>
244    </xsl:with-param>
245   </xsl:apply-templates>
246 <xsl:text>);
247</xsl:text>
248</xsl:template>
249
250<xsl:template match="functionsection">
251   <xsl:text>
252
253    /* Function Interface */
254
255typedef struct jvmtiInterface_1_ {
256
257</xsl:text>
258  <xsl:call-template name="funcStruct">
259    <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/>
260    <xsl:with-param name="index" select="1"/>
261  </xsl:call-template>
262
263  <xsl:text>} jvmtiInterface_1;
264
265struct _jvmtiEnv {
266    const struct jvmtiInterface_1_ *functions;
267#ifdef __cplusplus
268
269</xsl:text>
270  <xsl:apply-templates select="category" mode="cppinline"/>
271  <xsl:text>
272#endif /* __cplusplus */
273};
274</xsl:text>
275
276</xsl:template>
277
278<xsl:template name="funcStruct">
279  <xsl:param name="funcs"/>
280  <xsl:param name="index"/>
281  <xsl:variable name="thisFunction" select="$funcs[@num=$index]"/>
282  <xsl:text>  /* </xsl:text>
283  <xsl:number value="$index" format="  1"/>
284  <xsl:text> : </xsl:text>
285  <xsl:choose>
286    <xsl:when test="count($thisFunction)=1">
287      <xsl:value-of select="$thisFunction/synopsis"/>
288      <xsl:text> */
289  jvmtiError (JNICALL *</xsl:text>
290      <xsl:value-of select="$thisFunction/@id"/>
291      <xsl:text>) (jvmtiEnv* env</xsl:text>
292      <xsl:apply-templates select="$thisFunction/parameters" mode="signature">
293        <xsl:with-param name="comma">
294          <xsl:text>,
295    </xsl:text>
296        </xsl:with-param>
297      </xsl:apply-templates>
298      <xsl:text>)</xsl:text>
299    </xsl:when>
300    <xsl:otherwise>
301      <xsl:text> RESERVED */
302  void *reserved</xsl:text>
303      <xsl:value-of select="$index"/>
304    </xsl:otherwise>
305  </xsl:choose>
306  <xsl:text>;
307
308</xsl:text>
309  <xsl:if test="count($funcs[@num &gt; $index]) &gt; 0">
310    <xsl:call-template name="funcStruct">
311      <xsl:with-param name="funcs" select="$funcs"/>
312      <xsl:with-param name="index" select="1+$index"/>
313    </xsl:call-template>
314  </xsl:if>
315</xsl:template>
316
317
318<xsl:template match="function">
319  <xsl:text>  jvmtiError (JNICALL *</xsl:text>
320  <xsl:value-of select="@id"/>
321  <xsl:text>) (jvmtiEnv* env</xsl:text>
322  <xsl:apply-templates select="parameters" mode="signature"/>
323  <xsl:text>);
324
325</xsl:text>
326</xsl:template>
327
328<xsl:template match="category" mode="cppinline">
329    <xsl:apply-templates select="function[count(@hide)=0]" mode="cppinline"/>
330</xsl:template>
331
332<xsl:template match="function" mode="cppinline">
333  <xsl:text>
334  jvmtiError </xsl:text>
335  <xsl:value-of select="@id"/>
336  <xsl:text>(</xsl:text>
337  <xsl:apply-templates select="parameters" mode="signaturenoleadcomma"/>
338  <xsl:text>) {
339    return functions-></xsl:text>
340  <xsl:value-of select="@id"/>
341  <xsl:text>(this</xsl:text>
342  <xsl:for-each select="parameters">
343    <xsl:for-each select="param">
344      <xsl:if test="@id != '...' and count(jclass/@method) = 0">
345        <xsl:text>, </xsl:text>
346        <xsl:value-of select="@id"/>
347      </xsl:if>
348    </xsl:for-each>
349  </xsl:for-each>
350  <xsl:text>);
351  }
352</xsl:text>
353</xsl:template>
354
355
356  <xsl:template match="basetype">
357    <xsl:if test="count(definition)!=0">
358      <xsl:text>
359</xsl:text>
360      <xsl:apply-templates select="definition"/>
361    </xsl:if>
362  </xsl:template>
363
364  <xsl:template match="constants">
365    <xsl:text>
366
367    /* </xsl:text>
368    <xsl:value-of select="@label"/>
369    <xsl:text> */
370</xsl:text>
371    <xsl:choose>
372      <xsl:when test="@kind='enum'">
373        <xsl:apply-templates select="." mode="enum"/>
374      </xsl:when>
375      <xsl:otherwise>
376        <xsl:apply-templates select="." mode="constants"/>
377      </xsl:otherwise>
378    </xsl:choose>
379  </xsl:template>
380
381<xsl:template match="callback">
382      <xsl:text>
383typedef </xsl:text>
384      <xsl:apply-templates select="child::*[position()=1]" mode="signature"/>
385      <xsl:text> (JNICALL *</xsl:text>
386      <xsl:value-of select="@id"/>
387      <xsl:text>)
388    (</xsl:text>
389      <xsl:for-each select="parameters">
390        <xsl:apply-templates select="param[position()=1]" mode="signature"/>
391        <xsl:for-each select="param[position()>1]">
392          <xsl:text>, </xsl:text>
393          <xsl:apply-templates select="." mode="signature"/>
394        </xsl:for-each>
395      </xsl:for-each>
396      <xsl:text>);
397</xsl:text>
398</xsl:template>
399
400<xsl:template match="capabilitiestypedef">
401  <xsl:text>
402</xsl:text>
403  <xsl:apply-templates select="." mode="genstruct"/>
404  <xsl:text>
405</xsl:text>
406</xsl:template>
407
408<xsl:template match="typedef" mode="early">
409  <xsl:text>struct _</xsl:text>
410  <xsl:value-of select="@id"/>
411  <xsl:text>;
412</xsl:text>
413  <xsl:text>typedef struct _</xsl:text>
414  <xsl:value-of select="@id"/>
415  <xsl:text> </xsl:text>
416  <xsl:value-of select="@id"/>
417  <xsl:text>;
418</xsl:text>
419</xsl:template>
420
421<xsl:template match="typedef" mode="body">
422  <xsl:text>struct _</xsl:text>
423  <xsl:value-of select="@id"/>
424  <xsl:text> {
425</xsl:text>
426<xsl:apply-templates select="field" mode="signature"/>
427  <xsl:text>};
428</xsl:text>
429</xsl:template>
430
431<xsl:template match="uniontypedef" mode="early">
432  <xsl:text>union _</xsl:text>
433  <xsl:value-of select="@id"/>
434  <xsl:text>;
435</xsl:text>
436  <xsl:text>typedef union _</xsl:text>
437  <xsl:value-of select="@id"/>
438  <xsl:text> </xsl:text>
439  <xsl:value-of select="@id"/>
440  <xsl:text>;
441</xsl:text>
442</xsl:template>
443
444<xsl:template match="uniontypedef" mode="body">
445  <xsl:text>union _</xsl:text>
446  <xsl:value-of select="@id"/>
447  <xsl:text> {
448</xsl:text>
449<xsl:apply-templates select="field" mode="signature"/>
450  <xsl:text>};
451</xsl:text>
452</xsl:template>
453
454</xsl:stylesheet>
455