Fix AMDuProfPcm so it finds libnuma.so

We change the search procedure so it detects NixOS from /etc/os-release
and uses "libnuma.so" when calling dlopen, instead of harcoding a full
path to /usr. The full patch of libnuma is stored in the runpath, so
dlopen can find it.
This commit is contained in:
Rodrigo Arias 2025-09-18 13:15:44 +02:00
parent 44ae8112f2
commit 4e3c41c9fa
2 changed files with 16 additions and 1 deletions

View File

@ -17,6 +17,8 @@
, dbus
, rocmPackages
, libxcrypt-legacy
, numactl
, radare2
}:
let
@ -45,7 +47,7 @@ in
src = uprofSrc;
dontStrip = true;
phases = [ "installPhase" "fixupPhase" ];
nativeBuildInputs = [ autoPatchelfHook ];
nativeBuildInputs = [ autoPatchelfHook radare2 ];
buildInputs = [
stdenv.cc.cc.lib
ncurses5
@ -69,6 +71,7 @@ in
freetype
dbus
rocmPackages.rocprofiler
numactl
];
installPhase = ''
set -x
@ -77,6 +80,8 @@ in
rm $out/bin/AMDPowerProfilerDriverSource.tar.gz
patchelf --replace-needed libroctracer64.so.1 libroctracer64.so $out/bin/ProfileAgents/x64/libAMDGpuAgent.so
patchelf --add-needed libcrypt.so.1 --add-needed libstdc++.so.6 $out/bin/AMDuProfSys
radare2 -w -q -i ${./libnuma.r2} $out/bin/AMDuProfPcm
patchelf --add-needed libnuma.so $out/bin/AMDuProfPcm
set +x
'';
}

10
pkgs/amd-uprof/libnuma.r2 Normal file
View File

@ -0,0 +1,10 @@
# Patch arguments to call sym std::string::find(char const*, unsigned long, unsigned long)
# so it matches NixOS:
#
# Change OS name to NixOS
wz NixOS @ 0x00550a43
# And set the length to 5 characters
wa mov ecx, 5 @0x00517930
#
# Then change the argument to dlopen() so it only uses libnuma.so
wz libnuma.so @ 0x00562940