1770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/*===-- ittnotify_config.h - JIT Profiling API internal config-----*- C -*-===*
2770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *
3770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *                     The LLVM Compiler Infrastructure
4770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *
5770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * This file is distributed under the University of Illinois Open Source
6770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * License. See LICENSE.TXT for details.
7770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *
8770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *===----------------------------------------------------------------------===*
9770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *
10770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * This file provides Intel(R) Performance Analyzer JIT (Just-In-Time)
11770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * Profiling API internal config.
12770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *
133c9019d08fe2c93a5c8a3aeba614dd4a3244f5b2Andrew Kaylor * NOTE: This file comes in a style different from the rest of LLVM
143c9019d08fe2c93a5c8a3aeba614dd4a3244f5b2Andrew Kaylor * source base since  this is a piece of code shared from Intel(R)
153c9019d08fe2c93a5c8a3aeba614dd4a3244f5b2Andrew Kaylor * products.  Please do not reformat / re-style this code to make
163c9019d08fe2c93a5c8a3aeba614dd4a3244f5b2Andrew Kaylor * subsequent merges and contributions from the original source base eaiser.
173c9019d08fe2c93a5c8a3aeba614dd4a3244f5b2Andrew Kaylor *
18770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor *===----------------------------------------------------------------------===*/
19770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef _ITTNOTIFY_CONFIG_H_
20770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define _ITTNOTIFY_CONFIG_H_
21770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
22770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/** @cond exclude_from_documentation */
23770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_OS_WIN
24770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_OS_WIN   1
25770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_OS_WIN */
26770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
27770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_OS_LINUX
28770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_OS_LINUX 2
29770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_OS_LINUX */
30770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
31770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_OS_MAC
32770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_OS_MAC   3
33770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_OS_MAC */
34770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
35770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_OS
36770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  if defined WIN32 || defined _WIN32
37770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_OS ITT_OS_WIN
38770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  elif defined( __APPLE__ ) && defined( __MACH__ )
39770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_OS ITT_OS_MAC
40770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  else
41770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_OS ITT_OS_LINUX
42770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  endif
43770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_OS */
44770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
45770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_PLATFORM_WIN
46770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_PLATFORM_WIN 1
47770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM_WIN */
48770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
49770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_PLATFORM_POSIX
50770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_PLATFORM_POSIX 2
51770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM_POSIX */
52770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
53770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_PLATFORM
54770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  if ITT_OS==ITT_OS_WIN
55770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_PLATFORM ITT_PLATFORM_WIN
56770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  else
57770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_PLATFORM ITT_PLATFORM_POSIX
58770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  endif /* _WIN32 */
59770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM */
60770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
61770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if defined(_UNICODE) && !defined(UNICODE)
62770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define UNICODE
63770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif
64770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
65770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <stddef.h>
66770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if ITT_PLATFORM==ITT_PLATFORM_WIN
67770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <tchar.h>
68770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
69770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <stdint.h>
70770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if defined(UNICODE) || defined(_UNICODE)
71770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <wchar.h>
72770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* UNICODE || _UNICODE */
73770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
74770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
75770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef CDECL
76770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  if ITT_PLATFORM==ITT_PLATFORM_WIN
77770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define CDECL __cdecl
78770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
79770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
80770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#      define CDECL /* not actual on x86_64 platform */
81770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
82770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#      define CDECL __attribute__ ((cdecl))
83770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
84770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
85770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* CDECL */
86770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
87770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef STDCALL
88770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  if ITT_PLATFORM==ITT_PLATFORM_WIN
89770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define STDCALL __stdcall
90770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
91770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
92770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#      define STDCALL /* not supported on x86_64 platform */
93770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
94770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#      define STDCALL __attribute__ ((stdcall))
95770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
96770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
97770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* STDCALL */
98770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
99770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITTAPI    CDECL
100770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define LIBITTAPI CDECL
101770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
102770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/* TODO: Temporary for compatibility! */
103770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITTAPI_CALL    CDECL
104770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define LIBITTAPI_CALL CDECL
105770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
106770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if ITT_PLATFORM==ITT_PLATFORM_WIN
107770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/* use __forceinline (VC++ specific) */
108770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_INLINE           __forceinline
109770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_INLINE_ATTRIBUTE /* nothing */
110770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
111770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/*
112770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * Generally, functions are not inlined unless optimization is specified.
113770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * For functions declared inline, this attribute inlines the function even
114770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor * if no optimization level was specified.
115770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor */
116770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifdef __STRICT_ANSI__
117770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_INLINE           static
118770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* __STRICT_ANSI__ */
119770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_INLINE           static inline
120770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* __STRICT_ANSI__ */
121770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_INLINE_ATTRIBUTE __attribute__ ((always_inline))
122770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
123770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/** @endcond */
124770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
125770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_ARCH_IA32
126770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_ARCH_IA32  1
127770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_ARCH_IA32 */
128770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
129770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_ARCH_IA32E
130770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_ARCH_IA32E 2
131770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_ARCH_IA32E */
132770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
133770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_ARCH_IA64
134770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_ARCH_IA64  3
135770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_ARCH_IA64 */
136770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
137770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_ARCH
138770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
139770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_ARCH ITT_ARCH_IA32E
140770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  elif defined _M_IA64 || defined __ia64
141770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_ARCH ITT_ARCH_IA64
142770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  else
143770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#    define ITT_ARCH ITT_ARCH_IA32
144770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  endif
145770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif
146770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
147770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifdef __cplusplus
148770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_EXTERN_C extern "C"
149770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else
150770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#  define ITT_EXTERN_C /* nothing */
151770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* __cplusplus */
152770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
153770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_TO_STR_AUX(x) #x
154770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_TO_STR(x)     ITT_TO_STR_AUX(x)
155770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
156770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __ITT_BUILD_ASSERT(expr, suffix) do { \
157770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    static char __itt_build_check_##suffix[(expr) ? 1 : -1]; \
158770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_build_check_##suffix[0] = 0; \
159770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor} while(0)
160770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define _ITT_BUILD_ASSERT(expr, suffix)  __ITT_BUILD_ASSERT((expr), suffix)
161770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_BUILD_ASSERT(expr)           _ITT_BUILD_ASSERT((expr), __LINE__)
162770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
163770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
164770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
165770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/* Replace with snapshot date YYYYMMDD for promotion build. */
166770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define API_VERSION_BUILD    20111111
167770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
168770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef API_VERSION_NUM
169770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define API_VERSION_NUM 0.0.0
170770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* API_VERSION_NUM */
171770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
172770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) \
173770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                                " (" ITT_TO_STR(API_VERSION_BUILD) ")"
174770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
175770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/* OS communication functions */
176770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if ITT_PLATFORM==ITT_PLATFORM_WIN
177770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <windows.h>
178770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef HMODULE           lib_t;
179770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef DWORD             TIDT;
180770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef CRITICAL_SECTION  mutex_t;
181770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define MUTEX_INITIALIZER { 0 }
182770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define strong_alias(name, aliasname) /* empty for Windows */
183770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
184770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <dlfcn.h>
185770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if defined(UNICODE) || defined(_UNICODE)
186770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <wchar.h>
187770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* UNICODE */
188770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef _GNU_SOURCE
189770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
190770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* _GNU_SOURCE */
191770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include <pthread.h>
192770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef void*             lib_t;
193770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef pthread_t         TIDT;
194770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef pthread_mutex_t   mutex_t;
195770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
196770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define _strong_alias(name, aliasname) \
197770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            extern __typeof (name) aliasname __attribute__ ((alias (#name)));
198770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
199770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
200770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
201770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if ITT_PLATFORM==ITT_PLATFORM_WIN
202770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_get_proc(lib, name) GetProcAddress(lib, name)
203770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)
204770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
205770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
206770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_load_lib(name)      LoadLibraryA(name)
207770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_unload_lib(handle)  FreeLibrary(handle)
208770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_system_error()      (int)GetLastError()
209770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
210770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrlen(s)          lstrlenA(s)
211770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrcpyn(s1, s2, l) lstrcpynA(s1, s2, l)
212770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrdup(s)          _strdup(s)
213770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_thread_id()         GetCurrentThreadId()
214770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_thread_yield()      SwitchToThread()
215770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_SIMPLE_INIT
216770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long
217770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
218770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
219770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
220770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    return InterlockedIncrement(ptr);
221770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
222770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_SIMPLE_INIT */
223770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
224770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_get_proc(lib, name) dlsym(lib, name)
225770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_init(mutex)   {\
226770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    pthread_mutexattr_t mutex_attr;                                         \
227770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    int error_code = pthread_mutexattr_init(&mutex_attr);                   \
228770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (error_code)                                                         \
229770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        __itt_report_error(__itt_error_system, "pthread_mutexattr_init",    \
230770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                           error_code);                                     \
231770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    error_code = pthread_mutexattr_settype(&mutex_attr,                     \
232770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                                           PTHREAD_MUTEX_RECURSIVE);        \
233770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (error_code)                                                         \
234770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", \
235770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                           error_code);                                     \
236770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    error_code = pthread_mutex_init(mutex, &mutex_attr);                    \
237770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (error_code)                                                         \
238770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        __itt_report_error(__itt_error_system, "pthread_mutex_init",        \
239770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                           error_code);                                     \
240770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    error_code = pthread_mutexattr_destroy(&mutex_attr);                    \
241770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (error_code)                                                         \
242770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", \
243770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                           error_code);                                     \
244770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
245770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
246770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
247770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
248770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_unload_lib(handle)  dlclose(handle)
249770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_system_error()      errno
250770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
251770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrlen(s)          strlen(s)
252770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrcpyn(s1, s2, l) strncpy(s1, s2, l)
253770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_fstrdup(s)          strdup(s)
254770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_thread_id()         pthread_self()
255770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __itt_thread_yield()      sched_yield()
256770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if ITT_ARCH==ITT_ARCH_IA64
257770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifdef __INTEL_COMPILER
258770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
259770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* __INTEL_COMPILER */
260770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor/* TODO: Add Support for not Intel compilers for IA64 */
261770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* __INTEL_COMPILER */
262770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else /* ITT_ARCH!=ITT_ARCH_IA64 */
263770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long
264770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor__TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;
265770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)
266770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
267770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    long result;
268770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __asm__ __volatile__("lock\nxadd %0,%1"
269770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                          : "=r"(result),"=m"(*(long*)ptr)
270770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                          : "0"(addend), "m"(*(long*)ptr)
271770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor                          : "memory");
272770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    return result;
273770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
274770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_ARCH==ITT_ARCH_IA64 */
275770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#ifndef ITT_SIMPLE_INIT
276770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long
277770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor__itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
278770b97b995aace9177a80510b7fd3cdab21dde0eAndrew KaylorITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
279770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
280770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    return __TBB_machine_fetchadd4(ptr, 1) + 1L;
281770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
282770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_SIMPLE_INIT */
283770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
284770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
285770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef enum {
286770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_collection_normal = 0,
287770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_collection_paused = 1
288770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor} __itt_collection_state;
289770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
290770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef enum {
291770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_thread_normal  = 0,
292770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_thread_ignored = 1
293770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor} __itt_thread_state;
294770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
295770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#pragma pack(push, 8)
296770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
297770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef struct ___itt_thread_info
298770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
299770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    const char* nameA; /*!< Copy of original name in ASCII. */
300770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#if defined(UNICODE) || defined(_UNICODE)
301770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
302770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#else  /* UNICODE || _UNICODE */
303770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void* nameW;
304770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* UNICODE || _UNICODE */
305770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    TIDT               tid;
306770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_thread_state state;   /*!< Thread state (paused or normal) */
307770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    int                extra1;  /*!< Reserved to the runtime */
308770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void*              extra2;  /*!< Reserved to the runtime */
309770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    struct ___itt_thread_info* next;
310770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor} __itt_thread_info;
311770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
312770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#include "ittnotify_types.h" /* For __itt_group_id definition */
313770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
314770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef struct ___itt_api_info_20101001
315770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
316770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    const char*    name;
317770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void**         func_ptr;
318770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void*          init_func;
319770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_group_id group;
320770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}  __itt_api_info_20101001;
321770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
322770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef struct ___itt_api_info
323770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
324770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    const char*    name;
325770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void**         func_ptr;
326770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void*          init_func;
327770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void*          null_func;
328770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_group_id group;
329770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}  __itt_api_info;
330770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
331770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylorstruct ___itt_domain;
332770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylorstruct ___itt_string_handle;
333770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
334770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylortypedef struct ___itt_global
335770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor{
336770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    unsigned char          magic[8];
337770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    unsigned long          version_major;
338770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    unsigned long          version_minor;
339770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    unsigned long          version_build;
340770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    volatile long          api_initialized;
341770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    volatile long          mutex_initialized;
342770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    volatile long          atomic_counter;
343770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    mutex_t                mutex;
344770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    lib_t                  lib;
345770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    void*                  error_handler;
346770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    const char**           dll_path_ptr;
347770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_api_info*        api_list_ptr;
348770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    struct ___itt_global*  next;
349770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    /* Joinable structures below */
350770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_thread_info*     thread_list;
351770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    struct ___itt_domain*  domain_list;
352770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    struct ___itt_string_handle* string_list;
353770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    __itt_collection_state state;
354770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor} __itt_global;
355770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
356770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#pragma pack(pop)
357770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
358770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
359770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
360770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
361770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->tid    = t; \
362770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameA  = NULL; \
363770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameW  = n ? _wcsdup(n) : NULL; \
364770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->state  = s; \
365770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
366770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
367770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
368770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
369770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->thread_list = h; \
370770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
371770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
372770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
373770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
374770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
375770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
376770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
377770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
378770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->tid    = t; \
379770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameA  = n ? __itt_fstrdup(n) : NULL; \
380770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameW  = NULL; \
381770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->state  = s; \
382770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
383770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
384770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
385770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
386770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->thread_list = h; \
387770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
388770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
389770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
390770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
391770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
392770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
393770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
394770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
395770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->flags  = 0;    /* domain is disabled by default */ \
396770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameA  = NULL; \
397770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameW  = name ? _wcsdup(name) : NULL; \
398770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
399770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
400770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
401770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
402770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->domain_list = h; \
403770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
404770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
405770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
406770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
407770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
408770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
409770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
410770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
411770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->flags  = 0;    /* domain is disabled by default */ \
412770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameA  = name ? __itt_fstrdup(name) : NULL; \
413770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->nameW  = NULL; \
414770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
415770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
416770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
417770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
418770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->domain_list = h; \
419770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
420770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
421770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
422770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
423770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
424770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
425770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
426770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
427770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->strA   = NULL; \
428770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->strW   = name ? _wcsdup(name) : NULL; \
429770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
430770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
431770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
432770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
433770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->string_list = h; \
434770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
435770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
436770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
437770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
438770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
439770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
440770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
441770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    if (h != NULL) { \
442770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->strA   = name ? __itt_fstrdup(name) : NULL; \
443770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->strW   = NULL; \
444770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra1 = 0;    /* reserved */ \
445770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->extra2 = NULL; /* reserved */ \
446770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        h->next   = NULL; \
447770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        if (h_tail == NULL) \
448770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            (gptr)->string_list = h; \
449770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor        else \
450770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor            h_tail->next = h; \
451770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor    } \
452770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor}
453770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor
454770b97b995aace9177a80510b7fd3cdab21dde0eAndrew Kaylor#endif /* _ITTNOTIFY_CONFIG_H_ */
455