src/share/vm/prims/jvmtiH.xsl

Wed, 08 Oct 2008 08:10:51 -0700

author
ksrini
date
Wed, 08 Oct 2008 08:10:51 -0700
changeset 823
f008d3631bd1
parent 435
a61af66fc99e
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6755845: JVM_FindClassFromBoot triggers assertions
Summary: Fixes assertions caused by one jvm_entry calling another, solved by refactoring code and modified gamma test.
Reviewed-by: dholmes, xlu

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!--
     3  Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
     4  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     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.
    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).
    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.
    20  Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    21  CA 95054 USA or visit www.sun.com if you need additional information or
    22  have any questions.
    24 -->
    26 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    27                 version="1.0">
    29   <xsl:import href="jvmtiLib.xsl"/>
    31   <xsl:output method="text" omit-xml-declaration="yes"/>
    33   <xsl:template match="/">
    34     <xsl:apply-templates select="specification"/>
    35   </xsl:template>
    37   <xsl:template match="specification">
    39     <xsl:call-template name="intro"/>
    41     <xsl:text>/* Derived Base Types */
    42 </xsl:text>
    43     <xsl:apply-templates select="//basetype"/>
    45     <xsl:text>
    47     /* Constants */
    48 </xsl:text>
    49     <xsl:apply-templates select="//constants"/>
    51     <xsl:text>
    53     /* Errors */
    55 typedef 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"/>
    72     <xsl:text>
    73     /* Pre-Declarations */
    74 </xsl:text>
    75 <xsl:apply-templates select="//typedef|//uniontypedef" mode="early"/>
    77     <xsl:text>
    78     /* Function Types */
    79 </xsl:text>
    80     <xsl:apply-templates select="//callback"/>
    82     <xsl:text>
    84     /* Structure Types */
    85 </xsl:text>
    86     <xsl:apply-templates select="//typedef|//uniontypedef" mode="body"/>
    87     <xsl:apply-templates select="//capabilitiestypedef"/>
    89     <xsl:apply-templates select="eventsection" mode="body"/>
    91     <xsl:apply-templates select="functionsection"/>
    93     <xsl:call-template name="outro"/>
    95   </xsl:template>
    97   <xsl:template name="intro">
    98   <xsl:call-template name="includeHeader"/>
    99   <xsl:text>
   100     /* Include file for the Java(tm) Virtual Machine Tool Interface */
   102 #ifndef _JAVA_JVMTI_H_
   103 #define _JAVA_JVMTI_H_
   105 #include "jni.h"
   107 #ifdef __cplusplus
   108 extern "C" {
   109 #endif
   111 enum {
   112     JVMTI_VERSION_1   = 0x30010000,
   113     JVMTI_VERSION_1_0 = 0x30010000,
   114     JVMTI_VERSION_1_1 = 0x30010100,
   116     JVMTI_VERSION = 0x30000000 + (</xsl:text>
   117   <xsl:value-of select="//specification/@majorversion"/>
   118   <xsl:text> * 0x10000) + (</xsl:text>
   119   <xsl:value-of select="//specification/@minorversion"/>
   120   <xsl:text> * 0x100)</xsl:text>
   121   <xsl:variable name="micro">
   122     <xsl:call-template name="microversion"/>
   123   </xsl:variable>
   124   <xsl:choose>
   125     <xsl:when test="string($micro)='dev'">
   126       <xsl:text>  /* checked out - </xsl:text>
   127     </xsl:when>
   128     <xsl:otherwise>
   129       <xsl:text> + </xsl:text>
   130       <xsl:value-of select="$micro"/>
   131       <xsl:text>  /* </xsl:text>
   132     </xsl:otherwise>
   133   </xsl:choose>
   134   <xsl:text>version: </xsl:text>
   135   <xsl:call-template name="showversion"/>
   136   <xsl:text> */
   137 };
   139 JNIEXPORT jint JNICALL 
   140 Agent_OnLoad(JavaVM *vm, char *options, void *reserved);
   142 JNIEXPORT jint JNICALL
   143 Agent_OnAttach(JavaVM* vm, char* options, void* reserved);
   145 JNIEXPORT void JNICALL 
   146 Agent_OnUnload(JavaVM *vm);
   148     /* Forward declaration of the environment */
   150 struct _jvmtiEnv;
   152 struct jvmtiInterface_1_;
   154 #ifdef __cplusplus
   155 typedef _jvmtiEnv jvmtiEnv;
   156 #else
   157 typedef const struct jvmtiInterface_1_ *jvmtiEnv;
   158 #endif /* __cplusplus */
   160 </xsl:text>
   161   </xsl:template>
   163   <xsl:template name="outro">
   164   <xsl:text>
   166 #ifdef __cplusplus
   167 } /* extern "C" */
   168 #endif /* __cplusplus */
   170 #endif /* !_JAVA_JVMTI_H_ */
   172 </xsl:text>
   173 </xsl:template>
   175 <xsl:template match="eventsection" mode="enum">
   176   <xsl:text>
   177     /* Event IDs */
   179 typedef enum {
   180 </xsl:text>
   181      <xsl:for-each select="event">
   182        <xsl:sort select="@num" data-type="number"/>
   183        <xsl:if test="position()=1">
   184          <xsl:text>    JVMTI_MIN_EVENT_TYPE_VAL = </xsl:text>
   185          <xsl:value-of select="@num"/>
   186          <xsl:text>,
   187 </xsl:text>
   188        </xsl:if>
   189        <xsl:apply-templates select="." mode="enum"/>
   190        <xsl:text>,
   191 </xsl:text>
   192        <xsl:if test="position()=last()">
   193          <xsl:text>    JVMTI_MAX_EVENT_TYPE_VAL = </xsl:text>
   194          <xsl:value-of select="@num"/>
   195        </xsl:if>
   196      </xsl:for-each>
   197     <xsl:text>
   198 } jvmtiEvent;
   200 </xsl:text>
   201 </xsl:template>
   203 <xsl:template match="eventsection" mode="body">
   204   <xsl:text>
   206     /* Event Definitions */
   208 typedef void (JNICALL *jvmtiEventReserved)(void);
   210 </xsl:text>
   211   <xsl:apply-templates select="event" mode="definition">
   212     <xsl:sort select="@id"/>
   213   </xsl:apply-templates>
   215   <xsl:text>
   216     /* Event Callback Structure */
   218 typedef struct {
   219 </xsl:text>
   220   <xsl:call-template name="eventStruct">
   221     <xsl:with-param name="events" select="event"/>
   222     <xsl:with-param name="index" select="0"/>
   223     <xsl:with-param name="started" select="false"/>
   224     <xsl:with-param name="comment" select="'Yes'"/>
   225   </xsl:call-template>
   226   <xsl:text>} jvmtiEventCallbacks;
   227 </xsl:text>
   229 </xsl:template>
   232 <xsl:template match="event" mode="definition">
   233   <xsl:text>
   234 typedef void (JNICALL *jvmtiEvent</xsl:text>
   235   <xsl:value-of select="@id"/>
   236   <xsl:text>)
   237     (jvmtiEnv *jvmti_env</xsl:text>
   238   <xsl:apply-templates select="parameters" mode="signature">
   239     <xsl:with-param name="comma">
   240       <xsl:text>, 
   241      </xsl:text>
   242     </xsl:with-param>
   243    </xsl:apply-templates>
   244  <xsl:text>);
   245 </xsl:text>
   246 </xsl:template>
   248 <xsl:template match="functionsection">
   249    <xsl:text>
   251     /* Function Interface */
   253 typedef struct jvmtiInterface_1_ {
   255 </xsl:text>
   256   <xsl:call-template name="funcStruct">
   257     <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/>
   258     <xsl:with-param name="index" select="1"/>
   259   </xsl:call-template>
   261   <xsl:text>} jvmtiInterface_1;
   263 struct _jvmtiEnv {
   264     const struct jvmtiInterface_1_ *functions;
   265 #ifdef __cplusplus
   267 </xsl:text>
   268   <xsl:apply-templates select="category" mode="cppinline"/>
   269   <xsl:text>
   270 #endif /* __cplusplus */
   271 };
   272 </xsl:text>
   274 </xsl:template>
   276 <xsl:template name="funcStruct">
   277   <xsl:param name="funcs"/>
   278   <xsl:param name="index"/>
   279   <xsl:variable name="thisFunction" select="$funcs[@num=$index]"/>
   280   <xsl:text>  /* </xsl:text>
   281   <xsl:number value="$index" format="  1"/>
   282   <xsl:text> : </xsl:text>
   283   <xsl:choose>
   284     <xsl:when test="count($thisFunction)=1">
   285       <xsl:value-of select="$thisFunction/synopsis"/>
   286       <xsl:text> */
   287   jvmtiError (JNICALL *</xsl:text>
   288       <xsl:value-of select="$thisFunction/@id"/>
   289       <xsl:text>) (jvmtiEnv* env</xsl:text>
   290       <xsl:apply-templates select="$thisFunction/parameters" mode="signature">
   291         <xsl:with-param name="comma">
   292           <xsl:text>, 
   293     </xsl:text>
   294         </xsl:with-param>
   295       </xsl:apply-templates>
   296       <xsl:text>)</xsl:text>
   297     </xsl:when>
   298     <xsl:otherwise>
   299       <xsl:text> RESERVED */
   300   void *reserved</xsl:text>        
   301       <xsl:value-of select="$index"/>
   302     </xsl:otherwise>
   303   </xsl:choose>
   304   <xsl:text>;
   306 </xsl:text>
   307   <xsl:if test="count($funcs[@num &gt; $index]) &gt; 0">
   308     <xsl:call-template name="funcStruct">
   309       <xsl:with-param name="funcs" select="$funcs"/>
   310       <xsl:with-param name="index" select="1+$index"/>
   311     </xsl:call-template>
   312   </xsl:if>
   313 </xsl:template>
   316 <xsl:template match="function">
   317   <xsl:text>  jvmtiError (JNICALL *</xsl:text>
   318   <xsl:value-of select="@id"/>
   319   <xsl:text>) (jvmtiEnv* env</xsl:text>
   320   <xsl:apply-templates select="parameters" mode="signature"/>
   321   <xsl:text>);
   323 </xsl:text>
   324 </xsl:template>
   326 <xsl:template match="category" mode="cppinline">
   327     <xsl:apply-templates select="function[count(@hide)=0]" mode="cppinline"/>
   328 </xsl:template>
   330 <xsl:template match="function" mode="cppinline">
   331   <xsl:text>
   332   jvmtiError </xsl:text>
   333   <xsl:value-of select="@id"/>
   334   <xsl:text>(</xsl:text>
   335   <xsl:apply-templates select="parameters" mode="signaturenoleadcomma"/>
   336   <xsl:text>) {
   337     return functions-></xsl:text>
   338   <xsl:value-of select="@id"/>
   339   <xsl:text>(this</xsl:text>
   340   <xsl:for-each select="parameters">
   341     <xsl:for-each select="param">
   342       <xsl:if test="@id != '...' and count(jclass/@method) = 0">
   343         <xsl:text>, </xsl:text>
   344         <xsl:value-of select="@id"/>
   345       </xsl:if>
   346     </xsl:for-each>
   347   </xsl:for-each>
   348   <xsl:text>);
   349   }
   350 </xsl:text>
   351 </xsl:template>
   354   <xsl:template match="basetype">
   355     <xsl:if test="count(definition)!=0">
   356       <xsl:text>
   357 </xsl:text>
   358       <xsl:apply-templates select="definition"/>
   359     </xsl:if>
   360   </xsl:template>
   362   <xsl:template match="constants">
   363     <xsl:text>
   365     /* </xsl:text>
   366     <xsl:value-of select="@label"/>
   367     <xsl:text> */ 
   368 </xsl:text>
   369     <xsl:choose>
   370       <xsl:when test="@kind='enum'">
   371         <xsl:apply-templates select="." mode="enum"/>
   372       </xsl:when>
   373       <xsl:otherwise>
   374         <xsl:apply-templates select="." mode="constants"/>
   375       </xsl:otherwise>
   376     </xsl:choose>
   377   </xsl:template>
   379 <xsl:template match="callback">
   380       <xsl:text>
   381 typedef </xsl:text>
   382       <xsl:apply-templates select="child::*[position()=1]" mode="signature"/>
   383       <xsl:text> (JNICALL *</xsl:text>
   384       <xsl:value-of select="@id"/>
   385       <xsl:text>)
   386     (</xsl:text>
   387       <xsl:for-each select="parameters">
   388         <xsl:apply-templates select="param[position()=1]" mode="signature"/>
   389         <xsl:for-each select="param[position()>1]">
   390           <xsl:text>, </xsl:text>
   391           <xsl:apply-templates select="." mode="signature"/>
   392         </xsl:for-each>
   393       </xsl:for-each>
   394       <xsl:text>);
   395 </xsl:text>
   396 </xsl:template>
   398 <xsl:template match="capabilitiestypedef">
   399   <xsl:text>
   400 </xsl:text>
   401   <xsl:apply-templates select="." mode="genstruct"/>
   402   <xsl:text>
   403 </xsl:text>
   404 </xsl:template>
   406 <xsl:template match="typedef" mode="early">
   407   <xsl:text>struct _</xsl:text>
   408   <xsl:value-of select="@id"/>
   409   <xsl:text>;
   410 </xsl:text>
   411   <xsl:text>typedef struct _</xsl:text>
   412   <xsl:value-of select="@id"/>
   413   <xsl:text> </xsl:text>
   414   <xsl:value-of select="@id"/>
   415   <xsl:text>;
   416 </xsl:text>
   417 </xsl:template>
   419 <xsl:template match="typedef" mode="body">
   420   <xsl:text>struct _</xsl:text>
   421   <xsl:value-of select="@id"/>
   422   <xsl:text> {
   423 </xsl:text>
   424 <xsl:apply-templates select="field" mode="signature"/>
   425   <xsl:text>};
   426 </xsl:text>
   427 </xsl:template>
   429 <xsl:template match="uniontypedef" mode="early">
   430   <xsl:text>union _</xsl:text>
   431   <xsl:value-of select="@id"/>
   432   <xsl:text>;
   433 </xsl:text>
   434   <xsl:text>typedef union _</xsl:text>
   435   <xsl:value-of select="@id"/>
   436   <xsl:text> </xsl:text>
   437   <xsl:value-of select="@id"/>
   438   <xsl:text>;
   439 </xsl:text>
   440 </xsl:template>
   442 <xsl:template match="uniontypedef" mode="body">
   443   <xsl:text>union _</xsl:text>
   444   <xsl:value-of select="@id"/>
   445   <xsl:text> {
   446 </xsl:text>
   447 <xsl:apply-templates select="field" mode="signature"/>
   448   <xsl:text>};
   449 </xsl:text>
   450 </xsl:template>
   452 </xsl:stylesheet>

mercurial