1 /* 2 Copyright (c) 2005-2021 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 #if __TBB_USE_ITT_NOTIFY 18 19 #if _WIN32||_WIN64 20 #ifndef UNICODE 21 #define UNICODE 22 #endif 23 #else 24 #pragma weak dlopen 25 #pragma weak dlsym 26 #pragma weak dlerror 27 #endif /* WIN */ 28 29 #if __TBB_BUILD 30 31 extern "C" void ITT_DoOneTimeInitialization(); 32 #define __itt_init_ittlib_name(x,y) (ITT_DoOneTimeInitialization(), true) 33 34 #elif __TBBMALLOC_BUILD 35 36 extern "C" void MallocInitializeITT(); 37 #define __itt_init_ittlib_name(x,y) (MallocInitializeITT(), true) 38 39 #else 40 #error This file is expected to be used for either TBB or TBB allocator build. 41 #endif // __TBB_BUILD 42 43 #include "tools_api/ittnotify_static.c" 44 45 namespace tbb { 46 namespace detail { 47 namespace r1 { 48 49 /** This extra proxy method is necessary since __itt_init_lib is declared as static **/ 50 int __TBB_load_ittnotify() { 51 #if !(_WIN32||_WIN64) 52 // tool_api crashes without dlopen, check that it's present. Common case 53 // for lack of dlopen is static binaries, i.e. ones build with -static. 54 if (dlopen == nullptr) 55 return 0; 56 #endif 57 return __itt_init_ittlib(nullptr, // groups for: 58 (__itt_group_id)(__itt_group_sync // prepare/cancel/acquired/releasing 59 | __itt_group_thread // name threads 60 | __itt_group_stitch // stack stitching 61 | __itt_group_structure 62 )); 63 } 64 65 } //namespace r1 66 } //namespace detail 67 } // namespace tbb 68 69 #endif /* __TBB_USE_ITT_NOTIFY */ 70