Path: blob/master/src/hotspot/share/prims/jvmtiH.xsl
41145 views
<?xml version="1.0" encoding="utf-8"?>1<!--2Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved.3DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.45This code is free software; you can redistribute it and/or modify it6under the terms of the GNU General Public License version 2 only, as7published by the Free Software Foundation.89This code is distributed in the hope that it will be useful, but WITHOUT10ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or11FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License12version 2 for more details (a copy is included in the LICENSE file that13accompanied this code).1415You should have received a copy of the GNU General Public License version162 along with this work; if not, write to the Free Software Foundation,17Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.1819Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA20or visit www.oracle.com if you need additional information or have any21questions.2223-->2425<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"26version="1.0">2728<xsl:import href="jvmtiLib.xsl"/>2930<xsl:output method="text" omit-xml-declaration="yes"/>3132<xsl:template match="/">33<xsl:apply-templates select="specification"/>34</xsl:template>3536<xsl:template match="specification">3738<xsl:call-template name="intro"/>3940<xsl:text>/* Derived Base Types */41</xsl:text>42<xsl:apply-templates select="//basetype"/>4344<xsl:text>4546/* Constants */47</xsl:text>48<xsl:apply-templates select="//constants"/>4950<xsl:text>5152/* Errors */5354typedef enum {55</xsl:text>56<xsl:for-each select="//errorid">57<xsl:sort select="@num" data-type="number"/>58<xsl:apply-templates select="." mode="enum"/>59<xsl:text>,60</xsl:text>61<xsl:if test="position() = last()">62<xsl:text> JVMTI_ERROR_MAX = </xsl:text>63<xsl:value-of select="@num"/>64</xsl:if>65</xsl:for-each>66<xsl:text>67} jvmtiError;68</xsl:text>69<xsl:apply-templates select="eventsection" mode="enum"/>7071<xsl:text>72/* Pre-Declarations */73</xsl:text>74<xsl:apply-templates select="//typedef|//uniontypedef" mode="early"/>7576<xsl:text>77/* Function Types */78</xsl:text>79<xsl:apply-templates select="//callback"/>8081<xsl:text>8283/* Structure Types */84</xsl:text>85<xsl:apply-templates select="//typedef|//uniontypedef" mode="body"/>86<xsl:apply-templates select="//capabilitiestypedef"/>8788<xsl:apply-templates select="eventsection" mode="body"/>8990<xsl:apply-templates select="functionsection"/>9192<xsl:call-template name="outro"/>9394</xsl:template>9596<xsl:template name="intro">97<xsl:call-template name="include_GPL_CP_Header"/>98<xsl:text>99/* Include file for the Java(tm) Virtual Machine Tool Interface */100101#ifndef _JAVA_JVMTI_H_102#define _JAVA_JVMTI_H_103104#include "jni.h"105106#ifdef __cplusplus107extern "C" {108#endif109110enum {111JVMTI_VERSION_1 = 0x30010000,112JVMTI_VERSION_1_0 = 0x30010000,113JVMTI_VERSION_1_1 = 0x30010100,114JVMTI_VERSION_1_2 = 0x30010200,115JVMTI_VERSION_9 = 0x30090000,116JVMTI_VERSION_11 = 0x300B0000,117118JVMTI_VERSION = 0x30000000 + (</xsl:text>119<xsl:value-of select="$majorversion"/>120<xsl:text> * 0x10000) + (</xsl:text>121<!-- Now minorversion is always 0 -->122<xsl:text> 0 * 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};140141JNIEXPORT jint JNICALL142Agent_OnLoad(JavaVM *vm, char *options, void *reserved);143144JNIEXPORT jint JNICALL145Agent_OnAttach(JavaVM* vm, char* options, void* reserved);146147JNIEXPORT void JNICALL148Agent_OnUnload(JavaVM *vm);149150/* Forward declaration of the environment */151152struct _jvmtiEnv;153154struct jvmtiInterface_1_;155156#ifdef __cplusplus157typedef _jvmtiEnv jvmtiEnv;158#else159typedef const struct jvmtiInterface_1_ *jvmtiEnv;160#endif /* __cplusplus */161162</xsl:text>163</xsl:template>164165<xsl:template name="outro">166<xsl:text>167168#ifdef __cplusplus169} /* extern "C" */170#endif /* __cplusplus */171172#endif /* !_JAVA_JVMTI_H_ */173</xsl:text>174</xsl:template>175176<xsl:template match="eventsection" mode="enum">177<xsl:text>178/* Event IDs */179180typedef 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;200201</xsl:text>202</xsl:template>203204<xsl:template match="eventsection" mode="body">205<xsl:text>206207/* Event Definitions */208209typedef void (JNICALL *jvmtiEventReserved)(void);210211</xsl:text>212<xsl:apply-templates select="event" mode="definition">213<xsl:sort select="@id"/>214</xsl:apply-templates>215216<xsl:text>217/* Event Callback Structure */218219typedef 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>229230</xsl:template>231232233<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>248249<xsl:template match="functionsection">250<xsl:text>251252/* Function Interface */253254typedef struct jvmtiInterface_1_ {255256</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>261262<xsl:text>} jvmtiInterface_1;263264struct _jvmtiEnv {265const struct jvmtiInterface_1_ *functions;266#ifdef __cplusplus267268</xsl:text>269<xsl:apply-templates select="category" mode="cppinline"/>270<xsl:text>271#endif /* __cplusplus */272};273</xsl:text>274275</xsl:template>276277<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> */288jvmtiError (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 */301void *reserved</xsl:text>302<xsl:value-of select="$index"/>303</xsl:otherwise>304</xsl:choose>305<xsl:text>;306307</xsl:text>308<xsl:if test="count($funcs[@num > $index]) > 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>315316317<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>);323324</xsl:text>325</xsl:template>326327<xsl:template match="category" mode="cppinline">328<xsl:apply-templates select="function[count(@hide)=0]" mode="cppinline"/>329</xsl:template>330331<xsl:template match="function" mode="cppinline">332<xsl:text>333jvmtiError </xsl:text>334<xsl:value-of select="@id"/>335<xsl:text>(</xsl:text>336<xsl:apply-templates select="parameters" mode="signaturenoleadcomma"/>337<xsl:text>) {338return 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>353354355<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>362363<xsl:template match="constants">364<xsl:text>365366/* </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>379380<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>398399<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>406407<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>419420<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>429430<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>442443<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>452453</xsl:stylesheet>454455456