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.
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 "utilities/macros.hpp"
41#if INCLUDE_JVMTI
42# include "prims/jvmtiEnter.hpp"
43# include "prims/jvmtiRawMonitor.hpp"
44# include "prims/jvmtiUtil.hpp"
45
46// There are known-bad format/arg pairings in the code generated by this file.
47PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
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>  }
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>    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>
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          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>
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          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>
497
498      <xsl:text>
499  Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </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          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>
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          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>
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*)ThreadLocalStorage::thread();</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*)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>
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        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>
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    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>
704
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>
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 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>
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 = 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>
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 = 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>
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 = 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>
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>
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>
1045
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>
1051
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>
1066
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>
1080
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>
1087
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>
1093
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>
1100
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>
1110
1111<xsl:template match="jrawMonitorID" mode="traceInValue">
1112  <xsl:param name="name"/>
1113  <xsl:text>, rmonitor->get_name()</xsl:text>
1114</xsl:template>
1115
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>
1125
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>
1134
1135<xsl:template match="jframeID" mode="traceInFormat">
1136  <xsl:param name="name"/>
1137  <xsl:text>depth=%d</xsl:text>
1138</xsl:template>
1139
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>
1145
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>
1153
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>
1160
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>
1168
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>
1173
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>
1180
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>
1215
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>
1222
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>
1229
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>
1236
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>
1243
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>
1250
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>
1257
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>
1263
1264
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>
1271
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>
1278
1279<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInFormat">
1280</xsl:template>
1281
1282<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInValue">
1283</xsl:template>
1284
1285
1286
1287</xsl:stylesheet>
1288