jvmtiEnter.xsl revision 3730:fb19af007ffc
1206917Smarius<?xml version="1.0"?> 2206917Smarius<!-- 3206917Smarius Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. 4206917Smarius DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5206917Smarius 6206917Smarius This code is free software; you can redistribute it and/or modify it 7206917Smarius under the terms of the GNU General Public License version 2 only, as 8206917Smarius published by the Free Software Foundation. 9206917Smarius 10206917Smarius This code is distributed in the hope that it will be useful, but WITHOUT 11206917Smarius ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12206917Smarius FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13206917Smarius version 2 for more details (a copy is included in the LICENSE file that 14206917Smarius accompanied this code). 15206917Smarius 16206917Smarius You should have received a copy of the GNU General Public License version 17206917Smarius 2 along with this work; if not, write to the Free Software Foundation, 18206917Smarius Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19206917Smarius 20206917Smarius Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21206917Smarius or visit www.oracle.com if you need additional information or have any 22206917Smarius questions. 23206917Smarius 24206917Smarius--> 25206917Smarius 26206917Smarius<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 27206917Smarius 28206917Smarius<xsl:import href="jvmtiLib.xsl"/> 29206917Smarius 30206917Smarius<xsl:output method="text" indent="no" omit-xml-declaration="yes"/> 31206917Smarius 32206917Smarius<xsl:param name="trace"></xsl:param> 33206917Smarius<xsl:param name="interface"></xsl:param> 34206917Smarius 35206917Smarius 36206917Smarius<xsl:template match="specification"> 37206917Smarius <xsl:call-template name="sourceHeader"/> 38206917Smarius <xsl:text> 39206917Smarius# include "precompiled.hpp" 40206917Smarius# include "utilities/macros.hpp" 41206917Smarius#if INCLUDE_JVMTI 42206917Smarius# include "prims/jvmtiEnter.hpp" 43206917Smarius# include "prims/jvmtiRawMonitor.hpp" 44206917Smarius# include "prims/jvmtiUtil.hpp" 45206917Smarius 46206917Smarius</xsl:text> 47206917Smarius 48206917Smarius <xsl:if test="$trace = 'Trace'"> 49206917Smarius <xsl:text> 50206917Smarius#ifdef JVMTI_TRACE 51206917Smarius</xsl:text> 52206917Smarius </xsl:if> 53206917Smarius 54206917Smarius <xsl:if test="$trace != 'Trace'"> 55206917Smarius <xsl:text> 56206917Smarius 57206917Smarius// Error names 58206917Smariusconst char* JvmtiUtil::_error_names[] = { 59206917Smarius</xsl:text> 60206917Smarius <xsl:call-template name="fillEntityName"> 61206917Smarius <xsl:with-param name="entities" select="errorsection/errorcategory/errorid"/> 62206917Smarius </xsl:call-template> 63206917Smarius <xsl:text> 64206917Smarius}; 65206917Smarius 66206917Smarius 67206917Smarius// Event threaded 68206917Smariusconst bool JvmtiUtil::_event_threaded[] = { 69206917Smarius</xsl:text> 70206917Smarius <xsl:call-template name="fillEventThreaded"> 71206917Smarius <xsl:with-param name="entities" select="eventsection/event"/> 72206917Smarius </xsl:call-template> 73206917Smarius <xsl:text> 74206917Smarius}; 75206917Smarius 76206917Smarius</xsl:text> 77206917Smarius <xsl:call-template name="eventCapabilitiesTest"/> 78206917Smarius </xsl:if> 79206917Smarius 80206917Smarius <xsl:if test="$trace = 'Trace'"> 81206917Smarius 82206917Smarius<!-- all this just to return the highest event number --> 83206917Smarius <xsl:variable name="maxEvent"> 84206917Smarius <xsl:for-each select="eventsection/event"> 85206917Smarius <xsl:variable name="mynum" select="@num"/> 86206917Smarius <xsl:if test="count(../../eventsection/event[@num > $mynum]) = 0"> 87206917Smarius <xsl:value-of select="@num"/> 88206917Smarius </xsl:if> 89206917Smarius </xsl:for-each> 90206917Smarius </xsl:variable> 91206917Smarius 92206917Smarius <xsl:text>jbyte JvmtiTrace::_event_trace_flags[</xsl:text> 93206917Smarius <xsl:value-of select="1+$maxEvent"/> 94206917Smarius <xsl:text>]; 95206917Smarius 96206917Smariusjint JvmtiTrace::_max_event_index = </xsl:text> 97206917Smarius <xsl:value-of select="$maxEvent"/> 98206917Smarius <xsl:text>; 99206917Smarius 100206917Smarius// Event names 101206917Smariusconst char* JvmtiTrace::_event_names[] = { 102206917Smarius</xsl:text> 103206917Smarius <xsl:call-template name="fillEntityName"> 104206917Smarius <xsl:with-param name="entities" select="eventsection/event"/> 105206917Smarius </xsl:call-template> 106206917Smarius <xsl:text> 107206917Smarius}; 108206917Smarius</xsl:text> 109206917Smarius <xsl:apply-templates select="//constants[@kind='enum']"/> 110206917Smarius </xsl:if> 111206917Smarius <xsl:apply-templates select="functionsection"/> 112206917Smarius 113206917Smarius <xsl:if test="$trace='Trace'"> 114206917Smarius <xsl:text> 115206917Smarius#endif /*JVMTI_TRACE */ 116206917Smarius</xsl:text> 117206917Smarius </xsl:if> 118206917Smarius 119206917Smarius</xsl:template> 120206917Smarius 121206917Smarius<xsl:template match="constants"> 122206917Smarius <xsl:text> 123206917Smarius 124206917Smarius// </xsl:text> 125206917Smarius <xsl:value-of select="@label"/> 126206917Smarius <xsl:text> names 127206917Smariusconst char* </xsl:text> 128206917Smarius <xsl:value-of select="@id"/> 129206917Smarius <xsl:text>ConstantNames[] = { 130206917Smarius</xsl:text> 131206917Smarius <xsl:apply-templates select="constant" mode="constname"/> 132206917Smarius <xsl:text> NULL 133206917Smarius}; 134206917Smarius 135206917Smarius// </xsl:text> 136206917Smarius <xsl:value-of select="@label"/> 137206917Smarius <xsl:text> value 138206917Smariusjint </xsl:text> 139206917Smarius <xsl:value-of select="@id"/> 140206917Smarius <xsl:text>ConstantValues[] = { 141206917Smarius</xsl:text> 142206917Smarius <xsl:apply-templates select="constant" mode="constvalue"/> 143206917Smarius <xsl:text> 0 144206917Smarius}; 145206917Smarius 146206917Smarius</xsl:text> 147206917Smarius</xsl:template> 148206917Smarius 149206917Smarius<xsl:template match="constant" mode="constname"> 150206917Smarius <xsl:text> "</xsl:text> 151206917Smarius <xsl:value-of select="@id"/> 152206917Smarius <xsl:text>", 153206917Smarius</xsl:text> 154206917Smarius</xsl:template> 155206917Smarius 156206917Smarius<xsl:template match="constant" mode="constvalue"> 157206917Smarius <xsl:text> </xsl:text> 158206917Smarius <xsl:value-of select="@num"/> 159206917Smarius <xsl:text>, 160206917Smarius</xsl:text> 161206917Smarius</xsl:template> 162206917Smarius 163206917Smarius<xsl:template name="eventCapabilitiesTest"> 164206917Smarius <xsl:text> 165206917Smarius 166206917Smarius// Check Event Capabilities 167206917Smariusconst bool JvmtiUtil::has_event_capability(jvmtiEvent event_type, const jvmtiCapabilities* capabilities_ptr) { 168206917Smarius switch (event_type) { 169206917Smarius</xsl:text> 170206917Smarius <xsl:for-each select="//eventsection/event"> 171206917Smarius <xsl:variable name="capa" select="capabilities/required"/> 172206917Smarius <xsl:if test="count($capa)"> 173206917Smarius <xsl:text> case </xsl:text> 174206917Smarius <xsl:value-of select="@const"/> 175206917Smarius <xsl:text>: 176206917Smarius return capabilities_ptr-></xsl:text> 177206917Smarius <xsl:value-of select="$capa/@id"/> 178206917Smarius <xsl:text> != 0; 179206917Smarius</xsl:text> 180206917Smarius </xsl:if> 181206917Smarius </xsl:for-each> 182206917Smarius <xsl:text> } 183206917Smarius // if it does not have a capability it is required 184206917Smarius return JNI_TRUE; 185206917Smarius} 186206917Smarius 187206917Smarius</xsl:text> 188206917Smarius</xsl:template> 189206917Smarius 190206917Smarius<xsl:template match="functionsection"> 191206917Smarius <xsl:if test="$trace='Trace'"> 192206917Smarius 193206917Smarius<!-- all this just to return the highest function number --> 194206917Smarius <xsl:variable name="maxFunction"> 195206917Smarius <xsl:for-each select="category/function"> 196206917Smarius <xsl:variable name="mynum" select="@num"/> 197206917Smarius <xsl:if test="count(../../category/function[@num > $mynum]) = 0"> 198206917Smarius <xsl:value-of select="@num"/> 199206917Smarius </xsl:if> 200206917Smarius </xsl:for-each> 201206917Smarius </xsl:variable> 202206917Smarius 203206917Smarius <xsl:text>jbyte JvmtiTrace::_trace_flags[</xsl:text> 204206917Smarius <xsl:value-of select="1+$maxFunction"/> 205206917Smarius <xsl:text>]; 206206917Smarius 207206917Smariusjint JvmtiTrace::_max_function_index = </xsl:text> 208206917Smarius <xsl:value-of select="$maxFunction"/> 209206917Smarius <xsl:text>; 210206917Smarius 211206917Smarius// Function names 212206917Smariusconst char* JvmtiTrace::_function_names[] = { 213206917Smarius</xsl:text> 214206917Smarius <xsl:call-template name="fillEntityName"> 215206917Smarius <xsl:with-param name="entities" select="category/function"/> 216206917Smarius </xsl:call-template> 217206917Smarius <xsl:text> 218206917Smarius}; 219206917Smarius 220206917Smarius// Exclude list 221206917Smariusshort JvmtiTrace::_exclude_functions[] = { 222206917Smarius </xsl:text> 223206917Smarius <xsl:apply-templates select="category/function" mode="notrace"> 224206917Smarius <xsl:sort select="@num"/> 225206917Smarius </xsl:apply-templates> 226206917Smarius <xsl:text>0 227206917Smarius}; 228206917Smarius 229206917Smarius</xsl:text> 230206917Smarius </xsl:if> 231206917Smarius 232206917Smarius <xsl:text> 233206917Smariusextern "C" { 234206917Smarius 235206917Smarius</xsl:text> 236206917Smarius <xsl:apply-templates select="category" mode="wrapper"/> 237206917Smarius <xsl:text> 238206917Smarius} /* end extern "C" */ 239206917Smarius 240206917Smarius// JVMTI API functions 241206917Smariusstruct jvmtiInterface_1_ jvmti</xsl:text> 242206917Smarius <xsl:value-of select="$trace"/> 243206917Smarius <xsl:text>_Interface = { 244206917Smarius</xsl:text> 245206917Smarius 246206917Smarius <xsl:call-template name="fillFuncStruct"> 247206917Smarius <xsl:with-param name="funcs" select="category/function[count(@hide)=0]"/> 248206917Smarius </xsl:call-template> 249206917Smarius 250206917Smarius <xsl:text> 251206917Smarius}; 252206917Smarius#endif // INCLUDE_JVMTI 253206917Smarius</xsl:text> 254206917Smarius</xsl:template> 255206917Smarius 256206917Smarius<xsl:template match="function" mode="functionid"> 257206917Smarius <xsl:text>jvmti</xsl:text> 258206917Smarius <xsl:value-of select="$trace"/> 259206917Smarius <xsl:text>_</xsl:text> 260206917Smarius <xsl:value-of select="@id"/> 261206917Smarius</xsl:template> 262206917Smarius 263206917Smarius<xsl:template name="fillFuncStructDoit"> 264206917Smarius <xsl:param name="func"/> 265206917Smarius <xsl:param name="index"/> 266206917Smarius <xsl:text> /* </xsl:text> 267206917Smarius <xsl:number value="$index" format=" 1"/> 268206917Smarius <xsl:text> : </xsl:text> 269206917Smarius <xsl:choose> 270206917Smarius <xsl:when test="count($func)=1"> 271206917Smarius <xsl:value-of select="$func/synopsis"/> 272206917Smarius <xsl:text> */ 273206917Smarius </xsl:text> 274206917Smarius <xsl:apply-templates select="$func" mode="functionid"/> 275206917Smarius </xsl:when> 276206917Smarius <xsl:otherwise> 277206917Smarius <xsl:text> RESERVED */ 278206917Smarius NULL</xsl:text> 279206917Smarius </xsl:otherwise> 280206917Smarius </xsl:choose> 281206917Smarius</xsl:template> 282206917Smarius 283206917Smarius<!-- generic function iterator applied to the function structure --> 284206917Smarius<xsl:template name="fillFuncStruct"> 285206917Smarius <xsl:param name="funcs"/> 286206917Smarius <xsl:param name="index" select="1"/> 287206917Smarius <xsl:call-template name="fillFuncStructDoit"> 288206917Smarius <xsl:with-param name="func" select="$funcs[@num=$index]"/> 289206917Smarius <xsl:with-param name="index" select="$index"/> 290206917Smarius </xsl:call-template> 291206917Smarius <xsl:if test="count($funcs[@num > $index]) > 0"> 292206917Smarius <xsl:text>, 293206917Smarius</xsl:text> 294206917Smarius <xsl:call-template name="fillFuncStruct"> 295206917Smarius <xsl:with-param name="funcs" select="$funcs"/> 296206917Smarius <xsl:with-param name="index" select="1+$index"/> 297206917Smarius </xsl:call-template> 298206917Smarius </xsl:if> 299206917Smarius</xsl:template> 300206917Smarius 301206917Smarius<xsl:template name="fillEntityNameDoit"> 302206917Smarius <xsl:param name="entity"/> 303206917Smarius <xsl:param name="index"/> 304206917Smarius <xsl:choose> 305206917Smarius <xsl:when test="count($entity) > 0"> 306206917Smarius <xsl:text> "</xsl:text> 307206917Smarius <xsl:value-of select="$entity[position()=1]/@id"/> 308206917Smarius <xsl:text>"</xsl:text> 309206917Smarius </xsl:when> 310206917Smarius <xsl:otherwise> 311206917Smarius <xsl:text> NULL</xsl:text> 312206917Smarius </xsl:otherwise> 313206917Smarius </xsl:choose> 314206917Smarius</xsl:template> 315206917Smarius 316206917Smarius<!-- generic entity (with id and num) iterator applied to entity names --> 317206917Smarius<xsl:template name="fillEntityName"> 318206917Smarius <xsl:param name="entities"/> 319206917Smarius <xsl:param name="index" select="0"/> 320206917Smarius <xsl:call-template name="fillEntityNameDoit"> 321206917Smarius <xsl:with-param name="entity" select="$entities[@num=$index]"/> 322206917Smarius <xsl:with-param name="index" select="$index"/> 323206917Smarius </xsl:call-template> 324206917Smarius <xsl:if test="count($entities[@num > $index]) > 0"> 325206917Smarius <xsl:text>, 326206917Smarius</xsl:text> 327206917Smarius <xsl:call-template name="fillEntityName"> 328206917Smarius <xsl:with-param name="entities" select="$entities"/> 329206917Smarius <xsl:with-param name="index" select="1+$index"/> 330206917Smarius </xsl:call-template> 331206917Smarius </xsl:if> 332206917Smarius</xsl:template> 333206917Smarius 334206917Smarius<xsl:template name="fillEventThreadedDoit"> 335206917Smarius <xsl:param name="entity"/> 336206917Smarius <xsl:param name="index"/> 337206917Smarius <xsl:choose> 338206917Smarius <xsl:when test="count($entity) > 0"> 339206917Smarius <xsl:choose> 340206917Smarius <xsl:when test="count($entity[position()=1]/@filtered)=0"> 341206917Smarius <xsl:text> false</xsl:text> 342206917Smarius </xsl:when> 343206917Smarius <xsl:otherwise> 344206917Smarius <xsl:text> true</xsl:text> 345206917Smarius </xsl:otherwise> 346206917Smarius </xsl:choose> 347206917Smarius </xsl:when> 348206917Smarius <xsl:otherwise> 349206917Smarius <xsl:text> false</xsl:text> 350206917Smarius </xsl:otherwise> 351206917Smarius </xsl:choose> 352206917Smarius</xsl:template> 353206917Smarius 354206917Smarius 355206917Smarius<xsl:template name="fillEventThreaded"> 356206917Smarius <xsl:param name="entities"/> 357206917Smarius <xsl:param name="index" select="0"/> 358206917Smarius <xsl:call-template name="fillEventThreadedDoit"> 359206917Smarius <xsl:with-param name="entity" select="$entities[@num=$index]"/> 360206917Smarius <xsl:with-param name="index" select="$index"/> 361206917Smarius </xsl:call-template> 362206917Smarius <xsl:if test="count($entities[@num > $index]) > 0"> 363206917Smarius <xsl:text>, 364206917Smarius</xsl:text> 365206917Smarius <xsl:call-template name="fillEventThreaded"> 366206917Smarius <xsl:with-param name="entities" select="$entities"/> 367206917Smarius <xsl:with-param name="index" select="1+$index"/> 368206917Smarius </xsl:call-template> 369206917Smarius </xsl:if> 370206917Smarius</xsl:template> 371206917Smarius 372206917Smarius<xsl:template match="function" mode="notrace"> 373206917Smarius <xsl:if test="count(@impl)=1 and contains(@impl,'notrace')"> 374206917Smarius <xsl:value-of select="@num"/> 375206917Smarius <xsl:text>, 376206917Smarius </xsl:text> 377206917Smarius </xsl:if> 378206917Smarius</xsl:template> 379206917Smarius 380206917Smarius<xsl:template match="category" mode="wrapper"> 381206917Smarius <xsl:text> 382206917Smarius // 383206917Smarius // </xsl:text><xsl:value-of select="@label"/><xsl:text> functions 384206917Smarius // 385206917Smarius</xsl:text> 386206917Smarius <xsl:apply-templates select="function[count(@hide)=0]"/> 387206917Smarius</xsl:template> 388206917Smarius 389206917Smarius<xsl:template match="function" mode="transition"> 390206917Smarius <xsl:param name="space"> 391206917Smarius <xsl:text> 392206917Smarius </xsl:text> 393206917Smarius </xsl:param> 394206917Smarius <xsl:value-of select="$space"/> 395206917Smarius 396206917Smarius <xsl:choose> 397206917Smarius <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))"> 398206917Smarius <xsl:text>if (this_thread == NULL || !this_thread->is_Java_thread()) {</xsl:text> 399206917Smarius </xsl:when> 400206917Smarius <xsl:otherwise> 401206917Smarius <xsl:choose> 402206917Smarius <xsl:when test="count(@phase)=0 or contains(@phase,'live') or contains(@phase,'start')"> 403206917Smarius <xsl:text>if (this_thread == NULL || (!this_thread->is_Java_thread() && !this_thread->is_VM_thread())) {</xsl:text> 404206917Smarius </xsl:when> 405206917Smarius <xsl:otherwise> 406206917Smarius <xsl:text>if (!this_thread->is_Java_thread()) {</xsl:text> 407206917Smarius </xsl:otherwise> 408206917Smarius </xsl:choose> 409206917Smarius </xsl:otherwise> 410206917Smarius </xsl:choose> 411206917Smarius 412206917Smarius <xsl:if test="$trace='Trace'"> 413206917Smarius <xsl:value-of select="$space"/> 414206917Smarius <xsl:text> if (trace_flags) {</xsl:text> 415206917Smarius <xsl:value-of select="$space"/> 416206917Smarius <xsl:text> tty->print_cr("JVMTI [non-attached thread] %s %s", func_name,</xsl:text> 417206917Smarius <xsl:value-of select="$space"/> 418206917Smarius <xsl:text> JvmtiUtil::error_name(JVMTI_ERROR_UNATTACHED_THREAD));</xsl:text> 419206917Smarius <xsl:value-of select="$space"/> 420206917Smarius <xsl:text> }</xsl:text> 421206917Smarius </xsl:if> 422206917Smarius <xsl:value-of select="$space"/> 423206917Smarius <xsl:text> return JVMTI_ERROR_UNATTACHED_THREAD;</xsl:text> 424206917Smarius <xsl:value-of select="$space"/> 425206917Smarius <xsl:text>}</xsl:text> 426206917Smarius <xsl:value-of select="$space"/> 427206917Smarius <xsl:if test="count(@impl)=0 or not(contains(@impl,'innative'))"> 428206917Smarius <xsl:text>JavaThread* current_thread = (JavaThread*)this_thread;</xsl:text> 429206917Smarius <xsl:value-of select="$space"/> 430206917Smarius <xsl:text>ThreadInVMfromNative __tiv(current_thread);</xsl:text> 431206917Smarius <xsl:value-of select="$space"/> 432206917Smarius <xsl:text>VM_ENTRY_BASE(jvmtiError, </xsl:text> 433206917Smarius <xsl:apply-templates select="." mode="functionid"/> 434206917Smarius <xsl:text> , current_thread)</xsl:text> 435206917Smarius <xsl:value-of select="$space"/> 436206917Smarius <xsl:text>debug_only(VMNativeEntryWrapper __vew;)</xsl:text> 437206917Smarius <xsl:if test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))"> 438206917Smarius <xsl:value-of select="$space"/> 439206917Smarius <xsl:text>CautiouslyPreserveExceptionMark __em(this_thread);</xsl:text> 440206917Smarius </xsl:if> 441206917Smarius </xsl:if> 442206917Smarius</xsl:template> 443206917Smarius 444206917Smarius 445206917Smarius<xsl:template match="required"> 446206917Smarius <xsl:text> 447206917Smarius if (jvmti_env->get_capabilities()-></xsl:text> 448206917Smarius <xsl:value-of select="@id"/> 449206917Smarius <xsl:text> == 0) { 450206917Smarius</xsl:text> 451206917Smarius <xsl:if test="$trace='Trace'"> 452206917Smarius <xsl:text> if (trace_flags) { 453206917Smarius tty->print_cr("JVMTI [%s] %s %s", curr_thread_name, func_name, 454206917Smarius JvmtiUtil::error_name(JVMTI_ERROR_MUST_POSSESS_CAPABILITY)); 455206917Smarius } 456206917Smarius</xsl:text> 457206917Smarius </xsl:if> 458206917Smarius <xsl:text> return JVMTI_ERROR_MUST_POSSESS_CAPABILITY; 459206917Smarius } 460206917Smarius</xsl:text> 461206917Smarius</xsl:template> 462206917Smarius 463206917Smarius 464206917Smarius<xsl:template match="function"> 465206917Smarius <xsl:text> 466206917Smariusstatic jvmtiError JNICALL 467206917Smarius</xsl:text> 468206917Smarius <xsl:apply-templates select="." mode="functionid"/> 469206917Smarius <xsl:text>(jvmtiEnv* env</xsl:text> 470206917Smarius <xsl:apply-templates select="parameters" mode="signature"/> 471206917Smarius <xsl:text>) { 472206917Smarius</xsl:text> 473206917Smarius 474206917Smarius <xsl:if test="not(contains(@jkernel,'yes'))"> 475206917Smarius <xsl:text>
#if !INCLUDE_JVMTI 
</xsl:text> 476206917Smarius <xsl:text> return JVMTI_ERROR_NOT_AVAILABLE; 
</xsl:text> 477206917Smarius <xsl:text>#else 
</xsl:text> 478206917Smarius </xsl:if> 479206917Smarius 480206917Smarius <xsl:apply-templates select="." mode="traceSetUp"/> 481206917Smarius <xsl:choose> 482206917Smarius <xsl:when test="count(@phase)=0 or contains(@phase,'live')"> 483206917Smarius <xsl:text> if(!JvmtiEnv::is_vm_live()) { 484206917Smarius</xsl:text> 485206917Smarius <xsl:if test="$trace='Trace'"> 486206917Smarius <xsl:text> if (trace_flags) { 487206917Smarius tty->print_cr("JVMTI [-] %s %s", func_name, 488206917Smarius JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE)); 489206917Smarius } 490206917Smarius</xsl:text> 491206917Smarius </xsl:if> 492206917Smarius <xsl:text> return JVMTI_ERROR_WRONG_PHASE; 493206917Smarius }</xsl:text> 494206917Smarius 495206917Smarius <xsl:text> 496206917Smarius Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text> 497206917Smarius 498206917Smarius <xsl:apply-templates select="." mode="transition"/> 499206917Smarius </xsl:when> 500206917Smarius <xsl:otherwise> 501206917Smarius <xsl:if test="contains(@phase,'onload')"> 502206917Smarius <xsl:text> if(JvmtiEnv::get_phase()!=JVMTI_PHASE_ONLOAD</xsl:text> 503206917Smarius <xsl:if test="not(contains(@phase,'onloadOnly'))"> 504206917Smarius <xsl:text> && JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE</xsl:text> 505206917Smarius </xsl:if> 506206917Smarius <xsl:text>) { 507206917Smarius</xsl:text> 508206917Smarius <xsl:if test="$trace='Trace'"> 509206917Smarius <xsl:text> if (trace_flags) { 510206917Smarius tty->print_cr("JVMTI [-] %s %s", func_name, 511206917Smarius JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE)); 512206917Smarius } 513206917Smarius</xsl:text> 514206917Smarius </xsl:if> 515206917Smarius <xsl:text> return JVMTI_ERROR_WRONG_PHASE; 516206917Smarius }</xsl:text> 517206917Smarius </xsl:if> 518206917Smarius <xsl:if test="contains(@phase,'start')"> 519206917Smarius <xsl:text> if(JvmtiEnv::get_phase()!=JVMTI_PHASE_START && JvmtiEnv::get_phase()!=JVMTI_PHASE_LIVE) { 520206917Smarius</xsl:text> 521206917Smarius <xsl:if test="$trace='Trace'"> 522206917Smarius <xsl:text> if (trace_flags) { 523206917Smarius tty->print_cr("JVMTI [-] %s %s", func_name, 524206917Smarius JvmtiUtil::error_name(JVMTI_ERROR_WRONG_PHASE)); 525206917Smarius } 526206917Smarius</xsl:text> 527206917Smarius </xsl:if> 528206917Smarius <xsl:text> return JVMTI_ERROR_WRONG_PHASE; 529206917Smarius } 530206917Smarius Thread* this_thread = (Thread*)ThreadLocalStorage::thread(); </xsl:text> 531206917Smarius <xsl:apply-templates select="." mode="transition"/> 532206917Smarius </xsl:if> 533206917Smarius </xsl:otherwise> 534206917Smarius </xsl:choose> 535206917Smarius 536206917Smarius <xsl:text> 537206917Smarius JvmtiEnv* jvmti_env = JvmtiEnv::JvmtiEnv_from_jvmti_env(env); 538206917Smarius if (!jvmti_env->is_valid()) { 539206917Smarius</xsl:text> 540206917Smarius <xsl:if test="$trace='Trace'"> 541206917Smarius <xsl:text> if (trace_flags) { 542206917Smarius tty->print_cr("JVMTI [%s] %s %s env=%d", curr_thread_name, func_name, 543206917Smarius JvmtiUtil::error_name(JVMTI_ERROR_INVALID_ENVIRONMENT), env); 544206917Smarius } 545206917Smarius</xsl:text> 546206917Smarius </xsl:if> 547206917Smarius <xsl:text> return JVMTI_ERROR_INVALID_ENVIRONMENT; 548206917Smarius } 549206917Smarius</xsl:text> 550206917Smarius 551206917Smarius <xsl:apply-templates select="capabilities/required"/> 552206917Smarius 553206917Smarius <xsl:text> jvmtiError err; 554206917Smarius</xsl:text> 555206917Smarius <xsl:choose> 556206917Smarius <xsl:when test="count(@phase)=1 and not(contains(@phase,'live')) and not(contains(@phase,'start'))"> 557206917Smarius <xsl:choose> 558206917Smarius <xsl:when test="count(@callbacksafe)=0 or not(contains(@callbacksafe,'safe'))"> 559206917Smarius <xsl:text> if (Threads::number_of_threads() != 0) { 560206917Smarius Thread* this_thread = (Thread*)ThreadLocalStorage::thread();</xsl:text> 561206917Smarius </xsl:when> 562206917Smarius <xsl:otherwise> 563206917Smarius 564206917Smarius <xsl:text> Thread* this_thread = NULL; 565206917Smarius bool transition; 566206917Smarius if (Threads::number_of_threads() == 0) { 567206917Smarius transition = false; 568206917Smarius } else { 569206917Smarius this_thread = (Thread*)ThreadLocalStorage::thread(); 570206917Smarius transition = ((this_thread != NULL) && !this_thread->is_VM_thread() && !this_thread->is_ConcurrentGC_thread()); 571206917Smarius } 572206917Smarius if (transition) {</xsl:text> 573206917Smarius </xsl:otherwise> 574206917Smarius 575206917Smarius </xsl:choose> 576206917Smarius <!-- we allow use in early phases but there are threads now, --> 577206917Smarius <!-- so do thread transition --> 578206917Smarius <xsl:apply-templates select="." mode="transition"> 579206917Smarius <xsl:with-param name="space"> 580206917Smarius <xsl:text> 581206917Smarius </xsl:text> 582206917Smarius </xsl:with-param> 583206917Smarius </xsl:apply-templates> 584206917Smarius <xsl:text> 585206917Smarius </xsl:text> 586206917Smarius <xsl:apply-templates select="." mode="doCall"/> 587206917Smarius <xsl:text> } else { 588206917Smarius </xsl:text> 589206917Smarius <!-- we are pre-thread - no thread transition code --> 590206917Smarius <xsl:apply-templates select="." mode="doCall"/> 591206917Smarius <xsl:text> } 592206917Smarius</xsl:text> 593206917Smarius </xsl:when> 594206917Smarius <xsl:otherwise> 595206917Smarius <xsl:apply-templates select="." mode="doCall"/> 596206917Smarius </xsl:otherwise> 597206917Smarius </xsl:choose> 598206917Smarius <xsl:text> return err; 599206917Smarius</xsl:text> 600206917Smarius 601206917Smarius <xsl:if test="not(contains(@jkernel,'yes'))"> 602206917Smarius <xsl:text>#endif // INCLUDE_JVMTI
</xsl:text> 603206917Smarius </xsl:if> 604206917Smarius 605206917Smarius <xsl:text>}
</xsl:text> 606206917Smarius</xsl:template> 607206917Smarius 608206917Smarius<xsl:template match="function" mode="doCall"> 609206917Smarius <xsl:apply-templates select="parameters" mode="dochecks"/> 610206917Smarius <xsl:apply-templates select="." mode="traceBefore"/> 611206917Smarius <xsl:apply-templates select="." mode="genCall"/> 612206917Smarius <xsl:apply-templates select="." mode="traceAfter"/> 613206917Smarius</xsl:template> 614206917Smarius 615206917Smarius<xsl:template match="function" mode="genCall"> 616206917Smarius <xsl:text> err = jvmti_env-></xsl:text> 617206917Smarius <xsl:value-of select="@id"/> 618206917Smarius <xsl:text>(</xsl:text> 619206917Smarius <xsl:apply-templates select="parameters" mode="HotSpotValue"/> 620206917Smarius <xsl:text>); 621206917Smarius</xsl:text> 622206917Smarius</xsl:template> 623206917Smarius 624206917Smarius 625206917Smarius<xsl:template match="function" mode="traceSetUp"> 626206917Smarius <xsl:if test="$trace='Trace'"> 627206917Smarius <xsl:text> SafeResourceMark rm; 628206917Smarius jint trace_flags = JvmtiTrace::trace_flags(</xsl:text> 629206917Smarius <xsl:value-of select="@num"/> 630206917Smarius <xsl:text>); 631206917Smarius const char *func_name; 632206917Smarius const char *curr_thread_name; 633206917Smarius if (trace_flags) { 634206917Smarius func_name = JvmtiTrace::function_name(</xsl:text> 635206917Smarius <xsl:value-of select="@num"/> 636206917Smarius <xsl:text>); 637206917Smarius curr_thread_name = JvmtiTrace::safe_get_current_thread_name(); 638206917Smarius } 639206917Smarius</xsl:text> 640206917Smarius </xsl:if> 641206917Smarius</xsl:template> 642206917Smarius 643206917Smarius 644206917Smarius<xsl:template match="function" mode="traceBefore"> 645206917Smarius <xsl:if test="$trace='Trace'"> 646206917Smarius <xsl:text> 647206917Smarius if ((trace_flags & JvmtiTrace::SHOW_IN) != 0) { 648206917Smarius </xsl:text> 649206917Smarius <xsl:apply-templates select="." mode="traceIn"/> 650206917Smarius <xsl:text> } 651206917Smarius</xsl:text> 652206917Smarius </xsl:if> 653206917Smarius</xsl:template> 654206917Smarius 655206917Smarius 656206917Smarius<xsl:template match="param" mode="traceError"> 657206917Smarius <xsl:param name="err"/> 658206917Smarius <xsl:param name="comment"></xsl:param> 659206917Smarius <xsl:param name="extraValue"></xsl:param> 660206917Smarius <xsl:if test="$trace='Trace'"> 661206917Smarius <xsl:text> if ((trace_flags & JvmtiTrace::SHOW_ERROR) != 0) { 662206917Smarius if ((trace_flags & JvmtiTrace::SHOW_IN) == 0) { 663206917Smarius</xsl:text> 664206917Smarius <xsl:apply-templates select="../.." mode="traceIn"> 665206917Smarius <xsl:with-param name="endParam" select="."/> 666206917Smarius </xsl:apply-templates> 667206917Smarius <xsl:text> } 668206917Smarius tty->print_cr("JVMTI [%s] %s } %s - erroneous arg is </xsl:text> 669206917Smarius <xsl:value-of select="@id"/> 670206917Smarius <xsl:value-of select="$comment"/> 671206917Smarius <xsl:text>", curr_thread_name, func_name, 672206917Smarius JvmtiUtil::error_name(</xsl:text> 673206917Smarius <xsl:value-of select="$err"/> 674206917Smarius <xsl:text>)</xsl:text> 675206917Smarius <xsl:value-of select="$extraValue"/> 676206917Smarius <xsl:text>); 677206917Smarius } 678206917Smarius</xsl:text> 679206917Smarius </xsl:if> 680206917Smarius <xsl:text> return </xsl:text> 681206917Smarius <xsl:value-of select="$err"/> 682206917Smarius <xsl:text>;</xsl:text> 683206917Smarius</xsl:template> 684206917Smarius 685206917Smarius 686206917Smarius<xsl:template match="function" mode="traceAfter"> 687206917Smarius <xsl:if test="$trace='Trace'"> 688206917Smarius <xsl:text> if ( err != JVMTI_ERROR_NONE && (trace_flags & JvmtiTrace::SHOW_ERROR) != 0) { 689206917Smarius if ((trace_flags & JvmtiTrace::SHOW_IN) == 0) { 690206917Smarius</xsl:text> 691206917Smarius <xsl:apply-templates select="." mode="traceIn"/> 692206917Smarius <xsl:text> } 693206917Smarius tty->print_cr("JVMTI [%s] %s } %s", curr_thread_name, func_name, 694206917Smarius JvmtiUtil::error_name(err)); 695206917Smarius } else if ((trace_flags & JvmtiTrace::SHOW_OUT) != 0) { 696206917Smarius tty->print_cr("JVMTI [%s] %s }", curr_thread_name, func_name); 697206917Smarius } 698206917Smarius</xsl:text> 699206917Smarius </xsl:if> 700206917Smarius</xsl:template> 701206917Smarius 702206917Smarius<xsl:template match="function" mode="traceIn"> 703206917Smarius <xsl:param name="endParam"></xsl:param> 704206917Smarius <xsl:text> tty->print_cr("JVMTI [%s] %s { </xsl:text> 705206917Smarius <xsl:apply-templates select="parameters" mode="traceInFormat"> 706206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 707206917Smarius </xsl:apply-templates> 708206917Smarius <xsl:text>", curr_thread_name, func_name</xsl:text> 709206917Smarius <xsl:apply-templates select="parameters" mode="traceInValue"> 710206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 711206917Smarius </xsl:apply-templates> 712206917Smarius <xsl:text>); 713206917Smarius</xsl:text> 714206917Smarius</xsl:template> 715206917Smarius 716206917Smarius<xsl:template match="parameters" mode="dochecks"> 717206917Smarius <xsl:apply-templates select="param" mode="dochecks"/> 718206917Smarius</xsl:template> 719206917Smarius 720206917Smarius<xsl:template match="param" mode="dochecks"> 721206917Smarius <xsl:apply-templates select="child::*[position()=1]" mode="dochecks"> 722206917Smarius <xsl:with-param name="name" select="@id"/> 723206917Smarius </xsl:apply-templates> 724206917Smarius</xsl:template> 725206917Smarius 726206917Smarius<xsl:template match="outptr|outbuf|allocfieldbuf|ptrtype|inptr|inbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="dochecks"> 727206917Smarius <xsl:param name="name"/> 728206917Smarius <xsl:if test="count(nullok)=0"> 729206917Smarius <xsl:text> if (</xsl:text> 730206917Smarius <xsl:value-of select="$name"/> 731206917Smarius <xsl:text> == NULL) { 732206917Smarius</xsl:text> 733206917Smarius <xsl:apply-templates select=".." mode="traceError"> 734206917Smarius <xsl:with-param name="err">JVMTI_ERROR_NULL_POINTER</xsl:with-param> 735206917Smarius </xsl:apply-templates> 736206917Smarius <xsl:text> 737206917Smarius } 738206917Smarius</xsl:text> 739206917Smarius </xsl:if> 740206917Smarius</xsl:template> 741206917Smarius 742206917Smarius<xsl:template match="jrawMonitorID" mode="dochecks"> 743206917Smarius <xsl:param name="name"/> 744206917Smarius <xsl:text> JvmtiRawMonitor *rmonitor = (JvmtiRawMonitor *)</xsl:text> 745206917Smarius <xsl:value-of select="$name"/> 746206917Smarius <xsl:text>; 747206917Smarius if (rmonitor == NULL) { 748206917Smarius</xsl:text> 749206917Smarius <xsl:apply-templates select=".." mode="traceError"> 750206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param> 751206917Smarius <xsl:with-param name="comment"> - raw monitor is NULL</xsl:with-param> 752206917Smarius </xsl:apply-templates> 753206917Smarius <xsl:text> 754206917Smarius } 755206917Smarius if (!rmonitor->is_valid()) { 756206917Smarius</xsl:text> 757206917Smarius <xsl:apply-templates select=".." mode="traceError"> 758206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_MONITOR</xsl:with-param> 759206917Smarius <xsl:with-param name="comment"> - not a raw monitor 0x%x</xsl:with-param> 760206917Smarius <xsl:with-param name="extraValue">, rmonitor</xsl:with-param> 761206917Smarius </xsl:apply-templates> 762206917Smarius <xsl:text> 763206917Smarius } 764206917Smarius</xsl:text> 765206917Smarius</xsl:template> 766206917Smarius 767206917Smarius<xsl:template match="jthread" mode="dochecksbody"> 768206917Smarius <xsl:param name="name"/> 769206917Smarius <xsl:text> oop thread_oop = JNIHandles::resolve_external_guard(</xsl:text> 770206917Smarius <xsl:value-of select="$name"/> 771206917Smarius <xsl:text>); 772206917Smarius if (thread_oop == NULL) { 773206917Smarius</xsl:text> 774206917Smarius <xsl:apply-templates select=".." mode="traceError"> 775206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param> 776206917Smarius <xsl:with-param name="comment"> - jthread resolved to NULL - jthread = %0x%x</xsl:with-param> 777206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 778206917Smarius </xsl:apply-templates> 779206917Smarius <xsl:text> 780206917Smarius } 781206917Smarius if (!thread_oop->is_a(SystemDictionary::Thread_klass())) { 782206917Smarius</xsl:text> 783206917Smarius <xsl:apply-templates select=".." mode="traceError"> 784206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param> 785206917Smarius <xsl:with-param name="comment"> - oop is not a thread - jthread = %0x%x</xsl:with-param> 786206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 787206917Smarius </xsl:apply-templates> 788206917Smarius <xsl:text> 789206917Smarius } 790206917Smarius java_thread = java_lang_Thread::thread(thread_oop); 791206917Smarius if (java_thread == NULL) { 792206917Smarius</xsl:text> 793206917Smarius <xsl:apply-templates select=".." mode="traceError"> 794206917Smarius <xsl:with-param name="err"> 795206917Smarius <xsl:text>JVMTI_ERROR_THREAD_NOT_ALIVE</xsl:text> 796206917Smarius </xsl:with-param> 797206917Smarius <xsl:with-param name="comment"> - not a Java thread - jthread = %0x%x</xsl:with-param> 798206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 799206917Smarius </xsl:apply-templates> 800206917Smarius <xsl:text> 801206917Smarius } 802206917Smarius</xsl:text> 803206917Smarius</xsl:template> 804206917Smarius 805206917Smarius<xsl:template match="jthread" mode="dochecks"> 806206917Smarius <xsl:param name="name"/> 807206917Smarius <!-- If we convert and test threads --> 808206917Smarius <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))"> 809206917Smarius <xsl:text> JavaThread* java_thread; 810206917Smarius</xsl:text> 811206917Smarius <xsl:choose> 812206917Smarius <xsl:when test="count(@null)=0"> 813206917Smarius <xsl:apply-templates select="." mode="dochecksbody"> 814206917Smarius <xsl:with-param name="name" select="$name"/> 815206917Smarius </xsl:apply-templates> 816206917Smarius </xsl:when> 817206917Smarius <xsl:otherwise> 818206917Smarius <xsl:text> if (</xsl:text> 819206917Smarius <xsl:value-of select="$name"/> 820206917Smarius <xsl:text> == NULL) { 821206917Smarius java_thread = current_thread; 822206917Smarius } else { 823206917Smarius</xsl:text> 824206917Smarius <xsl:apply-templates select="." mode="dochecksbody"> 825206917Smarius <xsl:with-param name="name" select="$name"/> 826206917Smarius </xsl:apply-templates> 827206917Smarius <xsl:text> } 828206917Smarius</xsl:text> 829206917Smarius </xsl:otherwise> 830206917Smarius </xsl:choose> 831206917Smarius </xsl:if> 832206917Smarius</xsl:template> 833206917Smarius 834206917Smarius<xsl:template match="jframeID" mode="dochecks"> 835206917Smarius <xsl:param name="name"/> 836206917Smarius <xsl:text> 837206917Smarius if (depth < 0) { 838206917Smarius</xsl:text> 839206917Smarius <xsl:apply-templates select=".." mode="traceError"> 840206917Smarius <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param> 841206917Smarius <xsl:with-param name="comment"> - negative depth - jthread = %0x%x</xsl:with-param> 842206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 843206917Smarius </xsl:apply-templates> 844206917Smarius <xsl:text> 845206917Smarius } 846206917Smarius</xsl:text> 847206917Smarius</xsl:template> 848206917Smarius 849206917Smarius<xsl:template match="jclass" mode="dochecks"> 850206917Smarius <xsl:param name="name"/> 851206917Smarius <!-- for JVMTI a jclass/jmethodID becomes just jmethodID --> 852206917Smarius <xsl:if test="count(@method)=0"> 853206917Smarius <xsl:text> oop k_mirror = JNIHandles::resolve_external_guard(</xsl:text> 854206917Smarius <xsl:value-of select="$name"/> 855206917Smarius <xsl:text>); 856206917Smarius if (k_mirror == NULL) { 857206917Smarius</xsl:text> 858206917Smarius <xsl:apply-templates select=".." mode="traceError"> 859206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param> 860206917Smarius <xsl:with-param name="comment"> - resolved to NULL - jclass = 0x%x</xsl:with-param> 861206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 862206917Smarius </xsl:apply-templates> 863206917Smarius <xsl:text> 864206917Smarius } 865206917Smarius if (!k_mirror->is_a(SystemDictionary::Class_klass())) { 866206917Smarius</xsl:text> 867206917Smarius <xsl:apply-templates select=".." mode="traceError"> 868206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param> 869206917Smarius <xsl:with-param name="comment"> - not a class - jclass = 0x%x</xsl:with-param> 870206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 871206917Smarius </xsl:apply-templates> 872206917Smarius <xsl:text> 873206917Smarius } 874206917Smarius</xsl:text> 875206917Smarius <xsl:if test="count(@method|@field)=1"> 876206917Smarius <xsl:text> 877206917Smarius if (java_lang_Class::is_primitive(k_mirror)) { 878206917Smarius</xsl:text> 879206917Smarius <xsl:apply-templates select=".." mode="traceError"> 880206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param> 881206917Smarius <xsl:with-param name="comment"> - is a primitive class - jclass = 0x%x</xsl:with-param> 882206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 883206917Smarius </xsl:apply-templates> 884206917Smarius <xsl:text> 885206917Smarius } 886206917Smarius Klass* k_oop = java_lang_Class::as_Klass(k_mirror); 887206917Smarius if (k_oop == NULL) { 888206917Smarius</xsl:text> 889206917Smarius <xsl:apply-templates select=".." mode="traceError"> 890206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_CLASS</xsl:with-param> 891206917Smarius <xsl:with-param name="comment"> - no Klass* - jclass = 0x%x</xsl:with-param> 892206917Smarius <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param> 893206917Smarius </xsl:apply-templates> 894206917Smarius <xsl:text> 895206917Smarius } 896206917Smarius</xsl:text> 897206917Smarius </xsl:if> 898206917Smarius </xsl:if> 899206917Smarius</xsl:template> 900206917Smarius 901206917Smarius 902206917Smarius<xsl:template match="jmethodID" mode="dochecks"> 903206917Smarius <xsl:param name="name"/> 904206917Smarius <xsl:text> Method* method_oop = Method::checked_resolve_jmethod_id(</xsl:text> 905206917Smarius <xsl:value-of select="$name"/> 906206917Smarius <xsl:text>);
</xsl:text> 907206917Smarius <xsl:text> if (method_oop == NULL) {
</xsl:text> 908206917Smarius <xsl:apply-templates select=".." mode="traceError"> 909206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_METHODID</xsl:with-param> 910206917Smarius <xsl:with-param name="comment"></xsl:with-param> 911206917Smarius <xsl:with-param name="extraValue"></xsl:with-param> 912206917Smarius </xsl:apply-templates> 913206917Smarius <xsl:text>
</xsl:text> 914206917Smarius <xsl:text> }
</xsl:text> 915206917Smarius <xsl:if test="count(@native)=1 and contains(@native,'error')"> 916206917Smarius <xsl:text> if (method_oop->is_native()) {
</xsl:text> 917206917Smarius <xsl:text> return JVMTI_ERROR_NATIVE_METHOD;
</xsl:text> 918206917Smarius <xsl:text> }
</xsl:text> 919206917Smarius </xsl:if> 920206917Smarius</xsl:template> 921206917Smarius 922206917Smarius 923206917Smarius<xsl:template match="jfieldID" mode="dochecks"> 924206917Smarius <xsl:param name="name"/> 925206917Smarius <xsl:text> ResourceMark rm_fdesc(current_thread);
</xsl:text> 926206917Smarius <xsl:text> fieldDescriptor fdesc;
</xsl:text> 927206917Smarius <xsl:text> if (!JvmtiEnv::get_field_descriptor(k_oop, </xsl:text> 928206917Smarius <xsl:value-of select="$name"/> 929206917Smarius <xsl:text>, &fdesc)) {
</xsl:text> 930206917Smarius <xsl:apply-templates select=".." mode="traceError"> 931206917Smarius <xsl:with-param name="err">JVMTI_ERROR_INVALID_FIELDID</xsl:with-param> 932206917Smarius </xsl:apply-templates> 933206917Smarius <xsl:text>
</xsl:text> 934206917Smarius <xsl:text> }
</xsl:text> 935206917Smarius</xsl:template> 936206917Smarius 937206917Smarius 938206917Smarius<xsl:template match="jint" mode="dochecks"> 939206917Smarius <xsl:param name="name"/> 940206917Smarius <xsl:if test="count(@min)=1"> 941206917Smarius <xsl:text> if (</xsl:text> 942206917Smarius <xsl:value-of select="$name"/> 943206917Smarius <xsl:text> < </xsl:text> 944206917Smarius <xsl:value-of select="@min"/> 945206917Smarius <xsl:text>) { 946206917Smarius</xsl:text> 947206917Smarius <xsl:apply-templates select=".." mode="traceError"> 948206917Smarius <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param> 949206917Smarius </xsl:apply-templates> 950206917Smarius <xsl:text> 951206917Smarius } 952206917Smarius</xsl:text> 953206917Smarius </xsl:if> 954206917Smarius</xsl:template> 955206917Smarius 956206917Smarius<xsl:template match="jobject|jvalue|jthreadGroup|enum|jchar|jlong|jfloat|jdouble|jlocation|jboolean|char|uchar|size_t|void|struct" mode="dochecks"> 957206917Smarius</xsl:template> 958206917Smarius 959206917Smarius<!-- iterate over parameters, stopping if specified is encountered --> 960206917Smarius<xsl:template name="traceInValueParamsUpTo"> 961206917Smarius <xsl:param name="params"/> 962206917Smarius <xsl:param name="endParam"></xsl:param> 963206917Smarius <xsl:param name="index" select="1"/> 964206917Smarius <xsl:variable name="cParam" select="$params[position()=$index]"/> 965206917Smarius <xsl:if test="$cParam!=$endParam"> 966206917Smarius <xsl:apply-templates select="$cParam" mode="traceInValue"/> 967206917Smarius <xsl:if test="count($params) > $index"> 968206917Smarius <xsl:call-template name="traceInValueParamsUpTo"> 969206917Smarius <xsl:with-param name="params" select="$params"/> 970206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 971206917Smarius <xsl:with-param name="index" select="1+$index"/> 972206917Smarius </xsl:call-template> 973206917Smarius </xsl:if> 974206917Smarius </xsl:if> 975206917Smarius</xsl:template> 976206917Smarius 977206917Smarius<xsl:template name="traceInFormatParamsUpTo"> 978206917Smarius <xsl:param name="params"/> 979206917Smarius <xsl:param name="endParam"></xsl:param> 980206917Smarius <xsl:param name="index" select="1"/> 981206917Smarius <xsl:variable name="cParam" select="$params[position()=$index]"/> 982206917Smarius <xsl:if test="$cParam!=$endParam"> 983206917Smarius <xsl:apply-templates select="$cParam" mode="traceInFormat"/> 984206917Smarius <xsl:if test="count($params) > $index"> 985206917Smarius <xsl:call-template name="traceInFormatParamsUpTo"> 986206917Smarius <xsl:with-param name="params" select="$params"/> 987206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 988206917Smarius <xsl:with-param name="index" select="1+$index"/> 989206917Smarius </xsl:call-template> 990206917Smarius </xsl:if> 991206917Smarius </xsl:if> 992206917Smarius</xsl:template> 993206917Smarius 994206917Smarius<xsl:template match="parameters" mode="traceInFormat"> 995206917Smarius <xsl:param name="endParam"></xsl:param> 996206917Smarius <xsl:call-template name="traceInFormatParamsUpTo"> 997206917Smarius <xsl:with-param name="params" select="param"/> 998206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 999206917Smarius </xsl:call-template> 1000206917Smarius</xsl:template> 1001206917Smarius 1002206917Smarius<xsl:template match="parameters" mode="traceInValue"> 1003206917Smarius <xsl:param name="endParam"></xsl:param> 1004206917Smarius <xsl:call-template name="traceInValueParamsUpTo"> 1005206917Smarius <xsl:with-param name="params" select="param"/> 1006206917Smarius <xsl:with-param name="endParam" select="$endParam"/> 1007206917Smarius </xsl:call-template> 1008206917Smarius</xsl:template> 1009206917Smarius 1010206917Smarius<xsl:template match="param" mode="traceInFormat"> 1011206917Smarius <xsl:apply-templates select="child::*[position()=1]" mode="traceInFormat"> 1012206917Smarius <xsl:with-param name="name" select="@id"/> 1013206917Smarius </xsl:apply-templates> 1014206917Smarius</xsl:template> 1015206917Smarius 1016206917Smarius<xsl:template match="param" mode="traceInValue"> 1017206917Smarius <xsl:apply-templates select="child::*[position()=1]" mode="traceInValue"> 1018206917Smarius <xsl:with-param name="name" select="@id"/> 1019206917Smarius </xsl:apply-templates> 1020206917Smarius</xsl:template> 1021206917Smarius 1022206917Smarius<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInFormat"> 1023206917Smarius</xsl:template> 1024206917Smarius 1025206917Smarius<xsl:template match="outptr|outbuf|allocfieldbuf|vmbuf|allocbuf|agentbuf|allocallocbuf" mode="traceInValue"> 1026206917Smarius</xsl:template> 1027206917Smarius 1028206917Smarius<xsl:template match="inbuf" mode="traceInFormat"> 1029206917Smarius <xsl:param name="name"/> 1030206917Smarius <xsl:text> </xsl:text> 1031206917Smarius <xsl:value-of select="$name"/> 1032206917Smarius <xsl:variable name="child" select="child::*[position()=1]"/> 1033206917Smarius <xsl:choose> 1034206917Smarius <xsl:when test="name($child)='char'"> 1035206917Smarius <xsl:text>='%s'</xsl:text> 1036206917Smarius </xsl:when> 1037206917Smarius <xsl:otherwise> 1038206917Smarius <xsl:text>=0x%x</xsl:text> 1039206917Smarius </xsl:otherwise> 1040206917Smarius </xsl:choose> 1041206917Smarius</xsl:template> 1042206917Smarius 1043206917Smarius<xsl:template match="inbuf" mode="traceInValue"> 1044206917Smarius <xsl:param name="name"/> 1045206917Smarius <xsl:text>, </xsl:text> 1046206917Smarius <xsl:value-of select="$name"/> 1047206917Smarius</xsl:template> 1048206917Smarius 1049206917Smarius<xsl:template match="ptrtype" mode="traceInFormat"> 1050206917Smarius <xsl:param name="name"/> 1051206917Smarius <xsl:variable name="child" select="child::*[position()=1]"/> 1052206917Smarius <xsl:choose> 1053206917Smarius <xsl:when test="name($child)='jclass'"> 1054206917Smarius <xsl:text> </xsl:text> 1055206917Smarius <xsl:value-of select="$name"/> 1056206917Smarius <xsl:text>=0x%x</xsl:text> 1057206917Smarius </xsl:when> 1058206917Smarius <xsl:otherwise> 1059206917Smarius <xsl:apply-templates select="$child" mode="traceInFormat"/> 1060206917Smarius </xsl:otherwise> 1061206917Smarius </xsl:choose> 1062206917Smarius</xsl:template> 1063206917Smarius 1064206917Smarius<xsl:template match="ptrtype" mode="traceInValue"> 1065206917Smarius <xsl:param name="name"/> 1066206917Smarius <xsl:variable name="child" select="child::*[position()=1]"/> 1067206917Smarius <xsl:choose> 1068206917Smarius <xsl:when test="name($child)='jclass'"> 1069206917Smarius <xsl:text>, </xsl:text> 1070206917Smarius <xsl:value-of select="$name"/> 1071206917Smarius </xsl:when> 1072206917Smarius <xsl:otherwise> 1073206917Smarius <xsl:apply-templates select="$child" mode="traceInValue"/> 1074206917Smarius </xsl:otherwise> 1075206917Smarius </xsl:choose> 1076206917Smarius</xsl:template> 1077206917Smarius 1078206917Smarius<xsl:template match="inptr" mode="traceInFormat"> 1079206917Smarius <xsl:param name="name"/> 1080206917Smarius <xsl:text> </xsl:text> 1081206917Smarius <xsl:value-of select="$name"/> 1082206917Smarius <xsl:text>=0x%x</xsl:text> 1083206917Smarius</xsl:template> 1084206917Smarius 1085206917Smarius<xsl:template match="inptr" mode="traceInValue"> 1086206917Smarius <xsl:param name="name"/> 1087206917Smarius <xsl:text>, </xsl:text> 1088206917Smarius <xsl:value-of select="$name"/> 1089206917Smarius</xsl:template> 1090206917Smarius 1091206917Smarius<xsl:template match="jrawMonitorID|jfieldID" mode="traceInFormat"> 1092206917Smarius <xsl:param name="name"/> 1093206917Smarius <xsl:text> </xsl:text> 1094206917Smarius <xsl:value-of select="$name"/> 1095206917Smarius <xsl:text>=%s</xsl:text> 1096206917Smarius</xsl:template> 1097206917Smarius 1098206917Smarius<xsl:template match="jclass" mode="traceInFormat"> 1099206917Smarius <xsl:param name="name"/> 1100206917Smarius <!-- for JVMTI a jclass/jmethodID becomes just jmethodID --> 1101206917Smarius <xsl:if test="count(@method)=0"> 1102206917Smarius <xsl:text> </xsl:text> 1103206917Smarius <xsl:value-of select="$name"/> 1104206917Smarius <xsl:text>=%s</xsl:text> 1105206917Smarius </xsl:if> 1106206917Smarius</xsl:template> 1107206917Smarius 1108206917Smarius<xsl:template match="jrawMonitorID" mode="traceInValue"> 1109206917Smarius <xsl:param name="name"/> 1110206917Smarius <xsl:text>, rmonitor->get_name()</xsl:text> 1111206917Smarius</xsl:template> 1112206917Smarius 1113206917Smarius<xsl:template match="jthread" mode="traceInFormat"> 1114206917Smarius <xsl:param name="name"/> 1115206917Smarius <!-- If we convert and test threads --> 1116206917Smarius <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))"> 1117206917Smarius <xsl:text> </xsl:text> 1118206917Smarius <xsl:value-of select="$name"/> 1119206917Smarius <xsl:text>=%s</xsl:text> 1120206917Smarius </xsl:if> 1121206917Smarius</xsl:template> 1122206917Smarius 1123206917Smarius<xsl:template match="jthread" mode="traceInValue"> 1124206917Smarius <xsl:param name="name"/> 1125206917Smarius <!-- If we convert and test threads --> 1126206917Smarius <xsl:if test="count(@impl)=0 or not(contains(@impl,'noconvert'))"> 1127206917Smarius <xsl:text>, 1128206917Smarius JvmtiTrace::safe_get_thread_name(java_thread)</xsl:text> 1129206917Smarius </xsl:if> 1130206917Smarius</xsl:template> 1131206917Smarius 1132206917Smarius<xsl:template match="jframeID" mode="traceInFormat"> 1133206917Smarius <xsl:param name="name"/> 1134206917Smarius <xsl:text>depth=%d</xsl:text> 1135206917Smarius</xsl:template> 1136206917Smarius 1137206917Smarius<xsl:template match="jframeID" mode="traceInValue"> 1138206917Smarius <xsl:param name="name"/> 1139206917Smarius <xsl:text>, </xsl:text> 1140206917Smarius <xsl:value-of select="$name"/> 1141206917Smarius</xsl:template> 1142206917Smarius 1143206917Smarius<xsl:template match="jclass" mode="traceInValue"> 1144206917Smarius <!-- for JVMTI a jclass/jmethodID becomes just jmethodID --> 1145206917Smarius <xsl:if test="count(@method)=0"> 1146206917Smarius <xsl:text>, 1147206917Smarius JvmtiTrace::get_class_name(k_mirror)</xsl:text> 1148206917Smarius </xsl:if> 1149206917Smarius</xsl:template> 1150206917Smarius 1151206917Smarius<xsl:template match="jmethodID" mode="traceInFormat"> 1152206917Smarius <xsl:param name="name"/> 1153206917Smarius <xsl:text> </xsl:text> 1154206917Smarius <xsl:value-of select="$name"/> 1155206917Smarius <xsl:text>=%s.%s</xsl:text> 1156206917Smarius</xsl:template> 1157206917Smarius 1158206917Smarius<xsl:template match="jmethodID" mode="traceInValue"> 1159206917Smarius <xsl:param name="name"/> 1160206917Smarius <xsl:text>, 1161206917Smarius method_oop == NULL? "NULL" : method_oop->klass_name()->as_C_string(), 1162206917Smarius method_oop == NULL? "NULL" : method_oop->name()->as_C_string() 1163206917Smarius </xsl:text> 1164206917Smarius</xsl:template> 1165206917Smarius 1166206917Smarius<xsl:template match="jfieldID" mode="traceInValue"> 1167206917Smarius <xsl:param name="name"/> 1168206917Smarius <xsl:text>, fdesc.name()->as_C_string()</xsl:text> 1169206917Smarius</xsl:template> 1170206917Smarius 1171206917Smarius<xsl:template match="enum" mode="traceInFormat"> 1172206917Smarius <xsl:param name="name"/> 1173206917Smarius <xsl:text> </xsl:text> 1174206917Smarius <xsl:value-of select="$name"/> 1175206917Smarius <xsl:text>=%d:%s</xsl:text> 1176206917Smarius</xsl:template> 1177206917Smarius 1178206917Smarius<xsl:template match="enum" mode="traceInValue"> 1179206917Smarius <xsl:param name="name"/> 1180206917Smarius <xsl:text>, </xsl:text> 1181206917Smarius <xsl:value-of select="$name"/> 1182206917Smarius <xsl:text>, 1183206917Smarius </xsl:text> 1184206917Smarius <xsl:choose> 1185206917Smarius <xsl:when test=".='jvmtiError'"> 1186206917Smarius <xsl:text>JvmtiUtil::error_name(</xsl:text> 1187206917Smarius <xsl:value-of select="$name"/> 1188206917Smarius <xsl:text>) 1189206917Smarius</xsl:text> 1190206917Smarius </xsl:when> 1191206917Smarius <xsl:otherwise> 1192206917Smarius <xsl:choose> 1193206917Smarius <xsl:when test=".='jvmtiEvent'"> 1194206917Smarius <xsl:text>JvmtiTrace::event_name(</xsl:text> 1195206917Smarius <xsl:value-of select="$name"/> 1196206917Smarius <xsl:text>) 1197206917Smarius </xsl:text> 1198206917Smarius </xsl:when> 1199206917Smarius <xsl:otherwise> 1200206917Smarius <xsl:text>JvmtiTrace::enum_name(</xsl:text> 1201206917Smarius <xsl:value-of select="."/> 1202206917Smarius <xsl:text>ConstantNames, </xsl:text> 1203206917Smarius <xsl:value-of select="."/> 1204206917Smarius <xsl:text>ConstantValues, </xsl:text> 1205206917Smarius <xsl:value-of select="$name"/> 1206206917Smarius <xsl:text>)</xsl:text> 1207206917Smarius </xsl:otherwise> 1208206917Smarius </xsl:choose> 1209206917Smarius </xsl:otherwise> 1210206917Smarius </xsl:choose> 1211206917Smarius</xsl:template> 1212206917Smarius 1213206917Smarius<xsl:template match="jint|jlocation" mode="traceInFormat"> 1214206917Smarius <xsl:param name="name"/> 1215206917Smarius <xsl:text> </xsl:text> 1216206917Smarius <xsl:value-of select="$name"/> 1217206917Smarius <xsl:text>=%d</xsl:text> 1218206917Smarius</xsl:template> 1219206917Smarius 1220206917Smarius<xsl:template match="jlong" mode="traceInFormat"> 1221206917Smarius <xsl:param name="name"/> 1222206917Smarius <xsl:text> </xsl:text> 1223206917Smarius <xsl:value-of select="$name"/> 1224206917Smarius <xsl:text>=%ld</xsl:text> 1225206917Smarius</xsl:template> 1226206917Smarius 1227206917Smarius<xsl:template match="size_t" mode="traceInFormat"> 1228206917Smarius <xsl:param name="name"/> 1229206917Smarius <xsl:text> </xsl:text> 1230206917Smarius <xsl:value-of select="$name"/> 1231206917Smarius <xsl:text>=0x%zx</xsl:text> 1232206917Smarius</xsl:template> 1233206917Smarius 1234206917Smarius<xsl:template match="jfloat|jdouble" mode="traceInFormat"> 1235206917Smarius <xsl:param name="name"/> 1236206917Smarius <xsl:text> </xsl:text> 1237206917Smarius <xsl:value-of select="$name"/> 1238206917Smarius <xsl:text>=%f</xsl:text> 1239206917Smarius</xsl:template> 1240206917Smarius 1241206917Smarius<xsl:template match="char" mode="traceInFormat"> 1242206917Smarius <xsl:param name="name"/> 1243206917Smarius <xsl:text> </xsl:text> 1244206917Smarius <xsl:value-of select="$name"/> 1245206917Smarius <xsl:text>=%c</xsl:text> 1246206917Smarius</xsl:template> 1247206917Smarius 1248206917Smarius<xsl:template match="uchar|jchar" mode="traceInFormat"> 1249206917Smarius <xsl:param name="name"/> 1250206917Smarius <xsl:text> </xsl:text> 1251206917Smarius <xsl:value-of select="$name"/> 1252206917Smarius <xsl:text>=0x%x</xsl:text> 1253206917Smarius</xsl:template> 1254206917Smarius 1255206917Smarius<xsl:template match="jint|jlocation|jchar|jlong|jfloat|jdouble|char|uchar|size_t" mode="traceInValue"> 1256206917Smarius <xsl:param name="name"/> 1257206917Smarius <xsl:text>, </xsl:text> 1258206917Smarius <xsl:value-of select="$name"/> 1259206917Smarius</xsl:template> 1260206917Smarius 1261206917Smarius 1262206917Smarius<xsl:template match="jboolean" mode="traceInFormat"> 1263206917Smarius <xsl:param name="name"/> 1264206917Smarius <xsl:text> </xsl:text> 1265206917Smarius <xsl:value-of select="$name"/> 1266206917Smarius <xsl:text>=%s</xsl:text> 1267206917Smarius</xsl:template> 1268206917Smarius 1269206917Smarius<xsl:template match="jboolean" mode="traceInValue"> 1270206917Smarius <xsl:param name="name"/> 1271206917Smarius <xsl:text>, </xsl:text> 1272206917Smarius <xsl:value-of select="$name"/> 1273206917Smarius <xsl:text>? "true" : "false"</xsl:text> 1274206917Smarius</xsl:template> 1275206917Smarius 1276206917Smarius<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInFormat"> 1277206917Smarius</xsl:template> 1278206917Smarius 1279206917Smarius<xsl:template match="jobject|jvalue|jthreadGroup|void|struct" mode="traceInValue"> 1280206917Smarius</xsl:template> 1281206917Smarius 1282206917Smarius 1283206917Smarius 1284206917Smarius</xsl:stylesheet> 1285206917Smarius