gnu: Add dwarves.

* gnu/packages/linux.scm (dwarves): New variable.

Change-Id: Ib2452868eae76bea95060a70e568dfb6e84b2a75
This commit is contained in:
Maxim Cournoyer 2024-05-08 10:02:36 -04:00
parent 3528d888ee
commit e9e825387f
No known key found for this signature in database
GPG key ID: 1260E46482E63562
3 changed files with 72 additions and 0 deletions

View file

@ -1128,6 +1128,7 @@ dist_patch_DATA = \
%D%/packages/patches/dune-istl-fix-solver-playground.patch \ %D%/packages/patches/dune-istl-fix-solver-playground.patch \
%D%/packages/patches/durden-shadow-arcan.patch \ %D%/packages/patches/durden-shadow-arcan.patch \
%D%/packages/patches/dvd+rw-tools-add-include.patch \ %D%/packages/patches/dvd+rw-tools-add-include.patch \
%D%/packages/patches/dwarves-threading-reproducibility.patch \
%D%/packages/patches/dynaconf-unvendor-deps.patch \ %D%/packages/patches/dynaconf-unvendor-deps.patch \
%D%/packages/patches/dyninst-fix-glibc-compatibility.patch \ %D%/packages/patches/dyninst-fix-glibc-compatibility.patch \
%D%/packages/patches/efivar-211.patch \ %D%/packages/patches/efivar-211.patch \

View file

@ -2411,6 +2411,54 @@ (define-public dislocker
partitions. Write functionality is also provided but check the README.") partitions. Write functionality is also provided but check the README.")
(license license:gpl2+))) (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 (define-public fbset
(package (package
(name "fbset") (name "fbset")

View file

@ -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