Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:45:12

0001 /*
0002  * SPDX-FileCopyrightText: Copyright (c) 2009-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
0003  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0004  *
0005  * Licensed under the Apache License, Version 2.0 (the "License");
0006  * you may not use this file except in compliance with the License.
0007  * You may obtain a copy of the License at
0008  *
0009  *     http://www.apache.org/licenses/LICENSE-2.0
0010  *
0011  * Unless required by applicable law or agreed to in writing, software
0012  * distributed under the License is distributed on an "AS IS" BASIS,
0013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014  * See the License for the specific language governing permissions and
0015  * limitations under the License.
0016  *
0017  * Licensed under the Apache License v2.0 with LLVM Exceptions.
0018  * See https://nvidia.github.io/NVTX/LICENSE.txt for license information.
0019  */
0020 
0021 #ifndef NVTX_IMPL_GUARD
0022 #error Never include this file directly -- it is automatically included by nvToolsExt.h (except when NVTX_NO_IMPL is defined).
0023 #endif
0024 
0025 #if defined(NVTX_AS_SYSTEM_HEADER)
0026 #if defined(__clang__)
0027 #pragma clang system_header
0028 #elif defined(__GNUC__) || defined(__NVCOMPILER)
0029 #pragma GCC system_header
0030 #elif defined(_MSC_VER)
0031 #pragma system_header
0032 #endif
0033 #endif
0034 
0035 #include <stdlib.h>
0036 #include <stdio.h>
0037 #include <string.h>
0038 #include <wchar.h>
0039 
0040 /* ---- Include required platform headers ---- */
0041 
0042 #if defined(_WIN32)
0043 
0044 #include <windows.h>
0045 
0046 #else
0047 #include <unistd.h>
0048 
0049 #if defined(__ANDROID__)
0050 #include <android/api-level.h>
0051 #endif
0052 
0053 #if defined(__linux__) || defined(__CYGWIN__)
0054 #include <sched.h>
0055 #endif
0056 
0057 #include <sys/types.h>
0058 #include <limits.h>
0059 #include <dlfcn.h>
0060 #include <fcntl.h>
0061 #include <errno.h>
0062 #include <pthread.h>
0063 
0064 #endif
0065 
0066 /* ---- Define macros used in this file ---- */
0067 
0068 #define NVTX_INIT_STATE_FRESH 0
0069 #define NVTX_INIT_STATE_STARTED 1
0070 #define NVTX_INIT_STATE_COMPLETE 2
0071 
0072 #ifdef NVTX_DEBUG_PRINT
0073 #ifdef __ANDROID__
0074 #include <android/log.h>
0075 #define NVTX_ERR(...) __android_log_print(ANDROID_LOG_ERROR, "NVTOOLSEXT", __VA_ARGS__);
0076 #define NVTX_INFO(...) __android_log_print(ANDROID_LOG_INFO, "NVTOOLSEXT", __VA_ARGS__);
0077 #else
0078 #include <stdio.h>
0079 #define NVTX_ERR(...) fprintf(stderr, "NVTX_ERROR: " __VA_ARGS__)
0080 #define NVTX_INFO(...) fprintf(stderr, "NVTX_INFO: " __VA_ARGS__)
0081 #endif
0082 #else /* !defined(NVTX_DEBUG_PRINT) */
0083 #define NVTX_ERR(...)
0084 #define NVTX_INFO(...)
0085 #endif
0086 
0087 #ifdef __cplusplus
0088 extern "C" {
0089 #endif /* __cplusplus */
0090 
0091 #ifdef __GNUC__
0092 #pragma GCC visibility push(hidden)
0093 #endif
0094 
0095 /* ---- Forward declare all functions referenced in globals ---- */
0096 
0097 NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_VERSIONED_IDENTIFIER(nvtxInitOnce)(void);
0098 NVTX_LINKONCE_FWDDECL_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable)(
0099     NvtxCallbackModule callback_module,
0100     NvtxFunctionTable* out_table,
0101     unsigned int* out_size);
0102 NVTX_LINKONCE_FWDDECL_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion)(
0103     uint32_t version);
0104 NVTX_LINKONCE_FWDDECL_FUNCTION const void* NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxGetExportTable)(
0105     uint32_t exportTableId);
0106 
0107 #include "nvtxInitDecls.h"
0108 
0109 /* ---- Define all globals ---- */
0110 
0111 typedef struct nvtxGlobals_t
0112 {
0113     volatile unsigned int initState;
0114     NvtxExportTableCallbacks etblCallbacks;
0115     NvtxExportTableVersionInfo etblVersionInfo;
0116 
0117     /* Implementation function pointers */
0118     nvtxMarkEx_impl_fntype nvtxMarkEx_impl_fnptr;
0119     nvtxMarkA_impl_fntype nvtxMarkA_impl_fnptr;
0120     nvtxMarkW_impl_fntype nvtxMarkW_impl_fnptr;
0121     nvtxRangeStartEx_impl_fntype nvtxRangeStartEx_impl_fnptr;
0122     nvtxRangeStartA_impl_fntype nvtxRangeStartA_impl_fnptr;
0123     nvtxRangeStartW_impl_fntype nvtxRangeStartW_impl_fnptr;
0124     nvtxRangeEnd_impl_fntype nvtxRangeEnd_impl_fnptr;
0125     nvtxRangePushEx_impl_fntype nvtxRangePushEx_impl_fnptr;
0126     nvtxRangePushA_impl_fntype nvtxRangePushA_impl_fnptr;
0127     nvtxRangePushW_impl_fntype nvtxRangePushW_impl_fnptr;
0128     nvtxRangePop_impl_fntype nvtxRangePop_impl_fnptr;
0129     nvtxNameCategoryA_impl_fntype nvtxNameCategoryA_impl_fnptr;
0130     nvtxNameCategoryW_impl_fntype nvtxNameCategoryW_impl_fnptr;
0131     nvtxNameOsThreadA_impl_fntype nvtxNameOsThreadA_impl_fnptr;
0132     nvtxNameOsThreadW_impl_fntype nvtxNameOsThreadW_impl_fnptr;
0133 
0134     nvtxNameCuDeviceA_fakeimpl_fntype nvtxNameCuDeviceA_impl_fnptr;
0135     nvtxNameCuDeviceW_fakeimpl_fntype nvtxNameCuDeviceW_impl_fnptr;
0136     nvtxNameCuContextA_fakeimpl_fntype nvtxNameCuContextA_impl_fnptr;
0137     nvtxNameCuContextW_fakeimpl_fntype nvtxNameCuContextW_impl_fnptr;
0138     nvtxNameCuStreamA_fakeimpl_fntype nvtxNameCuStreamA_impl_fnptr;
0139     nvtxNameCuStreamW_fakeimpl_fntype nvtxNameCuStreamW_impl_fnptr;
0140     nvtxNameCuEventA_fakeimpl_fntype nvtxNameCuEventA_impl_fnptr;
0141     nvtxNameCuEventW_fakeimpl_fntype nvtxNameCuEventW_impl_fnptr;
0142 
0143     nvtxNameClDeviceA_fakeimpl_fntype nvtxNameClDeviceA_impl_fnptr;
0144     nvtxNameClDeviceW_fakeimpl_fntype nvtxNameClDeviceW_impl_fnptr;
0145     nvtxNameClContextA_fakeimpl_fntype nvtxNameClContextA_impl_fnptr;
0146     nvtxNameClContextW_fakeimpl_fntype nvtxNameClContextW_impl_fnptr;
0147     nvtxNameClCommandQueueA_fakeimpl_fntype nvtxNameClCommandQueueA_impl_fnptr;
0148     nvtxNameClCommandQueueW_fakeimpl_fntype nvtxNameClCommandQueueW_impl_fnptr;
0149     nvtxNameClMemObjectA_fakeimpl_fntype nvtxNameClMemObjectA_impl_fnptr;
0150     nvtxNameClMemObjectW_fakeimpl_fntype nvtxNameClMemObjectW_impl_fnptr;
0151     nvtxNameClSamplerA_fakeimpl_fntype nvtxNameClSamplerA_impl_fnptr;
0152     nvtxNameClSamplerW_fakeimpl_fntype nvtxNameClSamplerW_impl_fnptr;
0153     nvtxNameClProgramA_fakeimpl_fntype nvtxNameClProgramA_impl_fnptr;
0154     nvtxNameClProgramW_fakeimpl_fntype nvtxNameClProgramW_impl_fnptr;
0155     nvtxNameClEventA_fakeimpl_fntype nvtxNameClEventA_impl_fnptr;
0156     nvtxNameClEventW_fakeimpl_fntype nvtxNameClEventW_impl_fnptr;
0157 
0158     nvtxNameCudaDeviceA_fakeimpl_fntype nvtxNameCudaDeviceA_impl_fnptr;
0159     nvtxNameCudaDeviceW_fakeimpl_fntype nvtxNameCudaDeviceW_impl_fnptr;
0160     nvtxNameCudaStreamA_fakeimpl_fntype nvtxNameCudaStreamA_impl_fnptr;
0161     nvtxNameCudaStreamW_fakeimpl_fntype nvtxNameCudaStreamW_impl_fnptr;
0162     nvtxNameCudaEventA_fakeimpl_fntype nvtxNameCudaEventA_impl_fnptr;
0163     nvtxNameCudaEventW_fakeimpl_fntype nvtxNameCudaEventW_impl_fnptr;
0164 
0165     nvtxDomainMarkEx_impl_fntype nvtxDomainMarkEx_impl_fnptr;
0166     nvtxDomainRangeStartEx_impl_fntype nvtxDomainRangeStartEx_impl_fnptr;
0167     nvtxDomainRangeEnd_impl_fntype nvtxDomainRangeEnd_impl_fnptr;
0168     nvtxDomainRangePushEx_impl_fntype nvtxDomainRangePushEx_impl_fnptr;
0169     nvtxDomainRangePop_impl_fntype nvtxDomainRangePop_impl_fnptr;
0170     nvtxDomainResourceCreate_impl_fntype nvtxDomainResourceCreate_impl_fnptr;
0171     nvtxDomainResourceDestroy_impl_fntype nvtxDomainResourceDestroy_impl_fnptr;
0172     nvtxDomainNameCategoryA_impl_fntype nvtxDomainNameCategoryA_impl_fnptr;
0173     nvtxDomainNameCategoryW_impl_fntype nvtxDomainNameCategoryW_impl_fnptr;
0174     nvtxDomainRegisterStringA_impl_fntype nvtxDomainRegisterStringA_impl_fnptr;
0175     nvtxDomainRegisterStringW_impl_fntype nvtxDomainRegisterStringW_impl_fnptr;
0176     nvtxDomainCreateA_impl_fntype nvtxDomainCreateA_impl_fnptr;
0177     nvtxDomainCreateW_impl_fntype nvtxDomainCreateW_impl_fnptr;
0178     nvtxDomainDestroy_impl_fntype nvtxDomainDestroy_impl_fnptr;
0179     nvtxInitialize_impl_fntype nvtxInitialize_impl_fnptr;
0180 
0181     nvtxDomainSyncUserCreate_fakeimpl_fntype nvtxDomainSyncUserCreate_impl_fnptr;
0182     nvtxDomainSyncUserDestroy_fakeimpl_fntype nvtxDomainSyncUserDestroy_impl_fnptr;
0183     nvtxDomainSyncUserAcquireStart_fakeimpl_fntype nvtxDomainSyncUserAcquireStart_impl_fnptr;
0184     nvtxDomainSyncUserAcquireFailed_fakeimpl_fntype nvtxDomainSyncUserAcquireFailed_impl_fnptr;
0185     nvtxDomainSyncUserAcquireSuccess_fakeimpl_fntype nvtxDomainSyncUserAcquireSuccess_impl_fnptr;
0186     nvtxDomainSyncUserReleasing_fakeimpl_fntype nvtxDomainSyncUserReleasing_impl_fnptr;
0187 
0188     /* Tables of function pointers -- Extra null added to the end to ensure
0189     *  a crash instead of silent corruption if a tool reads off the end. */
0190     NvtxFunctionPointer* functionTable_CORE  [NVTX_CBID_CORE_SIZE   + 1];
0191     NvtxFunctionPointer* functionTable_CUDA  [NVTX_CBID_CUDA_SIZE   + 1];
0192     NvtxFunctionPointer* functionTable_OPENCL[NVTX_CBID_OPENCL_SIZE + 1];
0193     NvtxFunctionPointer* functionTable_CUDART[NVTX_CBID_CUDART_SIZE + 1];
0194     NvtxFunctionPointer* functionTable_CORE2 [NVTX_CBID_CORE2_SIZE  + 1];
0195     NvtxFunctionPointer* functionTable_SYNC  [NVTX_CBID_SYNC_SIZE   + 1];
0196 } nvtxGlobals_t;
0197 
0198 #define NVTX_GLOBAL_TABLE_ENTRY(name) ( NVTX_REINTERPRET_CAST(NvtxFunctionPointer*, &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).name ## _impl_fnptr ) )
0199 
0200 NVTX_LINKONCE_DEFINE_GLOBAL nvtxGlobals_t NVTX_VERSIONED_IDENTIFIER(nvtxGlobals) =
0201 {
0202     NVTX_INIT_STATE_FRESH,
0203 
0204     {
0205         sizeof(NvtxExportTableCallbacks),
0206         NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable)
0207     },
0208     {
0209         sizeof(NvtxExportTableVersionInfo),
0210         NVTX_VERSION,
0211         0,
0212         NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion)
0213     },
0214 
0215     /* Implementation function pointers */
0216     NVTX_VERSIONED_IDENTIFIER(nvtxMarkEx_impl_init),
0217     NVTX_VERSIONED_IDENTIFIER(nvtxMarkA_impl_init),
0218     NVTX_VERSIONED_IDENTIFIER(nvtxMarkW_impl_init),
0219     NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartEx_impl_init),
0220     NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartA_impl_init),
0221     NVTX_VERSIONED_IDENTIFIER(nvtxRangeStartW_impl_init),
0222     NVTX_VERSIONED_IDENTIFIER(nvtxRangeEnd_impl_init),
0223     NVTX_VERSIONED_IDENTIFIER(nvtxRangePushEx_impl_init),
0224     NVTX_VERSIONED_IDENTIFIER(nvtxRangePushA_impl_init),
0225     NVTX_VERSIONED_IDENTIFIER(nvtxRangePushW_impl_init),
0226     NVTX_VERSIONED_IDENTIFIER(nvtxRangePop_impl_init),
0227     NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryA_impl_init),
0228     NVTX_VERSIONED_IDENTIFIER(nvtxNameCategoryW_impl_init),
0229     NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadA_impl_init),
0230     NVTX_VERSIONED_IDENTIFIER(nvtxNameOsThreadW_impl_init),
0231 
0232     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceA_impl_init),
0233     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuDeviceW_impl_init),
0234     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextA_impl_init),
0235     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuContextW_impl_init),
0236     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamA_impl_init),
0237     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuStreamW_impl_init),
0238     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventA_impl_init),
0239     NVTX_VERSIONED_IDENTIFIER(nvtxNameCuEventW_impl_init),
0240 
0241     NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceA_impl_init),
0242     NVTX_VERSIONED_IDENTIFIER(nvtxNameClDeviceW_impl_init),
0243     NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextA_impl_init),
0244     NVTX_VERSIONED_IDENTIFIER(nvtxNameClContextW_impl_init),
0245     NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueA_impl_init),
0246     NVTX_VERSIONED_IDENTIFIER(nvtxNameClCommandQueueW_impl_init),
0247     NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectA_impl_init),
0248     NVTX_VERSIONED_IDENTIFIER(nvtxNameClMemObjectW_impl_init),
0249     NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerA_impl_init),
0250     NVTX_VERSIONED_IDENTIFIER(nvtxNameClSamplerW_impl_init),
0251     NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramA_impl_init),
0252     NVTX_VERSIONED_IDENTIFIER(nvtxNameClProgramW_impl_init),
0253     NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventA_impl_init),
0254     NVTX_VERSIONED_IDENTIFIER(nvtxNameClEventW_impl_init),
0255 
0256     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceA_impl_init),
0257     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaDeviceW_impl_init),
0258     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamA_impl_init),
0259     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaStreamW_impl_init),
0260     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventA_impl_init),
0261     NVTX_VERSIONED_IDENTIFIER(nvtxNameCudaEventW_impl_init),
0262 
0263     NVTX_VERSIONED_IDENTIFIER(nvtxDomainMarkEx_impl_init),
0264     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeStartEx_impl_init),
0265     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangeEnd_impl_init),
0266     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePushEx_impl_init),
0267     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRangePop_impl_init),
0268     NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceCreate_impl_init),
0269     NVTX_VERSIONED_IDENTIFIER(nvtxDomainResourceDestroy_impl_init),
0270     NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryA_impl_init),
0271     NVTX_VERSIONED_IDENTIFIER(nvtxDomainNameCategoryW_impl_init),
0272     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringA_impl_init),
0273     NVTX_VERSIONED_IDENTIFIER(nvtxDomainRegisterStringW_impl_init),
0274     NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateA_impl_init),
0275     NVTX_VERSIONED_IDENTIFIER(nvtxDomainCreateW_impl_init),
0276     NVTX_VERSIONED_IDENTIFIER(nvtxDomainDestroy_impl_init),
0277     NVTX_VERSIONED_IDENTIFIER(nvtxInitialize_impl_init),
0278 
0279     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserCreate_impl_init),
0280     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserDestroy_impl_init),
0281     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireStart_impl_init),
0282     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireFailed_impl_init),
0283     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserAcquireSuccess_impl_init),
0284     NVTX_VERSIONED_IDENTIFIER(nvtxDomainSyncUserReleasing_impl_init),
0285 
0286     /* Tables of function pointers */
0287     {
0288         NVTX_NULLPTR,
0289         NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkEx),
0290         NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkA),
0291         NVTX_GLOBAL_TABLE_ENTRY(nvtxMarkW),
0292         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartEx),
0293         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartA),
0294         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeStartW),
0295         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangeEnd),
0296         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushEx),
0297         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushA),
0298         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePushW),
0299         NVTX_GLOBAL_TABLE_ENTRY(nvtxRangePop),
0300         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCategoryA),
0301         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCategoryW),
0302         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameOsThreadA),
0303         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameOsThreadW),
0304         NVTX_NULLPTR
0305     },
0306     {
0307         NVTX_NULLPTR,
0308         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuDeviceA),
0309         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuDeviceW),
0310         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuContextA),
0311         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuContextW),
0312         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuStreamA),
0313         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuStreamW),
0314         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuEventA),
0315         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCuEventW),
0316         NVTX_NULLPTR
0317     },
0318     {
0319         NVTX_NULLPTR,
0320         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClDeviceA),
0321         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClDeviceW),
0322         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClContextA),
0323         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClContextW),
0324         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClCommandQueueA),
0325         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClCommandQueueW),
0326         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClMemObjectA),
0327         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClMemObjectW),
0328         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClSamplerA),
0329         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClSamplerW),
0330         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClProgramA),
0331         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClProgramW),
0332         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClEventA),
0333         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameClEventW),
0334         NVTX_NULLPTR
0335     },
0336     {
0337         NVTX_NULLPTR,
0338         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaDeviceA),
0339         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaDeviceW),
0340         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaStreamA),
0341         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaStreamW),
0342         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaEventA),
0343         NVTX_GLOBAL_TABLE_ENTRY(nvtxNameCudaEventW),
0344         NVTX_NULLPTR
0345     },
0346     {
0347         NVTX_NULLPTR,
0348         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainMarkEx),
0349         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangeStartEx),
0350         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangeEnd),
0351         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangePushEx),
0352         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRangePop),
0353         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainResourceCreate),
0354         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainResourceDestroy),
0355         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainNameCategoryA),
0356         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainNameCategoryW),
0357         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRegisterStringA),
0358         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainRegisterStringW),
0359         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainCreateA),
0360         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainCreateW),
0361         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainDestroy),
0362         NVTX_GLOBAL_TABLE_ENTRY(nvtxInitialize),
0363         NVTX_NULLPTR
0364     },
0365     {
0366         NVTX_NULLPTR,
0367         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserCreate),
0368         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserDestroy),
0369         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireStart),
0370         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireFailed),
0371         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserAcquireSuccess),
0372         NVTX_GLOBAL_TABLE_ENTRY(nvtxDomainSyncUserReleasing),
0373         NVTX_NULLPTR
0374     }
0375 };
0376 
0377 #undef NVTX_GLOBAL_TABLE_ENTRY
0378 
0379 /* ---- Define static inline implementations of core API functions ---- */
0380 
0381 #include "nvtxImplCore.h"
0382 
0383 /* ---- Define implementations of export table functions ---- */
0384 
0385 NVTX_LINKONCE_DEFINE_FUNCTION int NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiGetModuleFunctionTable)(
0386     NvtxCallbackModule callback_module,
0387     NvtxFunctionTable* out_table,
0388     unsigned int* out_size)
0389 {
0390     unsigned int bytes = 0;
0391     NvtxFunctionTable table = NVTX_NULLPTR;
0392 
0393     switch (callback_module)
0394     {
0395     case NVTX_CB_MODULE_CORE:
0396         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE;
0397         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE));
0398         break;
0399     case NVTX_CB_MODULE_CUDA:
0400         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDA;
0401         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDA));
0402         break;
0403     case NVTX_CB_MODULE_OPENCL:
0404         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_OPENCL;
0405         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_OPENCL));
0406         break;
0407     case NVTX_CB_MODULE_CUDART:
0408         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDART;
0409         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CUDART));
0410         break;
0411     case NVTX_CB_MODULE_CORE2:
0412         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE2;
0413         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_CORE2));
0414         break;
0415     case NVTX_CB_MODULE_SYNC:
0416         table = NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_SYNC;
0417         bytes = NVTX_STATIC_CAST(unsigned int, sizeof(NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).functionTable_SYNC));
0418         break;
0419     case NVTX_CB_MODULE_INVALID:
0420     case NVTX_CB_MODULE_SIZE:
0421     case NVTX_CB_MODULE_FORCE_INT:
0422     default: return 0;
0423     }
0424 
0425     if (out_size)
0426         *out_size = (bytes / NVTX_STATIC_CAST(unsigned int, sizeof(NvtxFunctionPointer*))) - 1;
0427 
0428     if (out_table)
0429         *out_table = table;
0430 
0431     return 1;
0432 }
0433 
0434 NVTX_LINKONCE_DEFINE_FUNCTION const void* NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxGetExportTable)(uint32_t exportTableId)
0435 {
0436     switch (exportTableId)
0437     {
0438     case NVTX_ETID_CALLBACKS:       return &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).etblCallbacks;
0439     case NVTX_ETID_VERSIONINFO:     return &NVTX_VERSIONED_IDENTIFIER(nvtxGlobals).etblVersionInfo;
0440     default:                        return NVTX_NULLPTR;
0441     }
0442 }
0443 
0444 NVTX_LINKONCE_DEFINE_FUNCTION void NVTX_API NVTX_VERSIONED_IDENTIFIER(nvtxEtiSetInjectionNvtxVersion)(uint32_t version)
0445 {
0446     /* Reserved for custom implementations to resolve problems with tools */
0447     (void)version;
0448 }
0449 
0450 /* ---- Define implementations of init versions of all API functions ---- */
0451 
0452 #include "nvtxInitDefs.h"
0453 
0454 /* ---- Define implementations of initialization functions ---- */
0455 
0456 #include "nvtxInit.h"
0457 
0458 #ifdef __GNUC__
0459 #pragma GCC visibility pop
0460 #endif
0461 
0462 #ifdef __cplusplus
0463 } /* extern "C" */
0464 #endif /* __cplusplus */