Add libomptarget discovery to prevent OpenMP/HIP segfaults (#1043)

This PR fixes a segmentation fault seen when running rocprof-sys-sample with multi-process OpenMP/HIP applications.
The crash was caused by missing libomptarget.so on the runtime loader path or incorrect LD_PRELOAD settings.

Fixes SWDEV-552804

---------

Co-authored-by: David Galiffi <David.Galiffi@amd.com>
이 커밋은 다음에 포함됨:
habajpai-amd
2025-10-01 19:21:26 +05:30
커밋한 사람 GitHub
부모 36a1fd87af
커밋 74fc268a32
8개의 변경된 파일239개의 추가작업 그리고 48개의 파일을 삭제
+10 -2
파일 보기
@@ -204,6 +204,14 @@ get_initial_environment()
get_env<int>("ROCPROFSYS_THREAD_POOL_SIZE", 0));
update_env(_env, "ROCPROFSYS_LAUNCHER", "rocprof-sys-causal");
// Ensure libomptarget.so can be found by the target (OpenMP/HIP apps)
if(auto llvm_dir =
rocprofsys::common::discover_llvm_libdir_for_ompt(get_verbose() > 0);
!llvm_dir.empty())
{
update_env(_env, "LD_LIBRARY_PATH", llvm_dir, /*append=*/true);
}
return _env;
}
@@ -351,13 +359,13 @@ update_env(std::vector<char*>& _environ, std::string_view _env_var, Tp&& _env_va
if(_env_var == "LD_PRELOAD")
{
itr =
strdup(join('=', _env_var, join(_join_delim, _val, _env_val))
strdup(join('=', _env_var, join(_join_delim, _env_val, _val))
.c_str());
}
else
{
itr =
strdup(join('=', _env_var, join(_join_delim, _env_val, _val))
strdup(join('=', _env_var, join(_join_delim, _val, _env_val))
.c_str());
}
}