1 <?xml version="1.0"?> 2 <!-- 3 Copyright (c) 2002, 2006, 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 "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 > $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-></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 > $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 > $index]) > 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) > 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 > $index]) > 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) > 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 > $index]) > 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() && !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->get_capabilities()-></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>
#ifdef JVMTI_KERNEL 
</xsl:text> 471 <xsl:text> return JVMTI_ERROR_NOT_AVAILABLE; 
</xsl:text> 472 <xsl:text>#else 
</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> && 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 && 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) && !this_thread->is_VM_thread() && !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
</xsl:text> 598 </xsl:if> 599 600 <xsl:text>}
</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-></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 & 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 & JvmtiTrace::SHOW_ERROR) != 0) { 657 if ((trace_flags & 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 && (trace_flags & JvmtiTrace::SHOW_ERROR) != 0) { 684 if ((trace_flags & 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 & 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->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 < 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>);
</xsl:text> 902 <xsl:text> if (method_oop == NULL) {
</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>
</xsl:text> 909 <xsl:text> }
</xsl:text> 910 <xsl:if test="count(@native)=1 and contains(@native,'error')"> 911 <xsl:text> if (method_oop->is_native()) {
</xsl:text> 912 <xsl:text> return JVMTI_ERROR_NATIVE_METHOD;
</xsl:text> 913 <xsl:text> }
</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);
</xsl:text> 921 <xsl:text> fieldDescriptor fdesc;
</xsl:text> 922 <xsl:text> if (!JvmtiEnv::get_field_descriptor(k_oop, </xsl:text> 923 <xsl:value-of select="$name"/> 924 <xsl:text>, &fdesc)) {
</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>
</xsl:text> 929 <xsl:text> }
</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> < </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) > $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) > $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>