~ruther/guix-local

e9e825387f1daefde91b0ba5c5ec3540b0b227fa — Maxim Cournoyer 2 years ago 3528d88
gnu: Add dwarves.

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

Change-Id: Ib2452868eae76bea95060a70e568dfb6e84b2a75
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1128,6 1128,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/dune-istl-fix-solver-playground.patch	\
  %D%/packages/patches/durden-shadow-arcan.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/dyninst-fix-glibc-compatibility.patch	\
  %D%/packages/patches/efivar-211.patch			\

M gnu/packages/linux.scm => gnu/packages/linux.scm +48 -0
@@ 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")

A gnu/packages/patches/dwarves-threading-reproducibility.patch => gnu/packages/patches/dwarves-threading-reproducibility.patch +23 -0
@@ 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