src/share/vm/prims/jvmtiEnter.xsl

Mon, 03 Feb 2014 15:24:20 +0100

author
sla
date
Mon, 03 Feb 2014 15:24:20 +0100
changeset 6327
fd07a7e4222b
parent 6198
55fb97c4c58d
child 6680
78bbf4d43a14
permissions
-rw-r--r--

8033126: Can't call default methods from JNI
Reviewed-by: dholmes, acorn, kamg

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

mercurial