Skip to content

Commit

Permalink
pahole: patch to force single-threaded mode if reproducibility is des…
Browse files Browse the repository at this point in the history
…ired

pahole's processes DWARF -> BTF in a pseudo-random order if multi
threading is enabled (default in the Linux kernel). This can be fixed in dependent
derivation by making sure users don't ever pass "-j" or "-j N", but it
seems easier and safer to just detect whether reprodubility is desired
(by proxy: if SOURCE_DATE_EPOCH is set) and ignore the multi-threading
flag.
  • Loading branch information
delroth committed May 14, 2023
1 parent b6b5f5c commit e1daacf
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
2 changes: 2 additions & 0 deletions pkgs/development/tools/misc/pahole/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ stdenv.mkDerivation rec {
musl-obstack
];

patches = [ ./threading-reproducibility.patch ];

# Put libraries in "lib" subdirectory, not top level of $out
cmakeFlags = [ "-D__LIB=lib" "-DLIBBPF_EMBEDDED=OFF" ];

Expand Down
18 changes: 18 additions & 0 deletions pkgs/development/tools/misc/pahole/threading-reproducibility.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
diff --git a/pahole.c b/pahole.c
index 6fc4ed6..a4e306f 100644
--- a/pahole.c
+++ b/pahole.c
@@ -1687,8 +1687,11 @@ static error_t pahole__options_parser(int key, char *arg,
class_name = arg; break;
case 'j':
#if _ELFUTILS_PREREQ(0, 178)
- conf_load.nr_jobs = arg ? atoi(arg) :
- sysconf(_SC_NPROCESSORS_ONLN) * 1.1;
+ // Force single thread if reproducibility is desirable.
+ if (!getenv("SOURCE_DATE_EPOCH")) {
+ conf_load.nr_jobs = arg ? atoi(arg) :
+ sysconf(_SC_NPROCESSORS_ONLN) * 1.1;
+ }
#else
fputs("pahole: Multithreading requires elfutils >= 0.178. Continuing with a single thread...\n", stderr);
#endif

0 comments on commit e1daacf

Please sign in to comment.