src/share/vm/prims/jvmtiEnter.xsl

Tue, 23 Nov 2010 13:22:55 -0800

author
stefank
date
Tue, 23 Nov 2010 13:22:55 -0800
changeset 2314
f95d63e2154a
parent 1907
c18cbe5936b8
child 3241
a6eef545f1a2
permissions
-rw-r--r--

6989984: Use standard include model for Hospot
Summary: Replaced MakeDeps and the includeDB files with more standardized solutions.
Reviewed-by: coleenp, kvn, kamg

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

mercurial