gnu: elfutils: Enable debuginfod

  • Open
  • quality assurance status badge
Details
4 participants
  • Brett Gilio
  • Mark Wielaard
  • Marius Bakke
  • Vagrant Cascadian
Owner
unassigned
Submitted by
Mark Wielaard
Severity
normal
M
M
Mark Wielaard wrote on 30 Dec 2019 02:41
[PATCH] gnu: elfutils: Update to 0.178
(address . guix-patches@gnu.org)(name . Mark Wielaard)(address . mark@klomp.org)
20191230014101.2425-1-mark@klomp.org
This introduces debuginfod support which requires a couple of new inputs.

* gnu/packages/elf.scm (elfutils): Update to 0.178
[native-inputs]: Add iproute and pkg-config.
[inputs]: Add cpio, libarchive, libmicrohttpd, libcurl, rpm and sqlite.
* gnu/packages/patches/elfutils-tests-ptrace.patch: Removed. Fixed upstream.
* gnu/packages/patches/elfutils-0.178-tests-build-id.patch: New. Patches
backported from upstream git.
---
gnu/packages/elf.scm | 26 ++-
.../elfutils-0.178-tests-build-id.patch | 159 ++++++++++++++++++
.../patches/elfutils-tests-ptrace.patch | 64 -------
3 files changed, 180 insertions(+), 69 deletions(-)
create mode 100644 gnu/packages/patches/elfutils-0.178-tests-build-id.patch
delete mode 100644 gnu/packages/patches/elfutils-tests-ptrace.patch

