tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ittnotify_config.h (21305B)


      1 /* <copyright>
      2  This file is provided under a dual BSD/GPLv2 license.  When using or
      3  redistributing this file, you may do so under either license.
      4 
      5  GPL LICENSE SUMMARY
      6 
      7  Copyright (c) 2005-2014 Intel Corporation. All rights reserved.
      8 
      9  This program is free software; you can redistribute it and/or modify
     10  it under the terms of version 2 of the GNU General Public License as
     11  published by the Free Software Foundation.
     12 
     13  This program is distributed in the hope that it will be useful, but
     14  WITHOUT ANY WARRANTY; without even the implied warranty of
     15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     16  General Public License for more details.
     17 
     18  You should have received a copy of the GNU General Public License
     19  along with this program; if not, write to the Free Software
     20  Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
     21  The full GNU General Public License is included in this distribution
     22  in the file called LICENSE.GPL.
     23 
     24  Contact Information:
     25  http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/
     26 
     27  BSD LICENSE
     28 
     29  Copyright (c) 2005-2014 Intel Corporation. All rights reserved.
     30  All rights reserved.
     31 
     32  Redistribution and use in source and binary forms, with or without
     33  modification, are permitted provided that the following conditions
     34  are met:
     35 
     36    * Redistributions of source code must retain the above copyright
     37      notice, this list of conditions and the following disclaimer.
     38    * Redistributions in binary form must reproduce the above copyright
     39      notice, this list of conditions and the following disclaimer in
     40      the documentation and/or other materials provided with the
     41      distribution.
     42    * Neither the name of Intel Corporation nor the names of its
     43      contributors may be used to endorse or promote products derived
     44      from this software without specific prior written permission.
     45 
     46  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     47  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     48  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     49  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     50  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     51  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     52  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     53  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     54  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     55  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     56  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     57 </copyright> */
     58 #ifndef _ITTNOTIFY_CONFIG_H_
     59 #define _ITTNOTIFY_CONFIG_H_
     60 
     61 /** @cond exclude_from_documentation */
     62 #ifndef ITT_OS_WIN
     63 #  define ITT_OS_WIN   1
     64 #endif /* ITT_OS_WIN */
     65 
     66 #ifndef ITT_OS_LINUX
     67 #  define ITT_OS_LINUX 2
     68 #endif /* ITT_OS_LINUX */
     69 
     70 #ifndef ITT_OS_MAC
     71 #  define ITT_OS_MAC   3
     72 #endif /* ITT_OS_MAC */
     73 
     74 #ifndef ITT_OS_FREEBSD
     75 #  define ITT_OS_FREEBSD   4
     76 #endif /* ITT_OS_FREEBSD */
     77 
     78 #ifndef ITT_OS
     79 #  if defined WIN32 || defined _WIN32
     80 #    define ITT_OS ITT_OS_WIN
     81 #  elif defined( __APPLE__ ) && defined( __MACH__ )
     82 #    define ITT_OS ITT_OS_MAC
     83 #  elif defined( __FreeBSD__ )
     84 #    define ITT_OS ITT_OS_FREEBSD
     85 #  else
     86 #    define ITT_OS ITT_OS_LINUX
     87 #  endif
     88 #endif /* ITT_OS */
     89 
     90 #ifndef ITT_PLATFORM_WIN
     91 #  define ITT_PLATFORM_WIN 1
     92 #endif /* ITT_PLATFORM_WIN */
     93 
     94 #ifndef ITT_PLATFORM_POSIX
     95 #  define ITT_PLATFORM_POSIX 2
     96 #endif /* ITT_PLATFORM_POSIX */
     97 
     98 #ifndef ITT_PLATFORM_MAC
     99 #  define ITT_PLATFORM_MAC 3
    100 #endif /* ITT_PLATFORM_MAC */
    101 
    102 #ifndef ITT_PLATFORM_FREEBSD
    103 #  define ITT_PLATFORM_FREEBSD 4
    104 #endif /* ITT_PLATFORM_FREEBSD */
    105 
    106 #ifndef ITT_PLATFORM
    107 #  if ITT_OS==ITT_OS_WIN
    108 #    define ITT_PLATFORM ITT_PLATFORM_WIN
    109 #  elif ITT_OS==ITT_OS_MAC
    110 #    define ITT_PLATFORM ITT_PLATFORM_MAC
    111 #  elif ITT_OS==ITT_OS_FREEBSD
    112 #    define ITT_PLATFORM ITT_PLATFORM_FREEBSD
    113 #  else
    114 #    define ITT_PLATFORM ITT_PLATFORM_POSIX
    115 #  endif
    116 #endif /* ITT_PLATFORM */
    117 
    118 #if defined(_UNICODE) && !defined(UNICODE)
    119 #define UNICODE
    120 #endif
    121 
    122 #include <stddef.h>
    123 #if ITT_PLATFORM==ITT_PLATFORM_WIN
    124 #include <tchar.h>
    125 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    126 #include <stdint.h>
    127 #if defined(UNICODE) || defined(_UNICODE)
    128 #include <wchar.h>
    129 #endif /* UNICODE || _UNICODE */
    130 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    131 
    132 #ifndef ITTAPI_CDECL
    133 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
    134 #    define ITTAPI_CDECL __cdecl
    135 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    136 #    if defined _M_IX86 || defined __i386__
    137 #      define ITTAPI_CDECL __attribute__ ((cdecl))
    138 #    else  /* _M_IX86 || __i386__ */
    139 #      define ITTAPI_CDECL /* actual only on x86 platform */
    140 #    endif /* _M_IX86 || __i386__ */
    141 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    142 #endif /* ITTAPI_CDECL */
    143 
    144 #ifndef STDCALL
    145 #  if ITT_PLATFORM==ITT_PLATFORM_WIN
    146 #    define STDCALL __stdcall
    147 #  else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    148 #    if defined _M_IX86 || defined __i386__
    149 #      define STDCALL __attribute__ ((stdcall))
    150 #    else  /* _M_IX86 || __i386__ */
    151 #      define STDCALL /* supported only on x86 platform */
    152 #    endif /* _M_IX86 || __i386__ */
    153 #  endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    154 #endif /* STDCALL */
    155 
    156 #define ITTAPI    ITTAPI_CDECL
    157 #define LIBITTAPI ITTAPI_CDECL
    158 
    159 /* TODO: Temporary for compatibility! */
    160 #define ITTAPI_CALL    ITTAPI_CDECL
    161 #define LIBITTAPI_CALL ITTAPI_CDECL
    162 
    163 #if ITT_PLATFORM==ITT_PLATFORM_WIN
    164 /* use __forceinline (VC++ specific) */
    165 #define ITT_INLINE           __forceinline
    166 #define ITT_INLINE_ATTRIBUTE /* nothing */
    167 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    168 /*
    169 * Generally, functions are not inlined unless optimization is specified.
    170 * For functions declared inline, this attribute inlines the function even
    171 * if no optimization level was specified.
    172 */
    173 #ifdef __STRICT_ANSI__
    174 #define ITT_INLINE           static
    175 #define ITT_INLINE_ATTRIBUTE __attribute__((unused))
    176 #else  /* __STRICT_ANSI__ */
    177 #define ITT_INLINE           static inline
    178 #define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
    179 #endif /* __STRICT_ANSI__ */
    180 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    181 /** @endcond */
    182 
    183 #ifndef ITT_ARCH_IA32
    184 #  define ITT_ARCH_IA32  1
    185 #endif /* ITT_ARCH_IA32 */
    186 
    187 #ifndef ITT_ARCH_IA32E
    188 #  define ITT_ARCH_IA32E 2
    189 #endif /* ITT_ARCH_IA32E */
    190 
    191 #ifndef ITT_ARCH_ARM
    192 #  define ITT_ARCH_ARM  4
    193 #endif /* ITT_ARCH_ARM */
    194 
    195 #ifndef ITT_ARCH_PPC64
    196 #  define ITT_ARCH_PPC64  5
    197 #endif /* ITT_ARCH_PPC64 */
    198 
    199 #ifndef ITT_ARCH
    200 #  if defined _M_IX86 || defined __i386__
    201 #    define ITT_ARCH ITT_ARCH_IA32
    202 #  elif defined _M_X64 || defined _M_AMD64 || defined __x86_64__
    203 #    define ITT_ARCH ITT_ARCH_IA32E
    204 #  elif defined _M_IA64 || defined __ia64__
    205 #    define ITT_ARCH ITT_ARCH_IA64
    206 #  elif defined _M_ARM || defined __arm__
    207 #    define ITT_ARCH ITT_ARCH_ARM
    208 #  elif defined __powerpc64__
    209 #    define ITT_ARCH ITT_ARCH_PPC64
    210 #  endif
    211 #endif
    212 
    213 #ifdef __cplusplus
    214 #  define ITT_EXTERN_C extern "C"
    215 #  define ITT_EXTERN_C_BEGIN extern "C" {
    216 #  define ITT_EXTERN_C_END }
    217 #else
    218 #  define ITT_EXTERN_C /* nothing */
    219 #  define ITT_EXTERN_C_BEGIN /* nothing */
    220 #  define ITT_EXTERN_C_END /* nothing */
    221 #endif /* __cplusplus */
    222 
    223 #define ITT_TO_STR_AUX(x) #x
    224 #define ITT_TO_STR(x)     ITT_TO_STR_AUX(x)
    225 
    226 #define __ITT_BUILD_ASSERT(expr, suffix) do { \
    227    static char __itt_build_check_##suffix[(expr) ? 1 : -1]; \
    228    __itt_build_check_##suffix[0] = 0; \
    229 } while(0)
    230 #define _ITT_BUILD_ASSERT(expr, suffix)  __ITT_BUILD_ASSERT((expr), suffix)
    231 #define ITT_BUILD_ASSERT(expr)           _ITT_BUILD_ASSERT((expr), __LINE__)
    232 
    233 #define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
    234 
    235 /* Replace with snapshot date YYYYMMDD for promotion build. */
    236 #define API_VERSION_BUILD    20151119
    237 
    238 #ifndef API_VERSION_NUM
    239 #define API_VERSION_NUM 0.0.0
    240 #endif /* API_VERSION_NUM */
    241 
    242 #define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) \
    243                                " (" ITT_TO_STR(API_VERSION_BUILD) ")"
    244 
    245 /* OS communication functions */
    246 #if ITT_PLATFORM==ITT_PLATFORM_WIN
    247 #include "util/WindowsWrapper.h"
    248 typedef HMODULE           lib_t;
    249 typedef DWORD             TIDT;
    250 typedef CRITICAL_SECTION  mutex_t;
    251 #define MUTEX_INITIALIZER { 0 }
    252 #define strong_alias(name, aliasname) /* empty for Windows */
    253 #else  /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    254 #include <dlfcn.h>
    255 #if defined(UNICODE) || defined(_UNICODE)
    256 #include <wchar.h>
    257 #endif /* UNICODE */
    258 #ifndef _GNU_SOURCE
    259 #define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
    260 #endif /* _GNU_SOURCE */
    261 #ifndef __USE_UNIX98
    262 #define __USE_UNIX98 1 /* need for PTHREAD_MUTEX_RECURSIVE, on SLES11.1 with gcc 4.3.4 wherein pthread.h missing dependency on __USE_XOPEN2K8 */
    263 #endif /*__USE_UNIX98*/
    264 #include <pthread.h>
    265 typedef void*             lib_t;
    266 typedef pthread_t         TIDT;
    267 typedef pthread_mutex_t   mutex_t;
    268 #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
    269 #define _strong_alias(name, aliasname) \
    270            extern __typeof (name) aliasname __attribute__ ((alias (#name)));
    271 #define strong_alias(name, aliasname) _strong_alias(name, aliasname)
    272 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    273 
    274 #if ITT_PLATFORM==ITT_PLATFORM_WIN
    275 #define __itt_get_proc(lib, name) GetProcAddress(lib, name)
    276 #define __itt_mutex_init(mutex)   InitializeCriticalSection(mutex)
    277 #define __itt_mutex_lock(mutex)   EnterCriticalSection(mutex)
    278 #define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
    279 #define __itt_load_lib(name)      LoadLibraryA(name)
    280 #define __itt_unload_lib(handle)  FreeLibrary(handle)
    281 #define __itt_system_error()      (int)GetLastError()
    282 #define __itt_fstrcmp(s1, s2)     lstrcmpA(s1, s2)
    283 #define __itt_fstrnlen(s, l)      strnlen_s(s, l)
    284 #define __itt_fstrcpyn(s1, b, s2, l) strncpy_s(s1, b, s2, l)
    285 #define __itt_fstrdup(s)          _strdup(s)
    286 #define __itt_thread_id()         GetCurrentThreadId()
    287 #define __itt_thread_yield()      SwitchToThread()
    288 #ifndef ITT_SIMPLE_INIT
    289 ITT_INLINE long
    290 __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
    291 ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
    292 {
    293    return InterlockedIncrement(ptr);
    294 }
    295 #endif /* ITT_SIMPLE_INIT */
    296 
    297 #define DL_SYMBOLS (1)
    298 #define PTHREAD_SYMBOLS (1)
    299 
    300 #else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
    301 #define __itt_get_proc(lib, name) dlsym(lib, name)
    302 #define __itt_mutex_init(mutex)   {\
    303    pthread_mutexattr_t mutex_attr;                                         \
    304    int error_code = pthread_mutexattr_init(&mutex_attr);                   \
    305    if (error_code)                                                         \
    306        __itt_report_error(__itt_error_system, "pthread_mutexattr_init",    \
    307                           error_code);                                     \
    308    error_code = pthread_mutexattr_settype(&mutex_attr,                     \
    309                                           PTHREAD_MUTEX_RECURSIVE);        \
    310    if (error_code)                                                         \
    311        __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", \
    312                           error_code);                                     \
    313    error_code = pthread_mutex_init(mutex, &mutex_attr);                    \
    314    if (error_code)                                                         \
    315        __itt_report_error(__itt_error_system, "pthread_mutex_init",        \
    316                           error_code);                                     \
    317    error_code = pthread_mutexattr_destroy(&mutex_attr);                    \
    318    if (error_code)                                                         \
    319        __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", \
    320                           error_code);                                     \
    321 }
    322 #define __itt_mutex_lock(mutex)   pthread_mutex_lock(mutex)
    323 #define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
    324 #define __itt_load_lib(name)      dlopen(name, RTLD_LAZY)
    325 #define __itt_unload_lib(handle)  dlclose(handle)
    326 #define __itt_system_error()      errno
    327 #define __itt_fstrcmp(s1, s2)     strcmp(s1, s2)
    328 
    329 /* makes customer code define safe APIs for SDL_STRNLEN_S and SDL_STRNCPY_S */
    330 #ifdef SDL_STRNLEN_S
    331 #define __itt_fstrnlen(s, l)      SDL_STRNLEN_S(s, l)
    332 #else
    333 #define __itt_fstrnlen(s, l)      strlen(s)
    334 #endif /* SDL_STRNLEN_S */
    335 #ifdef SDL_STRNCPY_S
    336 #define __itt_fstrcpyn(s1, b, s2, l) SDL_STRNCPY_S(s1, b, s2, l)
    337 #else
    338 #define __itt_fstrcpyn(s1, b, s2, l) strncpy(s1, s2, l)
    339 #endif /* SDL_STRNCPY_S */
    340 
    341 #define __itt_fstrdup(s)          strdup(s)
    342 #define __itt_thread_id()         pthread_self()
    343 #define __itt_thread_yield()      sched_yield()
    344 #if ITT_ARCH==ITT_ARCH_IA64
    345 #ifdef __INTEL_COMPILER
    346 #define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
    347 #else  /* __INTEL_COMPILER */
    348 /* TODO: Add Support for not Intel compilers for IA-64 architecture */
    349 #endif /* __INTEL_COMPILER */
    350 #elif ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_IA32E /* ITT_ARCH!=ITT_ARCH_IA64 */
    351 ITT_INLINE long
    352 __TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;
    353 ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)
    354 {
    355    long result;
    356    __asm__ __volatile__("lock\nxadd %0,%1"
    357                          : "=r"(result),"=m"(*(int*)ptr)
    358                          : "0"(addend), "m"(*(int*)ptr)
    359                          : "memory");
    360    return result;
    361 }
    362 #elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64
    363 #define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)
    364 #endif /* ITT_ARCH==ITT_ARCH_IA64 */
    365 #ifndef ITT_SIMPLE_INIT
    366 ITT_INLINE long
    367 __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
    368 ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
    369 {
    370    return __TBB_machine_fetchadd4(ptr, 1) + 1L;
    371 }
    372 #endif /* ITT_SIMPLE_INIT */
    373 
    374 void* dlopen(const char*, int);
    375 void* dlsym(void*, const char*);
    376 int dlclose(void*);
    377 #define DL_SYMBOLS (1)
    378 
    379 int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*);
    380 int pthread_mutex_lock(pthread_mutex_t*);
    381 int pthread_mutex_unlock(pthread_mutex_t*);
    382 int pthread_mutex_destroy(pthread_mutex_t*);
    383 int pthread_mutexattr_init(pthread_mutexattr_t*);
    384 int pthread_mutexattr_settype(pthread_mutexattr_t*, int);
    385 int pthread_mutexattr_destroy(pthread_mutexattr_t*);
    386 pthread_t pthread_self(void);
    387 #define PTHREAD_SYMBOLS (1)
    388 
    389 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
    390 
    391 typedef enum {
    392    __itt_collection_normal = 0,
    393    __itt_collection_paused = 1
    394 } __itt_collection_state;
    395 
    396 typedef enum {
    397    __itt_thread_normal  = 0,
    398    __itt_thread_ignored = 1
    399 } __itt_thread_state;
    400 
    401 #pragma pack(push, 8)
    402 
    403 typedef struct ___itt_thread_info
    404 {
    405    const char* nameA; /*!< Copy of original name in ASCII. */
    406 #if defined(UNICODE) || defined(_UNICODE)
    407    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
    408 #else  /* UNICODE || _UNICODE */
    409    void* nameW;
    410 #endif /* UNICODE || _UNICODE */
    411    TIDT               tid;
    412    __itt_thread_state state;   /*!< Thread state (paused or normal) */
    413    int                extra1;  /*!< Reserved to the runtime */
    414    void*              extra2;  /*!< Reserved to the runtime */
    415    struct ___itt_thread_info* next;
    416 } __itt_thread_info;
    417 
    418 #include "vtune/ittnotify_types.h" /* For __itt_group_id definition */
    419 
    420 typedef struct ___itt_api_info_20101001
    421 {
    422    const char*    name;
    423    void**         func_ptr;
    424    void*          init_func;
    425    __itt_group_id group;
    426 }  __itt_api_info_20101001;
    427 
    428 typedef struct ___itt_api_info
    429 {
    430    const char*    name;
    431    void**         func_ptr;
    432    void*          init_func;
    433    void*          null_func;
    434    __itt_group_id group;
    435 }  __itt_api_info;
    436 
    437 typedef struct __itt_counter_info
    438 {
    439    const char* nameA;  /*!< Copy of original name in ASCII. */
    440 #if defined(UNICODE) || defined(_UNICODE)
    441    const wchar_t* nameW; /*!< Copy of original name in UNICODE. */
    442 #else  /* UNICODE || _UNICODE */
    443    void* nameW;
    444 #endif /* UNICODE || _UNICODE */
    445    const char* domainA;  /*!< Copy of original name in ASCII. */
    446 #if defined(UNICODE) || defined(_UNICODE)
    447    const wchar_t* domainW; /*!< Copy of original name in UNICODE. */
    448 #else  /* UNICODE || _UNICODE */
    449    void* domainW;
    450 #endif /* UNICODE || _UNICODE */
    451    unsigned type;
    452    long index;
    453    int   extra1; /*!< Reserved to the runtime */
    454    void* extra2; /*!< Reserved to the runtime */
    455    struct __itt_counter_info* next;
    456 }  __itt_counter_info_t;
    457 
    458 struct ___itt_domain;
    459 struct ___itt_string_handle;
    460 
    461 typedef struct ___itt_global
    462 {
    463    unsigned char          magic[8];
    464    unsigned long          version_major;
    465    unsigned long          version_minor;
    466    unsigned long          version_build;
    467    volatile long          api_initialized;
    468    volatile long          mutex_initialized;
    469    volatile long          atomic_counter;
    470    mutex_t                mutex;
    471    lib_t                  lib;
    472    void*                  error_handler;
    473    const char**           dll_path_ptr;
    474    __itt_api_info*        api_list_ptr;
    475    struct ___itt_global*  next;
    476    /* Joinable structures below */
    477    __itt_thread_info*     thread_list;
    478    struct ___itt_domain*  domain_list;
    479    struct ___itt_string_handle* string_list;
    480    __itt_collection_state state;
    481    __itt_counter_info_t* counter_list;
    482 } __itt_global;
    483 
    484 #pragma pack(pop)
    485 
    486 #define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
    487    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
    488    if (h != NULL) { \
    489        h->tid    = t; \
    490        h->nameA  = NULL; \
    491        h->nameW  = n ? _wcsdup(n) : NULL; \
    492        h->state  = s; \
    493        h->extra1 = 0;    /* reserved */ \
    494        h->extra2 = NULL; /* reserved */ \
    495        h->next   = NULL; \
    496        if (h_tail == NULL) \
    497            (gptr)->thread_list = h; \
    498        else \
    499            h_tail->next = h; \
    500    } \
    501 }
    502 
    503 #define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
    504    h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
    505    if (h != NULL) { \
    506        h->tid    = t; \
    507        h->nameA  = n ? __itt_fstrdup(n) : NULL; \
    508        h->nameW  = NULL; \
    509        h->state  = s; \
    510        h->extra1 = 0;    /* reserved */ \
    511        h->extra2 = NULL; /* reserved */ \
    512        h->next   = NULL; \
    513        if (h_tail == NULL) \
    514            (gptr)->thread_list = h; \
    515        else \
    516            h_tail->next = h; \
    517    } \
    518 }
    519 
    520 #define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
    521    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
    522    if (h != NULL) { \
    523        h->flags  = 1;    /* domain is enabled by default */ \
    524        h->nameA  = NULL; \
    525        h->nameW  = name ? _wcsdup(name) : NULL; \
    526        h->extra1 = 0;    /* reserved */ \
    527        h->extra2 = NULL; /* reserved */ \
    528        h->next   = NULL; \
    529        if (h_tail == NULL) \
    530            (gptr)->domain_list = h; \
    531        else \
    532            h_tail->next = h; \
    533    } \
    534 }
    535 
    536 #define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
    537    h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
    538    if (h != NULL) { \
    539        h->flags  = 1;    /* domain is enabled by default */ \
    540        h->nameA  = name ? __itt_fstrdup(name) : NULL; \
    541        h->nameW  = NULL; \
    542        h->extra1 = 0;    /* reserved */ \
    543        h->extra2 = NULL; /* reserved */ \
    544        h->next   = NULL; \
    545        if (h_tail == NULL) \
    546            (gptr)->domain_list = h; \
    547        else \
    548            h_tail->next = h; \
    549    } \
    550 }
    551 
    552 #define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
    553    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
    554    if (h != NULL) { \
    555        h->strA   = NULL; \
    556        h->strW   = name ? _wcsdup(name) : NULL; \
    557        h->extra1 = 0;    /* reserved */ \
    558        h->extra2 = NULL; /* reserved */ \
    559        h->next   = NULL; \
    560        if (h_tail == NULL) \
    561            (gptr)->string_list = h; \
    562        else \
    563            h_tail->next = h; \
    564    } \
    565 }
    566 
    567 #define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
    568    h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
    569    if (h != NULL) { \
    570        h->strA   = name ? __itt_fstrdup(name) : NULL; \
    571        h->strW   = NULL; \
    572        h->extra1 = 0;    /* reserved */ \
    573        h->extra2 = NULL; /* reserved */ \
    574        h->next   = NULL; \
    575        if (h_tail == NULL) \
    576            (gptr)->string_list = h; \
    577        else \
    578            h_tail->next = h; \
    579    } \
    580 }
    581 
    582 #define NEW_COUNTER_W(gptr,h,h_tail,name,domain,type) { \
    583    h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \
    584    if (h != NULL) { \
    585        h->nameA   = NULL; \
    586        h->nameW   = name ? _wcsdup(name) : NULL; \
    587        h->domainA   = NULL; \
    588        h->domainW   = name ? _wcsdup(domain) : NULL; \
    589        h->type = type; \
    590        h->index = 0; \
    591        h->next   = NULL; \
    592        if (h_tail == NULL) \
    593            (gptr)->counter_list = h; \
    594        else \
    595            h_tail->next = h; \
    596    } \
    597 }
    598 
    599 #define NEW_COUNTER_A(gptr,h,h_tail,name,domain,type) { \
    600    h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \
    601    if (h != NULL) { \
    602        h->nameA   = name ? __itt_fstrdup(name) : NULL; \
    603        h->nameW   = NULL; \
    604        h->domainA   = domain ? __itt_fstrdup(domain) : NULL; \
    605        h->domainW   = NULL; \
    606        h->type = type; \
    607        h->index = 0; \
    608        h->next   = NULL; \
    609        if (h_tail == NULL) \
    610            (gptr)->counter_list = h; \
    611        else \
    612            h_tail->next = h; \
    613    } \
    614 }
    615 
    616 #endif /* _ITTNOTIFY_CONFIG_H_ */