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