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