From e9e825387f1daefde91b0ba5c5ec3540b0b227fa Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Wed, 8 May 2024 10:02:36 -0400 Subject: gnu: Add dwarves. * gnu/packages/linux.scm (dwarves): New variable. Change-Id: Ib2452868eae76bea95060a70e568dfb6e84b2a75 --- gnu/packages/linux.scm | 48 ++++++++++++++++++++++ .../dwarves-threading-reproducibility.patch | 23 +++++++++++ 2 files changed, 71 insertions(+) create mode 100644 gnu/packages/patches/dwarves-threading-reproducibility.patch (limited to 'gnu/packages') diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 4177e1c97e..2ce2c27c93 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -2411,6 +2411,54 @@ by Robert Shea and Robert Anton Wilson.") partitions. Write functionality is also provided but check the README.") (license license:gpl2+))) +(define-public dwarves + (package + (name "dwarves") + (version "1.26") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/acmel/dwarves") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0xfq0r3whc3dk922ss8i5vwyfcqhgc95dy27mm69j5niy7i5kzrd")) + (patches + (search-patches "dwarves-threading-reproducibility.patch")))) + (build-system cmake-build-system) + (arguments (list #:configure-flags #~(list "-D__LIB=lib" + "-DLIBBPF_EMBEDDED=OFF") + #:tests? #f)) ;no test suite + (native-inputs (list pkg-config)) + (inputs (list libbpf)) + (home-page "https://github.com/acmel/dwarves") + (synopsis "Debugging information processing library and utilities") + (description "Dwarves is a set of tools that use the debugging information +inserted in ELF binaries by compilers such as GCC, used by well known +debuggers such as GDB. + +Utilities in the Dwarves suite include @command{pahole}, that can be used to +find alignment holes in structures and classes in languages such as C, C++, +but not limited to these. These tools can also be used to encode and read the +BTF type information format used with the kernel Linux @code{bpf} syscall. + +The @command{codiff} command can be used to compare the effects changes in +source code generate on the resulting binaries. + +The @command{pfunct} command can be used to find all sorts of information +about functions, inlines, decisions made by the compiler about inlining, etc. + +The @command{pahole} command can be used to use all this type information to +pretty print raw data according to command line directions. + +Headers can have its data format described from debugging info and offsets from +it can be used to further format a number of records. + +Finally, the @command{btfdiff} command can be used to compare the output of +pahole from BTF and DWARF, to make sure they produce the same results. ") + (license license:gpl2+))) + (define-public fbset (package (name "fbset") diff --git a/gnu/packages/patches/dwarves-threading-reproducibility.patch b/gnu/packages/patches/dwarves-threading-reproducibility.patch new file mode 100644 index 0000000000..8771ca6b0d --- /dev/null +++ b/gnu/packages/patches/dwarves-threading-reproducibility.patch @@ -0,0 +1,23 @@ +Retrieved from nixpkgs. + +This causes pahole to use '-j1' (single thread) when SOURCE_DATE_EPOCH +is set, to ensure it produces reproducible output. + +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 -- cgit v1.2.3