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