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