From a239e366ffcd986ef892f924cf304a0ab163dca3 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Tue, 3 Sep 2019 15:25:06 -0500 Subject: [PATCH] roctx domain is enabled check --- src/core/loader.h | 22 +++++++++++++++++++--- src/core/roctracer.cpp | 12 ++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/core/loader.h b/src/core/loader.h index d15d2f5580..bf3530c2ab 100644 --- a/src/core/loader.h +++ b/src/core/loader.h @@ -14,8 +14,20 @@ class BaseLoader : public T { typedef std::mutex mutex_t; typedef BaseLoader loader_t; + bool Enabled() const { return (handle_ != NULL); } + template - fun_t* GetFun(const char* fun_name) { return (fun_t*) dlsym(handle_, fun_name); } + fun_t* GetFun(const char* fun_name) { + if (handle_ == NULL) return NULL; + + fun_t *f = (fun_t*) dlsym(handle_, fun_name); + if (f == NULL) { + fprintf(stderr, "roctracer: symbol lookup '%s' failed: \"%s\"\n", fun_name, dlerror()); + abort(); + } + dlerror(); + return f; + } static inline loader_t& Instance(const bool& preload = false) { loader_t* obj = instance_.load(std::memory_order_acquire); @@ -35,10 +47,11 @@ class BaseLoader : public T { BaseLoader(bool preload) { const int flags = (preload) ? RTLD_LAZY : RTLD_LAZY|RTLD_NOLOAD; handle_ = dlopen(lib_name_, flags); - if (handle_ == NULL) { + if ((handle_ == NULL) && (strong_ld_check_)) { fprintf(stderr, "roctracer: Loading '%s' failed, preload(%d), %s\n", lib_name_, (int)preload, dlerror()); abort(); } + dlerror(); T::init(this); } @@ -50,6 +63,7 @@ class BaseLoader : public T { static mutex_t mutex_; static const char* lib_name_; static std::atomic instance_; + static const bool strong_ld_check_; void* handle_; }; @@ -153,9 +167,11 @@ typedef BaseLoader RocTxLoader; #define LOADER_INSTANTIATE() \ template typename roctracer::BaseLoader::mutex_t roctracer::BaseLoader::mutex_; \ template std::atomic*> roctracer::BaseLoader::instance_{}; \ + template const bool roctracer::BaseLoader::strong_ld_check_ = false; template<> const char* roctracer::HipLoader::lib_name_ = "libhip_hcc.so"; \ template<> const char* roctracer::HccLoader::lib_name_ = "libmcwamp_hsa.so"; \ template<> const char* roctracer::KfdLoader::lib_name_ = "libkfdwrapper64.so"; \ - template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; + template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; \ + template<> const bool roctracer::RocTxLoader::strong_ld_check_ = false; #endif // SRC_CORE_LOADER_H_ diff --git a/src/core/roctracer.cpp b/src/core/roctracer.cpp index 40e401c430..92a2bc640d 100644 --- a/src/core/roctracer.cpp +++ b/src/core/roctracer.cpp @@ -686,8 +686,10 @@ static void roctracer_enable_callback_impl( break; } case ACTIVITY_DOMAIN_ROCTX: { - const bool suc = roctracer::RocTxLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data); - if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRegisterApiCallback(" << op << ") failed"); + if (roctracer::RocTxLoader::Instance().Enabled()) { + const bool suc = roctracer::RocTxLoader::Instance().RegisterApiCallback(op, (void*)callback, user_data); + if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRegisterApiCallback(" << op << ") failed"); + } break; } default: @@ -751,8 +753,10 @@ static void roctracer_disable_callback_impl( break; } case ACTIVITY_DOMAIN_ROCTX: { - const bool suc = roctracer::RocTxLoader::Instance().RemoveApiCallback(op); - if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRemoveApiCallback(" << op << ") failed"); + if (roctracer::RocTxLoader::Instance().Enabled()) { + const bool suc = roctracer::RocTxLoader::Instance().RemoveApiCallback(op); + if (suc == false) EXC_RAISING(ROCTRACER_STATUS_ROCTX_ERR, "roctxRemoveApiCallback(" << op << ") failed"); + } break; } default: