src/share/vm/prims/jvmtiEnter.xsl

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 6680
78bbf4d43a14
parent 0
f90c822e73f8
child 8604
04d83ba48607
permissions
-rw-r--r--

merge

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

mercurial