Fix find_path in omnitrace-dl (#59)
- added some verbosity
[ROCm/rocprofiler-systems commit: 5583168dbc]
This commit is contained in:
کامیت شده توسط
GitHub
والد
536a0bf9d4
کامیت
ec7f84b60c
@@ -70,7 +70,8 @@ ignore(const char* _name, int _verbose, int _value, const char* _reason, Args...
|
||||
fprintf(stderr,
|
||||
"[omnitrace][" OMNITRACE_COMMON_LIBRARY_NAME
|
||||
"][%li] %s(%s) was ignored :: %s\n",
|
||||
get_thread_index(), _name, join(", ", _args...).c_str(), _reason);
|
||||
get_thread_index(), _name, join(QuoteStrings{}, ", ", _args...).c_str(),
|
||||
_reason);
|
||||
fflush(stderr);
|
||||
}
|
||||
}
|
||||
@@ -100,7 +101,8 @@ invoke(const char* _name, int _verbose, bool& _toggle, FuncT&& _func, Args... _a
|
||||
fprintf(stderr,
|
||||
"[omnitrace][" OMNITRACE_COMMON_LIBRARY_NAME
|
||||
"][%li][%i] %s(%s)\n",
|
||||
get_thread_index(), _lk, _name, join(", ", _args...).c_str());
|
||||
get_thread_index(), _lk, _name,
|
||||
join(QuoteStrings{}, ", ", _args...).c_str());
|
||||
fflush(stderr);
|
||||
}
|
||||
return std::invoke(std::forward<FuncT>(_func), _args...);
|
||||
@@ -111,7 +113,8 @@ invoke(const char* _name, int _verbose, bool& _toggle, FuncT&& _func, Args... _a
|
||||
fprintf(stderr,
|
||||
"[omnitrace][" OMNITRACE_COMMON_LIBRARY_NAME
|
||||
"][%li] %s(%s) was guarded :: value = %i\n",
|
||||
get_thread_index(), _name, join(", ", _args...).c_str(), _lk);
|
||||
get_thread_index(), _name,
|
||||
join(QuoteStrings{}, ", ", _args...).c_str(), _lk);
|
||||
fflush(stderr);
|
||||
}
|
||||
}
|
||||
@@ -120,7 +123,7 @@ invoke(const char* _name, int _verbose, bool& _toggle, FuncT&& _func, Args... _a
|
||||
fprintf(stderr,
|
||||
"[omnitrace][" OMNITRACE_COMMON_LIBRARY_NAME
|
||||
"][%li] %s(%s) ignored :: null function pointer\n",
|
||||
get_thread_index(), _name, join(", ", _args...).c_str());
|
||||
get_thread_index(), _name, join(QuoteStrings{}, ", ", _args...).c_str());
|
||||
}
|
||||
|
||||
using return_type = decltype(std::invoke(std::forward<FuncT>(_func), _args...));
|
||||
|
||||
@@ -78,6 +78,28 @@ as_string(ArgT&& _v, std::enable_if_t<!is_string<ArgT>::value, long> = 0)
|
||||
template <typename DelimT, typename... Args>
|
||||
auto
|
||||
join(DelimT&& _delim, Args&&... _args)
|
||||
{
|
||||
std::stringstream _ss{};
|
||||
_ss << std::boolalpha;
|
||||
OMNITRACE_FOLD_EXPRESSION(_ss << _delim << _args);
|
||||
auto _ret = _ss.str();
|
||||
if constexpr(std::is_same<DelimT, char>::value)
|
||||
{
|
||||
return (_ret.length() > 1) ? _ret.substr(1) : std::string{};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto&& _len = std::string{ _delim }.length();
|
||||
return (_ret.length() > _len) ? _ret.substr(_len) : std::string{};
|
||||
}
|
||||
}
|
||||
|
||||
struct QuoteStrings
|
||||
{};
|
||||
|
||||
template <typename DelimT, typename... Args>
|
||||
auto
|
||||
join(QuoteStrings&&, DelimT&& _delim, Args&&... _args)
|
||||
{
|
||||
std::stringstream _ss{};
|
||||
_ss << std::boolalpha;
|
||||
|
||||
@@ -136,25 +136,39 @@ const char* _omnitrace_dl_dlopen_descr = "RTLD_LAZY | RTLD_LOCAL";
|
||||
/// This class contains function pointers for omnitrace's instrumentation functions
|
||||
struct OMNITRACE_HIDDEN_API indirect
|
||||
{
|
||||
OMNITRACE_INLINE indirect(const std::string& omnilib, const std::string& userlib)
|
||||
OMNITRACE_INLINE indirect(const std::string& omnilib, const std::string& userlib,
|
||||
const std::string& dllib)
|
||||
: m_omnilib{ find_path(omnilib) }
|
||||
, m_dllib{ find_path(dllib) }
|
||||
, m_userlib{ find_path(userlib) }
|
||||
{
|
||||
if(_omnitrace_dl_verbose >= 1)
|
||||
{
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] libomnitrace.so resolved to '%s'\n",
|
||||
getpid(), m_omnilib.c_str());
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] %s resolved to '%s'\n", getpid(),
|
||||
::basename(omnilib.c_str()), m_omnilib.c_str());
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] %s resolved to '%s'\n", getpid(),
|
||||
::basename(dllib.c_str()), m_dllib.c_str());
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] %s resolved to '%s'\n", getpid(),
|
||||
::basename(userlib.c_str()), m_userlib.c_str());
|
||||
}
|
||||
|
||||
#if defined(OMNITRACE_USE_ROCTRACER) && OMNITRACE_USE_ROCTRACER > 0
|
||||
auto _omni_hsa_lib = m_omnilib;
|
||||
setenv("HSA_TOOLS_LIB", _omni_hsa_lib.c_str(), 0);
|
||||
#endif
|
||||
|
||||
#if OMNITRACE_USE_OMPT > 0
|
||||
if(get_env("OMNITRACE_USE_OMPT", true))
|
||||
{
|
||||
std::string _omni_omp_libs = find_path("libomnitrace-dl.so");
|
||||
std::string _omni_omp_libs = m_dllib;
|
||||
const char* _omp_libs = getenv("OMP_TOOL_LIBRARIES");
|
||||
if(_omp_libs) _omni_omp_libs = common::join(':', _omni_omp_libs, _omp_libs);
|
||||
if(_omnitrace_dl_verbose >= 1)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"[omnitrace][dl][pid=%i] setting OMP_TOOL_LIBRARIES to '%s'\n",
|
||||
getpid(), _omni_omp_libs.c_str());
|
||||
}
|
||||
setenv("OMP_TOOL_LIBRARIES", _omni_omp_libs.c_str(), 1);
|
||||
}
|
||||
#endif
|
||||
@@ -171,9 +185,9 @@ struct OMNITRACE_HIDDEN_API indirect
|
||||
|
||||
if(libhandle)
|
||||
{
|
||||
if(_omnitrace_dl_verbose >= 1)
|
||||
if(_omnitrace_dl_verbose >= 2)
|
||||
{
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] dlopen(%s, %s) :: success\n",
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] dlopen(\"%s\", %s) :: success\n",
|
||||
getpid(), _lib.c_str(), _omnitrace_dl_dlopen_descr);
|
||||
}
|
||||
}
|
||||
@@ -182,7 +196,7 @@ struct OMNITRACE_HIDDEN_API indirect
|
||||
if(_omnitrace_dl_verbose >= 0)
|
||||
{
|
||||
perror("dlopen");
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] dlopen(%s, %s) :: %s\n",
|
||||
fprintf(stderr, "[omnitrace][dl][pid=%i] dlopen(\"%s\", %s) :: %s\n",
|
||||
getpid(), _lib.c_str(), _omnitrace_dl_dlopen_descr, dlerror());
|
||||
}
|
||||
}
|
||||
@@ -305,9 +319,16 @@ struct OMNITRACE_HIDDEN_API indirect
|
||||
return (stat(name.c_str(), &buffer) == 0);
|
||||
};
|
||||
|
||||
int _verbose_lvl = 2;
|
||||
for(const auto& itr : _paths)
|
||||
{
|
||||
auto _f = join('/', itr, _path);
|
||||
if(_omnitrace_dl_verbose >= _verbose_lvl)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"[omnitrace][dl][pid=%i] searching for '%s' in '%s' ...\n",
|
||||
getpid(), _path.c_str(), itr.c_str());
|
||||
}
|
||||
if(file_exists(_f)) return _f;
|
||||
}
|
||||
return _path;
|
||||
@@ -378,6 +399,7 @@ private:
|
||||
void* m_omnihandle = nullptr;
|
||||
void* m_userhandle = nullptr;
|
||||
std::string m_omnilib = {};
|
||||
std::string m_dllib = {};
|
||||
std::string m_userlib = {};
|
||||
};
|
||||
|
||||
@@ -389,7 +411,8 @@ get_indirect()
|
||||
{
|
||||
static auto _libomni = get_env("OMNITRACE_LIBRARY", "libomnitrace.so");
|
||||
static auto _libuser = get_env("OMNITRACE_USER_LIBRARY", "libomnitrace-user.so");
|
||||
static auto* _v = new indirect{ _libomni, _libuser };
|
||||
static auto _libdlib = get_env("OMNITRACE_DL_LIBRARY", "libomnitrace-dl.so");
|
||||
static auto* _v = new indirect{ _libomni, _libuser, _libdlib };
|
||||
return *_v;
|
||||
}
|
||||
|
||||
@@ -488,14 +511,16 @@ extern "C"
|
||||
{
|
||||
if(dl::get_inited() && dl::get_finied())
|
||||
{
|
||||
OMNITRACE_DL_LOG(2, "%s(%s) ignored :: already initialized and finalized\n",
|
||||
__FUNCTION__, ::omnitrace::join(", ", a, b, c).c_str());
|
||||
OMNITRACE_DL_LOG(
|
||||
2, "%s(%s) ignored :: already initialized and finalized\n", __FUNCTION__,
|
||||
::omnitrace::join(::omnitrace::QuoteStrings{}, ", ", a, b, c).c_str());
|
||||
return;
|
||||
}
|
||||
else if(dl::get_inited() && dl::get_active())
|
||||
{
|
||||
OMNITRACE_DL_LOG(2, "%s(%s) ignored :: already initialized and active\n",
|
||||
__FUNCTION__, ::omnitrace::join(", ", a, b, c).c_str());
|
||||
OMNITRACE_DL_LOG(
|
||||
2, "%s(%s) ignored :: already initialized and active\n", __FUNCTION__,
|
||||
::omnitrace::join(::omnitrace::QuoteStrings{}, ", ", a, b, c).c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
مرجع در شماره جدید
Block a user