src/share/vm/prims/jvmtiEnter.xsl

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

mercurial