Home ⌂Doc Index ◂Up ▴
Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
ittnotify_config.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2005-2020 Intel Corporation
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 
17 #ifndef _ITTNOTIFY_CONFIG_H_
18 #define _ITTNOTIFY_CONFIG_H_
19 
21 #ifndef ITT_OS_WIN
22 # define ITT_OS_WIN 1
23 #endif /* ITT_OS_WIN */
24 
25 #ifndef ITT_OS_LINUX
26 # define ITT_OS_LINUX 2
27 #endif /* ITT_OS_LINUX */
28 
29 #ifndef ITT_OS_MAC
30 # define ITT_OS_MAC 3
31 #endif /* ITT_OS_MAC */
32 
33 #ifndef ITT_OS_FREEBSD
34 # define ITT_OS_FREEBSD 4
35 #endif /* ITT_OS_FREEBSD */
36 
37 #ifndef ITT_OS
38 # if defined WIN32 || defined _WIN32
39 # define ITT_OS ITT_OS_WIN
40 # elif defined( __APPLE__ ) && defined( __MACH__ )
41 # define ITT_OS ITT_OS_MAC
42 # elif defined( __FreeBSD__ )
43 # define ITT_OS ITT_OS_FREEBSD
44 # else
45 # define ITT_OS ITT_OS_LINUX
46 # endif
47 #endif /* ITT_OS */
48 
49 #ifndef ITT_PLATFORM_WIN
50 # define ITT_PLATFORM_WIN 1
51 #endif /* ITT_PLATFORM_WIN */
52 
53 #ifndef ITT_PLATFORM_POSIX
54 # define ITT_PLATFORM_POSIX 2
55 #endif /* ITT_PLATFORM_POSIX */
56 
57 #ifndef ITT_PLATFORM_MAC
58 # define ITT_PLATFORM_MAC 3
59 #endif /* ITT_PLATFORM_MAC */
60 
61 #ifndef ITT_PLATFORM_FREEBSD
62 # define ITT_PLATFORM_FREEBSD 4
63 #endif /* ITT_PLATFORM_FREEBSD */
64 
65 #ifndef ITT_PLATFORM
66 # if ITT_OS==ITT_OS_WIN
67 # define ITT_PLATFORM ITT_PLATFORM_WIN
68 # elif ITT_OS==ITT_OS_MAC
69 # define ITT_PLATFORM ITT_PLATFORM_MAC
70 # elif ITT_OS==ITT_OS_FREEBSD
71 # define ITT_PLATFORM ITT_PLATFORM_FREEBSD
72 # else
73 # define ITT_PLATFORM ITT_PLATFORM_POSIX
74 # endif
75 #endif /* ITT_PLATFORM */
76 
77 #if defined(_UNICODE) && !defined(UNICODE)
78 #define UNICODE
79 #endif
80 
81 #include <stddef.h>
82 #if ITT_PLATFORM==ITT_PLATFORM_WIN
83 #include <tchar.h>
84 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
85 #include <stdint.h>
86 #if defined(UNICODE) || defined(_UNICODE)
87 #include <wchar.h>
88 #endif /* UNICODE || _UNICODE */
89 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
90 
91 #ifndef ITTAPI_CDECL
92 # if ITT_PLATFORM==ITT_PLATFORM_WIN
93 # define ITTAPI_CDECL __cdecl
94 # else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
95 # if defined _M_IX86 || defined __i386__
96 # define ITTAPI_CDECL __attribute__ ((cdecl))
97 # else /* _M_IX86 || __i386__ */
98 # define ITTAPI_CDECL /* actual only on x86 platform */
99 # endif /* _M_IX86 || __i386__ */
100 # endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
101 #endif /* ITTAPI_CDECL */
102 
103 #ifndef STDCALL
104 # if ITT_PLATFORM==ITT_PLATFORM_WIN
105 # define STDCALL __stdcall
106 # else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
107 # if defined _M_IX86 || defined __i386__
108 # define STDCALL __attribute__ ((stdcall))
109 # else /* _M_IX86 || __i386__ */
110 # define STDCALL /* supported only on x86 platform */
111 # endif /* _M_IX86 || __i386__ */
112 # endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
113 #endif /* STDCALL */
114 
115 #define ITTAPI ITTAPI_CDECL
116 #define LIBITTAPI ITTAPI_CDECL
117 
118 /* TODO: Temporary for compatibility! */
119 #define ITTAPI_CALL ITTAPI_CDECL
120 #define LIBITTAPI_CALL ITTAPI_CDECL
121 
122 #if ITT_PLATFORM==ITT_PLATFORM_WIN
123 /* use __forceinline (VC++ specific) */
124 #define ITT_INLINE __forceinline
125 #define ITT_INLINE_ATTRIBUTE /* nothing */
126 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
127 /*
128  * Generally, functions are not inlined unless optimization is specified.
129  * For functions declared inline, this attribute inlines the function even
130  * if no optimization level was specified.
131  */
132 #ifdef __STRICT_ANSI__
133 #define ITT_INLINE static
134 #define ITT_INLINE_ATTRIBUTE __attribute__((unused))
135 #else /* __STRICT_ANSI__ */
136 #define ITT_INLINE static inline
137 #define ITT_INLINE_ATTRIBUTE __attribute__((always_inline, unused))
138 #endif /* __STRICT_ANSI__ */
139 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
140 
142 #ifndef ITT_ARCH_IA32
143 # define ITT_ARCH_IA32 1
144 #endif /* ITT_ARCH_IA32 */
145 
146 #ifndef ITT_ARCH_IA32E
147 # define ITT_ARCH_IA32E 2
148 #endif /* ITT_ARCH_IA32E */
149 
150 #ifndef ITT_ARCH_ARM
151 # define ITT_ARCH_ARM 4
152 #endif /* ITT_ARCH_ARM */
153 
154 #ifndef ITT_ARCH_PPC64
155 # define ITT_ARCH_PPC64 5
156 #endif /* ITT_ARCH_PPC64 */
157 
158 #ifndef ITT_ARCH
159 # if defined _M_IX86 || defined __i386__
160 # define ITT_ARCH ITT_ARCH_IA32
161 # elif defined _M_X64 || defined _M_AMD64 || defined __x86_64__
162 # define ITT_ARCH ITT_ARCH_IA32E
163 # elif defined _M_IA64 || defined __ia64__
164 # define ITT_ARCH ITT_ARCH_IA64
165 # elif defined _M_ARM || defined __arm__
166 # define ITT_ARCH ITT_ARCH_ARM
167 # elif defined __powerpc64__
168 # define ITT_ARCH ITT_ARCH_PPC64
169 # endif
170 #endif
171 
172 #ifdef __cplusplus
173 # define ITT_EXTERN_C extern "C"
174 # define ITT_EXTERN_C_BEGIN extern "C" {
175 # define ITT_EXTERN_C_END }
176 #else
177 # define ITT_EXTERN_C /* nothing */
178 # define ITT_EXTERN_C_BEGIN /* nothing */
179 # define ITT_EXTERN_C_END /* nothing */
180 #endif /* __cplusplus */
181 
182 #define ITT_TO_STR_AUX(x) #x
183 #define ITT_TO_STR(x) ITT_TO_STR_AUX(x)
184 
185 #define __ITT_BUILD_ASSERT(expr, suffix) do { \
186  static char __itt_build_check_##suffix[(expr) ? 1 : -1]; \
187  __itt_build_check_##suffix[0] = 0; \
188 } while(0)
189 #define _ITT_BUILD_ASSERT(expr, suffix) __ITT_BUILD_ASSERT((expr), suffix)
190 #define ITT_BUILD_ASSERT(expr) _ITT_BUILD_ASSERT((expr), __LINE__)
191 
192 #define ITT_MAGIC { 0xED, 0xAB, 0xAB, 0xEC, 0x0D, 0xEE, 0xDA, 0x30 }
193 
194 /* Replace with snapshot date YYYYMMDD for promotion build. */
195 #define API_VERSION_BUILD 20180723
196 
197 #ifndef API_VERSION_NUM
198 #define API_VERSION_NUM 0.0.0
199 #endif /* API_VERSION_NUM */
200 
201 #define API_VERSION "ITT-API-Version " ITT_TO_STR(API_VERSION_NUM) \
202  " (" ITT_TO_STR(API_VERSION_BUILD) ")"
203 
204 /* OS communication functions */
205 #if ITT_PLATFORM==ITT_PLATFORM_WIN
206 #include <windows.h>
207 typedef HMODULE lib_t;
208 typedef DWORD TIDT;
209 typedef CRITICAL_SECTION mutex_t;
210 #define MUTEX_INITIALIZER { 0 }
211 #define strong_alias(name, aliasname) /* empty for Windows */
212 #else /* ITT_PLATFORM==ITT_PLATFORM_WIN */
213 #include <dlfcn.h>
214 #if defined(UNICODE) || defined(_UNICODE)
215 #include <wchar.h>
216 #endif /* UNICODE */
217 #ifndef _GNU_SOURCE
218 #define _GNU_SOURCE 1 /* need for PTHREAD_MUTEX_RECURSIVE */
219 #endif /* _GNU_SOURCE */
220 #ifndef __USE_UNIX98
221 #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 */
222 #endif /*__USE_UNIX98*/
223 #include <pthread.h>
224 typedef void* lib_t;
225 typedef pthread_t TIDT;
226 typedef pthread_mutex_t mutex_t;
227 #define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
228 #define _strong_alias(name, aliasname) \
229  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
230 #define strong_alias(name, aliasname) _strong_alias(name, aliasname)
231 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
232 
233 #if ITT_PLATFORM==ITT_PLATFORM_WIN
234 #define __itt_get_proc(lib, name) GetProcAddress(lib, name)
235 #define __itt_mutex_init(mutex) InitializeCriticalSection(mutex)
236 #define __itt_mutex_lock(mutex) EnterCriticalSection(mutex)
237 #define __itt_mutex_unlock(mutex) LeaveCriticalSection(mutex)
238 #define __itt_load_lib(name) LoadLibraryA(name)
239 #define __itt_unload_lib(handle) FreeLibrary(handle)
240 #define __itt_system_error() (int)GetLastError()
241 #define __itt_fstrcmp(s1, s2) lstrcmpA(s1, s2)
242 #define __itt_fstrnlen(s, l) strnlen_s(s, l)
243 #define __itt_fstrcpyn(s1, b, s2, l) strncpy_s(s1, b, s2, l)
244 #define __itt_fstrdup(s) _strdup(s)
245 #define __itt_thread_id() GetCurrentThreadId()
246 #define __itt_thread_yield() SwitchToThread()
247 #ifndef ITT_SIMPLE_INIT
248 ITT_INLINE long
249 __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
250 ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
251 {
252  return InterlockedIncrement(ptr);
253 }
254 #endif /* ITT_SIMPLE_INIT */
255 
256 #define DL_SYMBOLS (1)
257 #define PTHREAD_SYMBOLS (1)
258 
259 #else /* ITT_PLATFORM!=ITT_PLATFORM_WIN */
260 #define __itt_get_proc(lib, name) dlsym(lib, name)
261 #define __itt_mutex_init(mutex) {\
262  pthread_mutexattr_t mutex_attr; \
263  int error_code = pthread_mutexattr_init(&mutex_attr); \
264  if (error_code) \
265  __itt_report_error(__itt_error_system, "pthread_mutexattr_init", \
266  error_code); \
267  error_code = pthread_mutexattr_settype(&mutex_attr, \
268  PTHREAD_MUTEX_RECURSIVE); \
269  if (error_code) \
270  __itt_report_error(__itt_error_system, "pthread_mutexattr_settype", \
271  error_code); \
272  error_code = pthread_mutex_init(mutex, &mutex_attr); \
273  if (error_code) \
274  __itt_report_error(__itt_error_system, "pthread_mutex_init", \
275  error_code); \
276  error_code = pthread_mutexattr_destroy(&mutex_attr); \
277  if (error_code) \
278  __itt_report_error(__itt_error_system, "pthread_mutexattr_destroy", \
279  error_code); \
280 }
281 #define __itt_mutex_lock(mutex) pthread_mutex_lock(mutex)
282 #define __itt_mutex_unlock(mutex) pthread_mutex_unlock(mutex)
283 #define __itt_load_lib(name) dlopen(name, RTLD_LAZY)
284 #define __itt_unload_lib(handle) dlclose(handle)
285 #define __itt_system_error() errno
286 #define __itt_fstrcmp(s1, s2) strcmp(s1, s2)
287 
288 /* makes customer code define safe APIs for SDL_STRNLEN_S and SDL_STRNCPY_S */
289 #ifdef SDL_STRNLEN_S
290 #define __itt_fstrnlen(s, l) SDL_STRNLEN_S(s, l)
291 #else
292 #define __itt_fstrnlen(s, l) strlen(s)
293 #endif /* SDL_STRNLEN_S */
294 #ifdef SDL_STRNCPY_S
295 #define __itt_fstrcpyn(s1, b, s2, l) SDL_STRNCPY_S(s1, b, s2, l)
296 #else
297 #define __itt_fstrcpyn(s1, b, s2, l) { \
298  if (b > 0) { \
299  /* 'volatile' is used to suppress the warning that a destination */ \
300  /* bound depends on the length of the source. */ \
301  volatile size_t num_to_copy = (size_t)(b - 1) < (size_t)(l) ? \
302  (size_t)(b - 1) : (size_t)(l); \
303  strncpy(s1, s2, num_to_copy); \
304  s1[num_to_copy] = 0; \
305  } \
306 }
307 #endif /* SDL_STRNCPY_S */
308 
309 #define __itt_fstrdup(s) strdup(s)
310 #define __itt_thread_id() pthread_self()
311 #define __itt_thread_yield() sched_yield()
312 #if ITT_ARCH==ITT_ARCH_IA64
313 #ifdef __INTEL_COMPILER
314 #define __TBB_machine_fetchadd4(addr, val) __fetchadd4_acq((void *)addr, val)
315 #else /* __INTEL_COMPILER */
316 /* TODO: Add Support for not Intel compilers for IA-64 architecture */
317 #endif /* __INTEL_COMPILER */
318 #elif ITT_ARCH==ITT_ARCH_IA32 || ITT_ARCH==ITT_ARCH_IA32E /* ITT_ARCH!=ITT_ARCH_IA64 */
319 ITT_INLINE long
320 __TBB_machine_fetchadd4(volatile void* ptr, long addend) ITT_INLINE_ATTRIBUTE;
321 ITT_INLINE long __TBB_machine_fetchadd4(volatile void* ptr, long addend)
322 {
323  long result;
324  __asm__ __volatile__("lock\nxadd %0,%1"
325  : "=r"(result),"=m"(*(int*)ptr)
326  : "0"(addend), "m"(*(int*)ptr)
327  : "memory");
328  return result;
329 }
330 #elif ITT_ARCH==ITT_ARCH_ARM || ITT_ARCH==ITT_ARCH_PPC64
331 #define __TBB_machine_fetchadd4(addr, val) __sync_fetch_and_add(addr, val)
332 #endif /* ITT_ARCH==ITT_ARCH_IA64 */
333 #ifndef ITT_SIMPLE_INIT
334 ITT_INLINE long
335 __itt_interlocked_increment(volatile long* ptr) ITT_INLINE_ATTRIBUTE;
336 ITT_INLINE long __itt_interlocked_increment(volatile long* ptr)
337 {
338  return __TBB_machine_fetchadd4(ptr, 1) + 1L;
339 }
340 #endif /* ITT_SIMPLE_INIT */
341 
342 void* dlopen(const char*, int) __attribute__((weak));
343 void* dlsym(void*, const char*) __attribute__((weak));
344 int dlclose(void*) __attribute__((weak));
345 #define DL_SYMBOLS (dlopen && dlsym && dlclose)
346 
347 int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __attribute__((weak));
348 int pthread_mutex_lock(pthread_mutex_t*) __attribute__((weak));
349 int pthread_mutex_unlock(pthread_mutex_t*) __attribute__((weak));
350 int pthread_mutex_destroy(pthread_mutex_t*) __attribute__((weak));
351 int pthread_mutexattr_init(pthread_mutexattr_t*) __attribute__((weak));
352 int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __attribute__((weak));
353 int pthread_mutexattr_destroy(pthread_mutexattr_t*) __attribute__((weak));
354 pthread_t pthread_self(void) __attribute__((weak));
355 #define PTHREAD_SYMBOLS (pthread_mutex_init && pthread_mutex_lock && pthread_mutex_unlock && pthread_mutex_destroy && pthread_mutexattr_init && pthread_mutexattr_settype && pthread_mutexattr_destroy && pthread_self)
356 
357 #endif /* ITT_PLATFORM==ITT_PLATFORM_WIN */
358 
359 typedef enum {
363 
364 typedef enum {
368 
369 #pragma pack(push, 8)
370 
371 typedef struct ___itt_thread_info
372 {
373  const char* nameA;
374 #if defined(UNICODE) || defined(_UNICODE)
375  const wchar_t* nameW;
376 #else /* UNICODE || _UNICODE */
377  void* nameW;
378 #endif /* UNICODE || _UNICODE */
381  int extra1;
382  void* extra2;
385 
386 #include "ittnotify_types.h" /* For __itt_group_id definition */
387 
389 {
390  const char* name;
391  void** func_ptr;
392  void* init_func;
395 
396 typedef struct ___itt_api_info
397 {
398  const char* name;
399  void** func_ptr;
400  void* init_func;
401  void* null_func;
404 
405 typedef struct __itt_counter_info
406 {
407  const char* nameA;
408 #if defined(UNICODE) || defined(_UNICODE)
409  const wchar_t* nameW;
410 #else /* UNICODE || _UNICODE */
411  void* nameW;
412 #endif /* UNICODE || _UNICODE */
413  const char* domainA;
414 #if defined(UNICODE) || defined(_UNICODE)
415  const wchar_t* domainW;
416 #else /* UNICODE || _UNICODE */
417  void* domainW;
418 #endif /* UNICODE || _UNICODE */
419  int type;
420  long index;
421  int extra1;
422  void* extra2;
425 
426 struct ___itt_domain;
427 struct ___itt_string_handle;
428 
429 typedef struct ___itt_global
430 {
431  unsigned char magic[8];
432  unsigned long version_major;
433  unsigned long version_minor;
434  unsigned long version_build;
435  volatile long api_initialized;
436  volatile long mutex_initialized;
437  volatile long atomic_counter;
441  const char** dll_path_ptr;
444  /* Joinable structures below */
446  struct ___itt_domain* domain_list;
447  struct ___itt_string_handle* string_list;
450  unsigned int ipt_collect_events;
451 } __itt_global;
452 
453 #pragma pack(pop)
454 
455 #define NEW_THREAD_INFO_W(gptr,h,h_tail,t,s,n) { \
456  h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
457  if (h != NULL) { \
458  h->tid = t; \
459  h->nameA = NULL; \
460  h->nameW = n ? _wcsdup(n) : NULL; \
461  h->state = s; \
462  h->extra1 = 0; /* reserved */ \
463  h->extra2 = NULL; /* reserved */ \
464  h->next = NULL; \
465  if (h_tail == NULL) \
466  (gptr)->thread_list = h; \
467  else \
468  h_tail->next = h; \
469  } \
470 }
471 
472 #define NEW_THREAD_INFO_A(gptr,h,h_tail,t,s,n) { \
473  h = (__itt_thread_info*)malloc(sizeof(__itt_thread_info)); \
474  if (h != NULL) { \
475  h->tid = t; \
476  h->nameA = n ? __itt_fstrdup(n) : NULL; \
477  h->nameW = NULL; \
478  h->state = s; \
479  h->extra1 = 0; /* reserved */ \
480  h->extra2 = NULL; /* reserved */ \
481  h->next = NULL; \
482  if (h_tail == NULL) \
483  (gptr)->thread_list = h; \
484  else \
485  h_tail->next = h; \
486  } \
487 }
488 
489 #define NEW_DOMAIN_W(gptr,h,h_tail,name) { \
490  h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
491  if (h != NULL) { \
492  h->flags = 1; /* domain is enabled by default */ \
493  h->nameA = NULL; \
494  h->nameW = name ? _wcsdup(name) : NULL; \
495  h->extra1 = 0; /* reserved */ \
496  h->extra2 = NULL; /* reserved */ \
497  h->next = NULL; \
498  if (h_tail == NULL) \
499  (gptr)->domain_list = h; \
500  else \
501  h_tail->next = h; \
502  } \
503 }
504 
505 #define NEW_DOMAIN_A(gptr,h,h_tail,name) { \
506  h = (__itt_domain*)malloc(sizeof(__itt_domain)); \
507  if (h != NULL) { \
508  h->flags = 1; /* domain is enabled by default */ \
509  h->nameA = name ? __itt_fstrdup(name) : NULL; \
510  h->nameW = NULL; \
511  h->extra1 = 0; /* reserved */ \
512  h->extra2 = NULL; /* reserved */ \
513  h->next = NULL; \
514  if (h_tail == NULL) \
515  (gptr)->domain_list = h; \
516  else \
517  h_tail->next = h; \
518  } \
519 }
520 
521 #define NEW_STRING_HANDLE_W(gptr,h,h_tail,name) { \
522  h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
523  if (h != NULL) { \
524  h->strA = NULL; \
525  h->strW = 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)->string_list = h; \
531  else \
532  h_tail->next = h; \
533  } \
534 }
535 
536 #define NEW_STRING_HANDLE_A(gptr,h,h_tail,name) { \
537  h = (__itt_string_handle*)malloc(sizeof(__itt_string_handle)); \
538  if (h != NULL) { \
539  h->strA = name ? __itt_fstrdup(name) : NULL; \
540  h->strW = NULL; \
541  h->extra1 = 0; /* reserved */ \
542  h->extra2 = NULL; /* reserved */ \
543  h->next = NULL; \
544  if (h_tail == NULL) \
545  (gptr)->string_list = h; \
546  else \
547  h_tail->next = h; \
548  } \
549 }
550 
551 #define NEW_COUNTER_W(gptr,h,h_tail,name,domain,type) { \
552  h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \
553  if (h != NULL) { \
554  h->nameA = NULL; \
555  h->nameW = name ? _wcsdup(name) : NULL; \
556  h->domainA = NULL; \
557  h->domainW = name ? _wcsdup(domain) : NULL; \
558  h->type = type; \
559  h->index = 0; \
560  h->next = NULL; \
561  if (h_tail == NULL) \
562  (gptr)->counter_list = h; \
563  else \
564  h_tail->next = h; \
565  } \
566 }
567 
568 #define NEW_COUNTER_A(gptr,h,h_tail,name,domain,type) { \
569  h = (__itt_counter_info_t*)malloc(sizeof(__itt_counter_info_t)); \
570  if (h != NULL) { \
571  h->nameA = name ? __itt_fstrdup(name) : NULL; \
572  h->nameW = NULL; \
573  h->domainA = domain ? __itt_fstrdup(domain) : NULL; \
574  h->domainW = NULL; \
575  h->type = type; \
576  h->index = 0; \
577  h->next = NULL; \
578  if (h_tail == NULL) \
579  (gptr)->counter_list = h; \
580  else \
581  h_tail->next = h; \
582  } \
583 }
584 
585 #endif /* _ITTNOTIFY_CONFIG_H_ */
unsigned long version_major
struct ___itt_global * next
CRITICAL_SECTION mutex_t
unsigned long version_minor
unsigned long version_build
__itt_collection_state
long __TBB_machine_fetchadd4(volatile void *ptr, __int32 addend)
struct ___itt_domain * domain_list
volatile long mutex_initialized
enum ___itt_group_id __itt_group_id
struct ___itt_thread_info * next
struct __itt_counter_info * next
__itt_thread_state
ITT_INLINE long __itt_interlocked_increment(volatile long *ptr) ITT_INLINE_ATTRIBUTE
const char ** dll_path_ptr
__itt_api_info * api_list_ptr
unsigned char magic[8]
unsigned int ipt_collect_events
DWORD TIDT
__itt_thread_info * thread_list
struct ___itt_api_info_20101001 __itt_api_info_20101001
__itt_group_id group
struct ___itt_api_info __itt_api_info
__itt_thread_state state
const char * name
HMODULE lib_t
struct ___itt_global __itt_global
__itt_collection_state state
struct __itt_counter_info __itt_counter_info_t
__itt_counter_info_t * counter_list
volatile long api_initialized
struct ___itt_string_handle * string_list
struct ___itt_thread_info __itt_thread_info
volatile long atomic_counter

Copyright © 2005-2020 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.