* bug#54728: Valgrind not working out of the box due to stripped ld.so
@ 2022-04-05 15:01 Denis 'GNUtoo' Carikli
2022-04-07 16:40 ` Ludovic Courtès
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-05 15:01 UTC (permalink / raw)
To: 54728
[-- Attachment #1: Type: text/plain, Size: 1087 bytes --]
Hi,
The fact that Valgrind doesn't work out of the box seems to already be
known[1] but I didn't find any bugreports on it.
The workaround[1] mentioned is extremely useful but it's far from ideal.
For instance if you have a software that uses Valgrind in its tests
(for instance in 'make check') you end up having to add something like
that in the native-inputs to refer to the right glibc debug symbols
directory:
> ("libc:debug", (@@ (gnu packages commencement) glibc-final) "debug")
In my case I'm using guix and a guix.scm for testing the build of a
library I maintain and I also wanted to automatically check for memory
safety.
I was helped a lot on #guix to solve the issue I had, and during that
mjw suggested to fix the root issue by keeping "the .symtab in ld.so"
without the full debug info (to save space) and if I understood right
mjw is a valgrind contributor.
According to mjw that could be done with strip -g or strip -d or -strip
-S.
Reference:
----------
[1]https://lists.gnu.org/archive/html/help-guix/2022-03/msg00036.html
Denis.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: Valgrind not working out of the box due to stripped ld.so
2022-04-05 15:01 bug#54728: Valgrind not working out of the box due to stripped ld.so Denis 'GNUtoo' Carikli
@ 2022-04-07 16:40 ` Ludovic Courtès
2022-04-14 23:26 ` Denis 'GNUtoo' Carikli
0 siblings, 1 reply; 15+ messages in thread
From: Ludovic Courtès @ 2022-04-07 16:40 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli; +Cc: 54728
Hi,
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> skribis:
> The fact that Valgrind doesn't work out of the box seems to already be
> known[1] but I didn't find any bugreports on it.
Indeed. Fixed in 6b6fb78724869c03394d0e6dc2f50f0777f6d467 on
‘core-updates’ as discussed with Mark (mjw) a couple of days ago on IRC.
Unfortunately, until that branch is merge (most likely a few months from
now), we’ll have to use the workaround you mentioned.
Alternatively, maybe we could temporarily patch the ‘valgrind’ package
such that it has ‘--extra-debuginfo-path=…’ by default. Would you like
to give it a try?
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: Valgrind not working out of the box due to stripped ld.so
2022-04-07 16:40 ` Ludovic Courtès
@ 2022-04-14 23:26 ` Denis 'GNUtoo' Carikli
2022-04-14 23:30 ` bug#54728: [PATCH 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-14 23:26 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 54728
[-- Attachment #1.1: Type: text/plain, Size: 1899 bytes --]
On Thu, 07 Apr 2022 18:40:08 +0200
Ludovic Courtès <ludo@gnu.org> wrote:
> Hi,
Hi,
> Unfortunately, until that branch is merge (most likely a few months
> from now), we’ll have to use the workaround you mentioned.
>
> Alternatively, maybe we could temporarily patch the ‘valgrind’ package
> such that it has ‘--extra-debuginfo-path=…’ by default. Would you
> like to give it a try?
That is a good idea. As I need it anyway[1], I've actually worked on
doing that through patching Valgrind source code to use better defaults
than /usr/lib/debug but there is a couple of things I'm unsure with my
patch:
- First it works fine in 'guix shell -C' but it still fails
in packages. Maybe I didn't patch the right Valgrind?
- Then for some reasons guix style messes up the whitespaces with the
following command:
$ ./pre-inst-env guix style -e \
'(@@ (gnu packages valgrind) valgrind/interactive)';
So I did the style by hand instead, so it might contain mistakes.
- And finally I'm not comfortable enough with Valgrind or how it's been
used in Guix. As I understand from the comment in the first Valgrind
being defined in valgrind.scm, it seems to be depended on by a lot of
packages. In addition I've not looked why there is a
valgrind/interactive or how it works yet, so someone would need to
double check my patch carefuly.
I've attached a libsamsung-ipc.scm file as I used that for testing my
patch (in addition of just running Valgrind in a Guix shell container
and while building this package it fails.
I'll send the patch as a response to this mail.
References:
-----------
[1] At the end of the day I need it to work in both standalone mode and
also in package builds as I use a guix.scm to run various
compilation and runtime for libsamsung-ipc before pushing patches
to the main branch.
Denis.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: libsamsung-ipc.scm --]
[-- Type: text/x-scheme, Size: 4364 bytes --]
;;; Copyright © 2022 Denis Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; This file is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License.
;;; If not, see <http://www.gnu.org/licenses/>.
;;;
;;; This file is meant to test valgrind support in Guix.
;;;
;;; The libsamsung-ipc library is not ready to be packaged in general
;;; purpose distributions as right now as it requires either a vendor
;;; kernel or the compbinaison of a recent upstream kernel with on top
;;; work in progress out of tree modem drivers, out of tree
;;; libsamsung-ipc code to support theses drivers and kernel patches
;;; to support the nonfree bootloader of the Galaxy SIII
;;; (GT-I9300). Beside the library, the tools are of very limited use
;;; beside testing or reverse engineering.
(use-modules
(ice-9 popen)
(ice-9 rdelim)
(sxml ssax input-parse)
((guix licenses) #:prefix license:)
(guix build-system android-ndk)
(guix build-system gnu)
(guix gexp)
(guix git-download)
(guix packages)
(gnu packages android)
(gnu packages autotools)
(gnu packages commencement)
(gnu packages curl)
(gnu packages disk)
(gnu packages linux)
(gnu packages llvm)
(gnu packages pkg-config)
(gnu packages python)
(gnu packages python-xyz)
(gnu packages tls)
(gnu packages valgrind))
(define-public libsamsung-ipc
(package
(name "libsamsung-ipc")
;; we use a work in progress version that has support for --with-valgrind-tests
(version (git-version "0.0" "HEAD" "4d3062db15783c188d6952f7b9b794b65cd93f66"))
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://git.replicant.us/replicant-next/hardware_replicant_libsamsung-ipc")
(commit "4d3062db15783c188d6952f7b9b794b65cd93f66")))
(sha256
(base32 "1jzv9z5rkgcx394akf2svja586z54vhd46pvdmzm3ilmspnvjcdx"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(native-inputs
`(("autoreconf" ,autoconf)
("aclocal" ,automake)
("libcurl" ,curl)
("ddrescue", ddrescue)
;; ("libc:debug", (@@ (gnu packages commencement) glibc-final) "debug")
("libtool" ,libtool)
("pkgconfig" ,pkg-config)
("python" ,python)
("python-sh" ,python-sh)
("valgrind" ,valgrind)))
(inputs
`(("openssl" ,openssl)))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-before 'build 'patch-python
(lambda _
(substitute* (find-files "." ".*\\.py$")
(("/usr/bin/env python") (which "python3")))
#t))
(add-after 'patch-python 'fix-valgrind
(lambda _
(substitute* (find-files "." ".*\\.py$")
(("'--leak-check=full',")
"'-v', '--leak-check=full',"))
#t))
;; (add-after 'patch-python 'fix-valgrind
;; (lambda _
;; (substitute* (find-files "." ".*\\.py$")
;; (("'--leak-check=full',")
;; (string-append
;; "'--leak-check=full', '--extra-debuginfo-path="
;; (assoc-ref %build-inputs "libc:debug")
;; "/lib/debug',")))
;; #t))
)
#:configure-flags
(list "--enable-debug"
"--enable-valgrind-tests")))
(synopsis "libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol")
(description
"libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol,
found in many Samsung smartphones and tablets.")
(home-page "https://www.replicant.us")
(license license:gpl2+)))
(list libsamsung-ipc)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 1/2] gnu: valgrind: impots: sort imports alphabetically
2022-04-14 23:26 ` Denis 'GNUtoo' Carikli
@ 2022-04-14 23:30 ` Denis 'GNUtoo' Carikli
2022-04-14 23:30 ` bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-14 23:30 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: Denis 'GNUtoo' Carikli, 54728
* gnu/packages/valgrind.scm: sort imports alphabetically
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
---
gnu/packages/valgrind.scm | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 1cdc0f3b71..6648f17dfa 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2016, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2022 Denis Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,13 +23,13 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages valgrind)
- #:use-module (guix packages)
- #:use-module (guix download)
#:use-module (guix build-system gnu)
+ #:use-module (guix download)
#:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (gnu packages)
#:use-module (gnu packages gdb)
- #:use-module (gnu packages perl)
- #:use-module (gnu packages))
+ #:use-module (gnu packages perl))
(define-public valgrind
(package
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-14 23:30 ` bug#54728: [PATCH 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
@ 2022-04-14 23:30 ` Denis 'GNUtoo' Carikli
2022-04-15 16:21 ` Ludovic Courtès
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-14 23:30 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: Denis 'GNUtoo' Carikli, 54728
* gnu/packages/valgrind.scm (valgrind/interactive)[native-inputs]:
Add libc:debug
[arguments]: Add patch-default-debuginfo-path phase
* gnu/packages/commencement.scm (glibc-final): Export variable.
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
---
gnu/packages/commencement.scm | 2 +-
gnu/packages/valgrind.scm | 66 +++++++++++++++++++++++++++++++----
2 files changed, 61 insertions(+), 7 deletions(-)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e8b47fbeab..c2de02411c 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3381,7 +3381,7 @@ (define gettext-boot0
(("^PROGRAMS =.*$")
"PROGRAMS =\n")))))))))
-(define glibc-final
+(define-public glibc-final
;; The final glibc, which embeds the statically-linked Bash built above.
;; Use 'package/inherit' so we get the 'replacement' of 'glibc', if any.
(package/inherit
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 6648f17dfa..a09721071d 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -25,8 +25,10 @@
(define-module (gnu packages valgrind)
#:use-module (guix build-system gnu)
#:use-module (guix download)
+ #:use-module (guix gexp)
#:use-module (guix licenses)
#:use-module (guix packages)
+ #:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages gdb)
#:use-module (gnu packages perl))
@@ -91,12 +93,64 @@ (define-public valgrind
(properties '((hidden? . #t)))))
(define-public valgrind/interactive
- (package/inherit
- valgrind
- (inputs
- ;; GDB is needed to provide a sane default for `--db-command'.
- `(("gdb" ,gdb)))
- (properties '())))
+ (package/inherit valgrind
+ (inputs
+ ;; GDB is needed to provide a sane default for `--db-command'.
+ `(("gdb" ,gdb)
+ ("libc:debug" ,(@@ (gnu packages commencement) glibc-final) "debug")))
+ (arguments
+ (substitute-keyword-arguments (package-arguments valgrind)
+ ((#:phases those-phases #~%standard-phases)
+ #~(let* ((those-phases #$those-phases)
+ (unpack (assoc-ref those-phases 'unpack)))
+ (modify-phases those-phases
+ (add-before 'build 'patch-default-debuginfo-path
+ (lambda _
+ ;; This helps Valgrind find the debug symbols of ld.so.
+ ;; Without it, Valgrind does not work in a Guix shell
+ ;; container and cannot be used as-is during packages tests
+ ;; phases
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c"
+ "docs/xml/manual-core-adv.xml"
+ "docs/xml/manual-core.xml")
+ (("/usr/lib/debug")
+ (string-append
+ (assoc-ref %build-inputs "libc:debug")
+ "/lib/debug")))
+ ;; We also need to account for the bigger path in
+ ;; the malloc-ed variables
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c")
+ (("VG_\\(strlen\\)\\(buildid\\) \\+ 33")
+ (string-append
+ "VG_(strlen)(buildid) + "
+ (number->string
+ (+ (string-length
+ (string-append
+ (assoc-ref %build-inputs "libc:debug")
+ "/lib/debug"))
+ (string-length "/.build-id//.debug")
+ 1)))))
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c")
+ ((string-append
+ "VG_\\(strlen\\)\\(objdir\\) \\+ "
+ "VG_\\(strlen\\)\\(debugname\\) \\+ 64")
+ (string-append
+ "VG_(strlen)(objdir) + VG_(strlen)(debugname) + "
+ (number->string
+ (+ (string-length
+ (string-append
+ (assoc-ref
+ %build-inputs
+ "libc:debug")
+ "/lib/debug"))
+ (string-length
+ "/usr/lib/debug")
+ 1)))))
+ #t)))))))
+ (properties '())))
(define-public valgrind-3.18
(package
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-14 23:30 ` bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
@ 2022-04-15 16:21 ` Ludovic Courtès
2022-04-25 16:39 ` Denis 'GNUtoo' Carikli
0 siblings, 1 reply; 15+ messages in thread
From: Ludovic Courtès @ 2022-04-15 16:21 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli; +Cc: 54728
Hello!
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> skribis:
> (define-public valgrind/interactive
> - (package/inherit
> - valgrind
> - (inputs
> - ;; GDB is needed to provide a sane default for `--db-command'.
> - `(("gdb" ,gdb)))
> - (properties '())))
> + (package/inherit valgrind
> + (inputs
> + ;; GDB is needed to provide a sane default for `--db-command'.
> + `(("gdb" ,gdb)
> + ("libc:debug" ,(@@ (gnu packages commencement) glibc-final) "debug")))
Rather: ("libc:debug" ,(canonical-package glibc) "debug").
> + (arguments
> + (substitute-keyword-arguments (package-arguments valgrind)
> + ((#:phases those-phases #~%standard-phases)
> + #~(let* ((those-phases #$those-phases)
> + (unpack (assoc-ref those-phases 'unpack)))
> + (modify-phases those-phases
> + (add-before 'build 'patch-default-debuginfo-path
> + (lambda _
> + ;; This helps Valgrind find the debug symbols of ld.so.
> + ;; Without it, Valgrind does not work in a Guix shell
> + ;; container and cannot be used as-is during packages tests
> + ;; phases
> + (substitute* '
> + ("coregrind/m_debuginfo/readelf.c"
> + "docs/xml/manual-core-adv.xml"
> + "docs/xml/manual-core.xml")
> + (("/usr/lib/debug")
> + (string-append
> + (assoc-ref %build-inputs "libc:debug")
> + "/lib/debug")))
> + ;; We also need to account for the bigger path in
> + ;; the malloc-ed variables
> + (substitute* '
> + ("coregrind/m_debuginfo/readelf.c")
> + (("VG_\\(strlen\\)\\(buildid\\) \\+ 33")
> + (string-append
> + "VG_(strlen)(buildid) + "
> + (number->string
> + (+ (string-length
> + (string-append
> + (assoc-ref %build-inputs "libc:debug")
> + "/lib/debug"))
> + (string-length "/.build-id//.debug")
> + 1)))))
> + (substitute* '
> + ("coregrind/m_debuginfo/readelf.c")
> + ((string-append
> + "VG_\\(strlen\\)\\(objdir\\) \\+ "
> + "VG_\\(strlen\\)\\(debugname\\) \\+ 64")
> + (string-append
> + "VG_(strlen)(objdir) + VG_(strlen)(debugname) + "
> + (number->string
> + (+ (string-length
> + (string-append
> + (assoc-ref
> + %build-inputs
> + "libc:debug")
> + "/lib/debug"))
> + (string-length
> + "/usr/lib/debug")
> + 1)))))
I find this patch-as-code snippet rather difficult to follow; it might
also break easily if minor things change in those C files.
How about making it an actual patch? In the patch, you’d have
placeholders for the store file names, like @LIBC_DEBUG_DIRECTORY@; the
phase would replace those placeholders with ‘substitute*’.
How does that sound?
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-15 16:21 ` Ludovic Courtès
@ 2022-04-25 16:39 ` Denis 'GNUtoo' Carikli
2022-04-25 17:41 ` Maxime Devos
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-25 16:39 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 54728
[-- Attachment #1: Type: text/plain, Size: 3773 bytes --]
On Fri, 15 Apr 2022 18:21:33 +0200
Ludovic Courtès <ludo@gnu.org> wrote:
> Hello!
Hi,
[...]
> I find this patch-as-code snippet rather difficult to follow; it might
> also break easily if minor things change in those C files.
>
> How about making it an actual patch? In the patch, you’d have
> placeholders for the store file names, like @LIBC_DEBUG_DIRECTORY@;
> the phase would replace those placeholders with ‘substitute*’.
Thanks, I've done that and now the code is much easier to read.
> Rather: ("libc:debug" ,(canonical-package glibc) "debug").
The issue with that is that importing "gnu packages commencement" fails
with the following error:
> $ ./pre-inst-env guix build hello
> error: tcc: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: googletest: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: bzip2: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: binutils: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: gcc-4.9: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: xz: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: gnu-make: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: binutils: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: perl: unbound variable
> hint: Did you forget a `use-modules' form?
>
> error: coreutils: unbound variable
> hint: Did you forget a `use-modules' form?
>
> Throw to key `unbound-variable' with args `("resolve-interface" "no
> binding `~A' in module ~A" (python (gnu packages python)) #f)'.
> Backtrace: In guix/store.scm:
> 658:37 19 (thunk)
> 1320:8 18 (call-with-build-handler #<procedure 995c6f0 at guix/u?>
> ?) In guix/scripts/build.scm:
> 499:2 17 (_)
> In srfi/srfi-1.scm:
> 673:15 16 (append-map _ _ . _)
> 586:17 15 (map1 ((argument . "hello") (build-mode . 0) (# . #t) ?))
> In guix/scripts/build.scm:
> 519:31 14 (_ _)
> In gnu/packages.scm:
> 480:2 13 (%find-package "hello" "hello" #f)
> 365:6 12 (find-best-packages-by-name _ _)
> 295:56 11 (_ "hello" _)
> In unknown file:
> 10 (force #<promise #<procedure 9a81870 at
> gnu/packages.sc?>) In gnu/packages.scm:
> 242:33 9 (fold-packages #<procedure b45e1e78 at gnu/packages.sc?>
> ?) In guix/discovery.scm:
> 159:11 8 (all-modules _ #:warn _)
> In srfi/srfi-1.scm:
> 460:18 7 (fold #<procedure 9814390 at guix/discovery.scm:143:8 ?>
> ?) In guix/discovery.scm:
> 149:19 6 (_ _ ())
> 116:5 5 (scheme-modules _ _ #:warn _)
> In srfi/srfi-1.scm:
> 691:23 4 (filter-map #<procedure 98142e0 at guix/discovery.sc?> .
> #) In guix/discovery.scm:
> 124:24 3 (_ . _)
> In guix/ui.scm:
> 319:2 2 (report-unbound-variable-error _ #:frame _)
> In ice-9/boot-9.scm:
> 1685:16 1 (raise-exception _ #:continuable? _)
> 1685:16 0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> Throw to key `match-error' with args `("match" "no matching pattern"
> (unbound-variable "resolve-interface" "no binding `~A' in module ~A"
> (python (gnu packages python)) #f))'.
So I need to not import gnu packages commencement globally.
I can also do something like that instead:
> ("glibc:debug"
> ,((@@ (gnu packages commencement) canonical-package)
> (@@ (gnu packages commencement) glibc)) "debug")
Which form is the best?
Beside the glibc:debug input, the new patch is ready to be sent. I also
successfully managed to run tests that use valgrind transparently (by
using valgrind/interactive in the native inputs).
Denis.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-25 16:39 ` Denis 'GNUtoo' Carikli
@ 2022-04-25 17:41 ` Maxime Devos
2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
0 siblings, 1 reply; 15+ messages in thread
From: Maxime Devos @ 2022-04-25 17:41 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli, Ludovic Courtès; +Cc: 54728
[-- Attachment #1: Type: text/plain, Size: 467 bytes --]
Denis 'GNUtoo' Carikli schreef op ma 25-04-2022 om 18:39 [+0200]:
> The issue with that is that importing "gnu packages commencement"
> fails
> with the following error:
This does not work (due to import cycles I think)?
From (gnu packages commencement)
;;; To avoid circular dependencies, this module should not be imported
;;; directly from anywhere.
Instead, try using the 'canonical-package' defined in (gnu packages
base).
Greetings,
Maxime.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-25 17:41 ` Maxime Devos
@ 2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
0 siblings, 2 replies; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-26 1:39 UTC (permalink / raw)
To: 54728, ludo, maximedevos
Hi,
I've now managed to make a proper patch. I've used 'v2' for more
clarity.
I'll send the files used to test them in a subsequent mails.
As for the tests, I've done them in Guix system, once installed
valgrind works fine:
> $ make check
> valgrind -v --leak-check=full ./main
> ==20324== Memcheck, a memory error detector
> ==20324== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
> ==20324== Using Valgrind-3.18.1-42b08ed5bd-20211015 and LibVEX; rerun with -h for copyright info
> ==20324== Command: ./main
> ==20324==
> --20324-- Valgrind options:
> --20324-- -v
> --20324-- --leak-check=full
> --20324-- Contents of /proc/version:
> --20324-- Linux version 5.16.20-gnu (guix@guix) (gcc (GCC) 10.3.0, GNU ld (GNU Binutils) 2.37) #1 SMP PREEMPT 1
> --20324--
> --20324-- Arch and hwcaps: X86, LittleEndian, x86-mmxext-sse1-sse2-sse3
> --20324-- Page sizes: currently 4096, max supported 4096
> --20324-- Valgrind library directory: /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind
> --20324-- Reading syms from /gnu/store/0iapawfss4xnxls622g23qpk4mwb9ihp-glibc-2.33/lib/ld-2.33.so
> --20324-- Considering /gnu/store/wznq4d1i3znqjhcribfr2m9ljyyrsdyd-glibc-2.33-debug/lib/debug/gnu/store/0iapawfss4xnxls622g23qpk4mwb9ihp-glibc-2.33/lib/ld-2.33.so.debug ..
> --20324-- .. CRC is valid
> --20324-- Reading syms from /home/gnutoo/work/projects/guix/valgrind-test/main
> --20324-- Reading syms from /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/memcheck-x86-linux
> --20324-- object doesn't have a symbol table
> --20324-- object doesn't have a dynamic symbol table
> --20324-- Scheduler: using generic scheduler lock implementation.
> --20324-- Reading suppressions file: /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/default.supp
> ==20324== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-20324-by-gnutoo-on-???
> ==20324== embedded gdbserver: writing to /tmp/vgdb-pipe-to-vgdb-from-20324-by-gnutoo-on-???
> ==20324== embedded gdbserver: shared mem /tmp/vgdb-pipe-shared-mem-vgdb-20324-by-gnutoo-on-???
> ==20324==
> ==20324== TO CONTROL THIS PROCESS USING vgdb (which you probably
> ==20324== don't want to do, unless you know exactly what you're doing,
> ==20324== or are doing some strange experiment):
> ==20324== /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/../../bin/vgdb --pid=20324 ...command...
> ==20324==
> ==20324== TO DEBUG THIS PROCESS USING GDB: start GDB like this
> ==20324== /path/to/gdb ./main
> ==20324== and then give GDB the following command
> ==20324== target remote | /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/../../bin/vgdb --pid=20324
> ==20324== --pid is optional if only one valgrind process is running
> ==20324==
> --20324-- REDIR: 0x4021570 (ld-linux.so.2:strlen) redirected to 0x580a1f4a (???)
> --20324-- REDIR: 0x40212d0 (ld-linux.so.2:index) redirected to 0x580a1f25 (???)
> --20324-- Reading syms from /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/vgpreload_core-x86-linux.so
> --20324-- object doesn't have a symbol table
> --20324-- Reading syms from /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/vgpreload_memcheck-x86-linux.so
> --20324-- object doesn't have a symbol table
> ==20324== WARNING: new redirection conflicts with existing -- ignoring it
> --20324-- old: 0x04021570 (strlen ) R-> (0000.0) 0x580a1f4a ???
> --20324-- new: 0x04021570 (strlen ) R-> (2007.0) 0x04043ca0 strlen
> --20324-- Reading syms from /gnu/store/r7n4snily34ld9nm4crzc0z65jr2y26c-gcc-10.3.0-lib/lib/libgcc_s.so.1
> --20324-- object doesn't have a symbol table
> --20324-- Reading syms from /gnu/store/0iapawfss4xnxls622g23qpk4mwb9ihp-glibc-2.33/lib/libc-2.33.so
> --20324-- Considering /gnu/store/wznq4d1i3znqjhcribfr2m9ljyyrsdyd-glibc-2.33-debug/lib/debug/gnu/store/0iapawfss4xnxls622g23qpk4mwb9ihp-glibc-2.33/lib/libc-2.33.so.debug ..
> --20324-- .. CRC is valid
> ==20324== WARNING: new redirection conflicts with existing -- ignoring it
> --20324-- old: 0x040f08c0 (memalign ) R-> (1011.0) 0x04043084 memalign
> --20324-- new: 0x040f08c0 (memalign ) R-> (1017.0) 0x0404303d aligned_alloc
> ==20324== WARNING: new redirection conflicts with existing -- ignoring it
> --20324-- old: 0x040f08c0 (memalign ) R-> (1011.0) 0x04043084 memalign
> --20324-- new: 0x040f08c0 (memalign ) R-> (1017.0) 0x04042ff6 aligned_alloc
> ==20324== WARNING: new redirection conflicts with existing -- ignoring it
> --20324-- old: 0x040f08c0 (memalign ) R-> (1011.0) 0x04043084 memalign
> --20324-- new: 0x040f08c0 (memalign ) R-> (1017.0) 0x0404303d aligned_alloc
> ==20324== WARNING: new redirection conflicts with existing -- ignoring it
> --20324-- old: 0x040f08c0 (memalign ) R-> (1011.0) 0x04043084 memalign
> --20324-- new: 0x040f08c0 (memalign ) R-> (1017.0) 0x04042ff6 aligned_alloc
> --20324-- REDIR: 0x40f49e0 (libc.so.6:strncasecmp) redirected to 0x40351e6 (_vgnU_ifunc_wrapper)
> --20324-- REDIR: 0x40fa870 (libc.so.6:memrchr) redirected to 0x40351e6 (_vgnU_ifunc_wrapper)
> --20324-- REDIR: 0x410df30 (libc.so.6:wcslen) redirected to 0x40351e6 (_vgnU_ifunc_wrapper)
> --20324-- REDIR: 0x410d5c0 (libc.so.6:__GI_strrchr) redirected to 0x4043730 (__GI_strrchr)
> --20324-- REDIR: 0x410da60 (libc.so.6:__GI_strlen) redirected to 0x4043c20 (__GI_strlen)
> --20324-- REDIR: 0x40efb60 (libc.so.6:malloc) redirected to 0x403e5ae (malloc)
> Hello world
> --20324-- REDIR: 0x40f0190 (libc.so.6:free) redirected to 0x40409fc (free)
> ==20324==
> ==20324== HEAP SUMMARY:
> ==20324== in use at exit: 0 bytes in 0 blocks
> ==20324== total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
> ==20324==
> ==20324== All heap blocks were freed -- no leaks are possible
> ==20324==
> ==20324== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 5)
> --20324--
> --20324-- used_suppression: 5 dl-hack3-cond-1 /gnu/store/gkrqxqxs20mzxwxqpasy1q3w7a1v42w6-valgrind-3.18.1/libexec/valgrind/default.supp:1232
> ==20324==
> ==20324== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 5 from 5)
In addition it also works fine with either valgrind/interactive or
valgrind-3.18 as dependency, when it is used in the tests of a
package.
I've used the 'make && ./pre-inst-env guix build -f
libsamsung-ipc.scm' command for that (with a libsamsung-ipc.scm that
is slightly modified since last time).
Denis.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH v2 1/2] gnu: valgrind: impots: sort imports alphabetically
2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
@ 2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
1 sibling, 0 replies; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-26 1:39 UTC (permalink / raw)
To: 54728, ludo, maximedevos; +Cc: Denis 'GNUtoo' Carikli
* gnu/packages/valgrind.scm: sort imports alphabetically
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
---
gnu/packages/valgrind.scm | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 1cdc0f3b71..6648f17dfa 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2016, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2022 Denis Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,13 +23,13 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages valgrind)
- #:use-module (guix packages)
- #:use-module (guix download)
#:use-module (guix build-system gnu)
+ #:use-module (guix download)
#:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (gnu packages)
#:use-module (gnu packages gdb)
- #:use-module (gnu packages perl)
- #:use-module (gnu packages))
+ #:use-module (gnu packages perl))
(define-public valgrind
(package
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
@ 2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
2022-04-26 22:37 ` Denis 'GNUtoo' Carikli
2022-05-09 9:24 ` bug#54728: Valgrind not working out of the box due to stripped ld.so Ludovic Courtès
1 sibling, 2 replies; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-26 1:39 UTC (permalink / raw)
To: 54728, ludo, maximedevos; +Cc: Denis 'GNUtoo' Carikli
* gnu/packages/valgrind.scm (valgrind/interactive)[native-inputs]:
Add libc:debug
[arguments]: Add patch-default-debuginfo-path phase
[source]: Add patch.
(valgrind-3.18)[source]: Add patch.
* gnu/packages/commencement.scm (glibc-final): Export variable.
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
---
gnu/local.mk | 3 +-
gnu/packages/commencement.scm | 2 +-
.../valgrind-fix-default-debuginfo-path.patch | 100 ++++++++++++++++++
gnu/packages/valgrind.scm | 67 +++++++++++-
4 files changed, 168 insertions(+), 4 deletions(-)
create mode 100644 gnu/packages/patches/valgrind-fix-default-debuginfo-path.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index 9bad87710c..c28efcab32 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1919,7 +1919,8 @@ dist_patch_DATA = \
%D%/packages/patches/util-linux-tests.patch \
%D%/packages/patches/util-linux-CVE-2021-3995.patch \
%D%/packages/patches/util-linux-CVE-2021-3996.patch \
- %D%/packages/patches/valgrind-enable-arm.patch \
+ %D%/packages/patches/valgrind-enable-arm.patch \
+ %D%/packages/patches/valgrind-fix-default-debuginfo-path.patch \
%D%/packages/patches/vboot-utils-fix-format-load-address.patch \
%D%/packages/patches/vboot-utils-fix-tests-show-contents.patch \
%D%/packages/patches/vboot-utils-skip-test-workbuf.patch \
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 1fed8bcd6e..769139e779 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3381,7 +3381,7 @@ (define gettext-boot0
(("^PROGRAMS =.*$")
"PROGRAMS =\n")))))))))
-(define glibc-final
+(define-public glibc-final
;; The final glibc, which embeds the statically-linked Bash built above.
;; Use 'package/inherit' so we get the 'replacement' of 'glibc', if any.
(package/inherit
diff --git a/gnu/packages/patches/valgrind-fix-default-debuginfo-path.patch b/gnu/packages/patches/valgrind-fix-default-debuginfo-path.patch
new file mode 100644
index 0000000000..f78dec02dc
--- /dev/null
+++ b/gnu/packages/patches/valgrind-fix-default-debuginfo-path.patch
@@ -0,0 +1,100 @@
+From a7f17b57a94e9cde6d7fa96ac86be5c4fc4f9211 Mon Sep 17 00:00:00 2001
+From: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+Date: Sun, 24 Apr 2022 22:20:50 +0200
+Subject: [PATCH] valgrind: fix default debuginfo path
+
+Description: Workaround for missing symbol in Guix's ld.so. The
+ correct fix (not stripping all the ld.so symbols) will be done in the
+ next Guix release as it requires to recompile a lot of packages.
+
+Forwarded: not-needed
+Bug-Guix: https://issues.guix.gnu.org/54728
+Author: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+---
+ coregrind/m_debuginfo/readelf.c | 11 ++++++-----
+ docs/xml/manual-core-adv.xml | 4 ++--
+ docs/xml/manual-core.xml | 2 +-
+ 3 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
+index c586e3f33..947fcc500 100644
+--- a/coregrind/m_debuginfo/readelf.c
++++ b/coregrind/m_debuginfo/readelf.c
+@@ -1509,9 +1509,9 @@ DiImage* find_debug_file( struct _DebugInfo* di,
+
+ if (buildid != NULL) {
+ debugpath = ML_(dinfo_zalloc)("di.fdf.1",
+- VG_(strlen)(buildid) + 33);
++ VG_(strlen)(buildid) + DEBUGPATH_EXTRA_BYTES_1);
+
+- VG_(sprintf)(debugpath, "/usr/lib/debug/.build-id/%c%c/%s.debug",
++ VG_(sprintf)(debugpath, "DEFAULT_DEBUGINFO_PATH/.build-id/%c%c/%s.debug",
+ buildid[0], buildid[1], buildid + 2);
+
+ dimg = open_debug_file(debugpath, buildid, 0, rel_ok, NULL);
+@@ -1536,7 +1536,8 @@ DiImage* find_debug_file( struct _DebugInfo* di,
+
+ debugpath = ML_(dinfo_zalloc)(
+ "di.fdf.3",
+- VG_(strlen)(objdir) + VG_(strlen)(debugname) + 64
++ VG_(strlen)(objdir) + VG_(strlen)(debugname)
++ + VG_(strlen)("DEFAULT_DEBUGINFO_PATH/") + 1
+ + (extrapath ? VG_(strlen)(extrapath) : 0)
+ + (serverpath ? VG_(strlen)(serverpath) : 0));
+
+@@ -1561,7 +1562,7 @@ DiImage* find_debug_file( struct _DebugInfo* di,
+
+ TRY_OBJDIR_USRMERGE_OBJDIR("%s/%s");
+ TRY_OBJDIR_USRMERGE_OBJDIR("%s/.debug/%s");
+- TRY_OBJDIR_USRMERGE_OBJDIR("/usr/lib/debug%s/%s");
++ TRY_OBJDIR_USRMERGE_OBJDIR("DEFAULT_DEBUGINFO_PATH%s/%s");
+
+ if (extrapath) {
+ TRY_OBJDIR("%s%s/%s", extrapath, objdir, debugname);
+@@ -1631,7 +1632,7 @@ DiImage* find_debug_file_ad_hoc( const DebugInfo* di,
+
+ debugpath = ML_(dinfo_zalloc)(
+ "di.fdfah.3",
+- VG_(strlen)(objdir) + 64
++ VG_(strlen)(objdir) + DEBUGPATH_EXTRA_BYTES_2
+ + (extrapath ? VG_(strlen)(extrapath) : 0)
+ + (serverpath ? VG_(strlen)(serverpath) : 0));
+
+diff --git a/docs/xml/manual-core-adv.xml b/docs/xml/manual-core-adv.xml
+index 1fa801edc..a7c01d5e6 100644
+--- a/docs/xml/manual-core-adv.xml
++++ b/docs/xml/manual-core-adv.xml
+@@ -447,7 +447,7 @@ Valgrind embedded gdbserver:</para>
+ Remote debugging using | vgdb
+ relaying data between gdb and process 2418
+ Reading symbols from /lib/ld-linux.so.2...done.
+-Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
++Reading symbols from DEFAULT_DEBUGINFO_PATH/lib/ld-2.11.2.so.debug...done.
+ Loaded symbols for /lib/ld-linux.so.2
+ [Switching to Thread 2418]
+ 0x001f2850 in _start () from /lib/ld-linux.so.2
+@@ -475,7 +475,7 @@ Remote communication error: Resource temporarily unavailable.
+ Remote debugging using | vgdb --pid=2479
+ relaying data between gdb and process 2479
+ Reading symbols from /lib/ld-linux.so.2...done.
+-Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so.debug...done.
++Reading symbols from DEFAULT_DEBUGINFO_PATH/lib/ld-2.11.2.so.debug...done.
+ Loaded symbols for /lib/ld-linux.so.2
+ [Switching to Thread 2479]
+ 0x001f2850 in _start () from /lib/ld-linux.so.2
+diff --git a/docs/xml/manual-core.xml b/docs/xml/manual-core.xml
+index dc33e1269..f6eb60086 100644
+--- a/docs/xml/manual-core.xml
++++ b/docs/xml/manual-core.xml
+@@ -1409,7 +1409,7 @@ that can report errors, e.g. Memcheck, but not Cachegrind.</para>
+ <listitem>
+ <para>By default Valgrind searches in several well-known paths
+ for debug objects, such
+- as <computeroutput>/usr/lib/debug/</computeroutput>.</para>
++ as <computeroutput>DEFAULT_DEBUGINFO_PATH/</computeroutput>.</para>
+
+ <para>However, there may be scenarios where you may wish to put
+ debug objects at an arbitrary location, such as external storage
+--
+2.35.1
+
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 6648f17dfa..1269e07593 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -25,9 +25,12 @@
(define-module (gnu packages valgrind)
#:use-module (guix build-system gnu)
#:use-module (guix download)
+ #:use-module (guix gexp)
#:use-module (guix licenses)
#:use-module (guix packages)
+ #:use-module (guix utils)
#:use-module (gnu packages)
+ #:use-module (gnu packages base)
#:use-module (gnu packages gdb)
#:use-module (gnu packages perl))
@@ -93,9 +96,68 @@ (define-public valgrind
(define-public valgrind/interactive
(package/inherit
valgrind
+ (version "3.17.0")
+ (source (origin
+ (method url-fetch)
+ (uri (list (string-append "https://sourceware.org/pub/valgrind"
+ "/valgrind-" version ".tar.bz2")
+ (string-append "ftp://sourceware.org/pub/valgrind"
+ "/valgrind-" version ".tar.bz2")))
+ (sha256
+ (base32
+ "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
+ (patches (search-patches
+ "valgrind-enable-arm.patch"
+ "valgrind-fix-default-debuginfo-path.patch"))))
(inputs
;; GDB is needed to provide a sane default for `--db-command'.
- `(("gdb" ,gdb)))
+ `(("gdb" ,gdb)
+ ("glibc:debug" ,(canonical-package glibc) "debug")))
+ (arguments
+ (substitute-keyword-arguments (package-arguments valgrind)
+ ((#:phases those-phases #~%standard-phases)
+ #~(let* ((those-phases #$those-phases)
+ (unpack (assoc-ref those-phases 'unpack)))
+ (modify-phases
+ those-phases
+ (add-before 'configure 'patch-default-debuginfo-path
+ (lambda _
+ ;; This helps Valgrind find the debug symbols of ld.so.
+ ;; Without it, Valgrind does not work in a Guix shell
+ ;; container and cannot be used as-is during packages tests
+ ;; phases
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c"
+ "docs/xml/manual-core-adv.xml"
+ "docs/xml/manual-core.xml")
+ (("DEFAULT_DEBUGINFO_PATH")
+ (string-append (assoc-ref %build-inputs "glibc:debug")
+ "/lib/debug")))
+ ;; We also need to account for the bigger path in
+ ;; the malloc-ed variables
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c")
+ (("DEBUGPATH_EXTRA_BYTES_1")
+ (number->string
+ (+ (string-length
+ (string-append
+ (assoc-ref %build-inputs "glibc:debug")
+ "/lib/debug"))
+ (string-length "/.build-id//.debug")
+ 1))))
+ (substitute* '
+ ("coregrind/m_debuginfo/readelf.c")
+ (("DEBUGPATH_EXTRA_BYTES_2")
+ (number->string
+ (+ (string-length
+ (string-append
+ (assoc-ref
+ %build-inputs
+ "glibc:debug")
+ "/lib/debug"))
+ (string-length
+ "/usr/lib/debug")
+ 1)))))))))))
(properties '())))
(define-public valgrind-3.18
@@ -111,4 +173,5 @@ (define-public valgrind-3.18
(sha256
(base32
"1xgph509i6adv9w2glviw3xrmlz0dssg8992hbvxsbkp7ahrm180"))
- (patches (search-patches "valgrind-enable-arm.patch"))))))
+ (patches (search-patches "valgrind-enable-arm.patch"
+ "valgrind-fix-default-debuginfo-path.patch"))))))
--
2.35.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-26 1:39 ` bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
@ 2022-04-26 22:37 ` Denis 'GNUtoo' Carikli
2022-05-06 20:16 ` Denis 'GNUtoo' Carikli
2022-05-09 9:24 ` bug#54728: Valgrind not working out of the box due to stripped ld.so Ludovic Courtès
1 sibling, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-04-26 22:37 UTC (permalink / raw)
To: 54728, ludo, maximedevos
[-- Attachment #1.1: Type: text/plain, Size: 401 bytes --]
For some reasons I didn't receive a copy of the cover letter patch I
sent with git-send-email yet, so I can't reply to the cover letter, so
I'm replying to the patch instead.
In any case the patches and the cover letter are in the bug[1] report
and so as promised here's the libsamsung-ipc.scm I used for the tests.
References:
-----------
[1]https://issues.guix.gnu.org/54728#8
Denis.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: libsamsung-ipc.scm --]
[-- Type: text/x-scheme, Size: 3433 bytes --]
;;; Copyright © 2022 Denis Carikli <GNUtoo@cyberdimension.org>
;;;
;;; This file is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; This file is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License.
;;; If not, see <http://www.gnu.org/licenses/>.
;;;
;;; This file is meant to test valgrind support in Guix.
;;;
;;; The libsamsung-ipc library is not ready to be packaged in general
;;; purpose distributions as right now as it requires either a vendor
;;; kernel or the compbinaison of a recent upstream kernel with on top
;;; work in progress out of tree modem drivers, out of tree
;;; libsamsung-ipc code to support theses drivers and kernel patches
;;; to support the nonfree bootloader of the Galaxy SIII
;;; (GT-I9300). Beside the library, the tools are of very limited use
;;; beside testing or reverse engineering.
(use-modules
(ice-9 popen)
(ice-9 rdelim)
(sxml ssax input-parse)
((guix licenses) #:prefix license:)
(guix build-system android-ndk)
(guix build-system gnu)
(guix gexp)
(guix git-download)
(guix packages)
(gnu packages android)
(gnu packages autotools)
(gnu packages curl)
(gnu packages disk)
(gnu packages linux)
(gnu packages llvm)
(gnu packages pkg-config)
(gnu packages python)
(gnu packages python-xyz)
(gnu packages tls)
(gnu packages valgrind))
(define-public libsamsung-ipc
(package
(name "libsamsung-ipc")
;; we use a work in progress version that has support for --with-valgrind-tests
(version (git-version "0.0" "HEAD" "92de58c3ecd3f6a40323161dd28f2c9ad075ca62"))
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://git.replicant.us/replicant-next/hardware_replicant_libsamsung-ipc")
(commit "92de58c3ecd3f6a40323161dd28f2c9ad075ca62")))
(sha256
(base32 "0glm8hvb46iq1dhhbhymckxi6lcxn5k30lywcppbs7s8r4bnkwvy"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(native-inputs
(list
autoconf
automake
curl
ddrescue
libtool
pkg-config
python
python-sh
valgrind/interactive))
(inputs
(list openssl))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-before 'build 'patch-python
(lambda _
(substitute* (find-files "." ".*\\.py$")
(("/usr/bin/env python") (which "python3")))
#t)))
#:tests? #t
#:configure-flags
(list "--enable-debug"
"--enable-valgrind-tests")))
(synopsis "libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol")
(description
"libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol,
found in many Samsung smartphones and tablets.")
(home-page "https://www.replicant.us")
(license license:gpl2+)))
(list libsamsung-ipc)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found
2022-04-26 22:37 ` Denis 'GNUtoo' Carikli
@ 2022-05-06 20:16 ` Denis 'GNUtoo' Carikli
2022-05-06 20:20 ` Maxime Devos
0 siblings, 1 reply; 15+ messages in thread
From: Denis 'GNUtoo' Carikli @ 2022-05-06 20:16 UTC (permalink / raw)
To: 54728, ludo, maximedevos
[-- Attachment #1: Type: text/plain, Size: 293 bytes --]
Hi,
Did you manage to receive the patches, or were they lost somehow[1]?
At least I see them on https://issues.guix.gnu.org/54728 .
References:
-----------
[1]Personally for some reason I didn't receive a copy of the patches I
sent through git-send-email in my mail.
Denis.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found
2022-05-06 20:16 ` Denis 'GNUtoo' Carikli
@ 2022-05-06 20:20 ` Maxime Devos
0 siblings, 0 replies; 15+ messages in thread
From: Maxime Devos @ 2022-05-06 20:20 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli, 54728, ludo
[-- Attachment #1: Type: text/plain, Size: 457 bytes --]
Denis 'GNUtoo' Carikli schreef op vr 06-05-2022 om 22:16 [+0200]:
> Hi,
>
> Did you manage to receive the patches, or were they lost somehow[1]?
>
> At least I see them on https://issues.guix.gnu.org/54728 .
>
I've received ‘https://issues.guix.gnu.org/54728#11’ (at least,
received it now, via issues.guix.gnu.org) but this is way outside my
expertise and I'm currently to busy for reviewing something like that.
Greetings,
Maxime.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#54728: Valgrind not working out of the box due to stripped ld.so
2022-04-26 1:39 ` bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
2022-04-26 22:37 ` Denis 'GNUtoo' Carikli
@ 2022-05-09 9:24 ` Ludovic Courtès
1 sibling, 0 replies; 15+ messages in thread
From: Ludovic Courtès @ 2022-05-09 9:24 UTC (permalink / raw)
To: Denis 'GNUtoo' Carikli; +Cc: 54728-done, maximedevos
[-- Attachment #1: Type: text/plain, Size: 916 bytes --]
Hi Denis,
Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> skribis:
> * gnu/packages/valgrind.scm (valgrind/interactive)[native-inputs]:
> Add libc:debug
> [arguments]: Add patch-default-debuginfo-path phase
> [source]: Add patch.
> (valgrind-3.18)[source]: Add patch.
>
> * gnu/packages/commencement.scm (glibc-final): Export variable.
>
> Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
I had lost track of it, so thanks for pinging.
I’ve applied it and confirmed it works. I made the following cosmetic
changes (patch below):
• removing the ‘glibc-final’ export, which is unnecessary;
• in phases, refer to the ‘inputs’ parameter rather than the
‘%build-inputs’ global variable (which is deprecated);
• avoid repetition of (string-append (assoc-ref …) "/lib/debug");
• tweak indentation.
Thanks!
Ludo’.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 6813 bytes --]
diff --git a/gnu/packages/valgrind.scm b/gnu/packages/valgrind.scm
index 1269e07593..0da011087c 100644
--- a/gnu/packages/valgrind.scm
+++ b/gnu/packages/valgrind.scm
@@ -95,83 +95,71 @@ (define-public valgrind
(define-public valgrind/interactive
(package/inherit
- valgrind
- (version "3.17.0")
- (source (origin
- (method url-fetch)
- (uri (list (string-append "https://sourceware.org/pub/valgrind"
- "/valgrind-" version ".tar.bz2")
- (string-append "ftp://sourceware.org/pub/valgrind"
- "/valgrind-" version ".tar.bz2")))
- (sha256
- (base32
- "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
- (patches (search-patches
- "valgrind-enable-arm.patch"
- "valgrind-fix-default-debuginfo-path.patch"))))
- (inputs
- ;; GDB is needed to provide a sane default for `--db-command'.
- `(("gdb" ,gdb)
- ("glibc:debug" ,(canonical-package glibc) "debug")))
- (arguments
+ valgrind
+ (version "3.17.0")
+ (source (origin
+ (method url-fetch)
+ (uri (list (string-append "https://sourceware.org/pub/valgrind"
+ "/valgrind-" version ".tar.bz2")
+ (string-append "ftp://sourceware.org/pub/valgrind"
+ "/valgrind-" version ".tar.bz2")))
+ (sha256
+ (base32
+ "18l5jbk301j3462gipqn9bkfx44mdmwn0pwr73r40gl1irkfqfmd"))
+ (patches (search-patches
+ "valgrind-enable-arm.patch"
+ "valgrind-fix-default-debuginfo-path.patch"))))
+ (inputs
+ ;; GDB is needed to provide a sane default for `--db-command'.
+ `(("gdb" ,gdb)
+ ("glibc:debug" ,(canonical-package glibc) "debug")))
+ (arguments
(substitute-keyword-arguments (package-arguments valgrind)
- ((#:phases those-phases #~%standard-phases)
- #~(let* ((those-phases #$those-phases)
- (unpack (assoc-ref those-phases 'unpack)))
- (modify-phases
- those-phases
- (add-before 'configure 'patch-default-debuginfo-path
- (lambda _
- ;; This helps Valgrind find the debug symbols of ld.so.
- ;; Without it, Valgrind does not work in a Guix shell
- ;; container and cannot be used as-is during packages tests
- ;; phases
- (substitute* '
- ("coregrind/m_debuginfo/readelf.c"
- "docs/xml/manual-core-adv.xml"
- "docs/xml/manual-core.xml")
- (("DEFAULT_DEBUGINFO_PATH")
- (string-append (assoc-ref %build-inputs "glibc:debug")
- "/lib/debug")))
- ;; We also need to account for the bigger path in
- ;; the malloc-ed variables
- (substitute* '
- ("coregrind/m_debuginfo/readelf.c")
- (("DEBUGPATH_EXTRA_BYTES_1")
- (number->string
- (+ (string-length
- (string-append
- (assoc-ref %build-inputs "glibc:debug")
- "/lib/debug"))
- (string-length "/.build-id//.debug")
- 1))))
- (substitute* '
- ("coregrind/m_debuginfo/readelf.c")
- (("DEBUGPATH_EXTRA_BYTES_2")
- (number->string
- (+ (string-length
- (string-append
- (assoc-ref
- %build-inputs
- "glibc:debug")
- "/lib/debug"))
- (string-length
- "/usr/lib/debug")
- 1)))))))))))
- (properties '())))
+ ((#:phases phases #~%standard-phases)
+ #~(modify-phases #$phases
+ (add-before 'configure 'patch-default-debuginfo-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; This helps Valgrind find the debug symbols of ld.so.
+ ;; Without it, Valgrind does not work in a Guix shell
+ ;; container and cannot be used as-is during packages tests
+ ;; phases.
+ ;; TODO: Remove on the next rebuild cycle, when libc is not
+ ;; longer fully stripped.
+ (define libc-debug
+ (string-append (assoc-ref inputs "glibc:debug")
+ "/lib/debug"))
+
+ (substitute* '("coregrind/m_debuginfo/readelf.c"
+ "docs/xml/manual-core-adv.xml"
+ "docs/xml/manual-core.xml")
+ (("DEFAULT_DEBUGINFO_PATH")
+ libc-debug))
+ ;; We also need to account for the bigger path in
+ ;; the malloc-ed variables.
+ (substitute* '("coregrind/m_debuginfo/readelf.c")
+ (("DEBUGPATH_EXTRA_BYTES_1")
+ (number->string
+ (+ (string-length libc-debug)
+ (string-length "/.build-id//.debug")
+ 1))))
+ (substitute* '("coregrind/m_debuginfo/readelf.c")
+ (("DEBUGPATH_EXTRA_BYTES_2")
+ (number->string
+ (+ (string-length libc-debug)
+ (string-length "/usr/lib/debug")
+ 1))))))))))
+ (properties '())))
(define-public valgrind-3.18
(package
(inherit valgrind/interactive)
(version "3.18.1")
(source (origin
- (method url-fetch)
+ (inherit (package-source valgrind/interactive))
(uri (list (string-append "https://sourceware.org/pub/valgrind"
"/valgrind-" version ".tar.bz2")
(string-append "ftp://sourceware.org/pub/valgrind"
"/valgrind-" version ".tar.bz2")))
(sha256
(base32
- "1xgph509i6adv9w2glviw3xrmlz0dssg8992hbvxsbkp7ahrm180"))
- (patches (search-patches "valgrind-enable-arm.patch"
- "valgrind-fix-default-debuginfo-path.patch"))))))
+ "1xgph509i6adv9w2glviw3xrmlz0dssg8992hbvxsbkp7ahrm180"))))))
^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2022-05-09 9:25 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-05 15:01 bug#54728: Valgrind not working out of the box due to stripped ld.so Denis 'GNUtoo' Carikli
2022-04-07 16:40 ` Ludovic Courtès
2022-04-14 23:26 ` Denis 'GNUtoo' Carikli
2022-04-14 23:30 ` bug#54728: [PATCH 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
2022-04-14 23:30 ` bug#54728: [PATCH 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
2022-04-15 16:21 ` Ludovic Courtès
2022-04-25 16:39 ` Denis 'GNUtoo' Carikli
2022-04-25 17:41 ` Maxime Devos
2022-04-26 1:39 ` Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 1/2] gnu: valgrind: impots: sort imports alphabetically Denis 'GNUtoo' Carikli
2022-04-26 1:39 ` bug#54728: [PATCH v2 2/2] gnu: valgrind: fix ld.so symbols not found Denis 'GNUtoo' Carikli
2022-04-26 22:37 ` Denis 'GNUtoo' Carikli
2022-05-06 20:16 ` Denis 'GNUtoo' Carikli
2022-05-06 20:20 ` Maxime Devos
2022-05-09 9:24 ` bug#54728: Valgrind not working out of the box due to stripped ld.so Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).