src/share/vm/prims/jvmtiEnter.xsl

Tue, 11 Mar 2014 15:06:34 +0400

author
vlivanov
date
Tue, 11 Mar 2014 15:06:34 +0400
changeset 7179
7301840ea20e
parent 6680
78bbf4d43a14
child 6876
710a3c8b516e
child 8316
626f594dffa6
permissions
-rw-r--r--

8023461: Thread holding lock at safepoint that vm can block on: MethodCompileQueue_lock
Reviewed-by: kvn, iveresov

     1 <?xml version="1.0"?> 
     2 <!--
     3  Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
     4  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     6  This code is free software; you can redistribute it and/or modify it
     7  under the terms of the GNU General Public License version 2 only, as
     8  published by the Free Software Foundation.
    10  This code is distributed in the hope that it will be useful, but WITHOUT
    11  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    12  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    13  version 2 for more details (a copy is included in the LICENSE file that
    14  accompanied this code).
    16  You should have received a copy of the GNU General Public License version
    17  2 along with this work; if not, write to the Free Software Foundation,
    18  Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    21  or visit www.oracle.com if you need additional information or have any
    22  questions.
    24 -->
    26 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    28 <xsl:import href="jvmtiLib.xsl"/>
    30 <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
    32 <xsl:param name="trace"></xsl:param>
    33 <xsl:param name="interface"></xsl:param>
    36 <xsl:template match="specification">
    37   <xsl:call-template name="sourceHeader"/>
    38   <xsl:text>
    39 # include "precompiled.hpp"
    40 # include "utilities/macros.hpp"
    41 #if INCLUDE_JVMTI
    42 # include "prims/jvmtiEnter.hpp"
    43 # include "prims/jvmtiRawMonitor.hpp"
    44 # include "prims/jvmtiUtil.hpp"
    46 // There are known-bad format/arg pairings in the code generated by this file.
    47 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
    49 </xsl:text>
    51   <xsl:if test="$trace = 'Trace'">
    52    <xsl:text>
    53 #ifdef JVMTI_TRACE
    54 </xsl:text>
    55   </xsl:if>
    57  <xsl:if test="$trace != 'Trace'">
    58     <xsl:text>
    60 // Error names
    61 const char* JvmtiUtil::_error_names[] = {
    62 </xsl:text>
    63     <xsl:call-template name="fillEntityName"> 
    64       <xsl:with-param name="entities" select="errorsection/errorcategory/errorid"/>
    65     </xsl:call-template>
    66     <xsl:text>
    67 };
    70 // Event threaded
    71 const bool JvmtiUtil::_event_threaded[] = {
    72 </xsl:text>
    73     <xsl:call-template name="fillEventThreaded"> 
    74       <xsl:with-param name="entities" select="eventsection/event"/>
    75     </xsl:call-template>
    76     <xsl:text>
    77 };
    79 </xsl:text>
    80     <xsl:call-template name="eventCapabilitiesTest"/>
    81  </xsl:if>
    83  <xsl:if test="$trace = 'Trace'">
    85 <!--  all this just to return the highest event number -->
    86   <xsl:variable name="maxEvent">
    87     <xsl:for-each select="eventsection/event">
    88       <xsl:variable name="mynum" select="@num"/>
    89       <xsl:if test="count(../../eventsection/event[@num &gt; $mynum]) = 0">
    90         <xsl:value-of select="@num"/>
    91       </xsl:if>
    92     </xsl:for-each>    
    93   </xsl:variable>
    95   <xsl:text>jbyte JvmtiTrace::_event_trace_flags[</xsl:text>
    96   <xsl:value-of select="1+$maxEvent"/>
    97   <xsl:text>];
    99 jint JvmtiTrace::_max_event_index = </xsl:text>
   100   <xsl:value-of select="$maxEvent"/>
   101   <xsl:text>;
   103 // Event names
   104 const char* JvmtiTrace::_event_names[] = {
   105 </xsl:text>
   106     <xsl:call-template name="fillEntityName"> 
   107       <xsl:with-param name="entities" select="eventsection/event"/>
   108     </xsl:call-template>
   109     <xsl:text>
   110 };
   111 </xsl:text>
   112     <xsl:apply-templates select="//constants[@kind='enum']"/>
   113   </xsl:if>
   114   <xsl:apply-templates select="functionsection"/>
   116   <xsl:if test="$trace='Trace'">
   117    <xsl:text>
   118 #endif /*JVMTI_TRACE */
   119 </xsl:text>
   120   </xsl:if>
   122 </xsl:template>
   124 <xsl:template match="constants">
   125   <xsl:text>
   127 // </xsl:text>
   128   <xsl:value-of select="@label"/>
   129   <xsl:text> names
   130 const char* </xsl:text>
   131   <xsl:value-of select="@id"/>
   132   <xsl:text>ConstantNames[] = {
   133 </xsl:text>
   134   <xsl:apply-templates select="constant" mode="constname"/>
   135   <xsl:text>  NULL
   136 };
   138 // </xsl:text>
   139   <xsl:value-of select="@label"/>
   140   <xsl:text> value
   141 jint </xsl:text>
   142   <xsl:value-of select="@id"/>
   143   <xsl:text>ConstantValues[] = {
   144 </xsl:text>
   145   <xsl:apply-templates select="constant" mode="constvalue"/>
   146   <xsl:text>  0
   147 };
   149 </xsl:text>
   150 </xsl:template>
   152 <xsl:template match="constant" mode="constname">
   153   <xsl:text>  "</xsl:text>
   154   <xsl:value-of select="@id"/>
   155   <xsl:text>",
   156 </xsl:text>
   157 </xsl:template>
   159 <xsl:template match="constant" mode="constvalue">
   160   <xsl:text>  </xsl:text>
   161   <xsl:value-of select="@num"/>
   162   <xsl:text>,
   163 </xsl:text>
   164 </xsl:template>
   166 <xsl:template name="eventCapabilitiesTest">
   167   <xsl:text>
   169 // Check Event Capabilities
   170 const bool JvmtiUtil::has_event_capability(jvmtiEvent event_type, const jvmtiCapabilities* capabilities_ptr) {
   171   switch (event_type) {
   172 </xsl:text>
   173   <xsl:for-each select="//eventsection/event">
   174     <xsl:variable name="capa" select="capabilities/required"/>
   175     <xsl:if test="count($capa)">
   176         <xsl:text>    case </xsl:text>
   177         <xsl:value-of select="@const"/>
   178         <xsl:text>:
   179       return capabilities_ptr-&gt;</xsl:text>
   180         <xsl:value-of select="$capa/@id"/>
   181         <xsl:text> != 0;
   182 </xsl:text>
   183     </xsl:if>
   184   </xsl:for-each>
   185   <xsl:text>  }
   186   // if it does not have a capability it is required
   187   return JNI_TRUE;
   188 }
   190 </xsl:text>
   191 </xsl:template>
   193 <xsl:template match="functionsection">
   194   <xsl:if test="$trace='Trace'">
   196 <!--  all this just to return the highest function number -->
   197   <xsl:variable name="maxFunction">
   198     <xsl:for-each select="category/function">
   199       <xsl:variable name="mynum" select="@num"/>
   200       <xsl:if test="count(../../category/function[@num &gt; $mynum]) = 0">
   201         <xsl:value-of select="@num"/>
   202       </xsl:if>
   203     </xsl:for-each>    
   204   </xsl:variable>
   206   <xsl:text>jbyte JvmtiTrace::_trace_flags[</xsl:text>
   207   <xsl:value-of select="1+$maxFunction"/>
   208   <xsl:text>];
   210 jint JvmtiTrace::_max_function_index = </xsl:text>
   211   <xsl:value-of select="$maxFunction"/>
   212   <xsl:text>;
   214 // Function names
   215 const char* JvmtiTrace::_function_names[] = {
   216 </xsl:text>
   217   <xsl:call-template name="fillEntityName">
   218     <xsl:with-param name="entities" select="category/function"/>
   219   </xsl:call-template>
   220   <xsl:text>
   221 };
   223 // Exclude list
   224 short JvmtiTrace::_exclude_functions[] = {
   225   </xsl:text>
   226   <xsl:apply-templates select="category/function" mode="notrace">
   227     <xsl:sort select="@num"/>
   228   </xsl:apply-templates>
   229   <xsl:text>0
   230 };
   232 </xsl:text>
   233   </xsl:if>
   235   <xsl:text>
   236 extern "C" {
   238 </xsl:text>
   239   <xsl:apply-templates select="category" mode="wrapper"/>
   240   <xsl:text>
   241 } /* end extern "C" */
   243 // JVMTI API functions
   244 struct jvmtiInterface_1_ jvmti</xsl:text>
   245   <xsl:value-of select="$trace"/>
   246   <xsl:text>_Interface = {
   247 </xsl:text>
   249   <xsl:call-template name="fillFuncStruct">
   250     <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/>
   251   </xsl:call-template>
   253   <xsl:text>
   254 };
   255 #endif // INCLUDE_JVMTI
   256 </xsl:text>
   257 </xsl:template>
   259 <xsl:template match="function" mode="functionid">
   260   <xsl:text>jvmti</xsl:text>
   261   <xsl:value-of select="$trace"/>
   262   <xsl:text>_</xsl:text>
   263   <xsl:value-of select="@id"/>
   264 </xsl:template>
   266 <xsl:template name="fillFuncStructDoit">
   267   <xsl:param name="func"/>
   268   <xsl:param name="index"/>
   269   <xsl:text>                              /* </xsl:text>
   270   <xsl:number value="$index" format="  1"/>
   271   <xsl:text> : </xsl:text>
   272   <xsl:choose>
   273     <xsl:when test="count($func)=1">
   274       <xsl:value-of select="$func/synopsis"/>
   275       <xsl:text> */
   276       </xsl:text>
   277       <xsl:apply-templates select="$func" mode="functionid"/>
   278     </xsl:when>
   279     <xsl:otherwise>
   280       <xsl:text> RESERVED */
   281       NULL</xsl:text>        
   282     </xsl:otherwise>
   283   </xsl:choose>
   284 </xsl:template>
   286 <!-- generic function iterator applied to the function structure -->
   287 <xsl:template name="fillFuncStruct">
   288   <xsl:param name="funcs"/>
   289   <xsl:param name="index" select="1"/>
   290   <xsl:call-template name="fillFuncStructDoit">
   291     <xsl:with-param name="func" select="$funcs[@num=$index]"/>
   292     <xsl:with-param name="index" select="$index"/>
   293   </xsl:call-template>
   294   <xsl:if test="count($funcs[@num &gt; $index]) &gt; 0">
   295     <xsl:text>,
   296 </xsl:text>
   297     <xsl:call-template name="fillFuncStruct">
   298       <xsl:with-param name="funcs" select="$funcs"/>
   299       <xsl:with-param name="index" select="1+$index"/>
   300     </xsl:call-template>
   301   </xsl:if>
   302 </xsl:template>
   304 <xsl:template name="fillEntityNameDoit">
   305   <xsl:param name="entity"/>
   306   <xsl:param name="index"/>
   307   <xsl:choose>
   308     <xsl:when test="count($entity) &gt; 0">
   309       <xsl:text>  "</xsl:text>
   310       <xsl:value-of select="$entity[position()=1]/@id"/>
   311       <xsl:text>"</xsl:text>
   312     </xsl:when>
   313     <xsl:otherwise>
   314       <xsl:text>  NULL</xsl:text>        
   315     </xsl:otherwise>
   316   </xsl:choose>
   317 </xsl:template>
   319 <!-- generic entity (with id and num) iterator applied to entity names -->
   320 <xsl:template name="fillEntityName">
   321   <xsl:param name="entities"/>
   322   <xsl:param name="index" select="0"/>
   323   <xsl:call-template name="fillEntityNameDoit">
   324     <xsl:with-param name="entity" select="$entities[@num=$index]"/>
   325     <xsl:with-param name="index" select="$index"/>
   326   </xsl:call-template>
   327   <xsl:if test="count($entities[@num &gt; $index]) &gt; 0">
   328     <xsl:text>,
   329 </xsl:text>
   330     <xsl:call-template name="fillEntityName">
   331       <xsl:with-param name="entities" select="$entities"/>
   332       <xsl:with-param name="index" select="1+$index"/>
   333     </xsl:call-template>
   334   </xsl:if>
   335 </xsl:template>
   337 <xsl:template name="fillEventThreadedDoit">
   338   <xsl:param name="entity"/>
   339   <xsl:param name="index"/>
   340   <xsl:choose>
   341     <xsl:when test="count($entity) &gt; 0">
   342       <xsl:choose>
   343         <xsl:when test="count($entity[position()=1]/@filtered)=0">
   344           <xsl:text>  false</xsl:text>
   345         </xsl:when>
   346         <xsl:otherwise>
   347           <xsl:text>  true</xsl:text>        
   348         </xsl:otherwise>
   349       </xsl:choose>
   350     </xsl:when>
   351     <xsl:otherwise>
   352       <xsl:text>  false</xsl:text>        
   353     </xsl:otherwise>
   354   </xsl:choose>
   355 </xsl:template>
   358 <xsl:template name="fillEventThreaded">
   359   <xsl:param name="entities"/>
   360   <xsl:param name="index" select="0"/>
   361   <xsl:call-template name="fillEventThreadedDoit">
   362     <xsl:with-param name="entity" select="$entities[@num=$index]"/>
   363     <xsl:with-param name="index" select="$index"/>
   364   </xsl:call-template>
   365   <xsl:if test="count($entities[@num &gt; $index]) &gt; 0">
   366     <xsl:text>,
   367 </xsl:text>
   368     <xsl:call-template name="fillEventThreaded">
   369       <xsl:with-param name="entities" select="$entities"/>
   370       <xsl:with-param name="index" select="1+$index"/>
   371     </xsl:call-template>
   372   </xsl:if>
   373 </xsl:template>
   375 <xsl:template match="function" mode="notrace">
   376   <xsl:if test="count(@impl)=1 and contains(@impl,'notrace')">
   377     <xsl:value-of select="@num"/>
   378     <xsl:text>,
   379   </xsl:text>
   380   </xsl:if>
   381 </xsl:template>
   383 <xsl:template match="category" mode="wrapper">
   384   <xsl:text>
   385   //
   386   // </xsl:text><xsl:value-of select="@label"/><xsl:text> functions
   387   // 
   388 </xsl:text>
   389   <xsl:apply-templates select="function[count(@hide)=0]"/>
   390 </xsl:template>
   392 <xsl:template match="function" mode="transition">
   393   <xsl:param name="space">
   394     <xsl:text>
   395   </xsl:text>
   396   </xsl:param>
   397   <xsl:value-of select="$space"/>
   399   <xsl:choose> 
   400     <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   401       <xsl:text>if (this_thread == NULL || !this_thread->is_Java_thread()) {</xsl:text> 
   402     </xsl:when> 
   403     <xsl:otherwise> 
   404       <xsl:choose>
   405         <xsl:when test="count(@phase)=0 or contains(@phase,'live') or contains(@phase,'start')">
   406 	  <xsl:text>if (this_thread == NULL || (!this_thread->is_Java_thread() &amp;&amp; !this_thread->is_VM_thread())) {</xsl:text>
   407         </xsl:when>
   408         <xsl:otherwise>
   409           <xsl:text>if (!this_thread->is_Java_thread()) {</xsl:text> 
   410         </xsl:otherwise>
   411       </xsl:choose>
   412      </xsl:otherwise> 
   413   </xsl:choose> 
   415   <xsl:if test="$trace='Trace'">
   416     <xsl:value-of select="$space"/>
   417     <xsl:text>  if (trace_flags) {</xsl:text>
   418     <xsl:value-of select="$space"/>
   419     <xsl:text>    tty->print_cr("JVMTI [non-attached thread] %s %s",  func_name,</xsl:text>
   420     <xsl:value-of select="$space"/>
   421     <xsl:text>    JvmtiUtil::error_name(JVMTI_ERROR_UNATTACHED_THREAD));</xsl:text>
   422     <xsl:value-of select="$space"/>
   423     <xsl:text>  }</xsl:text>
   424   </xsl:if>
   425   <xsl:value-of select="$space"/>
   426   <xsl:text>  return JVMTI_ERROR_UNATTACHED_THREAD;</xsl:text>
   427   <xsl:value-of select="$space"/>
   428   <xsl:text>}</xsl:text>  
   429   <xsl:value-of select="$space"/>  
   430   <xsl:if test="count(@impl)=0 or not(contains(@impl,'innative'))">
   431     <xsl:text>JavaThread* current_thread = (JavaThread*)this_thread;</xsl:text>   
   432     <xsl:value-of select="$space"/>
   433     <xsl:text>ThreadInVMfromNative __tiv(current_thread);</xsl:text>
   434     <xsl:value-of select="$space"/>
   435     <xsl:text>VM_ENTRY_BASE(jvmtiError, </xsl:text>
   436     <xsl:apply-templates select="." mode="functionid"/>
   437     <xsl:text> , current_thread)</xsl:text>
   438     <xsl:value-of select="$space"/>
   439     <xsl:text>debug_only(VMNativeEntryWrapper __vew;)</xsl:text>
   440     <xsl:if test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   441       <xsl:value-of select="$space"/>
   442       <xsl:text>CautiouslyPreserveExceptionMark __em(this_thread);</xsl:text>
   443     </xsl:if>
   444   </xsl:if>
   445 </xsl:template>
   448 <xsl:template match="required">
   449   <xsl:text>
   450   if (jvmti_env-&gt;get_capabilities()-&gt;</xsl:text>
   451     <xsl:value-of select="@id"/>
   452     <xsl:text> == 0) {
   453 </xsl:text>
   454     <xsl:if test="$trace='Trace'">
   455       <xsl:text>    if (trace_flags) {
   456           tty->print_cr("JVMTI [%s] %s %s",  curr_thread_name, func_name, 
   457                     JvmtiUtil::error_name(JVMTI_ERROR_MUST_POSSESS_CAPABILITY));
   458     }
   459 </xsl:text>
   460     </xsl:if>
   461     <xsl:text>    return JVMTI_ERROR_MUST_POSSESS_CAPABILITY;
   462   }
   463 </xsl:text>
   464 </xsl:template>
   467 <xsl:template match="function">
   468   <xsl:text>
   469 static jvmtiError JNICALL
   470 </xsl:text>
   471   <xsl:apply-templates select="." mode="functionid"/>
   472   <xsl:text>(jvmtiEnv* env</xsl:text>
   473   <xsl:apply-templates select="parameters" mode="signature"/>
   474   <xsl:text>) {
   475 </xsl:text>
   477   <xsl:if test="not(contains(@jkernel,'yes'))">
   478   <xsl:text>&#xA;#if !INCLUDE_JVMTI &#xA;</xsl:text>
   479   <xsl:text>  return JVMTI_ERROR_NOT_AVAILABLE; &#xA;</xsl:text>
   480   <xsl:text>#else &#xA;</xsl:text>
   481   </xsl:if>
   483   <xsl:apply-templates select="." mode="traceSetUp"/>
   484   <xsl:choose>
   485     <xsl:when test="count(@phase)=0 or contains(@phase,'live')">
   486       <xsl:text>  if(!JvmtiEnv::is_vm_live()) {
   487 </xsl:text>
   488     <xsl:if test="$trace='Trace'">
   489       <xsl:text>    if (trace_flags) {
   490           tty->print_cr("JVMTI [-] %s %s",  func_name, 
   491                     JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   492     }
   493 </xsl:text>
   494     </xsl:if>
   495     <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   496   }</xsl:text>  
   498       <xsl:text>  
   499   Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text>
   501       <xsl:apply-templates select="." mode="transition"/>
   502     </xsl:when>
   503     <xsl:otherwise>
   504       <xsl:if test="contains(@phase,'onload')">
   505         <xsl:text>  if(JvmtiEnv::get_phase()!=JVMTI_PHASE_ONLOAD</xsl:text>
   506         <xsl:if test="not(contains(@phase,'onloadOnly'))">
   507           <xsl:text> &amp;&amp; JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE</xsl:text>
   508         </xsl:if>
   509         <xsl:text>) {
   510 </xsl:text>
   511     <xsl:if test="$trace='Trace'">
   512       <xsl:text>    if (trace_flags) {
   513           tty->print_cr("JVMTI [-] %s %s",  func_name, 
   514                     JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   515     }
   516 </xsl:text>
   517     </xsl:if>
   518     <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   519   }</xsl:text>
   520       </xsl:if>
   521       <xsl:if test="contains(@phase,'start')">
   522         <xsl:text>  if(JvmtiEnv::get_phase()!=JVMTI_PHASE_START &amp;&amp; JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE) {
   523 </xsl:text>
   524     <xsl:if test="$trace='Trace'">
   525       <xsl:text>    if (trace_flags) {
   526           tty->print_cr("JVMTI [-] %s %s",  func_name, 
   527                     JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE));
   528     }
   529 </xsl:text>
   530     </xsl:if>
   531     <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
   532   }
   533   Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text>
   534       <xsl:apply-templates select="." mode="transition"/>
   535       </xsl:if>
   536     </xsl:otherwise>
   537   </xsl:choose>
   539   <xsl:text>
   540   JvmtiEnv* jvmti_env = JvmtiEnv::JvmtiEnv_from_jvmti_env(env);
   541   if (!jvmti_env->is_valid()) {
   542 </xsl:text>
   543     <xsl:if test="$trace='Trace'">
   544       <xsl:text>    if (trace_flags) {
   545           tty->print_cr("JVMTI [%s] %s %s  env=%d",  curr_thread_name, func_name, 
   546                     JvmtiUtil::error_name(JVMTI_ERROR_INVALID_ENVIRONMENT), env);
   547     }
   548 </xsl:text>
   549     </xsl:if>
   550     <xsl:text>    return JVMTI_ERROR_INVALID_ENVIRONMENT;
   551   }
   552 </xsl:text>
   554   <xsl:apply-templates select="capabilities/required"/>
   556   <xsl:text>  jvmtiError err;
   557 </xsl:text>
   558   <xsl:choose>
   559     <xsl:when test="count(@phase)=1 and not(contains(@phase,'live')) and not(contains(@phase,'start'))">    
   560       <xsl:choose>
   561         <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))">
   562           <xsl:text>  if (Threads::number_of_threads() != 0) {
   563     Thread* this_thread = (Thread*)ThreadLocalStorage::thread();</xsl:text>
   564         </xsl:when>
   565         <xsl:otherwise>
   567 	  <xsl:text>  Thread* this_thread = NULL;
   568   bool transition;
   569   if (Threads::number_of_threads() == 0) {
   570     transition = false;
   571   } else {
   572     this_thread = (Thread*)ThreadLocalStorage::thread();
   573     transition = ((this_thread != NULL) &amp;&amp; !this_thread->is_VM_thread() &amp;&amp; !this_thread->is_ConcurrentGC_thread());
   574   }
   575   if (transition) {</xsl:text>
   576 	</xsl:otherwise>
   578       </xsl:choose>
   579       <!-- we allow use in early phases but there are threads now, -->
   580       <!-- so do thread transition -->
   581       <xsl:apply-templates select="." mode="transition">
   582           <xsl:with-param name="space">
   583             <xsl:text>
   584     </xsl:text>
   585           </xsl:with-param>
   586       </xsl:apply-templates>
   587       <xsl:text>
   588   </xsl:text>
   589       <xsl:apply-templates select="." mode="doCall"/>     
   590       <xsl:text>  } else {
   591   </xsl:text>
   592       <!-- we are pre-thread - no thread transition code -->
   593       <xsl:apply-templates select="." mode="doCall"/>     
   594       <xsl:text>  }
   595 </xsl:text>
   596     </xsl:when>
   597     <xsl:otherwise>
   598       <xsl:apply-templates select="." mode="doCall"/>      
   599     </xsl:otherwise>
   600   </xsl:choose>
   601   <xsl:text>  return err;
   602 </xsl:text>
   604   <xsl:if test="not(contains(@jkernel,'yes'))">
   605   <xsl:text>#endif // INCLUDE_JVMTI&#xA;</xsl:text>
   606   </xsl:if>
   608   <xsl:text>}&#xA;</xsl:text>
   609 </xsl:template>
   611 <xsl:template match="function" mode="doCall">
   612   <xsl:apply-templates select="parameters" mode="dochecks"/>
   613   <xsl:apply-templates select="." mode="traceBefore"/>  
   614   <xsl:apply-templates select="." mode="genCall"/>
   615   <xsl:apply-templates select="." mode="traceAfter"/>
   616 </xsl:template>
   618 <xsl:template match="function" mode="genCall">
   619   <xsl:text>  err = jvmti_env-&gt;</xsl:text>
   620   <xsl:value-of select="@id"/>
   621   <xsl:text>(</xsl:text>
   622   <xsl:apply-templates select="parameters" mode="HotSpotValue"/>
   623   <xsl:text>);
   624 </xsl:text>
   625 </xsl:template>
   628 <xsl:template match="function" mode="traceSetUp">
   629   <xsl:if test="$trace='Trace'">
   630     <xsl:text>  SafeResourceMark rm;
   631   jint trace_flags = JvmtiTrace::trace_flags(</xsl:text>
   632       <xsl:value-of select="@num"/>
   633       <xsl:text>);
   634   const char *func_name;
   635   const char *curr_thread_name;
   636   if (trace_flags) {
   637     func_name = JvmtiTrace::function_name(</xsl:text>
   638       <xsl:value-of select="@num"/>
   639       <xsl:text>);
   640     curr_thread_name = JvmtiTrace::safe_get_current_thread_name();
   641   }
   642 </xsl:text>
   643   </xsl:if>
   644 </xsl:template>
   647 <xsl:template match="function" mode="traceBefore">
   648   <xsl:if test="$trace='Trace'">
   649     <xsl:text>
   650   if ((trace_flags &amp; JvmtiTrace::SHOW_IN) != 0) {
   651     </xsl:text>
   652     <xsl:apply-templates select="." mode="traceIn"/>
   653     <xsl:text>  }
   654 </xsl:text>
   655   </xsl:if>
   656 </xsl:template>
   659 <xsl:template match="param" mode="traceError">
   660   <xsl:param name="err"/>
   661   <xsl:param name="comment"></xsl:param>
   662   <xsl:param name="extraValue"></xsl:param>
   663   <xsl:if test="$trace='Trace'">
   664   <xsl:text>      if ((trace_flags &amp; JvmtiTrace::SHOW_ERROR) != 0) {
   665         if ((trace_flags &amp; JvmtiTrace::SHOW_IN) == 0) {
   666 </xsl:text>
   667   <xsl:apply-templates select="../.." mode="traceIn">
   668     <xsl:with-param name="endParam" select="."/>
   669   </xsl:apply-templates>
   670   <xsl:text>      }
   671         tty->print_cr("JVMTI [%s] %s } %s - erroneous arg is </xsl:text>
   672     <xsl:value-of select="@id"/>
   673     <xsl:value-of select="$comment"/>
   674     <xsl:text>",  curr_thread_name, func_name, 
   675                   JvmtiUtil::error_name(</xsl:text>
   676     <xsl:value-of select="$err"/>
   677     <xsl:text>)</xsl:text>
   678     <xsl:value-of select="$extraValue"/>
   679     <xsl:text>);
   680       }
   681 </xsl:text>
   682   </xsl:if>
   683     <xsl:text>      return </xsl:text>
   684     <xsl:value-of select="$err"/>
   685     <xsl:text>;</xsl:text>
   686 </xsl:template>
   689 <xsl:template match="function" mode="traceAfter">
   690   <xsl:if test="$trace='Trace'">
   691     <xsl:text>  if ( err != JVMTI_ERROR_NONE &amp;&amp; (trace_flags &amp; JvmtiTrace::SHOW_ERROR) != 0) {
   692       if ((trace_flags &amp; JvmtiTrace::SHOW_IN) == 0) {
   693 </xsl:text>
   694     <xsl:apply-templates select="." mode="traceIn"/>
   695     <xsl:text>    }
   696     tty->print_cr("JVMTI [%s] %s } %s",  curr_thread_name, func_name, 
   697                   JvmtiUtil::error_name(err));
   698   } else if ((trace_flags &amp; JvmtiTrace::SHOW_OUT) != 0) {
   699     tty->print_cr("JVMTI [%s] %s }",  curr_thread_name, func_name);
   700   }
   701 </xsl:text>
   702   </xsl:if>
   703 </xsl:template>
   705 <xsl:template match="function" mode="traceIn">
   706   <xsl:param name="endParam"></xsl:param>
   707   <xsl:text>          tty->print_cr("JVMTI [%s] %s { </xsl:text>
   708   <xsl:apply-templates select="parameters" mode="traceInFormat">
   709     <xsl:with-param name="endParam" select="$endParam"/>    
   710   </xsl:apply-templates>
   711   <xsl:text>", curr_thread_name, func_name</xsl:text>
   712   <xsl:apply-templates select="parameters" mode="traceInValue">
   713     <xsl:with-param name="endParam" select="$endParam"/>    
   714   </xsl:apply-templates>
   715   <xsl:text>);
   716 </xsl:text>
   717 </xsl:template>
   719 <xsl:template match="parameters" mode="dochecks">
   720   <xsl:apply-templates select="param" mode="dochecks"/>
   721 </xsl:template>
   723 <xsl:template match="param" mode="dochecks">
   724   <xsl:apply-templates select="child::*[position()=1]" mode="dochecks">
   725     <xsl:with-param name="name" select="@id"/>
   726   </xsl:apply-templates>
   727 </xsl:template>
   729 <xsl:template match="outptr|outbuf|allocfieldbuf|ptrtype|inptr|inbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="dochecks">
   730   <xsl:param name="name"/>
   731   <xsl:if test="count(nullok)=0">
   732     <xsl:text>  if (</xsl:text>
   733     <xsl:value-of select="$name"/>
   734     <xsl:text> == NULL) {
   735 </xsl:text>
   736     <xsl:apply-templates select=".." mode="traceError">     
   737       <xsl:with-param name="err">JVMTI_ERROR_NULL_POINTER</xsl:with-param>
   738     </xsl:apply-templates>
   739     <xsl:text>
   740   }
   741 </xsl:text>
   742   </xsl:if>
   743 </xsl:template>
   745 <xsl:template match="jrawMonitorID" mode="dochecks">
   746   <xsl:param name="name"/>
   747   <xsl:text>  JvmtiRawMonitor *rmonitor = (JvmtiRawMonitor *)</xsl:text>
   748   <xsl:value-of select="$name"/>
   749   <xsl:text>;
   750   if (rmonitor == NULL) {
   751 </xsl:text>
   752     <xsl:apply-templates select=".." mode="traceError">     
   753       <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param>
   754       <xsl:with-param name="comment"> - raw monitor is NULL</xsl:with-param>
   755     </xsl:apply-templates>
   756     <xsl:text>
   757   }
   758   if (!rmonitor->is_valid()) {
   759 </xsl:text>
   760     <xsl:apply-templates select=".." mode="traceError">     
   761       <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param>
   762       <xsl:with-param name="comment"> - not a raw monitor 0x%x</xsl:with-param>
   763       <xsl:with-param name="extraValue">, rmonitor</xsl:with-param>
   764     </xsl:apply-templates>
   765     <xsl:text>
   766   }
   767 </xsl:text>
   768 </xsl:template>
   770 <xsl:template match="jthread" mode="dochecksbody">
   771   <xsl:param name="name"/>
   772     <xsl:text>    oop thread_oop = JNIHandles::resolve_external_guard(</xsl:text>
   773     <xsl:value-of select="$name"/>
   774     <xsl:text>);
   775     if (thread_oop == NULL) {
   776 </xsl:text>
   777     <xsl:apply-templates select=".." mode="traceError">     
   778       <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
   779       <xsl:with-param name="comment"> - jthread resolved to NULL - jthread = 0x%x</xsl:with-param>
   780       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   781     </xsl:apply-templates>
   782     <xsl:text>
   783     }
   784     if (!thread_oop-&gt;is_a(SystemDictionary::Thread_klass())) {
   785 </xsl:text>
   786     <xsl:apply-templates select=".." mode="traceError">     
   787       <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
   788       <xsl:with-param name="comment"> - oop is not a thread - jthread = 0x%x</xsl:with-param>
   789       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   790     </xsl:apply-templates>
   791     <xsl:text>
   792     }
   793     java_thread = java_lang_Thread::thread(thread_oop); 
   794     if (java_thread == NULL) {
   795 </xsl:text>
   796     <xsl:apply-templates select=".." mode="traceError">     
   797       <xsl:with-param name="err">
   798         <xsl:text>JVMTI_ERROR_THREAD_NOT_ALIVE</xsl:text>
   799       </xsl:with-param>
   800       <xsl:with-param name="comment"> - not a Java thread - jthread = 0x%x</xsl:with-param>
   801       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   802     </xsl:apply-templates>
   803     <xsl:text>
   804     }
   805 </xsl:text>  
   806 </xsl:template>
   808 <xsl:template match="jthread" mode="dochecks">
   809   <xsl:param name="name"/>
   810   <!-- If we convert and test threads -->
   811   <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
   812     <xsl:text>  JavaThread* java_thread;
   813 </xsl:text>
   814     <xsl:choose>
   815       <xsl:when test="count(@null)=0">
   816         <xsl:apply-templates select="." mode="dochecksbody">
   817           <xsl:with-param name="name" select="$name"/>
   818         </xsl:apply-templates>
   819       </xsl:when>
   820       <xsl:otherwise>
   821         <xsl:text>  if (</xsl:text>
   822         <xsl:value-of select="$name"/>
   823         <xsl:text> == NULL) {
   824     java_thread = current_thread;
   825   } else {
   826 </xsl:text>
   827         <xsl:apply-templates select="." mode="dochecksbody">
   828           <xsl:with-param name="name" select="$name"/>
   829         </xsl:apply-templates>
   830         <xsl:text>  }
   831 </xsl:text>
   832       </xsl:otherwise>
   833     </xsl:choose>
   834   </xsl:if>
   835 </xsl:template>
   837 <xsl:template match="jframeID" mode="dochecks">
   838   <xsl:param name="name"/>
   839   <xsl:text>
   840   if (depth &lt; 0) {
   841 </xsl:text>
   842     <xsl:apply-templates select=".." mode="traceError">     
   843       <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param>
   844       <xsl:with-param name="comment"> - negative depth - jthread = 0x%x</xsl:with-param>
   845       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   846     </xsl:apply-templates>
   847     <xsl:text>
   848   }
   849 </xsl:text>
   850 </xsl:template>
   852 <xsl:template match="jclass" mode="dochecks">
   853  <xsl:param name="name"/>
   854  <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
   855  <xsl:if test="count(@method)=0">
   856   <xsl:text>  oop k_mirror = JNIHandles::resolve_external_guard(</xsl:text>  
   857   <xsl:value-of select="$name"/>
   858   <xsl:text>);
   859   if (k_mirror == NULL) {
   860 </xsl:text>
   861     <xsl:apply-templates select=".." mode="traceError">     
   862       <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   863       <xsl:with-param name="comment"> - resolved to NULL - jclass = 0x%x</xsl:with-param>
   864       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   865     </xsl:apply-templates>
   866     <xsl:text>
   867   }
   868   if (!k_mirror->is_a(SystemDictionary::Class_klass())) {
   869 </xsl:text>
   870     <xsl:apply-templates select=".." mode="traceError">     
   871       <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   872       <xsl:with-param name="comment"> - not a class - jclass = 0x%x</xsl:with-param>
   873       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   874     </xsl:apply-templates>
   875     <xsl:text>
   876   }
   877 </xsl:text>
   878   <xsl:if test="count(@method|@field)=1">
   879     <xsl:text>
   880   if (java_lang_Class::is_primitive(k_mirror)) {
   881 </xsl:text>
   882     <xsl:apply-templates select=".." mode="traceError">     
   883       <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   884       <xsl:with-param name="comment"> - is a primitive class - jclass = 0x%x</xsl:with-param>
   885       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   886     </xsl:apply-templates>
   887     <xsl:text>
   888   }
   889   Klass* k_oop = java_lang_Class::as_Klass(k_mirror);
   890   if (k_oop == NULL) {
   891 </xsl:text>
   892     <xsl:apply-templates select=".." mode="traceError">     
   893       <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param>
   894       <xsl:with-param name="comment"> - no Klass* - jclass = 0x%x</xsl:with-param>
   895       <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   896     </xsl:apply-templates>
   897     <xsl:text>
   898   }
   899 </xsl:text>
   900   </xsl:if>
   901  </xsl:if>
   902 </xsl:template>
   905 <xsl:template match="jmethodID" mode="dochecks">
   906   <xsl:param name="name"/>
   907   <xsl:text>  Method* method_oop = Method::checked_resolve_jmethod_id(</xsl:text>
   908   <xsl:value-of select="$name"/>
   909   <xsl:text>);&#xA;</xsl:text>
   910   <xsl:text>  if (method_oop == NULL) {&#xA;</xsl:text>
   911   <xsl:apply-templates select=".." mode="traceError">     
   912     <xsl:with-param name="err">JVMTI_ERROR_INVALID_METHODID</xsl:with-param>
   913     <xsl:with-param name="comment"></xsl:with-param>
   914     <xsl:with-param name="extraValue"></xsl:with-param>
   915   </xsl:apply-templates>
   916   <xsl:text>&#xA;</xsl:text>
   917   <xsl:text>  }&#xA;</xsl:text>
   918   <xsl:if test="count(@native)=1 and contains(@native,'error')">
   919     <xsl:text>  if (method_oop->is_native()) {&#xA;</xsl:text>   
   920     <xsl:text>    return JVMTI_ERROR_NATIVE_METHOD;&#xA;</xsl:text>   
   921     <xsl:text>  }&#xA;</xsl:text>   
   922   </xsl:if>
   923 </xsl:template>
   926 <xsl:template match="jfieldID" mode="dochecks">
   927   <xsl:param name="name"/>
   928   <xsl:text>  ResourceMark rm_fdesc(current_thread);&#xA;</xsl:text>
   929   <xsl:text>  fieldDescriptor fdesc;&#xA;</xsl:text>
   930   <xsl:text>  if (!JvmtiEnv::get_field_descriptor(k_oop, </xsl:text>
   931   <xsl:value-of select="$name"/>
   932   <xsl:text>, &amp;fdesc)) {&#xA;</xsl:text>
   933   <xsl:apply-templates select=".." mode="traceError">     
   934     <xsl:with-param name="err">JVMTI_ERROR_INVALID_FIELDID</xsl:with-param>
   935   </xsl:apply-templates>
   936   <xsl:text>&#xA;</xsl:text>
   937   <xsl:text>  }&#xA;</xsl:text>
   938 </xsl:template>
   941 <xsl:template match="jint" mode="dochecks">
   942   <xsl:param name="name"/>
   943   <xsl:if test="count(@min)=1">
   944     <xsl:text>  if (</xsl:text>
   945     <xsl:value-of select="$name"/>
   946     <xsl:text> &lt; </xsl:text>
   947     <xsl:value-of select="@min"/>
   948     <xsl:text>) {
   949 </xsl:text>
   950     <xsl:apply-templates select=".." mode="traceError">     
   951       <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param>
   952     </xsl:apply-templates>
   953     <xsl:text>
   954   }
   955 </xsl:text>
   956   </xsl:if>
   957 </xsl:template>
   959 <xsl:template match="jobject|jvalue|jthreadGroup|enum|jchar|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|struct" mode="dochecks">
   960 </xsl:template>
   962 <!-- iterate over parameters, stopping if specified is encountered -->
   963 <xsl:template name="traceInValueParamsUpTo">
   964   <xsl:param name="params"/>
   965   <xsl:param name="endParam"></xsl:param>
   966   <xsl:param name="index" select="1"/>
   967   <xsl:variable name="cParam" select="$params[position()=$index]"/>
   968   <xsl:if test="$cParam!=$endParam">
   969     <xsl:apply-templates select="$cParam" mode="traceInValue"/>
   970     <xsl:if test="count($params) &gt; $index">
   971       <xsl:call-template name="traceInValueParamsUpTo">
   972         <xsl:with-param name="params" select="$params"/>
   973         <xsl:with-param name="endParam" select="$endParam"/>
   974         <xsl:with-param name="index" select="1+$index"/>
   975       </xsl:call-template>
   976     </xsl:if>
   977   </xsl:if>
   978 </xsl:template>
   980 <xsl:template name="traceInFormatParamsUpTo">
   981   <xsl:param name="params"/>
   982   <xsl:param name="endParam"></xsl:param>
   983   <xsl:param name="index" select="1"/>
   984   <xsl:variable name="cParam" select="$params[position()=$index]"/>
   985   <xsl:if test="$cParam!=$endParam">
   986     <xsl:apply-templates select="$cParam" mode="traceInFormat"/>
   987     <xsl:if test="count($params) &gt; $index">
   988       <xsl:call-template name="traceInFormatParamsUpTo">
   989         <xsl:with-param name="params" select="$params"/>
   990         <xsl:with-param name="endParam" select="$endParam"/>
   991         <xsl:with-param name="index" select="1+$index"/>
   992       </xsl:call-template>
   993     </xsl:if>
   994   </xsl:if>
   995 </xsl:template>
   997 <xsl:template match="parameters" mode="traceInFormat">
   998   <xsl:param name="endParam"></xsl:param>
   999   <xsl:call-template name="traceInFormatParamsUpTo">
  1000     <xsl:with-param name="params" select="param"/>
  1001     <xsl:with-param name="endParam" select="$endParam"/>
  1002   </xsl:call-template>
  1003 </xsl:template>
  1005 <xsl:template match="parameters" mode="traceInValue">
  1006   <xsl:param name="endParam"></xsl:param>
  1007   <xsl:call-template name="traceInValueParamsUpTo">
  1008     <xsl:with-param name="params" select="param"/>
  1009     <xsl:with-param name="endParam" select="$endParam"/>
  1010   </xsl:call-template>
  1011 </xsl:template>
  1013 <xsl:template match="param" mode="traceInFormat">
  1014   <xsl:apply-templates select="child::*[position()=1]" mode="traceInFormat">
  1015     <xsl:with-param name="name" select="@id"/>
  1016   </xsl:apply-templates>
  1017 </xsl:template>
  1019 <xsl:template match="param" mode="traceInValue">
  1020   <xsl:apply-templates select="child::*[position()=1]" mode="traceInValue">
  1021     <xsl:with-param name="name" select="@id"/>
  1022   </xsl:apply-templates>
  1023 </xsl:template>
  1025 <xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInFormat">
  1026 </xsl:template>
  1028 <xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInValue">
  1029 </xsl:template>
  1031 <xsl:template match="inbuf" mode="traceInFormat">
  1032   <xsl:param name="name"/>
  1033   <xsl:text> </xsl:text>
  1034   <xsl:value-of select="$name"/>
  1035   <xsl:variable name="child" select="child::*[position()=1]"/>
  1036   <xsl:choose>
  1037     <xsl:when test="name($child)='char'">
  1038       <xsl:text>='%s'</xsl:text>
  1039     </xsl:when>
  1040     <xsl:otherwise>
  1041       <xsl:text>=0x%x</xsl:text>
  1042     </xsl:otherwise>
  1043   </xsl:choose>
  1044 </xsl:template>
  1046 <xsl:template match="inbuf" mode="traceInValue">
  1047   <xsl:param name="name"/>
  1048   <xsl:text>, </xsl:text>
  1049   <xsl:value-of select="$name"/>
  1050 </xsl:template>
  1052 <xsl:template match="ptrtype" mode="traceInFormat">
  1053   <xsl:param name="name"/>
  1054   <xsl:variable name="child" select="child::*[position()=1]"/>
  1055   <xsl:choose>
  1056     <xsl:when test="name($child)='jclass'">
  1057       <xsl:text> </xsl:text>
  1058       <xsl:value-of select="$name"/>
  1059       <xsl:text>=0x%x</xsl:text>
  1060     </xsl:when>
  1061     <xsl:otherwise>
  1062       <xsl:apply-templates select="$child" mode="traceInFormat"/> 
  1063     </xsl:otherwise>
  1064   </xsl:choose>
  1065 </xsl:template>
  1067 <xsl:template match="ptrtype" mode="traceInValue">
  1068   <xsl:param name="name"/>
  1069   <xsl:variable name="child" select="child::*[position()=1]"/>
  1070   <xsl:choose>
  1071     <xsl:when test="name($child)='jclass'">
  1072       <xsl:text>, </xsl:text>
  1073       <xsl:value-of select="$name"/>
  1074     </xsl:when>
  1075     <xsl:otherwise>
  1076       <xsl:apply-templates select="$child" mode="traceInValue"/>
  1077     </xsl:otherwise>
  1078   </xsl:choose> 
  1079 </xsl:template>
  1081 <xsl:template match="inptr" mode="traceInFormat">
  1082   <xsl:param name="name"/>
  1083   <xsl:text> </xsl:text>
  1084   <xsl:value-of select="$name"/>
  1085   <xsl:text>=0x%x</xsl:text>
  1086 </xsl:template>
  1088 <xsl:template match="inptr" mode="traceInValue">
  1089   <xsl:param name="name"/>
  1090   <xsl:text>, </xsl:text>
  1091   <xsl:value-of select="$name"/>
  1092 </xsl:template>
  1094 <xsl:template match="jrawMonitorID|jfieldID" mode="traceInFormat">
  1095   <xsl:param name="name"/>
  1096   <xsl:text> </xsl:text>
  1097   <xsl:value-of select="$name"/>
  1098   <xsl:text>=%s</xsl:text>
  1099 </xsl:template>
  1101 <xsl:template match="jclass" mode="traceInFormat">
  1102   <xsl:param name="name"/>
  1103   <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
  1104   <xsl:if test="count(@method)=0">
  1105     <xsl:text> </xsl:text>
  1106     <xsl:value-of select="$name"/>
  1107     <xsl:text>=%s</xsl:text>
  1108   </xsl:if>
  1109 </xsl:template>
  1111 <xsl:template match="jrawMonitorID" mode="traceInValue">
  1112   <xsl:param name="name"/>
  1113   <xsl:text>, rmonitor->get_name()</xsl:text>
  1114 </xsl:template>
  1116 <xsl:template match="jthread" mode="traceInFormat">
  1117   <xsl:param name="name"/>
  1118   <!-- If we convert and test threads -->
  1119   <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
  1120     <xsl:text> </xsl:text>
  1121     <xsl:value-of select="$name"/>
  1122     <xsl:text>=%s</xsl:text>
  1123   </xsl:if>
  1124 </xsl:template>
  1126 <xsl:template match="jthread" mode="traceInValue">
  1127   <xsl:param name="name"/>
  1128   <!-- If we convert and test threads -->
  1129   <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
  1130     <xsl:text>, 
  1131                     JvmtiTrace::safe_get_thread_name(java_thread)</xsl:text>  
  1132   </xsl:if>
  1133 </xsl:template>
  1135 <xsl:template match="jframeID" mode="traceInFormat">
  1136   <xsl:param name="name"/>
  1137   <xsl:text>depth=%d</xsl:text>
  1138 </xsl:template>
  1140 <xsl:template match="jframeID" mode="traceInValue">
  1141   <xsl:param name="name"/>
  1142   <xsl:text>, </xsl:text>
  1143   <xsl:value-of select="$name"/>
  1144 </xsl:template>
  1146 <xsl:template match="jclass" mode="traceInValue">
  1147   <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
  1148   <xsl:if test="count(@method)=0">
  1149     <xsl:text>, 
  1150                     JvmtiTrace::get_class_name(k_mirror)</xsl:text>
  1151   </xsl:if>
  1152 </xsl:template>
  1154 <xsl:template match="jmethodID" mode="traceInFormat">
  1155   <xsl:param name="name"/>
  1156   <xsl:text> </xsl:text>
  1157   <xsl:value-of select="$name"/>
  1158   <xsl:text>=%s.%s</xsl:text>
  1159 </xsl:template>
  1161 <xsl:template match="jmethodID" mode="traceInValue">
  1162   <xsl:param name="name"/>
  1163   <xsl:text>, 
  1164                     method_oop == NULL? "NULL" : method_oop->klass_name()->as_C_string(),
  1165                     method_oop == NULL? "NULL" : method_oop->name()->as_C_string()
  1166              </xsl:text>
  1167 </xsl:template>
  1169 <xsl:template match="jfieldID" mode="traceInValue">
  1170   <xsl:param name="name"/>
  1171   <xsl:text>, fdesc.name()->as_C_string()</xsl:text>
  1172 </xsl:template>
  1174 <xsl:template match="enum" mode="traceInFormat">
  1175   <xsl:param name="name"/>
  1176   <xsl:text> </xsl:text>
  1177   <xsl:value-of select="$name"/>
  1178   <xsl:text>=%d:%s</xsl:text>
  1179 </xsl:template>
  1181 <xsl:template match="enum" mode="traceInValue">
  1182   <xsl:param name="name"/>
  1183   <xsl:text>, </xsl:text>
  1184   <xsl:value-of select="$name"/>
  1185   <xsl:text>, 
  1186                     </xsl:text>
  1187   <xsl:choose>
  1188     <xsl:when test=".='jvmtiError'">
  1189       <xsl:text>JvmtiUtil::error_name(</xsl:text>
  1190       <xsl:value-of select="$name"/>
  1191       <xsl:text>)
  1192 </xsl:text>
  1193     </xsl:when>
  1194     <xsl:otherwise>
  1195       <xsl:choose>
  1196         <xsl:when test=".='jvmtiEvent'">
  1197           <xsl:text>JvmtiTrace::event_name(</xsl:text>
  1198           <xsl:value-of select="$name"/>
  1199           <xsl:text>)
  1200         </xsl:text>
  1201       </xsl:when>
  1202       <xsl:otherwise>
  1203         <xsl:text>JvmtiTrace::enum_name(</xsl:text>
  1204         <xsl:value-of select="."/>
  1205         <xsl:text>ConstantNames, </xsl:text>
  1206         <xsl:value-of select="."/>
  1207         <xsl:text>ConstantValues, </xsl:text>
  1208         <xsl:value-of select="$name"/>
  1209         <xsl:text>)</xsl:text>
  1210       </xsl:otherwise>
  1211     </xsl:choose>
  1212     </xsl:otherwise>
  1213   </xsl:choose>
  1214 </xsl:template>
  1216 <xsl:template match="jint|jlocation" mode="traceInFormat">
  1217   <xsl:param name="name"/>
  1218   <xsl:text> </xsl:text>
  1219   <xsl:value-of select="$name"/>
  1220   <xsl:text>=%d</xsl:text>
  1221 </xsl:template>
  1223 <xsl:template match="jlong" mode="traceInFormat">
  1224   <xsl:param name="name"/>
  1225   <xsl:text> </xsl:text>
  1226   <xsl:value-of select="$name"/>
  1227   <xsl:text>=%ld</xsl:text>
  1228 </xsl:template>
  1230 <xsl:template match="size_t" mode="traceInFormat">
  1231   <xsl:param name="name"/>
  1232   <xsl:text> </xsl:text>
  1233   <xsl:value-of select="$name"/>
  1234   <xsl:text>=0x%zx</xsl:text>
  1235 </xsl:template>
  1237 <xsl:template match="jfloat|jdouble" mode="traceInFormat">
  1238   <xsl:param name="name"/>
  1239   <xsl:text> </xsl:text>
  1240   <xsl:value-of select="$name"/>
  1241   <xsl:text>=%f</xsl:text>
  1242 </xsl:template>
  1244 <xsl:template match="char" mode="traceInFormat">
  1245   <xsl:param name="name"/>
  1246   <xsl:text> </xsl:text>
  1247   <xsl:value-of select="$name"/>
  1248   <xsl:text>=%c</xsl:text>
  1249 </xsl:template>
  1251 <xsl:template match="uchar|jchar" mode="traceInFormat">
  1252   <xsl:param name="name"/>
  1253   <xsl:text> </xsl:text>
  1254   <xsl:value-of select="$name"/>
  1255   <xsl:text>=0x%x</xsl:text>
  1256 </xsl:template>
  1258 <xsl:template match="jint|jlocation|jchar|jlong|jfloat|jdouble|char|uchar|size_t" mode="traceInValue">
  1259   <xsl:param name="name"/>
  1260   <xsl:text>, </xsl:text>
  1261   <xsl:value-of select="$name"/>
  1262 </xsl:template>
  1265 <xsl:template match="jboolean" mode="traceInFormat">
  1266   <xsl:param name="name"/>
  1267   <xsl:text> </xsl:text>
  1268   <xsl:value-of select="$name"/>
  1269   <xsl:text>=%s</xsl:text>
  1270 </xsl:template>
  1272 <xsl:template match="jboolean" mode="traceInValue">
  1273   <xsl:param name="name"/>
  1274   <xsl:text>, </xsl:text>
  1275   <xsl:value-of select="$name"/>
  1276   <xsl:text>? "true" : "false"</xsl:text>
  1277 </xsl:template>
  1279 <xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInFormat">
  1280 </xsl:template>
  1282 <xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInValue">
  1283 </xsl:template>
  1287 </xsl:stylesheet>

mercurial