| <?xml version="1.0" encoding="utf-8"?> |
| <!-- |
| Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. |
| DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| |
| This code is free software; you can redistribute it and/or modify it |
| under the terms of the GNU General Public License version 2 only, as |
| published by the Free Software Foundation. |
| |
| This code is distributed in the hope that it will be useful, but WITHOUT |
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| version 2 for more details (a copy is included in the LICENSE file that |
| accompanied this code). |
| |
| You should have received a copy of the GNU General Public License version |
| 2 along with this work; if not, write to the Free Software Foundation, |
| Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| |
| Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| or visit www.oracle.com if you need additional information or have any |
| questions. |
| |
| --> |
| |
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| version="1.0"> |
| |
| <xsl:import href="jvmtiLib.xsl"/> |
| |
| <xsl:output method="text" omit-xml-declaration="yes"/> |
| |
| <xsl:template match="/"> |
| <xsl:apply-templates select="specification"/> |
| </xsl:template> |
| |
| <xsl:template match="specification"> |
| |
| <xsl:call-template name="intro"/> |
| |
| <xsl:text>/* Derived Base Types */ |
| </xsl:text> |
| <xsl:apply-templates select="//basetype"/> |
| |
| <xsl:text> |
| |
| /* Constants */ |
| </xsl:text> |
| <xsl:apply-templates select="//constants"/> |
| |
| <xsl:text> |
| |
| /* Errors */ |
| |
| typedef enum { |
| </xsl:text> |
| <xsl:for-each select="//errorid"> |
| <xsl:sort select="@num" data-type="number"/> |
| <xsl:apply-templates select="." mode="enum"/> |
| <xsl:text>, |
| </xsl:text> |
| <xsl:if test="position() = last()"> |
| <xsl:text> JVMTI_ERROR_MAX = </xsl:text> |
| <xsl:value-of select="@num"/> |
| </xsl:if> |
| </xsl:for-each> |
| <xsl:text> |
| } jvmtiError; |
| </xsl:text> |
| <xsl:apply-templates select="eventsection" mode="enum"/> |
| |
| <xsl:text> |
| /* Pre-Declarations */ |
| </xsl:text> |
| <xsl:apply-templates select="//typedef|//uniontypedef" mode="early"/> |
| |
| <xsl:text> |
| /* Function Types */ |
| </xsl:text> |
| <xsl:apply-templates select="//callback"/> |
| |
| <xsl:text> |
| |
| /* Structure Types */ |
| </xsl:text> |
| <xsl:apply-templates select="//typedef|//uniontypedef" mode="body"/> |
| <xsl:apply-templates select="//capabilitiestypedef"/> |
| |
| <xsl:apply-templates select="eventsection" mode="body"/> |
| |
| <xsl:apply-templates select="functionsection"/> |
| |
| <xsl:call-template name="outro"/> |
| |
| </xsl:template> |
| |
| <xsl:template name="intro"> |
| <xsl:call-template name="include_GPL_CP_Header"/> |
| <xsl:text> |
| /* Include file for the Java(tm) Virtual Machine Tool Interface */ |
| |
| #ifndef _JAVA_JVMTI_H_ |
| #define _JAVA_JVMTI_H_ |
| |
| #include "jni.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| enum { |
| JVMTI_VERSION_1 = 0x30010000, |
| JVMTI_VERSION_1_0 = 0x30010000, |
| JVMTI_VERSION_1_1 = 0x30010100, |
| JVMTI_VERSION_1_2 = 0x30010200, |
| JVMTI_VERSION_9 = 0x30090000, |
| |
| JVMTI_VERSION = 0x30000000 + (</xsl:text> |
| <xsl:value-of select="//specification/@majorversion"/> |
| <xsl:text> * 0x10000) + (</xsl:text> |
| <xsl:value-of select="//specification/@minorversion"/> |
| <xsl:text> * 0x100)</xsl:text> |
| <xsl:variable name="micro"> |
| <xsl:call-template name="microversion"/> |
| </xsl:variable> |
| <xsl:choose> |
| <xsl:when test="string($micro)='dev'"> |
| <xsl:text> /* checked out - </xsl:text> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:text> + </xsl:text> |
| <xsl:value-of select="$micro"/> |
| <xsl:text> /* </xsl:text> |
| </xsl:otherwise> |
| </xsl:choose> |
| <xsl:text>version: </xsl:text> |
| <xsl:call-template name="showversion"/> |
| <xsl:text> */ |
| }; |
| |
| JNIEXPORT jint JNICALL |
| Agent_OnLoad(JavaVM *vm, char *options, void *reserved); |
| |
| JNIEXPORT jint JNICALL |
| Agent_OnAttach(JavaVM* vm, char* options, void* reserved); |
| |
| JNIEXPORT void JNICALL |
| Agent_OnUnload(JavaVM *vm); |
| |
| /* Forward declaration of the environment */ |
| |
| struct _jvmtiEnv; |
| |
| struct jvmtiInterface_1_; |
| |
| #ifdef __cplusplus |
| typedef _jvmtiEnv jvmtiEnv; |
| #else |
| typedef const struct jvmtiInterface_1_ *jvmtiEnv; |
| #endif /* __cplusplus */ |
| |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template name="outro"> |
| <xsl:text> |
| |
| #ifdef __cplusplus |
| } /* extern "C" */ |
| #endif /* __cplusplus */ |
| |
| #endif /* !_JAVA_JVMTI_H_ */ |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="eventsection" mode="enum"> |
| <xsl:text> |
| /* Event IDs */ |
| |
| typedef enum { |
| </xsl:text> |
| <xsl:for-each select="event"> |
| <xsl:sort select="@num" data-type="number"/> |
| <xsl:if test="position()=1"> |
| <xsl:text> JVMTI_MIN_EVENT_TYPE_VAL = </xsl:text> |
| <xsl:value-of select="@num"/> |
| <xsl:text>, |
| </xsl:text> |
| </xsl:if> |
| <xsl:apply-templates select="." mode="enum"/> |
| <xsl:text>, |
| </xsl:text> |
| <xsl:if test="position()=last()"> |
| <xsl:text> JVMTI_MAX_EVENT_TYPE_VAL = </xsl:text> |
| <xsl:value-of select="@num"/> |
| </xsl:if> |
| </xsl:for-each> |
| <xsl:text> |
| } jvmtiEvent; |
| |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="eventsection" mode="body"> |
| <xsl:text> |
| |
| /* Event Definitions */ |
| |
| typedef void (JNICALL *jvmtiEventReserved)(void); |
| |
| </xsl:text> |
| <xsl:apply-templates select="event" mode="definition"> |
| <xsl:sort select="@id"/> |
| </xsl:apply-templates> |
| |
| <xsl:text> |
| /* Event Callback Structure */ |
| |
| typedef struct { |
| </xsl:text> |
| <xsl:call-template name="eventStruct"> |
| <xsl:with-param name="events" select="event"/> |
| <xsl:with-param name="index" select="0"/> |
| <xsl:with-param name="started" select="false"/> |
| <xsl:with-param name="comment" select="'Yes'"/> |
| </xsl:call-template> |
| <xsl:text>} jvmtiEventCallbacks; |
| </xsl:text> |
| |
| </xsl:template> |
| |
| |
| <xsl:template match="event" mode="definition"> |
| <xsl:text> |
| typedef void (JNICALL *jvmtiEvent</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>) |
| (jvmtiEnv *jvmti_env</xsl:text> |
| <xsl:apply-templates select="parameters" mode="signature"> |
| <xsl:with-param name="comma"> |
| <xsl:text>, |
| </xsl:text> |
| </xsl:with-param> |
| </xsl:apply-templates> |
| <xsl:text>); |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="functionsection"> |
| <xsl:text> |
| |
| /* Function Interface */ |
| |
| typedef struct jvmtiInterface_1_ { |
| |
| </xsl:text> |
| <xsl:call-template name="funcStruct"> |
| <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/> |
| <xsl:with-param name="index" select="1"/> |
| </xsl:call-template> |
| |
| <xsl:text>} jvmtiInterface_1; |
| |
| struct _jvmtiEnv { |
| const struct jvmtiInterface_1_ *functions; |
| #ifdef __cplusplus |
| |
| </xsl:text> |
| <xsl:apply-templates select="category" mode="cppinline"/> |
| <xsl:text> |
| #endif /* __cplusplus */ |
| }; |
| </xsl:text> |
| |
| </xsl:template> |
| |
| <xsl:template name="funcStruct"> |
| <xsl:param name="funcs"/> |
| <xsl:param name="index"/> |
| <xsl:variable name="thisFunction" select="$funcs[@num=$index]"/> |
| <xsl:text> /* </xsl:text> |
| <xsl:number value="$index" format=" 1"/> |
| <xsl:text> : </xsl:text> |
| <xsl:choose> |
| <xsl:when test="count($thisFunction)=1"> |
| <xsl:value-of select="$thisFunction/synopsis"/> |
| <xsl:text> */ |
| jvmtiError (JNICALL *</xsl:text> |
| <xsl:value-of select="$thisFunction/@id"/> |
| <xsl:text>) (jvmtiEnv* env</xsl:text> |
| <xsl:apply-templates select="$thisFunction/parameters" mode="signature"> |
| <xsl:with-param name="comma"> |
| <xsl:text>, |
| </xsl:text> |
| </xsl:with-param> |
| </xsl:apply-templates> |
| <xsl:text>)</xsl:text> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:text> RESERVED */ |
| void *reserved</xsl:text> |
| <xsl:value-of select="$index"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| <xsl:text>; |
| |
| </xsl:text> |
| <xsl:if test="count($funcs[@num > $index]) > 0"> |
| <xsl:call-template name="funcStruct"> |
| <xsl:with-param name="funcs" select="$funcs"/> |
| <xsl:with-param name="index" select="1+$index"/> |
| </xsl:call-template> |
| </xsl:if> |
| </xsl:template> |
| |
| |
| <xsl:template match="function"> |
| <xsl:text> jvmtiError (JNICALL *</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>) (jvmtiEnv* env</xsl:text> |
| <xsl:apply-templates select="parameters" mode="signature"/> |
| <xsl:text>); |
| |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="category" mode="cppinline"> |
| <xsl:apply-templates select="function[count(@hide)=0]" mode="cppinline"/> |
| </xsl:template> |
| |
| <xsl:template match="function" mode="cppinline"> |
| <xsl:text> |
| jvmtiError </xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>(</xsl:text> |
| <xsl:apply-templates select="parameters" mode="signaturenoleadcomma"/> |
| <xsl:text>) { |
| return functions-></xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>(this</xsl:text> |
| <xsl:for-each select="parameters"> |
| <xsl:for-each select="param"> |
| <xsl:if test="@id != '...' and count(jclass/@method) = 0"> |
| <xsl:text>, </xsl:text> |
| <xsl:value-of select="@id"/> |
| </xsl:if> |
| </xsl:for-each> |
| </xsl:for-each> |
| <xsl:text>); |
| } |
| </xsl:text> |
| </xsl:template> |
| |
| |
| <xsl:template match="basetype"> |
| <xsl:if test="count(definition)!=0"> |
| <xsl:text> |
| </xsl:text> |
| <xsl:apply-templates select="definition"/> |
| </xsl:if> |
| </xsl:template> |
| |
| <xsl:template match="constants"> |
| <xsl:text> |
| |
| /* </xsl:text> |
| <xsl:value-of select="@label"/> |
| <xsl:text> */ |
| </xsl:text> |
| <xsl:choose> |
| <xsl:when test="@kind='enum'"> |
| <xsl:apply-templates select="." mode="enum"/> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:apply-templates select="." mode="constants"/> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:template> |
| |
| <xsl:template match="callback"> |
| <xsl:text> |
| typedef </xsl:text> |
| <xsl:apply-templates select="child::*[position()=1]" mode="signature"/> |
| <xsl:text> (JNICALL *</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>) |
| (</xsl:text> |
| <xsl:for-each select="parameters"> |
| <xsl:apply-templates select="param[position()=1]" mode="signature"/> |
| <xsl:for-each select="param[position()>1]"> |
| <xsl:text>, </xsl:text> |
| <xsl:apply-templates select="." mode="signature"/> |
| </xsl:for-each> |
| </xsl:for-each> |
| <xsl:text>); |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="capabilitiestypedef"> |
| <xsl:text> |
| </xsl:text> |
| <xsl:apply-templates select="." mode="genstruct"/> |
| <xsl:text> |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="typedef" mode="early"> |
| <xsl:text>struct _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>; |
| </xsl:text> |
| <xsl:text>typedef struct _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>; |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="typedef" mode="body"> |
| <xsl:text>struct _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text> { |
| </xsl:text> |
| <xsl:apply-templates select="field" mode="signature"/> |
| <xsl:text>}; |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="uniontypedef" mode="early"> |
| <xsl:text>union _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>; |
| </xsl:text> |
| <xsl:text>typedef union _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text> </xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text>; |
| </xsl:text> |
| </xsl:template> |
| |
| <xsl:template match="uniontypedef" mode="body"> |
| <xsl:text>union _</xsl:text> |
| <xsl:value-of select="@id"/> |
| <xsl:text> { |
| </xsl:text> |
| <xsl:apply-templates select="field" mode="signature"/> |
| <xsl:text>}; |
| </xsl:text> |
| </xsl:template> |
| |
| </xsl:stylesheet> |