comparison src/share/vm/prims/jvmtiEnter.xsl @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children 4ce7240d622c
comparison
equal deleted inserted replaced
-1:000000000000 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
54 const 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
64 const 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
92 jint JvmtiTrace::_max_event_index = </xsl:text>
93 <xsl:value-of select="$maxEvent"/>
94 <xsl:text>;
95
96 // Event names
97 const 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
123 const 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
134 jint </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
163 const 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
203 jint JvmtiTrace::_max_function_index = </xsl:text>
204 <xsl:value-of select="$maxFunction"/>
205 <xsl:text>;
206
207 // Function names
208 const 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
217 short 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>
229 extern "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
237 struct 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>
461 static 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>