blob: 56d7e6796a7a54c0edf7500bd341d0da03d18b14 [file] [log] [blame]
Jonathan Peytonc0225ca2015-08-28 18:42:10 +00001#include "kmp_config.h"
2
Jim Cownie5e8470a2013-09-27 10:38:44 +00003#if USE_ITT_BUILD
4/*
Jonathan Peytonde4749b2016-12-14 23:01:24 +00005 * kmp_itt.cpp -- ITT Notify interface.
Jim Cownie5e8470a2013-09-27 10:38:44 +00006 */
7
8
9//===----------------------------------------------------------------------===//
10//
11// The LLVM Compiler Infrastructure
12//
13// This file is dual licensed under the MIT and the University of Illinois Open
14// Source Licenses. See LICENSE.txt for details.
15//
16//===----------------------------------------------------------------------===//
17
18
19#include "kmp_itt.h"
20
21#if KMP_DEBUG
22 #include "kmp_itt.inl"
23#endif
24
25
26#if USE_ITT_NOTIFY
27
Jim Cownie4cc4bb42014-10-07 16:25:50 +000028 kmp_int32 __kmp_barrier_domain_count;
29 kmp_int32 __kmp_region_domain_count;
30 __itt_domain* __kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
31 __itt_domain* __kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
32 __itt_domain* __kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
33 kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
34 __itt_domain * metadata_domain = NULL;
Jonathan Peyton4ba3b0c2016-06-16 20:11:51 +000035 __itt_string_handle * string_handle_imbl = NULL;
36 __itt_string_handle * string_handle_loop = NULL;
37 __itt_string_handle * string_handle_sngl = NULL;
Jim Cownie5e8470a2013-09-27 10:38:44 +000038
39 #include "kmp_version.h"
40 #include "kmp_i18n.h"
41 #include "kmp_str.h"
42
43 KMP_BUILD_ASSERT( sizeof( kmp_itt_mark_t ) == sizeof( __itt_mark_type ) );
44
45 /*
46 Previously used warnings:
47
48 KMP_WARNING( IttAllNotifDisabled );
49 KMP_WARNING( IttObjNotifDisabled );
50 KMP_WARNING( IttMarkNotifDisabled );
51 KMP_WARNING( IttUnloadLibFailed, libittnotify );
52 */
53
54
55 kmp_int32 __kmp_itt_prepare_delay = 0;
56 kmp_bootstrap_lock_t __kmp_itt_debug_lock = KMP_BOOTSTRAP_LOCK_INITIALIZER( __kmp_itt_debug_lock );
57
58#endif // USE_ITT_NOTIFY
59
60void __kmp_itt_initialize() {
61
62 // ITTNotify library is loaded and initialized at first call to any ittnotify function,
63 // so we do not need to explicitly load it any more.
64 // Jusr report OMP RTL version to ITTNotify.
65
66 #if USE_ITT_NOTIFY
67 // Report OpenMP RTL version.
68 kmp_str_buf_t buf;
69 __itt_mark_type version;
70 __kmp_str_buf_init( & buf );
71 __kmp_str_buf_print(
72 & buf,
73 "OMP RTL Version %d.%d.%d",
74 __kmp_version_major,
75 __kmp_version_minor,
76 __kmp_version_build
77 );
78 if ( __itt_api_version_ptr != NULL ) {
79 __kmp_str_buf_print( & buf, ":%s", __itt_api_version() );
80 }; // if
81 version = __itt_mark_create( buf.str );
82 __itt_mark( version, NULL );
83 __kmp_str_buf_free( & buf );
84 #endif
85
86} // __kmp_itt_initialize
87
88
89void __kmp_itt_destroy() {
90 #if USE_ITT_NOTIFY
91 __kmp_itt_fini_ittlib();
92 #endif
93} // __kmp_itt_destroy
94
95
96extern "C"
97void
98__itt_error_handler(
99 __itt_error_code err,
100 va_list args
101) {
102
103 switch ( err ) {
104 case __itt_error_no_module : {
105 char const * library = va_arg( args, char const * );
Andrey Churbanovbcadbd62016-11-28 19:23:09 +0000106#if KMP_OS_WINDOWS
107 int sys_err = va_arg( args, int );
108 kmp_msg_t err_code = KMP_SYSERRCODE( sys_err );
109 __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null );
110 if (__kmp_generate_warnings == kmp_warnings_off) {
111 __kmp_str_free(&err_code.str);
112 }
113#else
114 char const * sys_err = va_arg( args, char const * );
115 kmp_msg_t err_code = KMP_SYSERRMESG( sys_err );
116 __kmp_msg( kmp_ms_warning, KMP_MSG( IttLoadLibFailed, library ), err_code, __kmp_msg_null );
117 if (__kmp_generate_warnings == kmp_warnings_off) {
118 __kmp_str_free(&err_code.str);
119 }
120#endif
Jim Cownie5e8470a2013-09-27 10:38:44 +0000121 } break;
122 case __itt_error_no_symbol : {
123 char const * library = va_arg( args, char const * );
124 char const * symbol = va_arg( args, char const * );
125 KMP_WARNING( IttLookupFailed, symbol, library );
126 } break;
127 case __itt_error_unknown_group : {
128 char const * var = va_arg( args, char const * );
129 char const * group = va_arg( args, char const * );
130 KMP_WARNING( IttUnknownGroup, var, group );
131 } break;
132 case __itt_error_env_too_long : {
133 char const * var = va_arg( args, char const * );
134 size_t act_len = va_arg( args, size_t );
135 size_t max_len = va_arg( args, size_t );
136 KMP_WARNING( IttEnvVarTooLong, var, (unsigned long) act_len, (unsigned long) max_len );
137 } break;
138 case __itt_error_cant_read_env : {
139 char const * var = va_arg( args, char const * );
140 int sys_err = va_arg( args, int );
Andrey Churbanovbcadbd62016-11-28 19:23:09 +0000141 kmp_msg_t err_code = KMP_ERR( sys_err );
142 __kmp_msg( kmp_ms_warning, KMP_MSG( CantGetEnvVar, var ), err_code, __kmp_msg_null );
143 if (__kmp_generate_warnings == kmp_warnings_off) {
144 __kmp_str_free(&err_code.str);
145 }
Jim Cownie5e8470a2013-09-27 10:38:44 +0000146 } break;
147 case __itt_error_system : {
148 char const * func = va_arg( args, char const * );
149 int sys_err = va_arg( args, int );
Andrey Churbanovbcadbd62016-11-28 19:23:09 +0000150 kmp_msg_t err_code = KMP_SYSERRCODE( sys_err );
151 __kmp_msg( kmp_ms_warning, KMP_MSG( IttFunctionError, func ), err_code, __kmp_msg_null );
152 if (__kmp_generate_warnings == kmp_warnings_off) {
153 __kmp_str_free(&err_code.str);
154 }
Jim Cownie5e8470a2013-09-27 10:38:44 +0000155 } break;
156 default : {
157 KMP_WARNING( IttUnknownError, err );
158 };
159 }; // switch
160
161} // __itt_error_handler
162
163#endif /* USE_ITT_BUILD */