src/share/vm/prims/jvmtiEnter.xsl

changeset 435
a61af66fc99e
child 1577
4ce7240d622c
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/share/vm/prims/jvmtiEnter.xsl	Sat Dec 01 00:00:00 2007 +0000
     1.3 @@ -0,0 +1,1279 @@
     1.4 +<?xml version="1.0"?> 
     1.5 +<!--
     1.6 + Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
     1.7 + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8 +
     1.9 + This code is free software; you can redistribute it and/or modify it
    1.10 + under the terms of the GNU General Public License version 2 only, as
    1.11 + published by the Free Software Foundation.
    1.12 +
    1.13 + This code is distributed in the hope that it will be useful, but WITHOUT
    1.14 + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1.15 + FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    1.16 + version 2 for more details (a copy is included in the LICENSE file that
    1.17 + accompanied this code).
    1.18 +
    1.19 + You should have received a copy of the GNU General Public License version
    1.20 + 2 along with this work; if not, write to the Free Software Foundation,
    1.21 + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    1.22 +
    1.23 + Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    1.24 + CA 95054 USA or visit www.sun.com if you need additional information or
    1.25 + have any questions.
    1.26 +  
    1.27 +-->
    1.28 +
    1.29 +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    1.30 +
    1.31 +<xsl:import href="jvmtiLib.xsl"/>
    1.32 +
    1.33 +<xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
    1.34 +
    1.35 +<xsl:param name="trace"></xsl:param>
    1.36 +<xsl:param name="interface"></xsl:param>
    1.37 +
    1.38 +
    1.39 +<xsl:template match="specification">
    1.40 +  <xsl:call-template name="sourceHeader"/>
    1.41 +  <xsl:text>
    1.42 +# include "incls/_precompiled.incl"
    1.43 +# include "incls/_jvmtiEnter.cpp.incl"
    1.44 +
    1.45 +</xsl:text>
    1.46 +
    1.47 +  <xsl:if test="$trace = 'Trace'">
    1.48 +   <xsl:text>
    1.49 +#ifdef JVMTI_TRACE
    1.50 +</xsl:text>
    1.51 +  </xsl:if>
    1.52 +
    1.53 + <xsl:if test="$trace != 'Trace'">
    1.54 +    <xsl:text>
    1.55 +
    1.56 +// Error names
    1.57 +const char* JvmtiUtil::_error_names[] = {
    1.58 +</xsl:text>
    1.59 +    <xsl:call-template name="fillEntityName"> 
    1.60 +      <xsl:with-param name="entities" select="errorsection/errorcategory/errorid"/>
    1.61 +    </xsl:call-template>
    1.62 +    <xsl:text>
    1.63 +};
    1.64 +
    1.65 +
    1.66 +// Event threaded
    1.67 +const bool JvmtiUtil::_event_threaded[] = {
    1.68 +</xsl:text>
    1.69 +    <xsl:call-template name="fillEventThreaded"> 
    1.70 +      <xsl:with-param name="entities" select="eventsection/event"/>
    1.71 +    </xsl:call-template>
    1.72 +    <xsl:text>
    1.73 +};
    1.74 +
    1.75 +</xsl:text>
    1.76 +    <xsl:call-template name="eventCapabilitiesTest"/>
    1.77 + </xsl:if>
    1.78 +
    1.79 + <xsl:if test="$trace = 'Trace'">
    1.80 +
    1.81 +<!--  all this just to return the highest event number -->
    1.82 +  <xsl:variable name="maxEvent">
    1.83 +    <xsl:for-each select="eventsection/event">
    1.84 +      <xsl:variable name="mynum" select="@num"/>
    1.85 +      <xsl:if test="count(../../eventsection/event[@num &gt; $mynum]) = 0">
    1.86 +        <xsl:value-of select="@num"/>
    1.87 +      </xsl:if>
    1.88 +    </xsl:for-each>    
    1.89 +  </xsl:variable>
    1.90 +
    1.91 +  <xsl:text>jbyte JvmtiTrace::_event_trace_flags[</xsl:text>
    1.92 +  <xsl:value-of select="1+$maxEvent"/>
    1.93 +  <xsl:text>];
    1.94 +
    1.95 +jint JvmtiTrace::_max_event_index = </xsl:text>
    1.96 +  <xsl:value-of select="$maxEvent"/>
    1.97 +  <xsl:text>;
    1.98 +
    1.99 +// Event names
   1.100 +const char* JvmtiTrace::_event_names[] = {
   1.101 +</xsl:text>
   1.102 +    <xsl:call-template name="fillEntityName"> 
   1.103 +      <xsl:with-param name="entities" select="eventsection/event"/>
   1.104 +    </xsl:call-template>
   1.105 +    <xsl:text>
   1.106 +};
   1.107 +</xsl:text>
   1.108 +    <xsl:apply-templates select="//constants[@kind='enum']"/>
   1.109 +  </xsl:if>
   1.110 +  <xsl:apply-templates select="functionsection"/>
   1.111 +
   1.112 +  <xsl:if test="$trace='Trace'">
   1.113 +   <xsl:text>
   1.114 +#endif /*JVMTI_TRACE */
   1.115 +</xsl:text>
   1.116 +  </xsl:if>
   1.117 +
   1.118 +</xsl:template>
   1.119 +
   1.120 +<xsl:template match="constants">
   1.121 +  <xsl:text>
   1.122 +
   1.123 +// </xsl:text>
   1.124 +  <xsl:value-of select="@label"/>
   1.125 +  <xsl:text> names
   1.126 +const char* </xsl:text>
   1.127 +  <xsl:value-of select="@id"/>
   1.128 +  <xsl:text>ConstantNames[] = {
   1.129 +</xsl:text>
   1.130 +  <xsl:apply-templates select="constant" mode="constname"/>
   1.131 +  <xsl:text>  NULL
   1.132 +};
   1.133 +
   1.134 +// </xsl:text>
   1.135 +  <xsl:value-of select="@label"/>
   1.136 +  <xsl:text> value
   1.137 +jint </xsl:text>
   1.138 +  <xsl:value-of select="@id"/>
   1.139 +  <xsl:text>ConstantValues[] = {
   1.140 +</xsl:text>
   1.141 +  <xsl:apply-templates select="constant" mode="constvalue"/>
   1.142 +  <xsl:text>  0
   1.143 +};
   1.144 +
   1.145 +</xsl:text>
   1.146 +</xsl:template>
   1.147 +
   1.148 +<xsl:template match="constant" mode="constname">
   1.149 +  <xsl:text>  "</xsl:text>
   1.150 +  <xsl:value-of select="@id"/>
   1.151 +  <xsl:text>",
   1.152 +</xsl:text>
   1.153 +</xsl:template>
   1.154 +
   1.155 +<xsl:template match="constant" mode="constvalue">
   1.156 +  <xsl:text>  </xsl:text>
   1.157 +  <xsl:value-of select="@num"/>
   1.158 +  <xsl:text>,
   1.159 +</xsl:text>
   1.160 +</xsl:template>
   1.161 +
   1.162 +<xsl:template name="eventCapabilitiesTest">
   1.163 +  <xsl:text>
   1.164 +
   1.165 +// Check Event Capabilities
   1.166 +const bool JvmtiUtil::has_event_capability(jvmtiEvent event_type, const jvmtiCapabilities* capabilities_ptr) {
   1.167 +  switch (event_type) {
   1.168 +</xsl:text>
   1.169 +  <xsl:for-each select="//eventsection/event">
   1.170 +    <xsl:variable name="capa" select="capabilities/required"/>
   1.171 +    <xsl:if test="count($capa)">
   1.172 +        <xsl:text>    case </xsl:text>
   1.173 +        <xsl:value-of select="@const"/>
   1.174 +        <xsl:text>:
   1.175 +      return capabilities_ptr-&gt;</xsl:text>
   1.176 +        <xsl:value-of select="$capa/@id"/>
   1.177 +        <xsl:text> != 0;
   1.178 +</xsl:text>
   1.179 +    </xsl:if>
   1.180 +  </xsl:for-each>
   1.181 +  <xsl:text>  }
   1.182 +  // if it does not have a capability it is required
   1.183 +  return JNI_TRUE;
   1.184 +}
   1.185 +
   1.186 +</xsl:text>
   1.187 +</xsl:template>
   1.188 +
   1.189 +<xsl:template match="functionsection">
   1.190 +  <xsl:if test="$trace='Trace'">
   1.191 +
   1.192 +<!--  all this just to return the highest function number -->
   1.193 +  <xsl:variable name="maxFunction">
   1.194 +    <xsl:for-each select="category/function">
   1.195 +      <xsl:variable name="mynum" select="@num"/>
   1.196 +      <xsl:if test="count(../../category/function[@num &gt; $mynum]) = 0">
   1.197 +        <xsl:value-of select="@num"/>
   1.198 +      </xsl:if>
   1.199 +    </xsl:for-each>    
   1.200 +  </xsl:variable>
   1.201 +
   1.202 +  <xsl:text>jbyte JvmtiTrace::_trace_flags[</xsl:text>
   1.203 +  <xsl:value-of select="1+$maxFunction"/>
   1.204 +  <xsl:text>];
   1.205 +
   1.206 +jint JvmtiTrace::_max_function_index = </xsl:text>
   1.207 +  <xsl:value-of select="$maxFunction"/>
   1.208 +  <xsl:text>;
   1.209 +
   1.210 +// Function names
   1.211 +const char* JvmtiTrace::_function_names[] = {
   1.212 +</xsl:text>
   1.213 +  <xsl:call-template name="fillEntityName">
   1.214 +    <xsl:with-param name="entities" select="category/function"/>
   1.215 +  </xsl:call-template>
   1.216 +  <xsl:text>
   1.217 +};
   1.218 +
   1.219 +// Exclude list
   1.220 +short JvmtiTrace::_exclude_functions[] = {
   1.221 +  </xsl:text>
   1.222 +  <xsl:apply-templates select="category/function" mode="notrace">
   1.223 +    <xsl:sort select="@num"/>
   1.224 +  </xsl:apply-templates>
   1.225 +  <xsl:text>0
   1.226 +};
   1.227 +
   1.228 +</xsl:text>
   1.229 +  </xsl:if>
   1.230 +
   1.231 +  <xsl:text>
   1.232 +extern "C" {
   1.233 +
   1.234 +</xsl:text>
   1.235 +  <xsl:apply-templates select="category" mode="wrapper"/>
   1.236 +  <xsl:text>
   1.237 +} /* end extern "C" */
   1.238 +
   1.239 +// JVMTI API functions
   1.240 +struct jvmtiInterface_1_ jvmti</xsl:text>
   1.241 +  <xsl:value-of select="$trace"/>
   1.242 +  <xsl:text>_Interface = {
   1.243 +</xsl:text>
   1.244 + 
   1.245 +  <xsl:call-template name="fillFuncStruct">
   1.246 +    <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/>
   1.247 +  </xsl:call-template>
   1.248 +
   1.249 +  <xsl:text>
   1.250 +};
   1.251 +</xsl:text>
   1.252 +</xsl:template>
   1.253 +
   1.254 +<xsl:template match="function" mode="functionid">
   1.255 +  <xsl:text>jvmti</xsl:text>
   1.256 +  <xsl:value-of select="$trace"/>
   1.257 +  <xsl:text>_</xsl:text>
   1.258 +  <xsl:value-of select="@id"/>
   1.259 +</xsl:template>
   1.260 +
   1.261 +<xsl:template name="fillFuncStructDoit">
   1.262 +  <xsl:param name="func"/>
   1.263 +  <xsl:param name="index"/>
   1.264 +  <xsl:text>                              /* </xsl:text>
   1.265 +  <xsl:number value="$index" format="  1"/>
   1.266 +  <xsl:text> : </xsl:text>
   1.267 +  <xsl:choose>
   1.268 +    <xsl:when test="count($func)=1">
   1.269 +      <xsl:value-of select="$func/synopsis"/>
   1.270 +      <xsl:text> */
   1.271 +      </xsl:text>
   1.272 +      <xsl:apply-templates select="$func" mode="functionid"/>
   1.273 +    </xsl:when>
   1.274 +    <xsl:otherwise>
   1.275 +      <xsl:text> RESERVED */
   1.276 +      NULL</xsl:text>        
   1.277 +    </xsl:otherwise>
   1.278 +  </xsl:choose>
   1.279 +</xsl:template>
   1.280 +
   1.281 +<!-- generic function iterator applied to the function structure -->
   1.282 +<xsl:template name="fillFuncStruct">
   1.283 +  <xsl:param name="funcs"/>
   1.284 +  <xsl:param name="index" select="1"/>
   1.285 +  <xsl:call-template name="fillFuncStructDoit">
   1.286 +    <xsl:with-param name="func" select="$funcs[@num=$index]"/>
   1.287 +    <xsl:with-param name="index" select="$index"/>
   1.288 +  </xsl:call-template>
   1.289 +  <xsl:if test="count($funcs[@num &gt; $index]) &gt; 0">
   1.290 +    <xsl:text>,
   1.291 +</xsl:text>
   1.292 +    <xsl:call-template name="fillFuncStruct">
   1.293 +      <xsl:with-param name="funcs" select="$funcs"/>
   1.294 +      <xsl:with-param name="index" select="1+$index"/>
   1.295 +    </xsl:call-template>
   1.296 +  </xsl:if>
   1.297 +</xsl:template>
   1.298 +
   1.299 +<xsl:template name="fillEntityNameDoit">
   1.300 +  <xsl:param name="entity"/>
   1.301 +  <xsl:param name="index"/>
   1.302 +  <xsl:choose>
   1.303 +    <xsl:when test="count($entity) &gt; 0">
   1.304 +      <xsl:text>  "</xsl:text>
   1.305 +      <xsl:value-of select="$entity[position()=1]/@id"/>
   1.306 +      <xsl:text>"</xsl:text>
   1.307 +    </xsl:when>
   1.308 +    <xsl:otherwise>
   1.309 +      <xsl:text>  NULL</xsl:text>        
   1.310 +    </xsl:otherwise>
   1.311 +  </xsl:choose>
   1.312 +</xsl:template>
   1.313 +
   1.314 +<!-- generic entity (with id and num) iterator applied to entity names -->
   1.315 +<xsl:template name="fillEntityName">
   1.316 +  <xsl:param name="entities"/>
   1.317 +  <xsl:param name="index" select="0"/>
   1.318 +  <xsl:call-template name="fillEntityNameDoit">
   1.319 +    <xsl:with-param name="entity" select="$entities[@num=$index]"/>
   1.320 +    <xsl:with-param name="index" select="$index"/>
   1.321 +  </xsl:call-template>
   1.322 +  <xsl:if test="count($entities[@num &gt; $index]) &gt; 0">
   1.323 +    <xsl:text>,
   1.324 +</xsl:text>
   1.325 +    <xsl:call-template name="fillEntityName">
   1.326 +      <xsl:with-param name="entities" select="$entities"/>
   1.327 +      <xsl:with-param name="index" select="1+$index"/>
   1.328 +    </xsl:call-template>
   1.329 +  </xsl:if>
   1.330 +</xsl:template>
   1.331 +
   1.332 +<xsl:template name="fillEventThreadedDoit">
   1.333 +  <xsl:param name="entity"/>
   1.334 +  <xsl:param name="index"/>
   1.335 +  <xsl:choose>
   1.336 +    <xsl:when test="count($entity) &gt; 0">
   1.337 +      <xsl:choose>
   1.338 +        <xsl:when test="count($entity[position()=1]/@filtered)=0">
   1.339 +          <xsl:text>  false</xsl:text>
   1.340 +        </xsl:when>
   1.341 +        <xsl:otherwise>
   1.342 +          <xsl:text>  true</xsl:text>        
   1.343 +        </xsl:otherwise>
   1.344 +      </xsl:choose>
   1.345 +    </xsl:when>
   1.346 +    <xsl:otherwise>
   1.347 +      <xsl:text>  false</xsl:text>        
   1.348 +    </xsl:otherwise>
   1.349 +  </xsl:choose>
   1.350 +</xsl:template>
   1.351 +
   1.352 +
   1.353 +<xsl:template name="fillEventThreaded">
   1.354 +  <xsl:param name="entities"/>
   1.355 +  <xsl:param name="index" select="0"/>
   1.356 +  <xsl:call-template name="fillEventThreadedDoit">
   1.357 +    <xsl:with-param name="entity" select="$entities[@num=$index]"/>
   1.358 +    <xsl:with-param name="index" select="$index"/>
   1.359 +  </xsl:call-template>
   1.360 +  <xsl:if test="count($entities[@num &gt; $index]) &gt; 0">
   1.361 +    <xsl:text>,
   1.362 +</xsl:text>
   1.363 +    <xsl:call-template name="fillEventThreaded">
   1.364 +      <xsl:with-param name="entities" select="$entities"/>
   1.365 +      <xsl:with-param name="index" select="1+$index"/>
   1.366 +    </xsl:call-template>
   1.367 +  </xsl:if>
   1.368 +</xsl:template>
   1.369 +
   1.370 +<xsl:template match="function" mode="notrace">
   1.371 +  <xsl:if test="count(@impl)=1 and contains(@impl,'notrace')">
   1.372 +    <xsl:value-of select="@num"/>
   1.373 +    <xsl:text>,
   1.374 +  </xsl:text>
   1.375 +  </xsl:if>
   1.376 +</xsl:template>
   1.377 +
   1.378 +<xsl:template match="category" mode="wrapper">
   1.379 +  <xsl:text>
   1.380 +  //
   1.381 +  // </xsl:text><xsl:value-of select="@label"/><xsl:text> functions
   1.382 +  // 
   1.383 +</xsl:text>
   1.384 +  <xsl:apply-templates select="function[count(@hide)=0]"/>
   1.385 +</xsl:template>
   1.386 +
   1.387 +<xsl:template match="function" mode="transition">
   1.388 +  <xsl:param name="space">
   1.389 +    <xsl:text>
   1.390 +  </xsl:text>
   1.391 +  </xsl:param>
   1.392 +  <xsl:value-of select="$space"/>
   1.393 +  
   1.394 +  <xsl:choose> 
   1.395 +    <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   1.396 +      <xsl:text>if (this_thread == NULL || !this_thread->is_Java_thread()) {</xsl:text> 
   1.397 +    </xsl:when> 
   1.398 +    <xsl:otherwise> 
   1.399 +      <xsl:choose>
   1.400 +        <xsl:when test="count(@phase)=0 or contains(@phase,'live') or contains(@phase,'start')">
   1.401 +	  <xsl:text>if (this_thread == NULL || (!this_thread->is_Java_thread() &amp;&amp; !this_thread->is_VM_thread())) {</xsl:text>
   1.402 +        </xsl:when>
   1.403 +        <xsl:otherwise>
   1.404 +          <xsl:text>if (!this_thread->is_Java_thread()) {</xsl:text> 
   1.405 +        </xsl:otherwise>
   1.406 +      </xsl:choose>
   1.407 +     </xsl:otherwise> 
   1.408 +  </xsl:choose> 
   1.409 +  
   1.410 +  <xsl:if test="$trace='Trace'">
   1.411 +    <xsl:value-of select="$space"/>
   1.412 +    <xsl:text>  if (trace_flags) {</xsl:text>
   1.413 +    <xsl:value-of select="$space"/>
   1.414 +    <xsl:text>    tty->print_cr("JVMTI [non-attached thread] %s %s",  func_name,</xsl:text>
   1.415 +    <xsl:value-of select="$space"/>
   1.416 +    <xsl:text>    JvmtiUtil::error_name(JVMTI_ERROR_UNATTACHED_THREAD));</xsl:text>
   1.417 +    <xsl:value-of select="$space"/>
   1.418 +    <xsl:text>  }</xsl:text>
   1.419 +  </xsl:if>
   1.420 +  <xsl:value-of select="$space"/>
   1.421 +  <xsl:text>  return JVMTI_ERROR_UNATTACHED_THREAD;</xsl:text>
   1.422 +  <xsl:value-of select="$space"/>
   1.423 +  <xsl:text>}</xsl:text>  
   1.424 +  <xsl:value-of select="$space"/>  
   1.425 +  <xsl:if test="count(@impl)=0 or not(contains(@impl,'innative'))">
   1.426 +    <xsl:text>JavaThread* current_thread = (JavaThread*)this_thread;</xsl:text>   
   1.427 +    <xsl:value-of select="$space"/>
   1.428 +    <xsl:text>ThreadInVMfromNative __tiv(current_thread);</xsl:text>
   1.429 +    <xsl:value-of select="$space"/>
   1.430 +    <xsl:text>__ENTRY(jvmtiError, </xsl:text>
   1.431 +    <xsl:apply-templates select="." mode="functionid"/>
   1.432 +    <xsl:text> , current_thread)</xsl:text>
   1.433 +    <xsl:value-of select="$space"/>
   1.434 +    <xsl:text>debug_only(VMNativeEntryWrapper __vew;)</xsl:text>
   1.435 +    <xsl:if test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   1.436 +      <xsl:value-of select="$space"/>
   1.437 +      <xsl:text>CautiouslyPreserveExceptionMark __em(this_thread);</xsl:text>
   1.438 +    </xsl:if>
   1.439 +  </xsl:if>
   1.440 +</xsl:template>
   1.441 +
   1.442 +
   1.443 +<xsl:template match="required">
   1.444 +  <xsl:text>
   1.445 +  if (jvmti_env-&gt;get_capabilities()-&gt;</xsl:text>
   1.446 +    <xsl:value-of select="@id"/>
   1.447 +    <xsl:text> == 0) {
   1.448 +</xsl:text>
   1.449 +    <xsl:if test="$trace='Trace'">
   1.450 +      <xsl:text>    if (trace_flags) {
   1.451 +          tty->print_cr("JVMTI [%s] %s %s",  curr_thread_name, func_name, 
   1.452 +                    JvmtiUtil::error_name(JVMTI_ERROR_MUST_POSSESS_CAPABILITY));
   1.453 +    }
   1.454 +</xsl:text>
   1.455 +    </xsl:if>
   1.456 +    <xsl:text>    return JVMTI_ERROR_MUST_POSSESS_CAPABILITY;
   1.457 +  }
   1.458 +</xsl:text>
   1.459 +</xsl:template>
   1.460 +
   1.461 +
   1.462 +<xsl:template match="function">
   1.463 +  <xsl:text>
   1.464 +static jvmtiError JNICALL
   1.465 +</xsl:text>
   1.466 +  <xsl:apply-templates select="." mode="functionid"/>
   1.467 +  <xsl:text>(jvmtiEnv* env</xsl:text>
   1.468 +  <xsl:apply-templates select="parameters" mode="signature"/>
   1.469 +  <xsl:text>) {
   1.470 +</xsl:text>
   1.471 +
   1.472 +  <xsl:if test="not(contains(@jkernel,'yes'))">
   1.473 +  <xsl:text>&#xA;#ifdef JVMTI_KERNEL &#xA;</xsl:text>
   1.474 +  <xsl:text>  return JVMTI_ERROR_NOT_AVAILABLE; &#xA;</xsl:text>
   1.475 +  <xsl:text>#else &#xA;</xsl:text>
   1.476 +  </xsl:if>
   1.477 +
   1.478 +  <xsl:apply-templates select="." mode="traceSetUp"/>
   1.479 +  <xsl:choose>
   1.480 +    <xsl:when test="count(@phase)=0 or contains(@phase,'live')">
   1.481 +      <xsl:text>  if(!JvmtiEnv::is_vm_live()) {
   1.482 +</xsl:text>
   1.483 +    <xsl:if test="$trace='Trace'">
   1.484 +      <xsl:text>    if (trace_flags) {
   1.485 +          tty->print_cr("JVMTI [-] %s %s",  func_name, 
   1.486 +                    JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   1.487 +    }
   1.488 +</xsl:text>
   1.489 +    </xsl:if>
   1.490 +    <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   1.491 +  }</xsl:text>  
   1.492 +
   1.493 +      <xsl:text>  
   1.494 +  Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text>
   1.495 +
   1.496 +      <xsl:apply-templates select="." mode="transition"/>
   1.497 +    </xsl:when>
   1.498 +    <xsl:otherwise>
   1.499 +      <xsl:if test="contains(@phase,'onload')">
   1.500 +        <xsl:text>  if(JvmtiEnv::get_phase()!=JVMTI_PHASE_ONLOAD</xsl:text>
   1.501 +        <xsl:if test="not(contains(@phase,'onloadOnly'))">
   1.502 +          <xsl:text> &amp;&amp; JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE</xsl:text>
   1.503 +        </xsl:if>
   1.504 +        <xsl:text>) {
   1.505 +</xsl:text>
   1.506 +    <xsl:if test="$trace='Trace'">
   1.507 +      <xsl:text>    if (trace_flags) {
   1.508 +          tty->print_cr("JVMTI [-] %s %s",  func_name, 
   1.509 +                    JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   1.510 +    }
   1.511 +</xsl:text>
   1.512 +    </xsl:if>
   1.513 +    <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   1.514 +  }</xsl:text>
   1.515 +      </xsl:if>
   1.516 +      <xsl:if test="contains(@phase,'start')">
   1.517 +        <xsl:text>  if(JvmtiEnv::get_phase()!=JVMTI_PHASE_START &amp;&amp; JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE) {
   1.518 +</xsl:text>
   1.519 +    <xsl:if test="$trace='Trace'">
   1.520 +      <xsl:text>    if (trace_flags) {
   1.521 +          tty->print_cr("JVMTI [-] %s %s",  func_name, 
   1.522 +                    JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   1.523 +    }
   1.524 +</xsl:text>
   1.525 +    </xsl:if>
   1.526 +    <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   1.527 +  }
   1.528 +  Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text>
   1.529 +      <xsl:apply-templates select="." mode="transition"/>
   1.530 +      </xsl:if>
   1.531 +    </xsl:otherwise>
   1.532 +  </xsl:choose>
   1.533 +
   1.534 +  <xsl:text>
   1.535 +  JvmtiEnv* jvmti_env = JvmtiEnv::JvmtiEnv_from_jvmti_env(env);
   1.536 +  if (!jvmti_env->is_valid()) {
   1.537 +</xsl:text>
   1.538 +    <xsl:if test="$trace='Trace'">
   1.539 +      <xsl:text>    if (trace_flags) {
   1.540 +          tty->print_cr("JVMTI [%s] %s %s  env=%d",  curr_thread_name, func_name, 
   1.541 +                    JvmtiUtil::error_name(JVMTI_ERROR_INVALID_ENVIRONMENT), env);
   1.542 +    }
   1.543 +</xsl:text>
   1.544 +    </xsl:if>
   1.545 +    <xsl:text>    return JVMTI_ERROR_INVALID_ENVIRONMENT;
   1.546 +  }
   1.547 +</xsl:text>
   1.548 +
   1.549 +  <xsl:apply-templates select="capabilities/required"/>
   1.550 +  
   1.551 +  <xsl:text>  jvmtiError err;
   1.552 +</xsl:text>
   1.553 +  <xsl:choose>
   1.554 +    <xsl:when test="count(@phase)=1 and not(contains(@phase,'live')) and not(contains(@phase,'start'))">    
   1.555 +      <xsl:choose>
   1.556 +        <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   1.557 +          <xsl:text>  if (Threads::number_of_threads() != 0) {
   1.558 +    Thread* this_thread = (Thread*)ThreadLocalStorage::thread();</xsl:text>
   1.559 +        </xsl:when>
   1.560 +        <xsl:otherwise>
   1.561 +
   1.562 +	  <xsl:text>  Thread* this_thread = NULL;
   1.563 +  bool transition;
   1.564 +  if (Threads::number_of_threads() == 0) {
   1.565 +    transition = false;
   1.566 +  } else {
   1.567 +    this_thread = (Thread*)ThreadLocalStorage::thread();
   1.568 +    transition = ((this_thread != NULL) &amp;&amp; !this_thread->is_VM_thread() &amp;&amp; !this_thread->is_ConcurrentGC_thread());
   1.569 +  }
   1.570 +  if (transition) {</xsl:text>
   1.571 +	</xsl:otherwise>
   1.572 +
   1.573 +      </xsl:choose>
   1.574 +      <!-- we allow use in early phases but there are threads now, -->
   1.575 +      <!-- so do thread transition -->
   1.576 +      <xsl:apply-templates select="." mode="transition">
   1.577 +          <xsl:with-param name="space">
   1.578 +            <xsl:text>
   1.579 +    </xsl:text>
   1.580 +          </xsl:with-param>
   1.581 +      </xsl:apply-templates>
   1.582 +      <xsl:text>
   1.583 +  </xsl:text>
   1.584 +      <xsl:apply-templates select="." mode="doCall"/>     
   1.585 +      <xsl:text>  } else {
   1.586 +  </xsl:text>
   1.587 +      <!-- we are pre-thread - no thread transition code -->
   1.588 +      <xsl:apply-templates select="." mode="doCall"/>     
   1.589 +      <xsl:text>  }
   1.590 +</xsl:text>
   1.591 +    </xsl:when>
   1.592 +    <xsl:otherwise>
   1.593 +      <xsl:apply-templates select="." mode="doCall"/>      
   1.594 +    </xsl:otherwise>
   1.595 +  </xsl:choose>
   1.596 +  <xsl:text>  return err;
   1.597 +</xsl:text>
   1.598 +
   1.599 +  <xsl:if test="not(contains(@jkernel,'yes'))">
   1.600 +  <xsl:text>#endif // JVMTI_KERNEL&#xA;</xsl:text>
   1.601 +  </xsl:if>
   1.602 +
   1.603 +  <xsl:text>}&#xA;</xsl:text>
   1.604 +</xsl:template>
   1.605 +
   1.606 +<xsl:template match="function" mode="doCall">
   1.607 +  <xsl:apply-templates select="parameters" mode="dochecks"/>
   1.608 +  <xsl:apply-templates select="." mode="traceBefore"/>  
   1.609 +  <xsl:apply-templates select="." mode="genCall"/>
   1.610 +  <xsl:apply-templates select="." mode="traceAfter"/>
   1.611 +</xsl:template>
   1.612 +
   1.613 +<xsl:template match="function" mode="genCall">
   1.614 +  <xsl:text>  err = jvmti_env-&gt;</xsl:text>
   1.615 +  <xsl:value-of select="@id"/>
   1.616 +  <xsl:text>(</xsl:text>
   1.617 +  <xsl:apply-templates select="parameters" mode="HotSpotValue"/>
   1.618 +  <xsl:text>);
   1.619 +</xsl:text>
   1.620 +</xsl:template>
   1.621 +
   1.622 +
   1.623 +<xsl:template match="function" mode="traceSetUp">
   1.624 +  <xsl:if test="$trace='Trace'">
   1.625 +    <xsl:text>  SafeResourceMark rm;
   1.626 +  jint trace_flags = JvmtiTrace::trace_flags(</xsl:text>
   1.627 +      <xsl:value-of select="@num"/>
   1.628 +      <xsl:text>);
   1.629 +  const char *func_name;
   1.630 +  const char *curr_thread_name;
   1.631 +  if (trace_flags) {
   1.632 +    func_name = JvmtiTrace::function_name(</xsl:text>
   1.633 +      <xsl:value-of select="@num"/>
   1.634 +      <xsl:text>);
   1.635 +    curr_thread_name = JvmtiTrace::safe_get_current_thread_name();
   1.636 +  }
   1.637 +</xsl:text>
   1.638 +  </xsl:if>
   1.639 +</xsl:template>
   1.640 +
   1.641 +
   1.642 +<xsl:template match="function" mode="traceBefore">
   1.643 +  <xsl:if test="$trace='Trace'">
   1.644 +    <xsl:text>
   1.645 +  if ((trace_flags &amp; JvmtiTrace::SHOW_IN) != 0) {
   1.646 +    </xsl:text>
   1.647 +    <xsl:apply-templates select="." mode="traceIn"/>
   1.648 +    <xsl:text>  }
   1.649 +</xsl:text>
   1.650 +  </xsl:if>
   1.651 +</xsl:template>
   1.652 +
   1.653 +
   1.654 +<xsl:template match="param" mode="traceError">
   1.655 +  <xsl:param name="err"/>
   1.656 +  <xsl:param name="comment"></xsl:param>
   1.657 +  <xsl:param name="extraValue"></xsl:param>
   1.658 +  <xsl:if test="$trace='Trace'">
   1.659 +  <xsl:text>      if ((trace_flags &amp; JvmtiTrace::SHOW_ERROR) != 0) {
   1.660 +        if ((trace_flags &amp; JvmtiTrace::SHOW_IN) == 0) {
   1.661 +</xsl:text>
   1.662 +  <xsl:apply-templates select="../.." mode="traceIn">
   1.663 +    <xsl:with-param name="endParam" select="."/>
   1.664 +  </xsl:apply-templates>
   1.665 +  <xsl:text>      }
   1.666 +        tty->print_cr("JVMTI [%s] %s } %s - erroneous arg is </xsl:text>
   1.667 +    <xsl:value-of select="@id"/>
   1.668 +    <xsl:value-of select="$comment"/>
   1.669 +    <xsl:text>",  curr_thread_name, func_name, 
   1.670 +                  JvmtiUtil::error_name(</xsl:text>
   1.671 +    <xsl:value-of select="$err"/>
   1.672 +    <xsl:text>)</xsl:text>
   1.673 +    <xsl:value-of select="$extraValue"/>
   1.674 +    <xsl:text>);
   1.675 +      }
   1.676 +</xsl:text>
   1.677 +  </xsl:if>
   1.678 +    <xsl:text>      return </xsl:text>
   1.679 +    <xsl:value-of select="$err"/>
   1.680 +    <xsl:text>;</xsl:text>
   1.681 +</xsl:template>
   1.682 +
   1.683 +
   1.684 +<xsl:template match="function" mode="traceAfter">
   1.685 +  <xsl:if test="$trace='Trace'">
   1.686 +    <xsl:text>  if ( err != JVMTI_ERROR_NONE &amp;&amp; (trace_flags &amp; JvmtiTrace::SHOW_ERROR) != 0) {
   1.687 +      if ((trace_flags &amp; JvmtiTrace::SHOW_IN) == 0) {
   1.688 +</xsl:text>
   1.689 +    <xsl:apply-templates select="." mode="traceIn"/>
   1.690 +    <xsl:text>    }
   1.691 +    tty->print_cr("JVMTI [%s] %s } %s",  curr_thread_name, func_name, 
   1.692 +                  JvmtiUtil::error_name(err));
   1.693 +  } else if ((trace_flags &amp; JvmtiTrace::SHOW_OUT) != 0) {
   1.694 +    tty->print_cr("JVMTI [%s] %s }",  curr_thread_name, func_name);
   1.695 +  }
   1.696 +</xsl:text>
   1.697 +  </xsl:if>
   1.698 +</xsl:template>
   1.699 +
   1.700 +<xsl:template match="function" mode="traceIn">
   1.701 +  <xsl:param name="endParam"></xsl:param>
   1.702 +  <xsl:text>          tty->print_cr("JVMTI [%s] %s { </xsl:text>
   1.703 +  <xsl:apply-templates select="parameters" mode="traceInFormat">
   1.704 +    <xsl:with-param name="endParam" select="$endParam"/>    
   1.705 +  </xsl:apply-templates>
   1.706 +  <xsl:text>", curr_thread_name, func_name</xsl:text>
   1.707 +  <xsl:apply-templates select="parameters" mode="traceInValue">
   1.708 +    <xsl:with-param name="endParam" select="$endParam"/>    
   1.709 +  </xsl:apply-templates>
   1.710 +  <xsl:text>);
   1.711 +</xsl:text>
   1.712 +</xsl:template>
   1.713 +
   1.714 +<xsl:template match="parameters" mode="dochecks">
   1.715 +  <xsl:apply-templates select="param" mode="dochecks"/>
   1.716 +</xsl:template>
   1.717 +
   1.718 +<xsl:template match="param" mode="dochecks">
   1.719 +  <xsl:apply-templates select="child::*[position()=1]" mode="dochecks">
   1.720 +    <xsl:with-param name="name" select="@id"/>
   1.721 +  </xsl:apply-templates>
   1.722 +</xsl:template>
   1.723 +
   1.724 +<xsl:template match="outptr|outbuf|allocfieldbuf|ptrtype|inptr|inbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="dochecks">
   1.725 +  <xsl:param name="name"/>
   1.726 +  <xsl:if test="count(nullok)=0">
   1.727 +    <xsl:text>  if (</xsl:text>
   1.728 +    <xsl:value-of select="$name"/>
   1.729 +    <xsl:text> == NULL) {
   1.730 +</xsl:text>
   1.731 +    <xsl:apply-templates select=".." mode="traceError">     
   1.732 +      <xsl:with-param name="err">JVMTI_ERROR_NULL_POINTER</xsl:with-param>
   1.733 +    </xsl:apply-templates>
   1.734 +    <xsl:text>
   1.735 +  }
   1.736 +</xsl:text>
   1.737 +  </xsl:if>
   1.738 +</xsl:template>
   1.739 +
   1.740 +<xsl:template match="jrawMonitorID" mode="dochecks">
   1.741 +  <xsl:param name="name"/>
   1.742 +  <xsl:text>  JvmtiRawMonitor *rmonitor = (JvmtiRawMonitor *)</xsl:text>
   1.743 +  <xsl:value-of select="$name"/>
   1.744 +  <xsl:text>;
   1.745 +  if (rmonitor == NULL) {
   1.746 +</xsl:text>
   1.747 +    <xsl:apply-templates select=".." mode="traceError">     
   1.748 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param>
   1.749 +      <xsl:with-param name="comment"> - raw monitor is NULL</xsl:with-param>
   1.750 +    </xsl:apply-templates>
   1.751 +    <xsl:text>
   1.752 +  }
   1.753 +  if (!rmonitor->is_valid()) {
   1.754 +</xsl:text>
   1.755 +    <xsl:apply-templates select=".." mode="traceError">     
   1.756 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param>
   1.757 +      <xsl:with-param name="comment"> - not a raw monitor 0x%x</xsl:with-param>
   1.758 +      <xsl:with-param name="extraValue">, rmonitor</xsl:with-param>
   1.759 +    </xsl:apply-templates>
   1.760 +    <xsl:text>
   1.761 +  }
   1.762 +</xsl:text>
   1.763 +</xsl:template>
   1.764 +
   1.765 +<xsl:template match="jthread" mode="dochecksbody">
   1.766 +  <xsl:param name="name"/>
   1.767 +    <xsl:text>    oop thread_oop = JNIHandles::resolve_external_guard(</xsl:text>
   1.768 +    <xsl:value-of select="$name"/>
   1.769 +    <xsl:text>);
   1.770 +    if (thread_oop == NULL) {
   1.771 +</xsl:text>
   1.772 +    <xsl:apply-templates select=".." mode="traceError">     
   1.773 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
   1.774 +      <xsl:with-param name="comment"> - jthread resolved to NULL - jthread = %0x%x</xsl:with-param>
   1.775 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.776 +    </xsl:apply-templates>
   1.777 +    <xsl:text>
   1.778 +    }
   1.779 +    if (!thread_oop-&gt;is_a(SystemDictionary::thread_klass())) {
   1.780 +</xsl:text>
   1.781 +    <xsl:apply-templates select=".." mode="traceError">     
   1.782 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
   1.783 +      <xsl:with-param name="comment"> - oop is not a thread - jthread = %0x%x</xsl:with-param>
   1.784 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.785 +    </xsl:apply-templates>
   1.786 +    <xsl:text>
   1.787 +    }
   1.788 +    java_thread = java_lang_Thread::thread(thread_oop); 
   1.789 +    if (java_thread == NULL) {
   1.790 +</xsl:text>
   1.791 +    <xsl:apply-templates select=".." mode="traceError">     
   1.792 +      <xsl:with-param name="err">
   1.793 +        <xsl:text>JVMTI_ERROR_THREAD_NOT_ALIVE</xsl:text>
   1.794 +      </xsl:with-param>
   1.795 +      <xsl:with-param name="comment"> - not a Java thread - jthread = %0x%x</xsl:with-param>
   1.796 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.797 +    </xsl:apply-templates>
   1.798 +    <xsl:text>
   1.799 +    }
   1.800 +</xsl:text>  
   1.801 +</xsl:template>
   1.802 +
   1.803 +<xsl:template match="jthread" mode="dochecks">
   1.804 +  <xsl:param name="name"/>
   1.805 +  <!-- If we convert and test threads -->
   1.806 +  <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
   1.807 +    <xsl:text>  JavaThread* java_thread;
   1.808 +</xsl:text>
   1.809 +    <xsl:choose>
   1.810 +      <xsl:when test="count(@null)=0">
   1.811 +        <xsl:apply-templates select="." mode="dochecksbody">
   1.812 +          <xsl:with-param name="name" select="$name"/>
   1.813 +        </xsl:apply-templates>
   1.814 +      </xsl:when>
   1.815 +      <xsl:otherwise>
   1.816 +        <xsl:text>  if (</xsl:text>
   1.817 +        <xsl:value-of select="$name"/>
   1.818 +        <xsl:text> == NULL) {
   1.819 +    java_thread = current_thread;
   1.820 +  } else {
   1.821 +</xsl:text>
   1.822 +        <xsl:apply-templates select="." mode="dochecksbody">
   1.823 +          <xsl:with-param name="name" select="$name"/>
   1.824 +        </xsl:apply-templates>
   1.825 +        <xsl:text>  }
   1.826 +</xsl:text>
   1.827 +      </xsl:otherwise>
   1.828 +    </xsl:choose>
   1.829 +  </xsl:if>
   1.830 +</xsl:template>
   1.831 +
   1.832 +<xsl:template match="jframeID" mode="dochecks">
   1.833 +  <xsl:param name="name"/>
   1.834 +  <xsl:text>
   1.835 +  if (depth &lt; 0) {
   1.836 +</xsl:text>
   1.837 +    <xsl:apply-templates select=".." mode="traceError">     
   1.838 +      <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param>
   1.839 +      <xsl:with-param name="comment"> - negative depth - jthread = %0x%x</xsl:with-param>
   1.840 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.841 +    </xsl:apply-templates>
   1.842 +    <xsl:text>
   1.843 +  }
   1.844 +</xsl:text>
   1.845 +</xsl:template>
   1.846 +
   1.847 +<xsl:template match="jclass" mode="dochecks">
   1.848 + <xsl:param name="name"/>
   1.849 + <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
   1.850 + <xsl:if test="count(@method)=0">
   1.851 +  <xsl:text>  oop k_mirror = JNIHandles::resolve_external_guard(</xsl:text>  
   1.852 +  <xsl:value-of select="$name"/>
   1.853 +  <xsl:text>);
   1.854 +  if (k_mirror == NULL) {
   1.855 +</xsl:text>
   1.856 +    <xsl:apply-templates select=".." mode="traceError">     
   1.857 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   1.858 +      <xsl:with-param name="comment"> - resolved to NULL - jclass = 0x%x</xsl:with-param>
   1.859 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.860 +    </xsl:apply-templates>
   1.861 +    <xsl:text>
   1.862 +  }
   1.863 +  if (!k_mirror->is_a(SystemDictionary::class_klass())) {
   1.864 +</xsl:text>
   1.865 +    <xsl:apply-templates select=".." mode="traceError">     
   1.866 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   1.867 +      <xsl:with-param name="comment"> - not a class - jclass = 0x%x</xsl:with-param>
   1.868 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.869 +    </xsl:apply-templates>
   1.870 +    <xsl:text>
   1.871 +  }
   1.872 +</xsl:text>
   1.873 +  <xsl:if test="count(@method|@field)=1">
   1.874 +    <xsl:text>
   1.875 +  if (java_lang_Class::is_primitive(k_mirror)) {
   1.876 +</xsl:text>
   1.877 +    <xsl:apply-templates select=".." mode="traceError">     
   1.878 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   1.879 +      <xsl:with-param name="comment"> - is a primitive class - jclass = 0x%x</xsl:with-param>
   1.880 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.881 +    </xsl:apply-templates>
   1.882 +    <xsl:text>
   1.883 +  }
   1.884 +  klassOop k_oop = java_lang_Class::as_klassOop(k_mirror);
   1.885 +  if (k_oop == NULL) {
   1.886 +</xsl:text>
   1.887 +    <xsl:apply-templates select=".." mode="traceError">     
   1.888 +      <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   1.889 +      <xsl:with-param name="comment"> - no klassOop - jclass = 0x%x</xsl:with-param>
   1.890 +      <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   1.891 +    </xsl:apply-templates>
   1.892 +    <xsl:text>
   1.893 +  }
   1.894 +</xsl:text>
   1.895 +  </xsl:if>
   1.896 + </xsl:if>
   1.897 +</xsl:template>
   1.898 +
   1.899 +
   1.900 +<xsl:template match="jmethodID" mode="dochecks">
   1.901 +  <xsl:param name="name"/>
   1.902 +  <xsl:text>  methodOop method_oop = JNIHandles::checked_resolve_jmethod_id(</xsl:text>
   1.903 +  <xsl:value-of select="$name"/>
   1.904 +  <xsl:text>);&#xA;</xsl:text>
   1.905 +  <xsl:text>  if (method_oop == NULL) {&#xA;</xsl:text>
   1.906 +  <xsl:apply-templates select=".." mode="traceError">     
   1.907 +    <xsl:with-param name="err">JVMTI_ERROR_INVALID_METHODID</xsl:with-param>
   1.908 +    <xsl:with-param name="comment"></xsl:with-param>
   1.909 +    <xsl:with-param name="extraValue"></xsl:with-param>
   1.910 +  </xsl:apply-templates>
   1.911 +  <xsl:text>&#xA;</xsl:text>
   1.912 +  <xsl:text>  }&#xA;</xsl:text>
   1.913 +  <xsl:if test="count(@native)=1 and contains(@native,'error')">
   1.914 +    <xsl:text>  if (method_oop->is_native()) {&#xA;</xsl:text>   
   1.915 +    <xsl:text>    return JVMTI_ERROR_NATIVE_METHOD;&#xA;</xsl:text>   
   1.916 +    <xsl:text>  }&#xA;</xsl:text>   
   1.917 +  </xsl:if>
   1.918 +</xsl:template>
   1.919 +
   1.920 +
   1.921 +<xsl:template match="jfieldID" mode="dochecks">
   1.922 +  <xsl:param name="name"/>
   1.923 +  <xsl:text>  ResourceMark rm_fdesc(current_thread);&#xA;</xsl:text>
   1.924 +  <xsl:text>  fieldDescriptor fdesc;&#xA;</xsl:text>
   1.925 +  <xsl:text>  if (!JvmtiEnv::get_field_descriptor(k_oop, </xsl:text>
   1.926 +  <xsl:value-of select="$name"/>
   1.927 +  <xsl:text>, &amp;fdesc)) {&#xA;</xsl:text>
   1.928 +  <xsl:apply-templates select=".." mode="traceError">     
   1.929 +    <xsl:with-param name="err">JVMTI_ERROR_INVALID_FIELDID</xsl:with-param>
   1.930 +  </xsl:apply-templates>
   1.931 +  <xsl:text>&#xA;</xsl:text>
   1.932 +  <xsl:text>  }&#xA;</xsl:text>
   1.933 +</xsl:template>
   1.934 +
   1.935 +
   1.936 +<xsl:template match="jint" mode="dochecks">
   1.937 +  <xsl:param name="name"/>
   1.938 +  <xsl:if test="count(@min)=1">
   1.939 +    <xsl:text>  if (</xsl:text>
   1.940 +    <xsl:value-of select="$name"/>
   1.941 +    <xsl:text> &lt; </xsl:text>
   1.942 +    <xsl:value-of select="@min"/>
   1.943 +    <xsl:text>) {
   1.944 +</xsl:text>
   1.945 +    <xsl:apply-templates select=".." mode="traceError">     
   1.946 +      <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param>
   1.947 +    </xsl:apply-templates>
   1.948 +    <xsl:text>
   1.949 +  }
   1.950 +</xsl:text>
   1.951 +  </xsl:if>
   1.952 +</xsl:template>
   1.953 +
   1.954 +<xsl:template match="jobject|jvalue|jthreadGroup|enum|jchar|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|struct" mode="dochecks">
   1.955 +</xsl:template>
   1.956 +
   1.957 +<!-- iterate over parameters, stopping if specified is encountered -->
   1.958 +<xsl:template name="traceInValueParamsUpTo">
   1.959 +  <xsl:param name="params"/>
   1.960 +  <xsl:param name="endParam"></xsl:param>
   1.961 +  <xsl:param name="index" select="1"/>
   1.962 +  <xsl:variable name="cParam" select="$params[position()=$index]"/>
   1.963 +  <xsl:if test="$cParam!=$endParam">
   1.964 +    <xsl:apply-templates select="$cParam" mode="traceInValue"/>
   1.965 +    <xsl:if test="count($params) &gt; $index">
   1.966 +      <xsl:call-template name="traceInValueParamsUpTo">
   1.967 +        <xsl:with-param name="params" select="$params"/>
   1.968 +        <xsl:with-param name="endParam" select="$endParam"/>
   1.969 +        <xsl:with-param name="index" select="1+$index"/>
   1.970 +      </xsl:call-template>
   1.971 +    </xsl:if>
   1.972 +  </xsl:if>
   1.973 +</xsl:template>
   1.974 +
   1.975 +<xsl:template name="traceInFormatParamsUpTo">
   1.976 +  <xsl:param name="params"/>
   1.977 +  <xsl:param name="endParam"></xsl:param>
   1.978 +  <xsl:param name="index" select="1"/>
   1.979 +  <xsl:variable name="cParam" select="$params[position()=$index]"/>
   1.980 +  <xsl:if test="$cParam!=$endParam">
   1.981 +    <xsl:apply-templates select="$cParam" mode="traceInFormat"/>
   1.982 +    <xsl:if test="count($params) &gt; $index">
   1.983 +      <xsl:call-template name="traceInFormatParamsUpTo">
   1.984 +        <xsl:with-param name="params" select="$params"/>
   1.985 +        <xsl:with-param name="endParam" select="$endParam"/>
   1.986 +        <xsl:with-param name="index" select="1+$index"/>
   1.987 +      </xsl:call-template>
   1.988 +    </xsl:if>
   1.989 +  </xsl:if>
   1.990 +</xsl:template>
   1.991 +
   1.992 +<xsl:template match="parameters" mode="traceInFormat">
   1.993 +  <xsl:param name="endParam"></xsl:param>
   1.994 +  <xsl:call-template name="traceInFormatParamsUpTo">
   1.995 +    <xsl:with-param name="params" select="param"/>
   1.996 +    <xsl:with-param name="endParam" select="$endParam"/>
   1.997 +  </xsl:call-template>
   1.998 +</xsl:template>
   1.999 +
  1.1000 +<xsl:template match="parameters" mode="traceInValue">
  1.1001 +  <xsl:param name="endParam"></xsl:param>
  1.1002 +  <xsl:call-template name="traceInValueParamsUpTo">
  1.1003 +    <xsl:with-param name="params" select="param"/>
  1.1004 +    <xsl:with-param name="endParam" select="$endParam"/>
  1.1005 +  </xsl:call-template>
  1.1006 +</xsl:template>
  1.1007 +
  1.1008 +<xsl:template match="param" mode="traceInFormat">
  1.1009 +  <xsl:apply-templates select="child::*[position()=1]" mode="traceInFormat">
  1.1010 +    <xsl:with-param name="name" select="@id"/>
  1.1011 +  </xsl:apply-templates>
  1.1012 +</xsl:template>
  1.1013 +
  1.1014 +<xsl:template match="param" mode="traceInValue">
  1.1015 +  <xsl:apply-templates select="child::*[position()=1]" mode="traceInValue">
  1.1016 +    <xsl:with-param name="name" select="@id"/>
  1.1017 +  </xsl:apply-templates>
  1.1018 +</xsl:template>
  1.1019 +
  1.1020 +<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInFormat">
  1.1021 +</xsl:template>
  1.1022 +
  1.1023 +<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInValue">
  1.1024 +</xsl:template>
  1.1025 +
  1.1026 +<xsl:template match="inbuf" mode="traceInFormat">
  1.1027 +  <xsl:param name="name"/>
  1.1028 +  <xsl:text> </xsl:text>
  1.1029 +  <xsl:value-of select="$name"/>
  1.1030 +  <xsl:variable name="child" select="child::*[position()=1]"/>
  1.1031 +  <xsl:choose>
  1.1032 +    <xsl:when test="name($child)='char'">
  1.1033 +      <xsl:text>='%s'</xsl:text>
  1.1034 +    </xsl:when>
  1.1035 +    <xsl:otherwise>
  1.1036 +      <xsl:text>=0x%x</xsl:text>
  1.1037 +    </xsl:otherwise>
  1.1038 +  </xsl:choose>
  1.1039 +</xsl:template>
  1.1040 +
  1.1041 +<xsl:template match="inbuf" mode="traceInValue">
  1.1042 +  <xsl:param name="name"/>
  1.1043 +  <xsl:text>, </xsl:text>
  1.1044 +  <xsl:value-of select="$name"/>
  1.1045 +</xsl:template>
  1.1046 +
  1.1047 +<xsl:template match="ptrtype" mode="traceInFormat">
  1.1048 +  <xsl:param name="name"/>
  1.1049 +  <xsl:variable name="child" select="child::*[position()=1]"/>
  1.1050 +  <xsl:choose>
  1.1051 +    <xsl:when test="name($child)='jclass'">
  1.1052 +      <xsl:text> </xsl:text>
  1.1053 +      <xsl:value-of select="$name"/>
  1.1054 +      <xsl:text>=0x%x</xsl:text>
  1.1055 +    </xsl:when>
  1.1056 +    <xsl:otherwise>
  1.1057 +      <xsl:apply-templates select="$child" mode="traceInFormat"/> 
  1.1058 +    </xsl:otherwise>
  1.1059 +  </xsl:choose>
  1.1060 +</xsl:template>
  1.1061 +
  1.1062 +<xsl:template match="ptrtype" mode="traceInValue">
  1.1063 +  <xsl:param name="name"/>
  1.1064 +  <xsl:variable name="child" select="child::*[position()=1]"/>
  1.1065 +  <xsl:choose>
  1.1066 +    <xsl:when test="name($child)='jclass'">
  1.1067 +      <xsl:text>, </xsl:text>
  1.1068 +      <xsl:value-of select="$name"/>
  1.1069 +    </xsl:when>
  1.1070 +    <xsl:otherwise>
  1.1071 +      <xsl:apply-templates select="$child" mode="traceInValue"/>
  1.1072 +    </xsl:otherwise>
  1.1073 +  </xsl:choose> 
  1.1074 +</xsl:template>
  1.1075 +
  1.1076 +<xsl:template match="inptr" mode="traceInFormat">
  1.1077 +  <xsl:param name="name"/>
  1.1078 +  <xsl:text> </xsl:text>
  1.1079 +  <xsl:value-of select="$name"/>
  1.1080 +  <xsl:text>=0x%x</xsl:text>
  1.1081 +</xsl:template>
  1.1082 +
  1.1083 +<xsl:template match="inptr" mode="traceInValue">
  1.1084 +  <xsl:param name="name"/>
  1.1085 +  <xsl:text>, </xsl:text>
  1.1086 +  <xsl:value-of select="$name"/>
  1.1087 +</xsl:template>
  1.1088 +
  1.1089 +<xsl:template match="jrawMonitorID|jfieldID" mode="traceInFormat">
  1.1090 +  <xsl:param name="name"/>
  1.1091 +  <xsl:text> </xsl:text>
  1.1092 +  <xsl:value-of select="$name"/>
  1.1093 +  <xsl:text>=%s</xsl:text>
  1.1094 +</xsl:template>
  1.1095 +
  1.1096 +<xsl:template match="jclass" mode="traceInFormat">
  1.1097 +  <xsl:param name="name"/>
  1.1098 +  <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
  1.1099 +  <xsl:if test="count(@method)=0">
  1.1100 +    <xsl:text> </xsl:text>
  1.1101 +    <xsl:value-of select="$name"/>
  1.1102 +    <xsl:text>=%s</xsl:text>
  1.1103 +  </xsl:if>
  1.1104 +</xsl:template>
  1.1105 +
  1.1106 +<xsl:template match="jrawMonitorID" mode="traceInValue">
  1.1107 +  <xsl:param name="name"/>
  1.1108 +  <xsl:text>, rmonitor->get_name()</xsl:text>
  1.1109 +</xsl:template>
  1.1110 +
  1.1111 +<xsl:template match="jthread" mode="traceInFormat">
  1.1112 +  <xsl:param name="name"/>
  1.1113 +  <!-- If we convert and test threads -->
  1.1114 +  <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
  1.1115 +    <xsl:text> </xsl:text>
  1.1116 +    <xsl:value-of select="$name"/>
  1.1117 +    <xsl:text>=%s</xsl:text>
  1.1118 +  </xsl:if>
  1.1119 +</xsl:template>
  1.1120 +
  1.1121 +<xsl:template match="jthread" mode="traceInValue">
  1.1122 +  <xsl:param name="name"/>
  1.1123 +  <!-- If we convert and test threads -->
  1.1124 +  <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
  1.1125 +    <xsl:text>, 
  1.1126 +                    JvmtiTrace::safe_get_thread_name(java_thread)</xsl:text>  
  1.1127 +  </xsl:if>
  1.1128 +</xsl:template>
  1.1129 +
  1.1130 +<xsl:template match="jframeID" mode="traceInFormat">
  1.1131 +  <xsl:param name="name"/>
  1.1132 +  <xsl:text>depth=%d</xsl:text>
  1.1133 +</xsl:template>
  1.1134 +
  1.1135 +<xsl:template match="jframeID" mode="traceInValue">
  1.1136 +  <xsl:param name="name"/>
  1.1137 +  <xsl:text>, </xsl:text>
  1.1138 +  <xsl:value-of select="$name"/>
  1.1139 +</xsl:template>
  1.1140 +
  1.1141 +<xsl:template match="jclass" mode="traceInValue">
  1.1142 +  <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
  1.1143 +  <xsl:if test="count(@method)=0">
  1.1144 +    <xsl:text>, 
  1.1145 +                    JvmtiTrace::get_class_name(k_mirror)</xsl:text>
  1.1146 +  </xsl:if>
  1.1147 +</xsl:template>
  1.1148 +
  1.1149 +<xsl:template match="jmethodID" mode="traceInFormat">
  1.1150 +  <xsl:param name="name"/>
  1.1151 +  <xsl:text> </xsl:text>
  1.1152 +  <xsl:value-of select="$name"/>
  1.1153 +  <xsl:text>=%s.%s</xsl:text>
  1.1154 +</xsl:template>
  1.1155 +
  1.1156 +<xsl:template match="jmethodID" mode="traceInValue">
  1.1157 +  <xsl:param name="name"/>
  1.1158 +  <xsl:text>, 
  1.1159 +                    method_oop == NULL? "NULL" : method_oop->klass_name()->as_C_string(),
  1.1160 +                    method_oop == NULL? "NULL" : method_oop->name()->as_C_string()
  1.1161 +             </xsl:text>
  1.1162 +</xsl:template>
  1.1163 +
  1.1164 +<xsl:template match="jfieldID" mode="traceInValue">
  1.1165 +  <xsl:param name="name"/>
  1.1166 +  <xsl:text>, fdesc.name()->as_C_string()</xsl:text>
  1.1167 +</xsl:template>
  1.1168 +
  1.1169 +<xsl:template match="enum" mode="traceInFormat">
  1.1170 +  <xsl:param name="name"/>
  1.1171 +  <xsl:text> </xsl:text>
  1.1172 +  <xsl:value-of select="$name"/>
  1.1173 +  <xsl:text>=%d:%s</xsl:text>
  1.1174 +</xsl:template>
  1.1175 +
  1.1176 +<xsl:template match="enum" mode="traceInValue">
  1.1177 +  <xsl:param name="name"/>
  1.1178 +  <xsl:text>, </xsl:text>
  1.1179 +  <xsl:value-of select="$name"/>
  1.1180 +  <xsl:text>, 
  1.1181 +                    </xsl:text>
  1.1182 +  <xsl:choose>
  1.1183 +    <xsl:when test=".='jvmtiError'">
  1.1184 +      <xsl:text>JvmtiUtil::error_name(</xsl:text>
  1.1185 +      <xsl:value-of select="$name"/>
  1.1186 +      <xsl:text>)
  1.1187 +</xsl:text>
  1.1188 +    </xsl:when>
  1.1189 +    <xsl:otherwise>
  1.1190 +      <xsl:choose>
  1.1191 +        <xsl:when test=".='jvmtiEvent'">
  1.1192 +          <xsl:text>JvmtiTrace::event_name(</xsl:text>
  1.1193 +          <xsl:value-of select="$name"/>
  1.1194 +          <xsl:text>)
  1.1195 +        </xsl:text>
  1.1196 +      </xsl:when>
  1.1197 +      <xsl:otherwise>
  1.1198 +        <xsl:text>JvmtiTrace::enum_name(</xsl:text>
  1.1199 +        <xsl:value-of select="."/>
  1.1200 +        <xsl:text>ConstantNames, </xsl:text>
  1.1201 +        <xsl:value-of select="."/>
  1.1202 +        <xsl:text>ConstantValues, </xsl:text>
  1.1203 +        <xsl:value-of select="$name"/>
  1.1204 +        <xsl:text>)</xsl:text>
  1.1205 +      </xsl:otherwise>
  1.1206 +    </xsl:choose>
  1.1207 +    </xsl:otherwise>
  1.1208 +  </xsl:choose>
  1.1209 +</xsl:template>
  1.1210 +
  1.1211 +<xsl:template match="jint|jlocation" mode="traceInFormat">
  1.1212 +  <xsl:param name="name"/>
  1.1213 +  <xsl:text> </xsl:text>
  1.1214 +  <xsl:value-of select="$name"/>
  1.1215 +  <xsl:text>=%d</xsl:text>
  1.1216 +</xsl:template>
  1.1217 +
  1.1218 +<xsl:template match="jlong" mode="traceInFormat">
  1.1219 +  <xsl:param name="name"/>
  1.1220 +  <xsl:text> </xsl:text>
  1.1221 +  <xsl:value-of select="$name"/>
  1.1222 +  <xsl:text>=%ld</xsl:text>
  1.1223 +</xsl:template>
  1.1224 +
  1.1225 +<xsl:template match="size_t" mode="traceInFormat">
  1.1226 +  <xsl:param name="name"/>
  1.1227 +  <xsl:text> </xsl:text>
  1.1228 +  <xsl:value-of select="$name"/>
  1.1229 +  <xsl:text>=0x%zx</xsl:text>
  1.1230 +</xsl:template>
  1.1231 +
  1.1232 +<xsl:template match="jfloat|jdouble" mode="traceInFormat">
  1.1233 +  <xsl:param name="name"/>
  1.1234 +  <xsl:text> </xsl:text>
  1.1235 +  <xsl:value-of select="$name"/>
  1.1236 +  <xsl:text>=%f</xsl:text>
  1.1237 +</xsl:template>
  1.1238 +
  1.1239 +<xsl:template match="char" mode="traceInFormat">
  1.1240 +  <xsl:param name="name"/>
  1.1241 +  <xsl:text> </xsl:text>
  1.1242 +  <xsl:value-of select="$name"/>
  1.1243 +  <xsl:text>=%c</xsl:text>
  1.1244 +</xsl:template>
  1.1245 +
  1.1246 +<xsl:template match="uchar|jchar" mode="traceInFormat">
  1.1247 +  <xsl:param name="name"/>
  1.1248 +  <xsl:text> </xsl:text>
  1.1249 +  <xsl:value-of select="$name"/>
  1.1250 +  <xsl:text>=0x%x</xsl:text>
  1.1251 +</xsl:template>
  1.1252 +
  1.1253 +<xsl:template match="jint|jlocation|jchar|jlong|jfloat|jdouble|char|uchar|size_t" mode="traceInValue">
  1.1254 +  <xsl:param name="name"/>
  1.1255 +  <xsl:text>, </xsl:text>
  1.1256 +  <xsl:value-of select="$name"/>
  1.1257 +</xsl:template>
  1.1258 +
  1.1259 +
  1.1260 +<xsl:template match="jboolean" mode="traceInFormat">
  1.1261 +  <xsl:param name="name"/>
  1.1262 +  <xsl:text> </xsl:text>
  1.1263 +  <xsl:value-of select="$name"/>
  1.1264 +  <xsl:text>=%s</xsl:text>
  1.1265 +</xsl:template>
  1.1266 +
  1.1267 +<xsl:template match="jboolean" mode="traceInValue">
  1.1268 +  <xsl:param name="name"/>
  1.1269 +  <xsl:text>, </xsl:text>
  1.1270 +  <xsl:value-of select="$name"/>
  1.1271 +  <xsl:text>? "true" : "false"</xsl:text>
  1.1272 +</xsl:template>
  1.1273 +
  1.1274 +<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInFormat">
  1.1275 +</xsl:template>
  1.1276 +
  1.1277 +<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInValue">
  1.1278 +</xsl:template>
  1.1279 +
  1.1280 +
  1.1281 +
  1.1282 +</xsl:stylesheet>

mercurial