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