1e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* 2e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org This file is provided under a dual BSD/GPLv2 license. When using or 3e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org redistributing this file, you may do so under either license. 4e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org GPL LICENSE SUMMARY 6e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 7e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Copyright (c) 2005-2012 Intel Corporation. All rights reserved. 8e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 9e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org This program is free software; you can redistribute it and/or modify 10e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org it under the terms of version 2 of the GNU General Public License as 11e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org published by the Free Software Foundation. 12e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 13e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org This program is distributed in the hope that it will be useful, but 14e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org WITHOUT ANY WARRANTY; without even the implied warranty of 15e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org General Public License for more details. 17e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 18e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org You should have received a copy of the GNU General Public License 19e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org along with this program; if not, write to the Free Software 20e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org The full GNU General Public License is included in this distribution 22e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org in the file called LICENSE.GPL. 23e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 24e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Contact Information: 25e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ 26e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 27e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org BSD LICENSE 28e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 29e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Copyright (c) 2005-2012 Intel Corporation. All rights reserved. 30e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org All rights reserved. 31e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 32e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Redistribution and use in source and binary forms, with or without 33e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org modification, are permitted provided that the following conditions 34e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org are met: 35e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 36e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Redistributions of source code must retain the above copyright 37e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org notice, this list of conditions and the following disclaimer. 38e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Redistributions in binary form must reproduce the above copyright 39e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org notice, this list of conditions and the following disclaimer in 40e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org the documentation and/or other materials provided with the 41e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org distribution. 42e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Neither the name of Intel Corporation nor the names of its 43e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org contributors may be used to endorse or promote products derived 44e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org from this software without specific prior written permission. 45e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 46e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 47e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 48e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 49e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 50e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 51e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 52e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 53e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 54e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 55e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 56e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 57e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org*/ 58e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef __JITPROFILING_H__ 59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __JITPROFILING_H__ 60e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 61e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* 62e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Various constants used by functions 63e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 64e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* event notification */ 66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum iJIT_jvm_event 67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 68e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 69e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* shutdown */ 705c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 715c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* 72e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Program exiting EventSpecificData NA 73e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 745c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJVM_EVENT_TYPE_SHUTDOWN = 2, 75e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 76e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* JIT profiling */ 775c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 785c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* 79e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * issued after method code jitted into memory but before code is executed 80e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * EventSpecificData is an iJIT_Method_Load 81e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 825c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED=13, 83e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 845c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* issued before unload. Method code will no longer be executed, but code 855c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org * and info are still in memory. The VTune profiler may capture method 86e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * code only at this point EventSpecificData is iJIT_Method_Id 87e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 885c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJVM_EVENT_TYPE_METHOD_UNLOAD_START, 89e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 90e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Method Profiling */ 91e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 925c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* method name, Id and stack is supplied 935c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org * issued when a method is about to be entered EventSpecificData is 94e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJIT_Method_NIDS 95e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 965c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJVM_EVENT_TYPE_ENTER_NIDS = 19, 97e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 985c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* method name, Id and stack is supplied 995c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org * issued when a method is about to be left EventSpecificData is 100e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJIT_Method_NIDS 101e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1025c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJVM_EVENT_TYPE_LEAVE_NIDS 103e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} iJIT_JVM_EVENT; 104e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 105e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum _iJIT_ModeFlags 106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 107e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* No need to Notify VTune, since VTune is not running */ 1085c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_NO_NOTIFICATIONS = 0x0000, 109e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1105c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org /* when turned on the jit must call 111e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJIT_NotifyEvent 112e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * ( 113e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, 114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * ) 115e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * for all the method already jitted 116e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1175c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_BE_NOTIFY_ON_LOAD = 0x0001, 118e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 119e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* when turned on the jit must call 120e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJIT_NotifyEvent 121e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * ( 122e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_METHOD_UNLOAD_FINISHED, 123e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * ) for all the method that are unloaded 124e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1255c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_BE_NOTIFY_ON_UNLOAD = 0x0002, 126e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 127e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* when turned on the jit must instrument all 128e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * the currently jited code with calls on 129e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * method entries 130e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1315c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_BE_NOTIFY_ON_METHOD_ENTRY = 0x0004, 132e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 133e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* when turned on the jit must instrument all 134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * the currently jited code with calls 135e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * on method exit 136e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1375c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_BE_NOTIFY_ON_METHOD_EXIT = 0x0008 138e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 139e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} iJIT_ModeFlags; 140e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 141e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 142e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Flags used by iJIT_IsProfilingActive() */ 143e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum _iJIT_IsProfilingActiveFlags 144e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 145e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* No profiler is running. Currently not used */ 1465c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_NOTHING_RUNNING = 0x0000, 147e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 148e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Sampling is running. This is the default value 149e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * returned by iJIT_IsProfilingActive() 150e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1515c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJIT_SAMPLING_ON = 0x0001, 1525c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 153e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Call Graph is running */ 154e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org iJIT_CALLGRAPH_ON = 0x0002 155e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 156e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} iJIT_IsProfilingActiveFlags; 157e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 158e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* Enumerator for the environment of methods*/ 159e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum _iJDEnvironmentType 160e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 161e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org iJDE_JittingAPI = 2 162e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} iJDEnvironmentType; 163e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 164e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/********************************** 165e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Data structures for the events * 166e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org **********************************/ 167e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 168e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* structure for the events: 169e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_METHOD_UNLOAD_START 170e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 171e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 172e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct _iJIT_Method_Id 173e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 174e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Id of the method (same as the one passed in 175e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * the iJIT_Method_Load struct 176e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 1775c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int method_id; 178e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 179e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} *piJIT_Method_Id, iJIT_Method_Id; 180e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 181e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 182e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* structure for the events: 183e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_ENTER_NIDS, 184e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_LEAVE_NIDS, 185e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_EXCEPTION_OCCURRED_NIDS 186e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 187e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 188e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct _iJIT_Method_NIDS 189e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 190e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* unique method ID */ 1915c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int method_id; 192e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 193e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* NOTE: no need to fill this field, it's filled by VTune */ 1945c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int stack_id; 195e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 196e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* method name (just the method, without the class) */ 1975c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org char* method_name; 198e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} *piJIT_Method_NIDS, iJIT_Method_NIDS; 199e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 200e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* structures for the events: 201e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED 202e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 203e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 204e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct _LineNumberInfo 205e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 206e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* x86 Offset from the begining of the method*/ 2075c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int Offset; 2085c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 209e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* source line number from the begining of the source file */ 2105c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int LineNumber; 211e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 212e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} *pLineNumberInfo, LineNumberInfo; 213e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 214e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct _iJIT_Method_Load 215e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{ 216e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* unique method ID - can be any unique value, (except 0 - 999) */ 2175c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int method_id; 218e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 219e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* method name (can be with or without the class and signature, in any case 220e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * the class name will be added to it) 221e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 2225c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org char* method_name; 223e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 224e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* virtual address of that method - This determines the method range for the 225e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * iJVM_EVENT_TYPE_ENTER/LEAVE_METHOD_ADDR events 226e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */ 2275c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org void* method_load_address; 228e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 229e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Size in memory - Must be exact */ 2305c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int method_size; 231e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 232e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Line Table size in number of entries - Zero if none */ 2335c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int line_number_size; 2345c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 235e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* Pointer to the begining of the line numbers info array */ 2365c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org pLineNumberInfo line_number_table; 237e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 238e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* unique class ID */ 2395c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int class_id; 2405c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 241e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* class file name */ 2425c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org char* class_file_name; 243e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 244e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* source file name */ 2455c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org char* source_file_name; 246e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 247e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* bits supplied by the user for saving in the JIT file */ 2485c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org void* user_data; 249e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 250e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* the size of the user data buffer */ 2515c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org unsigned int user_data_size; 252e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 253e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org /* NOTE: no need to fill this field, it's filled by VTune */ 2545c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org iJDEnvironmentType env; 255e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 256e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} *piJIT_Method_Load, iJIT_Method_Load; 257e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 258e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* API Functions */ 259e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef __cplusplus 260e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgextern "C" { 261e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 262e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 263e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef CDECL 264e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# if defined WIN32 || defined _WIN32 265e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define CDECL __cdecl 266e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# else /* defined WIN32 || defined _WIN32 */ 267e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# if defined _M_X64 || defined _M_AMD64 || defined __x86_64__ 268e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define CDECL /* not actual on x86_64 platform */ 269e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# else /* _M_X64 || _M_AMD64 || __x86_64__ */ 270e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define CDECL __attribute__ ((cdecl)) 271e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# endif /* _M_X64 || _M_AMD64 || __x86_64__ */ 272e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# endif /* defined WIN32 || defined _WIN32 */ 273e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* CDECL */ 274e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 275e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define JITAPI CDECL 276e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 277e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* called when the settings are changed with new settings */ 278e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef void (*iJIT_ModeChangedEx)(void *UserData, iJIT_ModeFlags Flags); 279e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 280e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgint JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData); 281e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 282e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* The new mode call back routine */ 2835c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgvoid JITAPI iJIT_RegisterCallbackEx(void *userdata, 284e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org iJIT_ModeChangedEx NewModeCallBackFuncEx); 285e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 286e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgiJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive(void); 287e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 288e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid JITAPI FinalizeThread(void); 289e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 290e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid JITAPI FinalizeProcess(void); 291e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 292e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgunsigned int JITAPI iJIT_GetNewMethodID(void); 293e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 294e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef __cplusplus 295e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 296e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif 297e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 298e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* __JITPROFILING_H__ */ 299