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 _ITTNOTIFY_CONFIG_H_
59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define _ITTNOTIFY_CONFIG_H_
60e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
61e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** @cond exclude_from_documentation */
62e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_OS_WIN
63e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_OS_WIN   1
64e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_OS_WIN */
65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_OS_LINUX
67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_OS_LINUX 2
68e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_OS_LINUX */
69e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
70e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_OS_MAC
71e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_OS_MAC   3
72e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_OS_MAC */
73e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
74e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_OS
75e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  if defined WIN32 || defined _WIN32
76e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_OS ITT_OS_WIN
77e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  elif defined( __APPLE__ ) && defined( __MACH__ )
78e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_OS ITT_OS_MAC
79e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  else
80e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_OS ITT_OS_LINUX
81e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  endif
82e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_OS */
83e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
84e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_PLATFORM_WIN
85e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_PLATFORM_WIN 1
86e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM_WIN */
87e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
88e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_PLATFORM_POSIX
89e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_PLATFORM_POSIX 2
90e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM_POSIX */
91e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
92e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_PLATFORM
93e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  if ITT_OS==ITT_OS_WIN
94e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_PLATFORM ITT_PLATFORM_WIN
95e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  else
96e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_PLATFORM ITT_PLATFORM_POSIX
97e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  endif /* _WIN32 */
98e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM */
99e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
100e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if defined(_UNICODE) && !defined(UNICODE)
101e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define UNICODE
102e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif
103e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
104e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <stddef.h>
105e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if ITT_PLATFORM==ITT_PLATFORM_WIN
106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <tchar.h>
107e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
108e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <stdint.h>
109e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if defined(UNICODE) || defined(_UNICODE)
110e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <wchar.h>
111e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* UNICODE || _UNICODE */
112e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
113e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef CDECL
115e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  if ITT_PLATFORM==ITT_PLATFORM_WIN
116e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define CDECL __cdecl
117e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
118e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
119e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#      define CDECL /* not actual on x86_64 platform */
120e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
121e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#      define CDECL __attribute__ ((cdecl))
122e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
123e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
124e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* CDECL */
125e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
126e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef STDCALL
127e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  if ITT_PLATFORM==ITT_PLATFORM_WIN
128e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define STDCALL __stdcall
129e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
130e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
131e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#      define STDCALL /* not supported on x86_64 platform */
132e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
133e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#      define STDCALL __attribute__ ((stdcall))
134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
135e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
136e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* STDCALL */
137e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
138e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITTAPI    CDECL
139e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define LIBITTAPI CDECL
140e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
141e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* TODO: Temporary for compatibility! */
142e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITTAPI_CALL    CDECL
143e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define LIBITTAPI_CALL CDECL
144e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
145e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if ITT_PLATFORM==ITT_PLATFORM_WIN
146e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* use __forceinline (VC++ specific) */
147e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_INLINE           __forceinline
148e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_INLINE_ATTRIBUTE /* nothing */
149e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
150e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/*
151e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * Generally, functions are not inlined unless optimization is specified.
152e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * For functions declared inline, this attribute inlines the function even
153e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org * if no optimization level was specified.
154e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org */
155e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef __STRICT_ANSI__
156e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_INLINE           static
157e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* __STRICT_ANSI__ */
158e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_INLINE           static inline
159e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* __STRICT_ANSI__ */
160e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline))
161e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
162e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/** @endcond */
163e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
164e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_ARCH_IA32
165e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_ARCH_IA32  1
166e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_ARCH_IA32 */
167e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
168e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_ARCH_IA32E
169e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_ARCH_IA32E 2
170e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_ARCH_IA32E */
171e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
172e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_ARCH_IA64
173e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_ARCH_IA64  3
174e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_ARCH_IA64 */
175e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
176e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_ARCH
177e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
178e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_ARCH ITT_ARCH_IA32E
179e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  elif defined _M_IA64 || defined __ia64
180e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_ARCH ITT_ARCH_IA64
181e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  else
182e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#    define ITT_ARCH ITT_ARCH_IA32
183e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  endif
184e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif
185e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
186e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef __cplusplus
187e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_EXTERN_C extern "C"
188e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else
189e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#  define ITT_EXTERN_C /* nothing */
190e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* __cplusplus */
191e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
192e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_TO_STR_AUX(x) #x
193e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_TO_STR(x)     ITT_TO_STR_AUX(x)
194e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
195e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __ITT_BUILD_ASSERT(expr, suffix) do { static char __itt_build_check_##suffix[(expr) ? 1 : -1]; __itt_build_check_##suffix[0] = 0; } while(0)
196e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define _ITT_BUILD_ASSERT(expr, suffix)  __ITT_BUILD_ASSERT((expr), suffix)
197e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_BUILD_ASSERT(expr)           _ITT_BUILD_ASSERT((expr), __LINE__)
198e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
199e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
200e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
201e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* Replace with snapshot date YYYYMMDD for promotion build. */
202e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define API_VERSION_BUILD    20111111
203e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
204e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef API_VERSION_NUM
205e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define API_VERSION_NUM 0.0.0
206e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* API_VERSION_NUM */
207e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
208e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) " (" ITT_TO_STR(API_VERSION_BUILD) ")"
209e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
210e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* OS communication functions */
211e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if ITT_PLATFORM==ITT_PLATFORM_WIN
212e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <windows.h>
213e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef HMODULE           lib_t;
214e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef DWORD             TIDT;
215e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef CRITICAL_SECTION  mutex_t;
216e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define MUTEX_INITIALIZER { 0 }
217e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define strong_alias(name, aliasname) /* empty for Windows */
218e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
219e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <dlfcn.h>
220e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if defined(UNICODE) || defined(_UNICODE)
221e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <wchar.h>
222e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* UNICODE */
223e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef _GNU_SOURCE
224e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
225e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* _GNU_SOURCE */
226e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include <pthread.h>
227e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef void*             lib_t;
228e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef pthread_t         TIDT;
229e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef pthread_mutex_t   mutex_t;
230e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
231e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define _strong_alias(name, aliasname) extern __typeof (name) aliasname __attribute__ ((alias (#name)));
232e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
233e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
234e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
235e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if ITT_PLATFORM==ITT_PLATFORM_WIN
236e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_get_proc(lib, name) GetProcAddress(lib, name)
237e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)
238e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
239e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
240e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_load_lib(name)      LoadLibraryA(name)
241e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_unload_lib(handle)  FreeLibrary(handle)
242e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_system_error()      (int)GetLastError()
243e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
244e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrlen(s)          lstrlenA(s)
245e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
246e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrdup(s)          _strdup(s)
247e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_thread_id()         GetCurrentThreadId()
248e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_thread_yield()      SwitchToThread()
249e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_SIMPLE_INIT
250e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgITT_INLINE int __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
251e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgITT_INLINE int __itt_interlocked_increment(volatile long* ptr)
252e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
253e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    return InterlockedIncrement(ptr);
254e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
255e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_SIMPLE_INIT */
256e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
257e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_get_proc(lib, name) dlsym(lib, name)
258e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_init(mutex)   \
259e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    {                                                                                        \
260e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        pthread_mutexattr_t mutex_attr;                                                      \
261e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        int error_code = pthread_mutexattr_init(&mutex_attr);                                \
262e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (error_code)                                                                      \
263e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            __itt_report_error(__itt_error_system, "pthread_mutexattr_init", error_code);    \
264e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        error_code = pthread_mutexattr_settype(&mutex_attr, PTHREAD_MUTEX_RECURSIVE);        \
265e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (error_code)                                                                      \
266e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", error_code); \
267e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        error_code = pthread_mutex_init(mutex, &mutex_attr);                                 \
268e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (error_code)                                                                      \
269e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            __itt_report_error(__itt_error_system, "pthread_mutex_init", error_code);        \
270e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        error_code = pthread_mutexattr_destroy(&mutex_attr);                                 \
271e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (error_code)                                                                      \
272e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", error_code); \
273e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    }
274e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
275e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
276e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
277e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_unload_lib(handle)  dlclose(handle)
278e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_system_error()      errno
279e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
280e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrlen(s)          strlen(s)
281e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
282e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_fstrdup(s)          strdup(s)
283e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_thread_id()         pthread_self()
284e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __itt_thread_yield()      sched_yield()
285e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if ITT_ARCH==ITT_ARCH_IA64
286e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifdef __INTEL_COMPILER
287e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
288e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* __INTEL_COMPILER */
289e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/* TODO: Add Support for not Intel compilers for IA64 */
290e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* __INTEL_COMPILER */
291e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else /* ITT_ARCH!=ITT_ARCH_IA64 */
292e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/*ITT_INLINE int __TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;
293e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgITT_INLINE int __TBB_machine_fetchadd4(volatile void* ptr, long addend)
294e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
295e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    int result;
296e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __asm__ __volatile__("lock\nxaddl %0,%1"
297e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                          : "=r"(result),"=m"(*(long*)ptr)
298e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                          : "0"(addend), "m"(*(long*)ptr)
299e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                          : "memory");
300e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    return result;
301e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
302e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org*/
303e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_ARCH==ITT_ARCH_IA64 */
304e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#ifndef ITT_SIMPLE_INIT
305e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org/*ITT_INLINE int __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
306e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgITT_INLINE int __itt_interlocked_increment(volatile long* ptr)
307e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
308e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    return __TBB_machine_fetchadd4(ptr, 1) + 1;
309e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
310e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org*/
311e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_SIMPLE_INIT */
312e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
313e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
314e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum {
315e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_collection_normal = 0,
316e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_collection_paused = 1
317e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} __itt_collection_state;
318e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
319e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef enum {
320e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_thread_normal  = 0,
321e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_thread_ignored = 1
322e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} __itt_thread_state;
323e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
324e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#pragma pack(push, 8)
325e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
326e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct ___itt_thread_info
327e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
328e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    const char* nameA; /*!< Copy of original name in ASCII. */
329e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if defined(UNICODE) || defined(_UNICODE)
330e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
331e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else  /* UNICODE || _UNICODE */
332e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void* nameW;
333e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* UNICODE || _UNICODE */
334e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    TIDT               tid;
335e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_thread_state state;   /*!< Thread state (paused or normal) */
336e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    int                extra1;  /*!< Reserved to the runtime */
337e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void*              extra2;  /*!< Reserved to the runtime */
338e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    struct ___itt_thread_info* next;
339e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} __itt_thread_info;
340e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
341e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#include "ittnotify_types.h" /* For __itt_group_id definition */
342e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
343e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct ___itt_api_info_20101001
344e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
345e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    const char*    name;
346e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void**         func_ptr;
347e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void*          init_func;
348e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_group_id group;
349e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}  __itt_api_info_20101001;
350e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
351e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct ___itt_api_info
352e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
353e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    const char*    name;
354e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void**         func_ptr;
355e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void*          init_func;
356e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void*          null_func;
357e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_group_id group;
358e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}  __itt_api_info;
359e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
360e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgstruct ___itt_domain;
361e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgstruct ___itt_string_handle;
362e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
363e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgtypedef struct ___itt_global
364e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org{
365e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    unsigned char          magic[8];
366e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    unsigned long          version_major;
367e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    unsigned long          version_minor;
368e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    unsigned long          version_build;
369e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    volatile long          api_initialized;
370e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    volatile long          mutex_initialized;
371e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    volatile long          atomic_counter;
372e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    mutex_t                mutex;
373e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    lib_t                  lib;
374e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    void*                  error_handler;
375e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    const char**           dll_path_ptr;
376e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_api_info*        api_list_ptr;
377e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    struct ___itt_global*  next;
378e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    /* Joinable structures below */
379e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_thread_info*     thread_list;
380e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    struct ___itt_domain*  domain_list;
381e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    struct ___itt_string_handle* string_list;
382e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    __itt_collection_state state;
383e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} __itt_global;
384e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
385e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#pragma pack(pop)
386e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
387e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
388e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
389e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
390e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->tid    = t; \
391e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameA  = NULL; \
392e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameW  = n ? _wcsdup(n) : NULL; \
393e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->state  = s; \
394e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
395e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
396e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
397e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
398e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->thread_list = h; \
399e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
400e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
401e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
402e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
403e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
404e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
405e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
406e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
407e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->tid    = t; \
408e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameA  = n ? __itt_fstrdup(n) : NULL; \
409e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameW  = NULL; \
410e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->state  = s; \
411e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
412e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
413e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
414e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
415e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->thread_list = h; \
416e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
417e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
418e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
419e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
420e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
421e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
422e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
423e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
424e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->flags  = 0;    /* domain is disabled by default */ \
425e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameA  = NULL; \
426e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameW  = name ? _wcsdup(name) : NULL; \
427e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
428e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
429e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
430e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
431e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->domain_list = h; \
432e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
433e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
434e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
435e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
436e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
437e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
438e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
439e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
440e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->flags  = 0;    /* domain is disabled by default */ \
441e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameA  = name ? __itt_fstrdup(name) : NULL; \
442e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->nameW  = NULL; \
443e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
444e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
445e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
446e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
447e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->domain_list = h; \
448e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
449e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
450e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
451e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
452e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
453e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
454e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
455e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
456e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->strA   = NULL; \
457e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->strW   = name ? _wcsdup(name) : NULL; \
458e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
459e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
460e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
461e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
462e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->string_list = h; \
463e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
464e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
465e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
466e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
467e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
468e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
469e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
470e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    if (h != NULL) { \
471e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->strA   = name ? __itt_fstrdup(name) : NULL; \
472e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->strW   = NULL; \
473e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra1 = 0;    /* reserved */ \
474e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->extra2 = NULL; /* reserved */ \
475e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        h->next   = NULL; \
476e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        if (h_tail == NULL) \
477e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            (gptr)->string_list = h; \
478e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org        else \
479e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            h_tail->next = h; \
480e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    } \
481e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
482e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
483e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif /* _ITTNOTIFY_CONFIG_H_ */
484e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
485