1<?xml version="1.0"?> 
2<!--
3 Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
4 DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
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.
9
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).
15
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.
19
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.
23  
24-->
25
26<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
27
28<xsl:import href="jvmtiLib.xsl"/>
29
30<xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
31
32<xsl:param name="trace"></xsl:param>
33<xsl:param name="interface"></xsl:param>
34
35
36<xsl:template match="specification">
37  <xsl:call-template name="sourceHeader"/>
38  <xsl:text>
39# include "precompiled.hpp"
40# include "memory/resourceArea.hpp"
41# include "utilities/macros.hpp"
42#if INCLUDE_JVMTI
43# include "logging/log.hpp"
44# include "oops/oop.inline.hpp"
45# include "prims/jvmtiEnter.hpp"
46# include "prims/jvmtiRawMonitor.hpp"
47# include "prims/jvmtiUtil.hpp"
48
49</xsl:text>
50
51  <xsl:if test="$trace = 'Trace'">
52   <xsl:text>
53#ifdef JVMTI_TRACE
54</xsl:text>
55  </xsl:if>
56
57 <xsl:if test="$trace != 'Trace'">
58    <xsl:text>
59
60// Error names
61const 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};
68
69
70// Event threaded
71const 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};
78
79</xsl:text>
80    <xsl:call-template name="eventCapabilitiesTest"/>
81 </xsl:if>
82
83 <xsl:if test="$trace = 'Trace'">
84
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>
94
95  <xsl:text>jbyte JvmtiTrace::_event_trace_flags[</xsl:text>
96  <xsl:value-of select="1+$maxEvent"/>
97  <xsl:text>];
98
99jint JvmtiTrace::_max_event_index = </xsl:text>
100  <xsl:value-of select="$maxEvent"/>
101  <xsl:text>;
102
103// Event names
104const 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"/>
115
116  <xsl:if test="$trace='Trace'">
117   <xsl:text>
118#endif /*JVMTI_TRACE */
119</xsl:text>
120  </xsl:if>
121
122</xsl:template>
123
124<xsl:template match="constants">
125  <xsl:text>
126
127// </xsl:text>
128  <xsl:value-of select="@label"/>
129  <xsl:text> names
130const 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};
137
138// </xsl:text>
139  <xsl:value-of select="@label"/>
140  <xsl:text> value
141jint </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};
148
149</xsl:text>
150</xsl:template>
151
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>
158
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>
165
166<xsl:template name="eventCapabilitiesTest">
167  <xsl:text>
168
169// Check Event Capabilities
170const 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>  default: break; }
186  // if it does not have a capability it is required
187  return JNI_TRUE;
188}
189
190</xsl:text>
191</xsl:template>
192
193<xsl:template match="functionsection">
194  <xsl:if test="$trace='Trace'">
195
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>
205
206  <xsl:text>jbyte JvmtiTrace::_trace_flags[</xsl:text>
207  <xsl:value-of select="1+$maxFunction"/>
208  <xsl:text>];
209
210jint JvmtiTrace::_max_function_index = </xsl:text>
211  <xsl:value-of select="$maxFunction"/>
212  <xsl:text>;
213
214// Function names
215const 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};
222
223// Exclude list
224short 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};
231
232</xsl:text>
233  </xsl:if>
234
235  <xsl:text>
236extern "C" {
237
238</xsl:text>
239  <xsl:apply-templates select="category" mode="wrapper"/>
240  <xsl:text>
241} /* end extern "C" */
242
243// JVMTI API functions
244struct jvmtiInterface_1_ jvmti</xsl:text>
245  <xsl:value-of select="$trace"/>
246  <xsl:text>_Interface = {
247</xsl:text>
248 
249  <xsl:call-template name="fillFuncStruct">
250    <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/>
251  </xsl:call-template>
252
253  <xsl:text>
254};
255#endif // INCLUDE_JVMTI
256</xsl:text>
257</xsl:template>
258
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>
265
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>
285
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>
303
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>
318
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>
336
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>
356
357
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>
374
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>
382
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>
391
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"/>
398  
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> 
414  
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>    log_trace(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>
446
447
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          log_trace(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>
465
466
467<xsl:template match="function">
468  <xsl:text>
469static 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>
476
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>
482
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          log_trace(jvmti)("[-] %s %s(%d)", func_name,
491                    JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE), JvmtiEnv::get_phase());
492    }
493</xsl:text>
494    </xsl:if>
495    <xsl:text>    return JVMTI_ERROR_WRONG_PHASE;
496  }</xsl:text>  
497
498      <xsl:text>  
499  Thread* this_thread = Thread::current_or_null(); </xsl:text>
500
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          log_trace(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(env)!=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          log_trace(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::current_or_null(); </xsl:text>
534      <xsl:apply-templates select="." mode="transition"/>
535      </xsl:if>
536    </xsl:otherwise>
537  </xsl:choose>
538
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          log_trace(jvmti)("[%s] %s %s  env=" PTR_FORMAT,  curr_thread_name, func_name, 
546                    JvmtiUtil::error_name(JVMTI_ERROR_INVALID_ENVIRONMENT), p2i(env));
547    }
548</xsl:text>
549    </xsl:if>
550    <xsl:text>    return JVMTI_ERROR_INVALID_ENVIRONMENT;
551  }
552</xsl:text>
553
554  <xsl:apply-templates select="capabilities/required"/>
555  
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::current_or_null();</xsl:text>
564        </xsl:when>
565        <xsl:otherwise>
566
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::current_or_null();
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>
577
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>
603
604  <xsl:if test="not(contains(@jkernel,'yes'))">
605  <xsl:text>#endif // INCLUDE_JVMTI&#xA;</xsl:text>
606  </xsl:if>
607
608  <xsl:text>}&#xA;</xsl:text>
609</xsl:template>
610
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>
617
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>
626
627
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 = NULL;
635  const char *curr_thread_name = NULL;
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>
645
646
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>
657
658
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        log_error(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>
687
688
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    log_error(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    log_trace(jvmti)("[%s] %s }",  curr_thread_name, func_name);
700  }
701</xsl:text>
702  </xsl:if>
703</xsl:template>
704
705<xsl:template match="function" mode="traceIn">
706  <xsl:param name="endParam"></xsl:param>
707  <xsl:text>          log_trace(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>
718
719<xsl:template match="parameters" mode="dochecks">
720  <xsl:apply-templates select="param" mode="dochecks"/>
721</xsl:template>
722
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>
728
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>
744
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 " PTR_FORMAT "</xsl:with-param>
763      <xsl:with-param name="extraValue">, p2i(rmonitor)</xsl:with-param>
764    </xsl:apply-templates>
765    <xsl:text>
766  }
767</xsl:text>
768</xsl:template>
769
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 = " PTR_FORMAT "</xsl:with-param>
780      <xsl:with-param name="extraValue">, p2i(<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 = " PTR_FORMAT "</xsl:with-param>
789      <xsl:with-param name="extraValue">, p2i(<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 = " PTR_FORMAT "</xsl:with-param>
801      <xsl:with-param name="extraValue">, p2i(<xsl:value-of select="$name"/>)</xsl:with-param>
802    </xsl:apply-templates>
803    <xsl:text>
804    }
805</xsl:text>  
806</xsl:template>
807
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>
836
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 = " INT32_FORMAT "</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>
851
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 = " PTR_FORMAT "</xsl:with-param>
864      <xsl:with-param name="extraValue">, p2i(<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 = " PTR_FORMAT "</xsl:with-param>
873      <xsl:with-param name="extraValue">, p2i(<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 = " PTR_FORMAT "</xsl:with-param>
885      <xsl:with-param name="extraValue">, p2i(<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 = " PTR_FORMAT "</xsl:with-param>
895      <xsl:with-param name="extraValue">, p2i(<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>
903
904
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>
924
925
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>
939
940
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>
958
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>
961
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>
979
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>
996
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>
1004
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>
1012
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>
1018
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>
1024
1025<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInFormat">
1026</xsl:template>
1027
1028<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInValue">
1029</xsl:template>
1030
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>g
1037    <xsl:when test="name($child)='char'">
1038      <xsl:text>='%s'</xsl:text>
1039    </xsl:when>
1040    <xsl:otherwise>
1041      <xsl:text>=" PTR_FORMAT "</xsl:text>
1042    </xsl:otherwise>
1043  </xsl:choose>
1044</xsl:template>
1045
1046<xsl:template match="inbuf" mode="traceInValue">
1047  <xsl:param name="name"/>
1048  <xsl:text>, </xsl:text>
1049  <xsl:variable name="child" select="child::*[position()=1]"/>
1050  <xsl:choose>
1051    <xsl:when test="name($child)='char'">
1052      <xsl:value-of select="$name"/>
1053    </xsl:when>
1054    <xsl:otherwise>
1055      p2i(<xsl:value-of select="$name"/>)
1056    </xsl:otherwise>
1057  </xsl:choose>
1058</xsl:template>
1059
1060<xsl:template match="ptrtype" mode="traceInFormat">
1061  <xsl:param name="name"/>
1062  <xsl:variable name="child" select="child::*[position()=1]"/>
1063  <xsl:choose>
1064    <xsl:when test="name($child)='jclass'">
1065      <xsl:text> </xsl:text>
1066      <xsl:value-of select="$name"/>
1067      <xsl:text>=" PTR_FORMAT "</xsl:text>
1068    </xsl:when>
1069    <xsl:otherwise>
1070      <xsl:apply-templates select="$child" mode="traceInFormat"/> 
1071    </xsl:otherwise>
1072  </xsl:choose>
1073</xsl:template>
1074
1075<xsl:template match="ptrtype" mode="traceInValue">
1076  <xsl:param name="name"/>
1077  <xsl:variable name="child" select="child::*[position()=1]"/>
1078  <xsl:choose>
1079    <xsl:when test="name($child)='jclass'">
1080      <xsl:text>, </xsl:text>
1081      p2i(<xsl:value-of select="$name"/>)
1082    </xsl:when>
1083    <xsl:otherwise>
1084      <xsl:apply-templates select="$child" mode="traceInValue"/>
1085    </xsl:otherwise>
1086  </xsl:choose> 
1087</xsl:template>
1088
1089<xsl:template match="inptr" mode="traceInFormat">
1090  <xsl:param name="name"/>
1091  <xsl:text> </xsl:text>
1092  <xsl:value-of select="$name"/>
1093  <xsl:text>=" PTR_FORMAT "</xsl:text>
1094</xsl:template>
1095
1096<xsl:template match="inptr" mode="traceInValue">
1097  <xsl:param name="name"/>
1098  <xsl:text>, </xsl:text>
1099  p2i(<xsl:value-of select="$name"/>)
1100</xsl:template>
1101
1102<xsl:template match="jrawMonitorID|jfieldID" mode="traceInFormat">
1103  <xsl:param name="name"/>
1104  <xsl:text> </xsl:text>
1105  <xsl:value-of select="$name"/>
1106  <xsl:text>=%s</xsl:text>
1107</xsl:template>
1108
1109<xsl:template match="jclass" mode="traceInFormat">
1110  <xsl:param name="name"/>
1111  <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
1112  <xsl:if test="count(@method)=0">
1113    <xsl:text> </xsl:text>
1114    <xsl:value-of select="$name"/>
1115    <xsl:text>=%s</xsl:text>
1116  </xsl:if>
1117</xsl:template>
1118
1119<xsl:template match="jrawMonitorID" mode="traceInValue">
1120  <xsl:param name="name"/>
1121  <xsl:text>, rmonitor->get_name()</xsl:text>
1122</xsl:template>
1123
1124<xsl:template match="jthread" mode="traceInFormat">
1125  <xsl:param name="name"/>
1126  <!-- If we convert and test threads -->
1127  <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
1128    <xsl:text> </xsl:text>
1129    <xsl:value-of select="$name"/>
1130    <xsl:text>=%s</xsl:text>
1131  </xsl:if>
1132</xsl:template>
1133
1134<xsl:template match="jthread" mode="traceInValue">
1135  <xsl:param name="name"/>
1136  <!-- If we convert and test threads -->
1137  <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))">
1138    <xsl:text>, 
1139                    JvmtiTrace::safe_get_thread_name(java_thread)</xsl:text>  
1140  </xsl:if>
1141</xsl:template>
1142
1143<xsl:template match="jframeID" mode="traceInFormat">
1144  <xsl:param name="name"/>
1145  <xsl:text>depth=%d</xsl:text>
1146</xsl:template>
1147
1148<xsl:template match="jframeID" mode="traceInValue">
1149  <xsl:param name="name"/>
1150  <xsl:text>, </xsl:text>
1151  <xsl:value-of select="$name"/>
1152</xsl:template>
1153
1154<xsl:template match="jclass" mode="traceInValue">
1155  <!-- for JVMTI a jclass/jmethodID becomes just jmethodID -->
1156  <xsl:if test="count(@method)=0">
1157    <xsl:text>, 
1158                    JvmtiTrace::get_class_name(k_mirror)</xsl:text>
1159  </xsl:if>
1160</xsl:template>
1161
1162<xsl:template match="jmethodID" mode="traceInFormat">
1163  <xsl:param name="name"/>
1164  <xsl:text> </xsl:text>
1165  <xsl:value-of select="$name"/>
1166  <xsl:text>=%s.%s</xsl:text>
1167</xsl:template>
1168
1169<xsl:template match="jmethodID" mode="traceInValue">
1170  <xsl:param name="name"/>
1171  <xsl:text>, 
1172                    method_oop == NULL? "NULL" : method_oop->klass_name()->as_C_string(),
1173                    method_oop == NULL? "NULL" : method_oop->name()->as_C_string()
1174             </xsl:text>
1175</xsl:template>
1176
1177<xsl:template match="jfieldID" mode="traceInValue">
1178  <xsl:param name="name"/>
1179  <xsl:text>, fdesc.name()->as_C_string()</xsl:text>
1180</xsl:template>
1181
1182<xsl:template match="enum" mode="traceInFormat">
1183  <xsl:param name="name"/>
1184  <xsl:text> </xsl:text>
1185  <xsl:value-of select="$name"/>
1186  <xsl:text>=%d:%s</xsl:text>
1187</xsl:template>
1188
1189<xsl:template match="enum" mode="traceInValue">
1190  <xsl:param name="name"/>
1191  <xsl:text>, </xsl:text>
1192  <xsl:value-of select="$name"/>
1193  <xsl:text>, 
1194                    </xsl:text>
1195  <xsl:choose>
1196    <xsl:when test=".='jvmtiError'">
1197      <xsl:text>JvmtiUtil::error_name(</xsl:text>
1198      <xsl:value-of select="$name"/>
1199      <xsl:text>)
1200</xsl:text>
1201    </xsl:when>
1202    <xsl:otherwise>
1203      <xsl:choose>
1204        <xsl:when test=".='jvmtiEvent'">
1205          <xsl:text>JvmtiTrace::event_name(</xsl:text>
1206          <xsl:value-of select="$name"/>
1207          <xsl:text>)
1208        </xsl:text>
1209      </xsl:when>
1210      <xsl:otherwise>
1211        <xsl:text>JvmtiTrace::enum_name(</xsl:text>
1212        <xsl:value-of select="."/>
1213        <xsl:text>ConstantNames, </xsl:text>
1214        <xsl:value-of select="."/>
1215        <xsl:text>ConstantValues, </xsl:text>
1216        <xsl:value-of select="$name"/>
1217        <xsl:text>)</xsl:text>
1218      </xsl:otherwise>
1219    </xsl:choose>
1220    </xsl:otherwise>
1221  </xsl:choose>
1222</xsl:template>
1223
1224<xsl:template match="jint" mode="traceInFormat">
1225  <xsl:param name="name"/>
1226  <xsl:text> </xsl:text>
1227  <xsl:value-of select="$name"/>
1228  <xsl:text>=" INT32_FORMAT "</xsl:text>
1229</xsl:template>
1230
1231<xsl:template match="jlocation" mode="traceInFormat">
1232  <xsl:param name="name"/>
1233  <xsl:text> </xsl:text>
1234  <xsl:value-of select="$name"/>
1235  <xsl:text>=" JLONG_FORMAT "</xsl:text>
1236</xsl:template>
1237
1238<xsl:template match="jlong" mode="traceInFormat">
1239  <xsl:param name="name"/>
1240  <xsl:text> </xsl:text>
1241  <xsl:value-of select="$name"/>
1242  <xsl:text>=" JLONG_FORMAT "</xsl:text>
1243</xsl:template>
1244
1245<xsl:template match="size_t" mode="traceInFormat">
1246  <xsl:param name="name"/>
1247  <xsl:text> </xsl:text>
1248  <xsl:value-of select="$name"/>
1249  <xsl:text>=" SIZE_FORMAT_HEX "</xsl:text>
1250</xsl:template>
1251
1252<xsl:template match="jfloat|jdouble" mode="traceInFormat">
1253  <xsl:param name="name"/>
1254  <xsl:text> </xsl:text>
1255  <xsl:value-of select="$name"/>
1256  <xsl:text>=%f</xsl:text>
1257</xsl:template>
1258
1259<xsl:template match="char" mode="traceInFormat">
1260  <xsl:param name="name"/>
1261  <xsl:text> </xsl:text>
1262  <xsl:value-of select="$name"/>
1263  <xsl:text>=%c</xsl:text>
1264</xsl:template>
1265
1266<xsl:template match="uchar|jchar" mode="traceInFormat">
1267  <xsl:param name="name"/>
1268  <xsl:text> </xsl:text>
1269  <xsl:value-of select="$name"/>
1270  <xsl:text>=0x%x</xsl:text>
1271</xsl:template>
1272
1273<xsl:template match="jint|jlocation|jchar|jlong|jfloat|jdouble|char|uchar|size_t" mode="traceInValue">
1274  <xsl:param name="name"/>
1275  <xsl:text>, </xsl:text>
1276  <xsl:value-of select="$name"/>
1277</xsl:template>
1278
1279
1280<xsl:template match="jboolean" mode="traceInFormat">
1281  <xsl:param name="name"/>
1282  <xsl:text> </xsl:text>
1283  <xsl:value-of select="$name"/>
1284  <xsl:text>=%s</xsl:text>
1285</xsl:template>
1286
1287<xsl:template match="jboolean" mode="traceInValue">
1288  <xsl:param name="name"/>
1289  <xsl:text>, </xsl:text>
1290  <xsl:value-of select="$name"/>
1291  <xsl:text>? "true" : "false"</xsl:text>
1292</xsl:template>
1293
1294<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInFormat">
1295</xsl:template>
1296
1297<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInValue">
1298</xsl:template>
1299
1300
1301
1302</xsl:stylesheet>
1303