roctx domain is enabled check

This commit is contained in:
Evgeny
2019-09-03 15:25:06 -05:00
parent 2007136c1c
commit a239e366ff
2 changed files with 27 additions and 7 deletions
+19 -3
View File
@@ -14,8 +14,20 @@ class BaseLoader : public T {
typedef std::mutex mutex_t;
typedef BaseLoader<T> loader_t;
bool Enabled() const { return (handle_ != NULL); }
template <class fun_t>
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<loader_t*> instance_;
static const bool strong_ld_check_;
void* handle_;
};
@@ -153,9 +167,11 @@ typedef BaseLoader<RocTxApi> RocTxLoader;
#define LOADER_INSTANTIATE() \
template<class T> typename roctracer::BaseLoader<T>::mutex_t roctracer::BaseLoader<T>::mutex_; \
template<class T> std::atomic<roctracer::BaseLoader<T>*> roctracer::BaseLoader<T>::instance_{}; \
template<class T> const bool roctracer::BaseLoader<T>::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_
+8 -4
View File
@@ -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: