3789983e89
Reviewed-by: darcy, ihse
454 lines
11 KiB
XML
454 lines
11 KiB
XML
<?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>
|