Toggle diff (307 lines)
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 75caa54296..169e8d1af8 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -6,6 +6,7 @@
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019 Mark Wielaard <mark@klomp.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -29,28 +30,35 @@
#:use-module (guix build-system gnu)
#:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
#:use-module (gnu packages)
+ #:use-module (gnu packages backup)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cpio)
+ #:use-module (gnu packages curl)
#:use-module (gnu packages documentation)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gnunet) ; for libmicrohttpd
+ #:use-module (gnu packages linux) ; for iproute
#:use-module (gnu packages m4)
+ #:use-module (gnu packages package-management) ; for rpm
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages sphinx)
+ #:use-module (gnu packages sqlite)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages xml))
(define-public elfutils
(package
(name "elfutils")
- (version "0.176")
+ (version "0.178")
(source (origin
(method url-fetch)
(uri (string-append "https://sourceware.org/elfutils/ftp/"
version "/elfutils-" version ".tar.bz2"))
(sha256
(base32
- "08qhrl4g6qqr4ga46jhh78y56a47p3msa5b2x1qhzbxhf71lfmzb"))
- (patches (search-patches "elfutils-tests-ptrace.patch"))))
+ "1wm0yfcih4rjwbg59qgm4jyqmbsdmk6z5qajljyw9sfljq7a1rri"))
+ (patches (search-patches "elfutils-0.178-tests-build-id.patch"))))
(build-system gnu-build-system)
;; Separate programs because that's usually not what elfutils users want,
@@ -81,8 +89,16 @@
(("run-backtrace-native.sh") ""))
#t)))))
- (native-inputs `(("m4" ,m4)))
- (inputs `(("zlib" ,zlib)))
+ (native-inputs `(("iproute", iproute) ;; needed in tests for ss
+ ("m4", m4)
+ ("pkg-config", pkg-config)))
+ (inputs `(("cpio", cpio)
+ ("libarchive", libarchive)
+ ("libmicrohttpd", libmicrohttpd)
+ ("libcurl", curl)
+ ("rpm", rpm)
+ ("sqlite", sqlite)
+ ("zlib" ,zlib)))
(home-page "https://sourceware.org/elfutils/")
(synopsis "Linker and ELF manipulation tools")
(description
diff --git a/gnu/packages/patches/elfutils-0.178-tests-build-id.patch b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
new file mode 100644
index 0000000000..ca9bd480b8
--- /dev/null
+++ b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
@@ -0,0 +1,159 @@
+commit 3f445279b60b16b6cb062921b74ae400344b4a68
+Author: Mark Wielaard <mark@klomp.org>
+Date: Thu Dec 5 14:22:56 2019 +0100
+
+ tests: Run elfcompress under testrun in run-elfclassify.sh
+
+ Otherwise elfcompress might run against the system libelf which might
+ be too old or missing.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/tests/run-elfclassify.sh b/tests/run-elfclassify.sh
+index 5a849bbd..fb14139d 100755
+--- a/tests/run-elfclassify.sh
++++ b/tests/run-elfclassify.sh
+@@ -267,7 +267,7 @@ $(echo $kmod_files | sed -e "s/ /\n/g")
+ EOF
+
+ echo "gnu compressed kmods are unstripped"
+-${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
+ testrun ${abs_top_builddir}/src/elfclassify --unstripped $kmod_files
+ testrun_compare ${abs_top_builddir}/src/elfclassify --unstripped --print $kmod_files <<EOF
+ $(echo $kmod_files | sed -e "s/ /\n/g")
+@@ -312,7 +312,7 @@ $(echo $debug_files | sed -e "s/ /\n/g")
+ EOF
+
+ echo "compress the debug sections and try again"
+-${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
+
+ echo "again unstripped"
+ testrun ${abs_top_builddir}/src/elfclassify --unstripped $debug_files
+
+commit eaffa79d52da7454044be53d28b525cebdb0093b
+Author: Mark Wielaard <mark@klomp.org>
+Date: Fri Dec 6 15:48:00 2019 +0100
+
+ tests: Run strip under testrun in run-debuginfod-find.sh
+
+ Otherwise strip might run against the system libelf which might be too
+ old or missing.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
+index 0ade03b7..6f92fbf1 100755
+--- a/tests/run-debuginfod-find.sh
++++ b/tests/run-debuginfod-find.sh
+@@ -102,7 +102,7 @@ export DEBUGINFOD_TIMEOUT=10
+ echo "int main() { return 0; }" > ${PWD}/prog.c
+ tempfiles prog.c
+ gcc -g -o prog ${PWD}/prog.c
+- ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
++testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+
+commit cf1b5fe170fa24f32871ef284ff2968c73816f98
+Author: Mark Wielaard <mark@klomp.org>
+Date: Fri Dec 6 17:20:00 2019 +0100
+
+ Make sure to always build with build-ids.
+
+ We really need build-ids for various things. If the system compiler
+ doesn't generate build-ids warn and generate them anyway for both the
+ binaries and the tests.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/configure.ac b/configure.ac
+index 5a2dc373..36a6b6c2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -197,6 +197,15 @@ if test "$ac_cv_zdefs" = "yes"; then
+ dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
+ fi
+
++# We really want build-ids. Warn and force generating them if gcc was
++# configure without --enable-linker-build-id
++AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
++AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
++if test "$ac_cv_buildid" = "no"; then
++ AC_MSG_WARN([compiler doesn't generate build-id by default])
++ LDFLAGS="$LDFLAGS -Wl,--build-id"
++fi
++
+ ZRELRO_LDFLAGS="-Wl,-z,relro"
+ AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
+ save_LDFLAGS="$LDFLAGS"
+diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
+index 6f92fbf1..6533996a 100755
+--- a/tests/run-debuginfod-find.sh
++++ b/tests/run-debuginfod-find.sh
+@@ -101,7 +101,7 @@ export DEBUGINFOD_TIMEOUT=10
+ # cannot find it without debuginfod.
+ echo "int main() { return 0; }" > ${PWD}/prog.c
+ tempfiles prog.c
+-gcc -g -o prog ${PWD}/prog.c
++gcc -Wl,--build-id -g -o prog ${PWD}/prog.c
+ testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+@@ -138,7 +138,7 @@ cmp $filename ${PWD}/prog.c
+ # Build another, non-stripped binary
+ echo "int main() { return 0; }" > ${PWD}/prog2.c
+ tempfiles prog2.c
+-gcc -g -o prog2 ${PWD}/prog2.c
++gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c
+ BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog2 | grep 'Build ID' | cut -d ' ' -f 7`
+
+--- a/configure 1970-01-01 01:00:00.000000000 +0100
++++ b/configure 2019-12-11 14:18:11.812008097 +0100
+@@ -5325,6 +5325,43 @@
+ dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
+ fi
+
++# We really want build-ids. Warn and force generating them if gcc was
++# configure without --enable-linker-build-id
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generates build-ids" >&5
++$as_echo_n "checking whether the compiler generates build-ids... " >&6; }
++if ${ac_cv_buildid+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no
++else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "unexpected compile failure
++See \`config.log' for more details" "$LINENO" 5; }
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buildid" >&5
++$as_echo "$ac_cv_buildid" >&6; }
++if test "$ac_cv_buildid" = "no"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler doesn't generate build-id by default" >&5
++$as_echo "$as_me: WARNING: compiler doesn't generate build-id by default" >&2;}
++ LDFLAGS="$LDFLAGS -Wl,--build-id"
++fi
++
+ ZRELRO_LDFLAGS="-Wl,-z,relro"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports $ZRELRO_LDFLAGS" >&5
+ $as_echo_n "checking whether gcc supports $ZRELRO_LDFLAGS... " >&6; }
diff --git a/gnu/packages/patches/elfutils-tests-ptrace.patch b/gnu/packages/patches/elfutils-tests-ptrace.patch
deleted file mode 100644
index cd46999063..0000000000
--- a/gnu/packages/patches/elfutils-tests-ptrace.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-This patch allows us to skip tests that require PTRACE_ATTACH in situations
-where PTRACE_ATTACH is only allowed when CAP_SYS_PTRACE is held (i.e., for
-root, by default.)
-
-Reported at <https://bugzilla.redhat.com/show_bug.cgi?id=1210966>.
-
---- elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:38:33.028556235 +0200
-+++ elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:46:15.012442185 +0200
-@@ -17,6 +17,15 @@
-
- . $srcdir/backtrace-subr.sh
-
-+# Check whether the Yama policy allows us to use PTRACE_ATTACH.
-+if [ -f /proc/sys/kernel/yama/ptrace_scope ]
-+then
-+ if [ `cat /proc/sys/kernel/yama/ptrace_scope` -ne 0 ]
-+ then
-+ exit 77
-+ fi
-+fi
-+
- tempfiles deleted deleted-lib.so
- cp -p ${abs_builddir}/deleted ${abs_builddir}/deleted-lib.so .
-
---- elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:40:20.633461110 +0200
-+++ elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:45:06.611866677 +0200
-@@ -23,6 +23,8 @@
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
- #include <unistd.h>
- #include ELFUTILS_HEADER(dwfl)
-
-@@ -68,6 +70,7 @@ module_callback (Dwfl_Module *mod, void
- int
- main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
- {
-+ static const char ptrace_scope_file[] = "/proc/sys/kernel/yama/ptrace_scope";
- static char *debuginfo_path;
- static const Dwfl_Callbacks proc_callbacks =
- {
-@@ -76,6 +79,20 @@ main (int argc __attribute__ ((unused)),
-
- .find_elf = dwfl_linux_proc_find_elf,
- };
-+
-+ /* Check whether the Yama policy allows us to use PTRACE_ATTACH. */
-+ int ptrace_scope = open (ptrace_scope_file, O_RDONLY);
-+ if (ptrace_scope >= 0)
-+ {
-+ char buf[10];
-+ int count = read (ptrace_scope, buf, sizeof buf);
-+ assert (count > 0);
-+ if (buf[0] != '0')
-+ /* We're not allowed, so skip this test. */
-+ return 77;
-+ close (ptrace_scope);
-+ }
-+
- Dwfl *dwfl = dwfl_begin (&proc_callbacks);
- if (dwfl == NULL)
- error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1));
--
2.20.1
B
B
Brett Gilio wrote on 30 Dec 2019 02:44
(name . Mark Wielaard)(address . mark@klomp.org)
aab04dc7-de8a-4214-b918-21749a921f7b@localhost
Dec 29, 2019 7:42:34 PM Mark Wielaard :

Toggle quote (326 lines)
> This introduces debuginfod support which requires a couple of new inputs.
>
> * gnu/packages/elf.scm (elfutils): Update to 0.178
> [native-inputs]: Add iproute and pkg-config.
> [inputs]: Add cpio, libarchive, libmicrohttpd, libcurl, rpm and sqlite.
> * gnu/packages/patches/elfutils-tests-ptrace.patch: Removed. Fixed upstream.
> * gnu/packages/patches/elfutils-0.178-tests-build-id.patch: New. Patches
> backported from upstream git.
> ---
> gnu/packages/elf.scm | 26 ++-
> .../elfutils-0.178-tests-build-id.patch | 159 ++++++++++++++++++
> .../patches/elfutils-tests-ptrace.patch | 64 -------
> 3 files changed, 180 insertions(+), 69 deletions(-)
> create mode 100644 gnu/packages/patches/elfutils-0.178-tests-build-id.patch
> delete mode 100644 gnu/packages/patches/elfutils-tests-ptrace.patch
>
> diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
> index 75caa54296..169e8d1af8 100644
> --- a/gnu/packages/elf.scm
> +++ b/gnu/packages/elf.scm
> @@ -6,6 +6,7 @@
> ;;; Copyright © 2017 Leo Famulari
> ;;; Copyright © 2018 Tobias Geerinckx-Rice
> ;;; Copyright © 2018 Marius Bakke
> +;;; Copyright © 2019 Mark Wielaard
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -29,28 +30,35 @@
> #:use-module (guix build-system gnu)
> #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
> #:use-module (gnu packages)
> + #:use-module (gnu packages backup)
> #:use-module (gnu packages compression)
> + #:use-module (gnu packages cpio)
> + #:use-module (gnu packages curl)
> #:use-module (gnu packages documentation)
> #:use-module (gnu packages gcc)
> + #:use-module (gnu packages gnunet) ; for libmicrohttpd
> + #:use-module (gnu packages linux) ; for iproute
> #:use-module (gnu packages m4)
> + #:use-module (gnu packages package-management) ; for rpm
> #:use-module (gnu packages pkg-config)
> #:use-module (gnu packages python)
> #:use-module (gnu packages sphinx)
> + #:use-module (gnu packages sqlite)
> #:use-module (gnu packages texinfo)
> #:use-module (gnu packages xml))
>
> (define-public elfutils
> (package
> (name "elfutils")
> - (version "0.176")
> + (version "0.178")
> (source (origin
> (method url-fetch)
> (uri (string-append "https://sourceware.org/elfutils/ftp/"
> version "/elfutils-" version ".tar.bz2"))
> (sha256
> (base32
> - "08qhrl4g6qqr4ga46jhh78y56a47p3msa5b2x1qhzbxhf71lfmzb"))
> - (patches (search-patches "elfutils-tests-ptrace.patch"))))
> + "1wm0yfcih4rjwbg59qgm4jyqmbsdmk6z5qajljyw9sfljq7a1rri"))
> + (patches (search-patches "elfutils-0.178-tests-build-id.patch"))))
> (build-system gnu-build-system)
>
> ;; Separate programs because that's usually not what elfutils users want,
> @@ -81,8 +89,16 @@
> (("run-backtrace-native.sh") ""))
> #t)))))
>
> - (native-inputs `(("m4" ,m4)))
> - (inputs `(("zlib" ,zlib)))
> + (native-inputs `(("iproute", iproute) ;; needed in tests for ss
> + ("m4", m4)
> + ("pkg-config", pkg-config)))
> + (inputs `(("cpio", cpio)
> + ("libarchive", libarchive)
> + ("libmicrohttpd", libmicrohttpd)
> + ("libcurl", curl)
> + ("rpm", rpm)
> + ("sqlite", sqlite)
> + ("zlib" ,zlib)))
> (home-page "https://sourceware.org/elfutils/")
> (synopsis "Linker and ELF manipulation tools")
> (description
> diff --git a/gnu/packages/patches/elfutils-0.178-tests-build-id.patch b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
> new file mode 100644
> index 0000000000..ca9bd480b8
> --- /dev/null
> +++ b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
> @@ -0,0 +1,159 @@
> +commit 3f445279b60b16b6cb062921b74ae400344b4a68
> +Author: Mark Wielaard
> +Date: Thu Dec 5 14:22:56 2019 +0100
> +
> + tests: Run elfcompress under testrun in run-elfclassify.sh
> +
> + Otherwise elfcompress might run against the system libelf which might
> + be too old or missing.
> +
> + Signed-off-by: Mark Wielaard
> +
> +diff --git a/tests/run-elfclassify.sh b/tests/run-elfclassify.sh
> +index 5a849bbd..fb14139d 100755
> +--- a/tests/run-elfclassify.sh
> ++++ b/tests/run-elfclassify.sh
> +@@ -267,7 +267,7 @@ $(echo $kmod_files | sed -e "s/ /\n/g")
> + EOF
> +
> + echo "gnu compressed kmods are unstripped"
> +-${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
> ++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
> + testrun ${abs_top_builddir}/src/elfclassify --unstripped $kmod_files
> + testrun_compare ${abs_top_builddir}/src/elfclassify --unstripped --print $kmod_files <
> + $(echo $kmod_files | sed -e "s/ /\n/g")
> +@@ -312,7 +312,7 @@ $(echo $debug_files | sed -e "s/ /\n/g")
> + EOF
> +
> + echo "compress the debug sections and try again"
> +-${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
> ++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
> +
> + echo "again unstripped"
> + testrun ${abs_top_builddir}/src/elfclassify --unstripped $debug_files
> +
> +commit eaffa79d52da7454044be53d28b525cebdb0093b
> +Author: Mark Wielaard
> +Date: Fri Dec 6 15:48:00 2019 +0100
> +
> + tests: Run strip under testrun in run-debuginfod-find.sh
> +
> + Otherwise strip might run against the system libelf which might be too
> + old or missing.
> +
> + Signed-off-by: Mark Wielaard
> +
> +diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
> +index 0ade03b7..6f92fbf1 100755
> +--- a/tests/run-debuginfod-find.sh
> ++++ b/tests/run-debuginfod-find.sh
> +@@ -102,7 +102,7 @@ export DEBUGINFOD_TIMEOUT=10
> + echo "int main() { return 0; }" > ${PWD}/prog.c
> + tempfiles prog.c
> + gcc -g -o prog ${PWD}/prog.c
> +- ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
> ++testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
> + BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
> + -a prog | grep 'Build ID' | cut -d ' ' -f 7`
> +
> +
> +commit cf1b5fe170fa24f32871ef284ff2968c73816f98
> +Author: Mark Wielaard
> +Date: Fri Dec 6 17:20:00 2019 +0100
> +
> + Make sure to always build with build-ids.
> +
> + We really need build-ids for various things. If the system compiler
> + doesn't generate build-ids warn and generate them anyway for both the
> + binaries and the tests.
> +
> + Signed-off-by: Mark Wielaard
> +
> +diff --git a/configure.ac b/configure.ac
> +index 5a2dc373..36a6b6c2 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -197,6 +197,15 @@ if test "$ac_cv_zdefs" = "yes"; then
> + dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
> + fi
> +
> ++# We really want build-ids. Warn and force generating them if gcc was
> ++# configure without --enable-linker-build-id
> ++AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
> ++AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
> ++if test "$ac_cv_buildid" = "no"; then
> ++ AC_MSG_WARN([compiler doesn't generate build-id by default])
> ++ LDFLAGS="$LDFLAGS -Wl,--build-id"
> ++fi
> ++
> + ZRELRO_LDFLAGS="-Wl,-z,relro"
> + AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
> + save_LDFLAGS="$LDFLAGS"
> +diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
> +index 6f92fbf1..6533996a 100755
> +--- a/tests/run-debuginfod-find.sh
> ++++ b/tests/run-debuginfod-find.sh
> +@@ -101,7 +101,7 @@ export DEBUGINFOD_TIMEOUT=10
> + # cannot find it without debuginfod.
> + echo "int main() { return 0; }" > ${PWD}/prog.c
> + tempfiles prog.c
> +-gcc -g -o prog ${PWD}/prog.c
> ++gcc -Wl,--build-id -g -o prog ${PWD}/prog.c
> + testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
> + BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
> + -a prog | grep 'Build ID' | cut -d ' ' -f 7`
> +@@ -138,7 +138,7 @@ cmp $filename ${PWD}/prog.c
> + # Build another, non-stripped binary
> + echo "int main() { return 0; }" > ${PWD}/prog2.c
> + tempfiles prog2.c
> +-gcc -g -o prog2 ${PWD}/prog2.c
> ++gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c
> + BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
> + -a prog2 | grep 'Build ID' | cut -d ' ' -f 7`
> +
> +--- a/configure 1970-01-01 01:00:00.000000000 +0100
> ++++ b/configure 2019-12-11 14:18:11.812008097 +0100
> +@@ -5325,6 +5325,43 @@
> + dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
> + fi
> +
> ++# We really want build-ids. Warn and force generating them if gcc was
> ++# configure without --enable-linker-build-id
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generates build-ids" >&5
> ++$as_echo_n "checking whether the compiler generates build-ids... " >&6; }
> ++if ${ac_cv_buildid+:} false; then :
> ++ $as_echo_n "(cached) " >&6
> ++else
> ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> ++/* end confdefs.h. */
> ++
> ++int
> ++main ()
> ++{
> ++
> ++ ;
> ++ return 0;
> ++}
> ++_ACEOF
> ++if ac_fn_c_try_link "$LINENO"; then :
> ++ ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no
> ++else
> ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> ++as_fn_error $? "unexpected compile failure
> ++See \`config.log' for more details" "$LINENO" 5; }
> ++fi
> ++rm -f core conftest.err conftest.$ac_objext \
> ++ conftest$ac_exeext conftest.$ac_ext
> ++fi
> ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buildid" >&5
> ++$as_echo "$ac_cv_buildid" >&6; }
> ++if test "$ac_cv_buildid" = "no"; then
> ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler doesn't generate build-id by default" >&5
> ++$as_echo "$as_me: WARNING: compiler doesn't generate build-id by default" >&2;}
> ++ LDFLAGS="$LDFLAGS -Wl,--build-id"
> ++fi
> ++
> + ZRELRO_LDFLAGS="-Wl,-z,relro"
> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports $ZRELRO_LDFLAGS" >&5
> + $as_echo_n "checking whether gcc supports $ZRELRO_LDFLAGS... " >&6; }
> diff --git a/gnu/packages/patches/elfutils-tests-ptrace.patch b/gnu/packages/patches/elfutils-tests-ptrace.patch
> deleted file mode 100644
> index cd46999063..0000000000
> --- a/gnu/packages/patches/elfutils-tests-ptrace.patch
> +++ /dev/null
> @@ -1,64 +0,0 @@
> -This patch allows us to skip tests that require PTRACE_ATTACH in situations
> -where PTRACE_ATTACH is only allowed when CAP_SYS_PTRACE is held (i.e., for
> -root, by default.)
> -
> -Reported at .
> -
> ---- elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:38:33.028556235 +0200
> -+++ elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:46:15.012442185 +0200
> -@@ -17,6 +17,15 @@
> -
> - . $srcdir/backtrace-subr.sh
> -
> -+# Check whether the Yama policy allows us to use PTRACE_ATTACH.
> -+if [ -f /proc/sys/kernel/yama/ptrace_scope ]
> -+then
> -+ if [ `cat /proc/sys/kernel/yama/ptrace_scope` -ne 0 ]
> -+ then
> -+ exit 77
> -+ fi
> -+fi
> -+
> - tempfiles deleted deleted-lib.so
> - cp -p ${abs_builddir}/deleted ${abs_builddir}/deleted-lib.so .
> -
> ---- elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:40:20.633461110 +0200
> -+++ elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:45:06.611866677 +0200
> -@@ -23,6 +23,8 @@
> - #include
> - #include
> - #include
> -+#include
> -+#include
> - #include
> - #include ELFUTILS_HEADER(dwfl)
> -
> -@@ -68,6 +70,7 @@ module_callback (Dwfl_Module *mod, void
> - int
> - main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
> - {
> -+ static const char ptrace_scope_file[] = "/proc/sys/kernel/yama/ptrace_scope";
> - static char *debuginfo_path;
> - static const Dwfl_Callbacks proc_callbacks =
> - {
> -@@ -76,6 +79,20 @@ main (int argc __attribute__ ((unused)),
> -
> - .find_elf = dwfl_linux_proc_find_elf,
> - };
> -+
> -+ /* Check whether the Yama policy allows us to use PTRACE_ATTACH. */
> -+ int ptrace_scope = open (ptrace_scope_file, O_RDONLY);
> -+ if (ptrace_scope >= 0)
> -+ {
> -+ char buf[10];
> -+ int count = read (ptrace_scope, buf, sizeof buf);
> -+ assert (count > 0);
> -+ if (buf[0] != '0')
> -+ /* We're not allowed, so skip this test. */
> -+ return 77;
> -+ close (ptrace_scope);
> -+ }
> -+
> - Dwfl *dwfl = dwfl_begin (&proc_callbacks);
> - if (dwfl == NULL)
> - error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1));
> --
> 2.20.1
>


Hi Mark! Funny you submitted this, I was working on the same package about an hour ago. We must be reading each other's minds. You got significantly farther than I did. One thing I did do differently was that I extended the list of licenses to include the ones mentioned in the comment.

I'll look at your patch, and hopefully this will be ready for core-updates. Thank you :)

--
Brett M. Gilio
GNU Guix, Contributor | GNU Project, Webmaster
[DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]
< brettg@gnu.org [mailto:brettg@gnu.org] > < brettg@posteo.net [mailto:brettg@posteo.net] >
M
M
Mark Wielaard wrote on 30 Dec 2019 03:04
(name . Brett Gilio)(address . brettg@gnu.org)(address . 38803@debbugs.gnu.org)
20191230020433.GA2695@wildebeest.org
Hi Brett,

On Mon, Dec 30, 2019 at 01:44:21AM +0000, Brett Gilio wrote:
Toggle quote (4 lines)
> Funny you submitted this, I was working on the same package
> about an hour ago. We must be reading each other's minds. You got
> significantly farther than I did.

Thanks for looking at it. This is my first guix patch, so please be
gentle. I do maintain elfutils upstream, so I did have a little
advantage picking some upstream patches which hadn't gone into the
release yet.

Toggle quote (5 lines)
> One thing I did do differently was that I extended the list of
> licenses to include the ones mentioned in the comment. I'll look at
> your patch, and hopefully this will be ready for core-updates. Thank
> you :)

Good you mention the licenses. I forgot to update them licenses. 0.178
introduces some new documentation (man pages), one of them is under
the GFDL (without invariant sections).

Also I am not sure how precisely we should mention the dual
gplv2+/lgplv3+ license for the "out" output libraries and the gplv3+
license for the "bin" output (and where the gfdl should be added).

Thanks,

Mark
M
M
Mark Wielaard wrote on 12 Jan 2020 21:39
[PATCH] gnu: elfutils: Update to 0.178
(address . 38803@debbugs.gnu.org)
20200112203939.20141-1-mark@klomp.org
This introduces debuginfod support which requires a couple of new inputs.

* gnu/local.ml (dist_patch_DATA): Remove elfutils-tests-ptrace.patch.
Add elfutils-0.178-tests-build-id.patch.
* gnu/packages/elf.scm (elfutils): Update to 0.178
[native-inputs]: Add iproute and pkg-config.
[inputs]: Add cpio, libarchive, libmicrohttpd, libcurl, rpm and sqlite.
[synopsis]: Updated.
[description]: Updated.
[license]: List all licenses used.
* gnu/packages/patches/elfutils-tests-ptrace.patch: Removed. Fixed upstream.
* gnu/packages/patches/elfutils-0.178-tests-build-id.patch: New. Patches
backported from upstream git.
---

This updated patch adds the licenses list. Updates the synopsis and
description of the package. And adds/removes the patches from gnu/local.ml.

gnu/local.mk | 2 +-
gnu/packages/elf.scm | 51 ++++--
.../elfutils-0.178-tests-build-id.patch | 159 ++++++++++++++++++
.../patches/elfutils-tests-ptrace.patch | 64 -------
4 files changed, 198 insertions(+), 78 deletions(-)
create mode 100644 gnu/packages/patches/elfutils-0.178-tests-build-id.patch
delete mode 100644 gnu/packages/patches/elfutils-tests-ptrace.patch

Toggle diff (354 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 33cf439870..6574d2aa78 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -813,7 +813,7 @@ dist_patch_DATA = \
%D%/packages/patches/dstat-skip-devices-without-io.patch \
%D%/packages/patches/dvd+rw-tools-add-include.patch \
%D%/packages/patches/einstein-build.patch \
- %D%/packages/patches/elfutils-tests-ptrace.patch \
+ %D%/packages/patches/elfutils-0.178-tests-build-id.patch \
%D%/packages/patches/elixir-path-length.patch \
%D%/packages/patches/elm-compiler-disable-reactor.patch \
%D%/packages/patches/elm-compiler-fix-map-key.patch \
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 75caa54296..9f38c519aa 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -6,6 +6,7 @@
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019 Mark Wielaard <mark@klomp.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -27,36 +28,44 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
- #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
+ #:use-module ((guix licenses) #:select (gpl2+ gpl3+ lgpl3+ lgpl2.0+ fdl1.3+))
#:use-module (gnu packages)
+ #:use-module (gnu packages backup)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages cpio)
+ #:use-module (gnu packages curl)
#:use-module (gnu packages documentation)
#:use-module (gnu packages gcc)
+ #:use-module (gnu packages gnunet) ; for libmicrohttpd
+ #:use-module (gnu packages linux) ; for iproute
#:use-module (gnu packages m4)
+ #:use-module (gnu packages package-management) ; for rpm
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages sphinx)
+ #:use-module (gnu packages sqlite)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages xml))
(define-public elfutils
(package
(name "elfutils")
- (version "0.176")
+ (version "0.178")
(source (origin
(method url-fetch)
(uri (string-append "https://sourceware.org/elfutils/ftp/"
version "/elfutils-" version ".tar.bz2"))
(sha256
(base32
- "08qhrl4g6qqr4ga46jhh78y56a47p3msa5b2x1qhzbxhf71lfmzb"))
- (patches (search-patches "elfutils-tests-ptrace.patch"))))
+ "1wm0yfcih4rjwbg59qgm4jyqmbsdmk6z5qajljyw9sfljq7a1rri"))
+ (patches (search-patches "elfutils-0.178-tests-build-id.patch"))))
(build-system gnu-build-system)
;; Separate programs because that's usually not what elfutils users want,
- ;; and because they duplicate what Binutils provides.
+ ;; and because they duplicate what Binutils provides (but are named
+ ;; differently, using the eu- prefix and can be installed in parallel).
(outputs '("out" ; libelf.so, elfutils/*.h, etc.
- "bin")) ; ld, nm, objdump, etc.
+ "bin")) ; eu-nm, eu-objdump, etc.
(arguments
;; Programs don't have libelf.so in their RUNPATH and libraries don't
@@ -81,17 +90,33 @@
(("run-backtrace-native.sh") ""))
#t)))))
- (native-inputs `(("m4" ,m4)))
- (inputs `(("zlib" ,zlib)))
+ (native-inputs `(("iproute", iproute) ;; needed in tests for ss
+ ("m4", m4)
+ ("pkg-config", pkg-config)))
+ (inputs `(("cpio", cpio)
+ ("libarchive", libarchive)
+ ("libmicrohttpd", libmicrohttpd)
+ ("libcurl", curl)
+ ("rpm", rpm)
+ ("sqlite", sqlite)
+ ("zlib" ,zlib)))
(home-page "https://sourceware.org/elfutils/")
- (synopsis "Linker and ELF manipulation tools")
+ (synopsis "Collection of utilities and libraries to handle ELF files and
+DWARF data")
(description
- "This package provides command-line tools to manipulate binaries in the
-Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
-@command{ar}, @command{objdump}, @command{addr2line}, and more.")
+ "A collection of utilities and libraries to read, create and modify ELF
+binary files, find and handle DWARF debug data, symbols, thread state and
+stacktraces for processes and core files on GNU/Linux. Includes libelf for
+manipulating ELF files, libdw for inspecting DWARF data and process state and
+utilities like eu-stack (to show backtraces), eu-nm (for listing symbols from
+object files), eu-size (for listing the section sizes of an object or archive
+file), eu-strip (for discarding symbols), eu-readelf (to see the raw ELF file
+structures), eu-elflint (to check for well-formed ELF files) and
+eu-elfcompress (to compress or decompress ELF sections).")
;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
- (license lgpl3+)))
+ ;; Some documentation is under the GFDL1.3+, without invariant texts.
+ (license (list lgpl3+ gpl2+ gpl3+ fdl1.3+))))
(define-public libabigail
(package
diff --git a/gnu/packages/patches/elfutils-0.178-tests-build-id.patch b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
new file mode 100644
index 0000000000..ca9bd480b8
--- /dev/null
+++ b/gnu/packages/patches/elfutils-0.178-tests-build-id.patch
@@ -0,0 +1,159 @@
+commit 3f445279b60b16b6cb062921b74ae400344b4a68
+Author: Mark Wielaard <mark@klomp.org>
+Date: Thu Dec 5 14:22:56 2019 +0100
+
+ tests: Run elfcompress under testrun in run-elfclassify.sh
+
+ Otherwise elfcompress might run against the system libelf which might
+ be too old or missing.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/tests/run-elfclassify.sh b/tests/run-elfclassify.sh
+index 5a849bbd..fb14139d 100755
+--- a/tests/run-elfclassify.sh
++++ b/tests/run-elfclassify.sh
+@@ -267,7 +267,7 @@ $(echo $kmod_files | sed -e "s/ /\n/g")
+ EOF
+
+ echo "gnu compressed kmods are unstripped"
+-${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $kmod_files
+ testrun ${abs_top_builddir}/src/elfclassify --unstripped $kmod_files
+ testrun_compare ${abs_top_builddir}/src/elfclassify --unstripped --print $kmod_files <<EOF
+ $(echo $kmod_files | sed -e "s/ /\n/g")
+@@ -312,7 +312,7 @@ $(echo $debug_files | sed -e "s/ /\n/g")
+ EOF
+
+ echo "compress the debug sections and try again"
+-${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
++testrun ${abs_top_builddir}/src/elfcompress -t gnu --force $debug_files
+
+ echo "again unstripped"
+ testrun ${abs_top_builddir}/src/elfclassify --unstripped $debug_files
+
+commit eaffa79d52da7454044be53d28b525cebdb0093b
+Author: Mark Wielaard <mark@klomp.org>
+Date: Fri Dec 6 15:48:00 2019 +0100
+
+ tests: Run strip under testrun in run-debuginfod-find.sh
+
+ Otherwise strip might run against the system libelf which might be too
+ old or missing.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
+index 0ade03b7..6f92fbf1 100755
+--- a/tests/run-debuginfod-find.sh
++++ b/tests/run-debuginfod-find.sh
+@@ -102,7 +102,7 @@ export DEBUGINFOD_TIMEOUT=10
+ echo "int main() { return 0; }" > ${PWD}/prog.c
+ tempfiles prog.c
+ gcc -g -o prog ${PWD}/prog.c
+- ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
++testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+
+
+commit cf1b5fe170fa24f32871ef284ff2968c73816f98
+Author: Mark Wielaard <mark@klomp.org>
+Date: Fri Dec 6 17:20:00 2019 +0100
+
+ Make sure to always build with build-ids.
+
+ We really need build-ids for various things. If the system compiler
+ doesn't generate build-ids warn and generate them anyway for both the
+ binaries and the tests.
+
+ Signed-off-by: Mark Wielaard <mark@klomp.org>
+
+diff --git a/configure.ac b/configure.ac
+index 5a2dc373..36a6b6c2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -197,6 +197,15 @@ if test "$ac_cv_zdefs" = "yes"; then
+ dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
+ fi
+
++# We really want build-ids. Warn and force generating them if gcc was
++# configure without --enable-linker-build-id
++AC_CACHE_CHECK([whether the compiler generates build-ids], ac_cv_buildid, [dnl
++AC_LINK_IFELSE([AC_LANG_PROGRAM()],[ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no],AC_MSG_FAILURE([unexpected compile failure]))])
++if test "$ac_cv_buildid" = "no"; then
++ AC_MSG_WARN([compiler doesn't generate build-id by default])
++ LDFLAGS="$LDFLAGS -Wl,--build-id"
++fi
++
+ ZRELRO_LDFLAGS="-Wl,-z,relro"
+ AC_CACHE_CHECK([whether gcc supports $ZRELRO_LDFLAGS], ac_cv_zrelro, [dnl
+ save_LDFLAGS="$LDFLAGS"
+diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh
+index 6f92fbf1..6533996a 100755
+--- a/tests/run-debuginfod-find.sh
++++ b/tests/run-debuginfod-find.sh
+@@ -101,7 +101,7 @@ export DEBUGINFOD_TIMEOUT=10
+ # cannot find it without debuginfod.
+ echo "int main() { return 0; }" > ${PWD}/prog.c
+ tempfiles prog.c
+-gcc -g -o prog ${PWD}/prog.c
++gcc -Wl,--build-id -g -o prog ${PWD}/prog.c
+ testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog
+ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog | grep 'Build ID' | cut -d ' ' -f 7`
+@@ -138,7 +138,7 @@ cmp $filename ${PWD}/prog.c
+ # Build another, non-stripped binary
+ echo "int main() { return 0; }" > ${PWD}/prog2.c
+ tempfiles prog2.c
+-gcc -g -o prog2 ${PWD}/prog2.c
++gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c
+ BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \
+ -a prog2 | grep 'Build ID' | cut -d ' ' -f 7`
+
+--- a/configure 1970-01-01 01:00:00.000000000 +0100
++++ b/configure 2019-12-11 14:18:11.812008097 +0100
+@@ -5325,6 +5325,43 @@
+ dso_LDFLAGS="$dso_LDFLAGS $ZDEFS_LDFLAGS"
+ fi
+
++# We really want build-ids. Warn and force generating them if gcc was
++# configure without --enable-linker-build-id
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generates build-ids" >&5
++$as_echo_n "checking whether the compiler generates build-ids... " >&6; }
++if ${ac_cv_buildid+:} false; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_buildid=yes; readelf -n conftest$EXEEXT | grep -q NT_GNU_BUILD_ID || ac_cv_buildid=no
++else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "unexpected compile failure
++See \`config.log' for more details" "$LINENO" 5; }
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buildid" >&5
++$as_echo "$ac_cv_buildid" >&6; }
++if test "$ac_cv_buildid" = "no"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compiler doesn't generate build-id by default" >&5
++$as_echo "$as_me: WARNING: compiler doesn't generate build-id by default" >&2;}
++ LDFLAGS="$LDFLAGS -Wl,--build-id"
++fi
++
+ ZRELRO_LDFLAGS="-Wl,-z,relro"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc supports $ZRELRO_LDFLAGS" >&5
+ $as_echo_n "checking whether gcc supports $ZRELRO_LDFLAGS... " >&6; }
diff --git a/gnu/packages/patches/elfutils-tests-ptrace.patch b/gnu/packages/patches/elfutils-tests-ptrace.patch
deleted file mode 100644
index cd46999063..0000000000
--- a/gnu/packages/patches/elfutils-tests-ptrace.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-This patch allows us to skip tests that require PTRACE_ATTACH in situations
-where PTRACE_ATTACH is only allowed when CAP_SYS_PTRACE is held (i.e., for
-root, by default.)
-
-Reported at <https://bugzilla.redhat.com/show_bug.cgi?id=1210966>.
-
---- elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:38:33.028556235 +0200
-+++ elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:46:15.012442185 +0200
-@@ -17,6 +17,15 @@
-
- . $srcdir/backtrace-subr.sh
-
-+# Check whether the Yama policy allows us to use PTRACE_ATTACH.
-+if [ -f /proc/sys/kernel/yama/ptrace_scope ]
-+then
-+ if [ `cat /proc/sys/kernel/yama/ptrace_scope` -ne 0 ]
-+ then
-+ exit 77
-+ fi
-+fi
-+
- tempfiles deleted deleted-lib.so
- cp -p ${abs_builddir}/deleted ${abs_builddir}/deleted-lib.so .
-
---- elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:40:20.633461110 +0200
-+++ elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:45:06.611866677 +0200
-@@ -23,6 +23,8 @@
- #include <stdio.h>
- #include <string.h>
- #include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
- #include <unistd.h>
- #include ELFUTILS_HEADER(dwfl)
-
-@@ -68,6 +70,7 @@ module_callback (Dwfl_Module *mod, void
- int
- main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
- {
-+ static const char ptrace_scope_file[] = "/proc/sys/kernel/yama/ptrace_scope";
- static char *debuginfo_path;
- static const Dwfl_Callbacks proc_callbacks =
- {
-@@ -76,6 +79,20 @@ main (int argc __attribute__ ((unused)),
-
- .find_elf = dwfl_linux_proc_find_elf,
- };
-+
-+ /* Check whether the Yama policy allows us to use PTRACE_ATTACH. */
-+ int ptrace_scope = open (ptrace_scope_file, O_RDONLY);
-+ if (ptrace_scope >= 0)
-+ {
-+ char buf[10];
-+ int count = read (ptrace_scope, buf, sizeof buf);
-+ assert (count > 0);
-+ if (buf[0] != '0')
-+ /* We're not allowed, so skip this test. */
-+ return 77;
-+ close (ptrace_scope);
-+ }
-+
- Dwfl *dwfl = dwfl_begin (&proc_callbacks);
- if (dwfl == NULL)
- error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1));
--
2.18.1
M
M
Marius Bakke wrote on 12 Jan 2020 21:54
87a76sxun7.fsf@devup.no
Mark,

Mark Wielaard <mark@klomp.org> writes:

Toggle quote (14 lines)
> This introduces debuginfod support which requires a couple of new inputs.
>
> * gnu/local.ml (dist_patch_DATA): Remove elfutils-tests-ptrace.patch.
> Add elfutils-0.178-tests-build-id.patch.
> * gnu/packages/elf.scm (elfutils): Update to 0.178
> [native-inputs]: Add iproute and pkg-config.
> [inputs]: Add cpio, libarchive, libmicrohttpd, libcurl, rpm and sqlite.
> [synopsis]: Updated.
> [description]: Updated.
> [license]: List all licenses used.
> * gnu/packages/patches/elfutils-tests-ptrace.patch: Removed. Fixed upstream.
> * gnu/packages/patches/elfutils-0.178-tests-build-id.patch: New. Patches
> backported from upstream git.

Thank you for these improvements. Could you submit the synopsis and
description update separately?

I worry about all the new inputs. This patch effectively makes us
unable to update all these inputs outside of the 'staging' or
'core-updates' cycles.

What is the difference in 'guix size elfutils' with and without this
patch?

Would it make sense to have a separate 'elfutils-minimal' for use in
Mesa, and expose the debuginfod-enabled variant as a separate package?
We could "hide" the minimal variant so that end users get the expected
package.

Also, for the patches, please add links to upstream commits in the patch
files, see some of the other patches for examples. I would also prefer
if they were separate files, seeing as the two commits do different
things.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl4bh5wACgkQoqBt8qM6
VPpYXwf+P3breyhEaHhx2aWYfLq7G0UAEaog3D77HlHXV3GLu2hv6IGN7Ta29e5B
V/cqrdJVWB/tVg9pitYCe/vkvPYpNCDTsQI8DPIdhFq+b/vwFEm5aj7N+vGB42pw
BNq5m6//RKL+KdJg8eviEBdluAofrI6FepBBfejyXE2u94X5hsJnUhdqXrSVK0Q7
F7M7H8IeOrZCp0cs3df2WqyIHlOj35VPM8wp8eo7jN/uB3LqMFDh/vghjfyvQF7B
zH3/lmQkMl3Wpt2n5erHeQPVxXMvx7zq1++gQTf0+vHGxDUyQnhRLBFWa8wLu+am
GB8hiZ8m+8wUNqGO8sPOLExdMk1n6Q==
=pg9c
-----END PGP SIGNATURE-----

M
M
Mark Wielaard wrote on 13 Jan 2020 01:03
(name . Marius Bakke)(address . mbakke@fastmail.com)
20200113000345.GA2825@wildebeest.org
Attachment: file
From 2f75d90d59542fdc31bb9cc4d477eb90c7986e99 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sun, 12 Jan 2020 23:54:18 +0100
Subject: [PATCH 1/2] gnu: elfutils: Update synopsis and description

* gnu/packages/elf.scm (elfutils): Update summaries.
[synopsis]: Updated.
[description]: Updated.
---
gnu/packages/elf.scm | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)

Toggle diff (53 lines)
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 75caa54296..01bf0fcf89 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -6,6 +6,7 @@
;;; Copyright � 2017 Leo Famulari <leo@famulari.name>
;;; Copyright � 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright � 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright � 2020 Mark Wielaard <mark@klomp.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -54,9 +55,10 @@
(build-system gnu-build-system)
;; Separate programs because that's usually not what elfutils users want,
- ;; and because they duplicate what Binutils provides.
+ ;; and because they duplicate what Binutils proAvides (but are named
+ ;; differently, using the eu- prefix and can be installed in parallel).
(outputs '("out" ; libelf.so, elfutils/*.h, etc.
- "bin")) ; ld, nm, objdump, etc.
+ "bin")) ; eu-nm, eu-objdump, etc.
(arguments
;; Programs don't have libelf.so in their RUNPATH and libraries don't
@@ -84,11 +86,21 @@
(native-inputs `(("m4" ,m4)))
(inputs `(("zlib" ,zlib)))
(home-page "https://sourceware.org/elfutils/")
- (synopsis "Linker and ELF manipulation tools")
+ (synopsis "Collection of utilities and libraries to handle ELF files and
+DWARF data")
(description
- "This package provides command-line tools to manipulate binaries in the
-Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
-@command{ar}, @command{objdump}, @command{addr2line}, and more.")
+ "A collection of utilities and libraries to read, create and modify
+Executable and Linkable Format (@dfn{ELF}) binary files, find and handle
+Debugging With Arbitrary Record Formats (@dfn{DWARF}) debug data, symbols,
+thread state and stacktraces for processes and core files on GNU/Linux.
+Includes @file{libelf} for manipulating ELF files, @file{libdw} for inspecting
+DWARF data and process state and utilities like @command{eu-stack} (to show
+backtraces), @command{eu-nm} (for listing symbols from object files),
+@command{eu-size} (for listing the section sizes of an object or archive
+file), @command{eu-strip} (for discarding symbols), @command{eu-readelf} (to
+see the raw ELF file structures), @command{eu-elflint} (to check for
+well-formed ELF files), @command{eu-elfcompress} (to compress or decompress
+ELF sections), and more.")
;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
(license lgpl3+)))
--
2.20.1
M
M
Marius Bakke wrote on 13 Jan 2020 23:26
(name . Mark Wielaard)(address . mark@klomp.org)
87a76rvvpz.fsf@devup.no
Mark Wielaard <mark@klomp.org> writes:

Toggle quote (24 lines)
> Hi,
>
> On Sun, Jan 12, 2020 at 09:54:52PM +0100, Marius Bakke wrote:
>> Mark Wielaard <mark@klomp.org> writes:
>>
>> > This introduces debuginfod support which requires a couple of new inputs.
>> >
>> > * gnu/local.ml (dist_patch_DATA): Remove elfutils-tests-ptrace.patch.
>> > Add elfutils-0.178-tests-build-id.patch.
>> > * gnu/packages/elf.scm (elfutils): Update to 0.178
>> > [native-inputs]: Add iproute and pkg-config.
>> > [inputs]: Add cpio, libarchive, libmicrohttpd, libcurl, rpm and sqlite.
>> > [synopsis]: Updated.
>> > [description]: Updated.
>> > [license]: List all licenses used.
>> > * gnu/packages/patches/elfutils-tests-ptrace.patch: Removed. Fixed upstream.
>> > * gnu/packages/patches/elfutils-0.178-tests-build-id.patch: New. Patches
>> > backported from upstream git.
>>
>> Thank you for these improvements. Could you submit the synopsis and
>> description update separately?
>
> Sure. Split patch as attached.

Thanks! The first patch did not apply for me, can you rebase on
'master'?

Also, for the description, please use full sentences. I.e. keep the
'This package provides a collection ...' and 'This includes ...' instead
of 'A collection ...' and 'Includes ...'.

Toggle quote (8 lines)
>> I worry about all the new inputs. This patch effectively makes us
>> unable to update all these inputs outside of the 'staging' or
>> 'core-updates' cycles.
>
> I am not sure I follow. This is my first patch. It simply adds some
> inputs needed for a new client/server program added upstream in the
> new version.

OK, thanks for clarifying.

Toggle quote (49 lines)
>> What is the difference in 'guix size elfutils' with and without this
>> patch?
>
> $ guix size elfutils
> store item total self
> /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29 37.4 35.8 47.2%
> /gnu/store/2plcy91lypnbbysb18ymnhaw3zwk8pg1-gcc-7.4.0-lib 70.0 32.6 43.0%
> /gnu/store/w0c5bcygj73chk2f6h0g8zhzpm80p1a5-elfutils-0.176 75.8 3.2 4.2%
> /gnu/store/cp72ncw4prnsga65n3pzll07hpsg524f-bash-static-5.0.7 1.6 1.6 2.1%
> /gnu/store/29jhbbg1hf557x8j53f9sxd9imlmf02a-bash-minimal-5.0.7 38.4 1.0 1.4%
> /gnu/store/lbip9isk25isymvnb159l115xnacb5j8-xz-5.2.4 72.0 0.9 1.2%
> /gnu/store/l86azr7r3p5631wj3kk329jl1y1mpjgy-bzip2-1.0.6 71.5 0.4 0.5%
> /gnu/store/qx7p7hiq90mi7r78hcr9cyskccy2j4bg-zlib-1.2.11 70.2 0.2 0.3%
> total: 75.8 MiB
>
> $ ./pre-inst-env guix size elfutils
> store item total self
> /gnu/store/1mkkv2caiqbdbbd256c4dirfi4kwsacv-guile-2.2.6 123.9 44.4 22.7%
> /gnu/store/352q0n1rrymfdk49mfr0cym3d8svz824-icu4c-64.2 108.6 37.5 19.2%
> /gnu/store/ahqgl4h89xqj695lgqvsaf6zh2nhy4pj-glibc-2.29 37.4 35.8 18.3%
> /gnu/store/2plcy91lypnbbysb18ymnhaw3zwk8pg1-gcc-7.4.0-lib 70.0 32.6 16.7%
> /gnu/store/k2m4q2av9hw73hw2jx6qrxqdyh855398-openssl-1.1.1c 76.4 6.4 3.3%
> /gnu/store/hfvz18igm68p5yz7z4asn6ph363blp1z-gnutls-3.6.9 130.6 5.1 2.6%
> /gnu/store/slvjkd3brr6n554r2gk9djsjpm7l7xbs-bdb-5.3.28 74.4 4.4 2.2%
> /gnu/store/4rs159kgsa0l1svi5vbvn86in7z28bpl-mit-krb5-1.17 75.3 4.3 2.2%
> /gnu/store/bjxd9jzc560d6i3i35f5yy5mljk0ib6m-openldap-2.4.47 188.5 3.7 1.9%
> /gnu/store/w8qacdh5fqrzn08wz3n43d0czi00c4c6-elfutils-0.178 195.8 3.6 1.9%
> /gnu/store/y7qk8raalgvdnxcglvxa320cfxrjk1x6-gmp-6.1.2 72.6 2.6 1.3%
> /gnu/store/nsikjxykcaqa0zjpfmkqd569bngbv5nl-libunistring-0.9.10 72.4 2.4 1.2%
> /gnu/store/cp72ncw4prnsga65n3pzll07hpsg524f-bash-static-5.0.7 1.6 1.6 0.8%
> /gnu/store/i1cqaixp79vd3qwnyj1ll10pq6skm2wk-pkg-config-0.29.2 71.3 1.3 0.7%
> /gnu/store/3xs3dnc28p9fi8in7hkfcdx20incrdvq-libgc-7.6.12 71.9 1.2 0.6%
> /gnu/store/29jhbbg1hf557x8j53f9sxd9imlmf02a-bash-minimal-5.0.7 38.4 1.0 0.5%
> /gnu/store/4m8dlhrzis07787xznx73ang35c3lly1-curl-7.65.3 190.8 1.0 0.5%
> /gnu/store/lbip9isk25isymvnb159l115xnacb5j8-xz-5.2.4 72.0 0.9 0.5%
> /gnu/store/lvnybsygfd6gya6xbdv48g72lb0iqqzx-nettle-3.5.1 73.5 0.9 0.5%
> /gnu/store/f8aljw2qhv3d1br9czn8v5afbgfdrxkg-cyrus-sasl-2.1.27 83.3 0.9 0.4%
> /gnu/store/2792g0vczwsxnvqm9ja5g9hwvbrjlc4w-gdbm-1.18.1 70.7 0.7 0.4%
> /gnu/store/bvpnq3alwbavyk4663j4p9x9hakxwc4d-libatomic-ops-7.6.10 0.7 0.7 0.4%
> /gnu/store/33f8qhxa69dmd43yqdx3wq1b2hqjddgb-curl-7.65.3-doc 0.7 0.7 0.3%
> /gnu/store/7gabmw9siqrz79slpi1f8i90v3w1638x-libidn2-2.2.0 72.8 0.5 0.2%
> /gnu/store/l86azr7r3p5631wj3kk329jl1y1mpjgy-bzip2-1.0.6 71.5 0.4 0.2%
> /gnu/store/zavdh2z5mwkakjf1v98x43w1hzjzxkhl-nghttp2-1.39.1-lib 70.4 0.4 0.2%
> /gnu/store/qx7p7hiq90mi7r78hcr9cyskccy2j4bg-zlib-1.2.11 70.2 0.2 0.1%
> /gnu/store/lwz8fygpmmsw6h8vrllr56p7ssi5qx33-libtasn1-4.14 70.2 0.2 0.1%
> /gnu/store/zasz52va238yyaq68rjm8ljwl4ikij4p-libltdl-2.4.6 70.2 0.2 0.1%
> /gnu/store/ain96mrdwqd4s9shdd3s7m4syp5icdx5-libffi-3.2.1 70.1 0.1 0.1%
> total: 195.8 MiB

Oof, that is a *huge* difference. Do you know where the extra
references come from? I.e. could we move libelf.so to its own output to
lose some of the runtime dependencies?

Previously 'mesa' was using our other 'libelf' package, but I switched
it to elfutils in commit 9b3b4c05a06bb8ef22350706b66043b5e93d8d66
because that's what "everyone else" do. Perhaps we should go back to
that, thoughts? Then we don't have to worry as much about the size of
elfutils.

Toggle quote (18 lines)
>> Would it make sense to have a separate 'elfutils-minimal' for use in
>> Mesa, and expose the debuginfod-enabled variant as a separate package?
>> We could "hide" the minimal variant so that end users get the expected
>> package.
>
> Sure. Other distros split elfutils into multiple packages. For example fedora has:
>
> %package libs
> %package devel
> %package devel-static
> %package libelf
> %package libelf-devel
> %package libelf-devel-static
> %package default-yama-scope
> %package debuginfod-client
> %package debuginfod-client-devel
> %package debuginfod

Right. It makes sense to do something similar for Guix if many packages
end up needing elfutils at runtime.

Toggle quote (5 lines)
> With the main elfutils package containing all binaries except for
> debuginfod-find (the client) and debuginfod (the server). With
> appropriate requires/recommends (I don't yet know how those work in
> guix).

Guix does not have a notion of 'recommends'. Each package is built with
an exact set of inputs, and each build output is scanned for references
to the inputs which are then stored as runtime dependencies.

There are talks about "parameterized packages", where you could apply
some vetted transformation to the build procedure, but advertising
optional runtime dependencies is an open question.

Toggle quote (9 lines)
>> Also, for the patches, please add links to upstream commits in the patch
>> files, see some of the other patches for examples. I would also prefer
>> if they were separate files, seeing as the two commits do different
>> things.
>
> OK split in two. The tests patches are together, because they do the
> same thing. I am not sure an upstream git commit id link is better
> than simply the commit id, but added if it is more convenient.

As someone who frequently chases upstream repositories for patches, I
certainly appreciate not having to figure out where their VCS is
hosted. Sourceware does exceptionally well in that regard, but not
everyone knows it. So, thanks for adding the links. :-)

And sorry for all the difficult questions! It is a great first patch
really, but it also has a heavy impact (see guix refresh -l elfutils).
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl4c7qgACgkQoqBt8qM6
VPoNQgf8DhYai8CS0WczG+1tnajKz7/CMseXdJJJPL2qAcG6aSdsA2GIFcWmKAXV
ALiUXWycVYK+kMe0N+SEeDAgPKYXvkdXLf5ZT2Le60IXUa4RepLIJ2BPnCZkwVbB
5T3Cmd6K//Gip4AAXv+iiOYIAZcOz+GSBXdYnavo2MRGVe5SxLZ70H/GZAEXG2z5
z8/tNbRyo3cyVAjO+r5dtncvLo1oJ89p2l2kOzUhYRMnm/9x7SNclmzlWdJ+K3BH
wMnVgzySIwyhMPl0Pl4Wxc0e/ldIANJJ70tXVx6ncQ4poPOYxU4aQ1714kJiLcyp
FGLxt5CPwWsZi5xFSvcroDUKmNAVkw==
=SdMj
-----END PGP SIGNATURE-----

M
M
Mark Wielaard wrote on 31 Jan 2020 13:43
(name . Marius Bakke)(address . mbakke@fastmail.com)
20200131124321.GM3319@wildebeest.org
Attachment: file
From a686a10451f600889a20b9ca8b08c25253b349f4 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sun, 12 Jan 2020 23:54:18 +0100
Subject: [PATCH] gnu: elfutils: Update synopsis and description

* gnu/packages/elf.scm (elfutils): Update summaries.
[synopsis]: Updated.
[description]: Updated.
---
gnu/packages/elf.scm | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)

Toggle diff (53 lines)
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 75caa54296..01bf0fcf89 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -6,6 +6,7 @@
;;; Copyright � 2017 Leo Famulari <leo@famulari.name>
;;; Copyright � 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright � 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright � 2020 Mark Wielaard <mark@klomp.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -54,9 +55,10 @@
(build-system gnu-build-system)
;; Separate programs because that's usually not what elfutils users want,
- ;; and because they duplicate what Binutils provides.
+ ;; and because they duplicate what Binutils proAvides (but are named
+ ;; differently, using the eu- prefix and can be installed in parallel).
(outputs '("out" ; libelf.so, elfutils/*.h, etc.
- "bin")) ; ld, nm, objdump, etc.
+ "bin")) ; eu-nm, eu-objdump, etc.
(arguments
;; Programs don't have libelf.so in their RUNPATH and libraries don't
@@ -84,11 +86,21 @@
(native-inputs `(("m4" ,m4)))
(inputs `(("zlib" ,zlib)))
(home-page "https://sourceware.org/elfutils/")
- (synopsis "Linker and ELF manipulation tools")
+ (synopsis "Collection of utilities and libraries to handle ELF files and
+DWARF data")
(description
- "This package provides command-line tools to manipulate binaries in the
-Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
-@command{ar}, @command{objdump}, @command{addr2line}, and more.")
+ "A collection of utilities and libraries to read, create and modify
+Executable and Linkable Format (@dfn{ELF}) binary files, find and handle
+Debugging With Arbitrary Record Formats (@dfn{DWARF}) debug data, symbols,
+thread state and stacktraces for processes and core files on GNU/Linux.
+Includes @file{libelf} for manipulating ELF files, @file{libdw} for inspecting
+DWARF data and process state and utilities like @command{eu-stack} (to show
+backtraces), @command{eu-nm} (for listing symbols from object files),
+@command{eu-size} (for listing the section sizes of an object or archive
+file), @command{eu-strip} (for discarding symbols), @command{eu-readelf} (to
+see the raw ELF file structures), @command{eu-elflint} (to check for
+well-formed ELF files), @command{eu-elfcompress} (to compress or decompress
+ELF sections), and more.")
;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
(license lgpl3+)))
--
2.20.1
M
M
Marius Bakke wrote on 31 Jan 2020 16:49
(name . Mark Wielaard)(address . mark@klomp.org)
87v9ormxrb.fsf@devup.no
Hello!

Mark Wielaard <mark@klomp.org> writes:

Toggle quote (6 lines)
>> Also, for the description, please use full sentences. I.e. keep the
>> 'This package provides a collection ...' and 'This includes ...' instead
>> of 'A collection ...' and 'Includes ...'.
>
> OK. Done. See attached patch.

Sorry for the nit-picks, but the description still starts
'mid-sentence', i.e. "A collection ..." instead of "elfutils is a
collection ...".

If you think it's better this way I'm fine with that, it's just that
elfutils will "stand out" compared to its neighbours at

Toggle quote (13 lines)
> Yes. There is are a new network client and server integrated with
> elfutils in 0.178. A new client library debuginfod-client.so which
> depends on libcurl, which pulls in most of the other stuff. elfutils
> libdw.so has a dependency on this, but it is dlopened when
> available. So it isn't a hard dependency. In other distros
> debuginfod-client is its own elfutils subpackage which is recommended,
> but not required. It allows libdw.so to pull in separate debuginfo
> files from the network when not locally installed (and an server URL
> is configured). Then there is also a little server based on
> libmicrohttpd and sqlite which is responsible for the other part of
> the new inputs. Other distros put this also in a separate elfutils
> subpackage.

Thanks for the detailed clarification. Re: dlopen, we typically patch
in the absolute file names to avoid surprises on foreign distributions
(and getting deterministic results in general), so we should probably do
it here too.

Toggle quote (12 lines)
>> Previously 'mesa' was using our other 'libelf' package, but I switched
>> it to elfutils in commit 9b3b4c05a06bb8ef22350706b66043b5e93d8d66
>> because that's what "everyone else" do. Perhaps we should go back to
>> that, thoughts? Then we don't have to worry as much about the size of
>> elfutils.
>
> I would get rid of the other libelf. It has been dead upstream for
> years. And last year the home page and upstream completely
> disappeared. Replacing libelf with elfutils-libelf for guix globally
> would make a lot of sense to me. I believe that is what most distros
> do these days.

Sounds good. Can you submit a patch that replaces libelf with elfutils
for all packages except GCC?

Toggle quote (10 lines)
> I can do that. But it wouldn't change the inputs. The runtime
> dependencies of libelf on its own would be reduced to just zlib and
> gcclibs. The other libraries (without debuginfod-client) would just
> add a couple more compression libraries as runtime dependencies
> (although you realy want debuginfod-client also around so that it can
> be dlopened). Same for the binaries minus debuginfod-find and
> debuginfod. The debuginfod subpackage would be the only thing with
> runtime dependencies on everything (including libmicrohttpd and
> sqlite).

I think a single :bin output with all the executables is fine.

Regarding separate :libelf output, I suppose just copying libelf.so*
should do the trick. Maybe we need to adjust some pkg-config files too?
I can look into this if you like.

Toggle quote (6 lines)
> I'll go ask around here how to create a minimal package to see if that
> helps. Although it feels a bit odd. Upstream doesn't really support
> building just a subset of the package (there are some dependencies
> between the libraries and binaries which require things to be build
> together).

If we are to use this libelf for 'gcc', we'll need to find a way to
avoid the extraneous inputs to avoid complicating the bootstrap graph
too much. We can always ignore the build system altogether and roll
our own command line for the GCC variant though.

Thanks,
Marius
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl40TJgACgkQoqBt8qM6
VPq39Af/Rlb1NwdCYfDusXW5zByYqNLHxlPzzKPu16nFof+D/ippzLIefooR31ru
qt5/6mXmqK2E6wzrg7GsklWX5FhPPu1GO8mI+jI8urLaEkllI9dvPUI65zzAB/nt
jRElHoRdrg8AZVO4Ba7RBxxvAqQASkx96RwHKceqOHUIXzbqBX/eXN3nfBbJD/9o
yldvV7uCfHWYGYU6ygibo+I3bY77x8hDwT7u+XptEtkSosqOwDx0n2SS3J7bbJpH
Gnegst6IEonwLJLDnjKLbe+Pm6hQzkwpi6J6kV7I2oRv45kyXzyoGRp33v5aqTuN
Rs7FEzDVrtoTgxC3wb5rhoabqsuDig==
=PXyK
-----END PGP SIGNATURE-----

M
M
Mark Wielaard wrote on 31 Jan 2020 17:55
(name . Marius Bakke)(address . mbakke@fastmail.com)
20200131165505.GN3319@wildebeest.org
On Fri, Jan 31, 2020 at 04:49:44PM +0100, Marius Bakke wrote:
Toggle quote (16 lines)
> Mark Wielaard <mark@klomp.org> writes:
>
> >> Also, for the description, please use full sentences. I.e. keep the
> >> 'This package provides a collection ...' and 'This includes ...' instead
> >> of 'A collection ...' and 'Includes ...'.
> >
> > OK. Done. See attached patch.
>
> Sorry for the nit-picks, but the description still starts
> 'mid-sentence', i.e. "A collection ..." instead of "elfutils is a
> collection ...".
>
> If you think it's better this way I'm fine with that, it's just that
> elfutils will "stand out" compared to its neighbours at
> e.g. <https://guix.gnu.org/packages/E/page/3/>. :-)

OK, OK. Lets see if I can at least get the patch that does only update
the descriptions correct. New version attached.

Cheers,

Mark
From 6a9f7efd89f6617766640b3e2f7a232977bf98a4 Mon Sep 17 00:00:00 2001
From: Mark Wielaard <mark@klomp.org>
Date: Sun, 12 Jan 2020 23:54:18 +0100
Subject: [PATCH] gnu: elfutils: Update synopsis and description

* gnu/packages/elf.scm (elfutils): Update summaries.
[synopsis]: Updated.
[description]: Updated.
---
gnu/packages/elf.scm | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)

Toggle diff (53 lines)
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 75caa54296..22d03fba84 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -6,6 +6,7 @@
;;; Copyright � 2017 Leo Famulari <leo@famulari.name>
;;; Copyright � 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright � 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright � 2020 Mark Wielaard <mark@klomp.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -54,9 +55,10 @@
(build-system gnu-build-system)
;; Separate programs because that's usually not what elfutils users want,
- ;; and because they duplicate what Binutils provides.
+ ;; and because they duplicate what Binutils proAvides (but are named
+ ;; differently, using the eu- prefix and can be installed in parallel).
(outputs '("out" ; libelf.so, elfutils/*.h, etc.
- "bin")) ; ld, nm, objdump, etc.
+ "bin")) ; eu-nm, eu-objdump, etc.
(arguments
;; Programs don't have libelf.so in their RUNPATH and libraries don't
@@ -84,11 +86,21 @@
(native-inputs `(("m4" ,m4)))
(inputs `(("zlib" ,zlib)))
(home-page "https://sourceware.org/elfutils/")
- (synopsis "Linker and ELF manipulation tools")
+ (synopsis "Collection of utilities and libraries to handle ELF files and
+DWARF data")
(description
- "This package provides command-line tools to manipulate binaries in the
-Executable and Linkable Format (@dfn{ELF}). This includes @command{ld},
-@command{ar}, @command{objdump}, @command{addr2line}, and more.")
+ "Elfutils is a collection of utilities and libraries to read, create and
+modify Executable and Linkable Format (@dfn{ELF}) binary files, find and
+handle Debugging With Arbitrary Record Formats (@dfn{DWARF}) debug data,
+symbols, thread state and stacktraces for processes and core files on
+GNU/Linux. Elfutils includes @file{libelf} for manipulating ELF files,
+@file{libdw} for inspecting DWARF data and process state and utilities like
+@command{eu-stack} (to show backtraces), @command{eu-nm} (for listing symbols
+from object files), @command{eu-size} (for listing the section sizes of an
+object or archive file), @command{eu-strip} (for discarding symbols),
+@command{eu-readelf} (to see the raw ELF file structures),
+@command{eu-elflint} (to check for well-formed ELF files),
+@command{eu-elfcompress} (to compress or decompress ELF sections), and more.")
;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
(license lgpl3+)))
--
2.24.1
M
M
Marius Bakke wrote on 5 Feb 2020 21:41
(name . Mark Wielaard)(address . mark@klomp.org)
87d0as6a29.fsf@devup.no
Mark Wielaard <mark@klomp.org> writes:

Toggle quote (3 lines)
> OK, OK. Lets see if I can at least get the patch that does only update
> the descriptions correct. New version attached.

Thanks! I fixed the comment typo and committed. The new description
should show up on https://guix.gnu.org/packages/E/page/3/ shortly. :-)

Note that I had to convert the patch from ISO-8859-14 to UTF-8 in order
to make git accept it:

$ iconv -f ISO-8859-14 -t UTF-8 0001-gnu-elfutils-Update-synopsis-and-description.patch | git am -s

Not sure what happened, perhaps it got mangled by your MUA?

For the 0.178 update, perhaps we can add the new version as a separate
variable until we figure out how to isolate libelf.so? That can be done
on the 'master' branch as long as we don't change the current 'elfutils'
package.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl47KI4ACgkQoqBt8qM6
VPpzJAf9EAYUGbIvBR59pKcdoIbZsO6kjDcO/7KE1Sr39qoBTtCyV7YUZ1zf4IX7
sIEImffjJq2Cp6Xw27g99CN1WNLmbEpLh3xabLvZ0QYqV8Yvfh+3Pyot3aGbNuHD
dANXGv9qQhMXI6FwprI2YMU8Eap5BXAJ7SES5tmvPa1vtU5cE2X6GAdiUHDNM49q
71T6s3cS5MibBWc9iq2YqXw6lbKMTgfWpp8AEpIDc0JvCANSY8SSS3Dc+x3YNilt
WV4k5esWy7H+OoG+6cdaCaDtJIS7S/WKhCSI2S/PSIx/6GBfHYrIdcSS5yyibn/M
MKie0AmCjd/WtUa3d4zTEcOy87PNaQ==
=64lx
-----END PGP SIGNATURE-----

M
M
Mark Wielaard wrote on 6 Feb 2020 12:04
(name . Marius Bakke)(address . mbakke@fastmail.com)
58f284a926a93f9e079075ed0f7020ef63a03859.camel@klomp.org
Hi Marius,

On Wed, 2020-02-05 at 21:41 +0100, Marius Bakke wrote:
Toggle quote (8 lines)
> Mark Wielaard <mark@klomp.org> writes:
>
> > OK, OK. Lets see if I can at least get the patch that does only update
> > the descriptions correct. New version attached.
>
> Thanks! I fixed the comment typo and committed. The new description
> should show up on <https://guix.gnu.org/packages/E/page/3/> shortly. :-)

Awesome. Looks good. Thanks.

Toggle quote (7 lines)
> Note that I had to convert the patch from ISO-8859-14 to UTF-8 in order
> to make git accept it:
>
> $ iconv -f ISO-8859-14 -t UTF-8 0001-gnu-elfutils-Update-synopsis-and-description.patch | git am -s
>
> Not sure what happened, perhaps it got mangled by your MUA?

That is indeed really odd. I definitely didn't want to encode any
Celtic languages (I do speak Dutch, but not Gaelic or Breton).

Toggle quote (5 lines)
> For the 0.178 update, perhaps we can add the new version as a separate
> variable until we figure out how to isolate libelf.so? That can be done
> on the 'master' branch as long as we don't change the current 'elfutils'
> package.

I am not sure I completely understand your proposal. When you say
'separate variable', Do you mean we would (define-public elfutils-0.178
...)?

And changing the default libelf implementation should be a separate bug
I assume.

BTW. Upstream is now debating some of the dependencies for other
distros that have bootstrapping requirements too:

Cheers,

Mark
M
M
Marius Bakke wrote on 6 Feb 2020 12:36
(name . Mark Wielaard)(address . mark@klomp.org)
87ftfo3q2f.fsf@devup.no
Mark Wielaard <mark@klomp.org> writes:

Toggle quote (9 lines)
>> For the 0.178 update, perhaps we can add the new version as a separate
>> variable until we figure out how to isolate libelf.so? That can be done
>> on the 'master' branch as long as we don't change the current 'elfutils'
>> package.
>
> I am not sure I completely understand your proposal. When you say
> 'separate variable', Do you mean we would (define-public elfutils-0.178
> ...)?

Yes. See e.g 'gdb/next' or 'help2man/latest' for some examples of
inheritance.

Toggle quote (3 lines)
> And changing the default libelf implementation should be a separate bug
> I assume.

Indeed. I suggest we defer that until we have 0.178+ in properly.

Toggle quote (4 lines)
> BTW. Upstream is now debating some of the dependencies for other
> distros that have bootstrapping requirements too:
> https://sourceware.org/bugzilla/show_bug.cgi?id=25509

Good to know we're not alone!
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl47+kgACgkQoqBt8qM6
VPqz+gf+K7s0EU9CoXzpB3neoaUnt283Z81Y3+TVgA66YzCr0CZaL5zFmWZWqQr7
w1loR+7u/TJy0dSaHok/rXoNr3l4S9Zvl/+8q/wScd6muwogMxLJfta4/VdtFjEl
7swS4ArSdbCqbvLAnTJkzcqYK6KaIhIofyEAfCJmUc5AVsGucZtBSX3NmBaQI1WD
UPBmd0WFzU6Dt6yQQF3dTnxjwkm2uOnX+C1qoNeQBXAt9R8yPuBrV+8n5kRwWz1B
09bSy49ULLKC3to1A8uwE2CXJHlhqA6+Xv4FsZ5wajlZTGuHsMaoUls7KEbNuGmV
csMJUiTzH9Q61Mhywc68Sv6T2eYInQ==
=rB/U
-----END PGP SIGNATURE-----

M
M
Mark Wielaard wrote on 6 Feb 2020 14:23
(name . Marius Bakke)(address . mbakke@fastmail.com)
2b6c210935f4f6833cbd944dd27e31a64645b5dd.camel@klomp.org
On Thu, 2020-02-06 at 12:04 +0100, Mark Wielaard wrote:
Toggle quote (4 lines)
> BTW. Upstream is now debating some of the dependencies for other
> distros that have bootstrapping requirements too:
> https://sourceware.org/bugzilla/show_bug.cgi?id=25509

It would be nice if someone could comment on that bug who better
understands the bootstrap requirements for the guix toolchain. Note
that this is relevant to other packages too because we are very eager
to improve the debugability of the whole toolchain and so have
submitted patches to various core packages to support debuginfod-client
like binutils, gdb, annocheck, etc. Which means they all eventually
depend on everything libcurl depends on:
M
M
Marius Bakke wrote on 6 Feb 2020 15:31
(name . Mark Wielaard)(address . mark@klomp.org)
87d0ar4wji.fsf@devup.no
Mark Wielaard <mark@klomp.org> writes:

Toggle quote (14 lines)
> On Thu, 2020-02-06 at 12:04 +0100, Mark Wielaard wrote:
>> BTW. Upstream is now debating some of the dependencies for other
>> distros that have bootstrapping requirements too:
>> https://sourceware.org/bugzilla/show_bug.cgi?id=25509
>
> It would be nice if someone could comment on that bug who better
> understands the bootstrap requirements for the guix toolchain. Note
> that this is relevant to other packages too because we are very eager
> to improve the debugability of the whole toolchain and so have
> submitted patches to various core packages to support debuginfod-client
> like binutils, gdb, annocheck, etc. Which means they all eventually
> depend on everything libcurl depends on:
> https://sourceware.org/elfutils/Debuginfod.html

I think that the Guix toolchain (the one used in package builds) should
stay the same (no debuginfod support), and that we should add
debuginfod-enabled variants that gets included when users install
'binutils' or 'gcc-toolchain' manually. How does that sound?

So our only concern will be how to use Elfutils' libelf.so for GCC,
which should be straightforward with an "elfutils-minimal" variant that
does not pull in the debuginfo dependencies.
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEu7At3yzq9qgNHeZDoqBt8qM6VPoFAl48I0EACgkQoqBt8qM6
VPqFLAf/Q/5FDKveqSVLs7ZAGkbONYOIUM7OdgsMQJLHc8eVnkhdWgQCJqLnUOLF
3WuMb3ROy8sAVf6m4s3cGQw5x7miyd7JcM6kr0PcNewY104mq4kfxvWmnz014qld
uwLOYXhF9IKhQ4xMaH8DNNpeHKCwhGHRm0qGB2Eug6cQf1t4HTTl0QQgljnEft37
ZRNbW6FUcmQudXMqGSnGHNB2VAPjZYkXLGJCAxspnD+VQZ3i32CWHZfzo5VtVTQG
W4tQjvHl+j6E/VY19wkcfU/pRcKbJtC4453TwqvgSEO83Ox79Nd3jnAYvFW8AOfL
c17gazaKj7OTHiRk2Nk5XMBiELBXDQ==
=3IFB
-----END PGP SIGNATURE-----

V
V
Vagrant Cascadian wrote on 2 Sep 2023 20:39
87zg24mnbv.fsf@wireframe
retitle 38803 gnu: elfutils: Enable debuginfod
thanks

On 2019-12-30, Mark Wielaard wrote:
Toggle quote (4 lines)
> This introduces debuginfod support which requires a couple of new inputs.
>
> * gnu/packages/elf.scm (elfutils): Update to 0.178

Newer versions of elfutils have been included:

1a97959b22668af999ebc79c3ddc1664420eadd4 gnu: elfutils: Update to 0.187.

The outstanding issue from this bug is to enable the debuginfod server,
which is referred to in the comments for the current elfutils
package. Retitled appropriately.

live well,
vagrant
-----BEGIN PGP SIGNATURE-----

iHUEARYKAB0WIQRlgHNhO/zFx+LkXUXcUY/If5cWqgUCZPOBZAAKCRDcUY/If5cW
qvU/AP0VZnobvGxuTPb0nl4nVsEOpKW3FJynu5T0seLyhlEQxwEAqQKrjAy5MtZl
JX+2HUPMFOW/myPZ+K4VSGtiI3Ynqgg=
=9KN0
-----END PGP SIGNATURE-----

?