Subject: bug#52943: Cannot build guix as part of guix system reconfigure after commit 224d437fb4 on aarch64

From: Pierre Langlois <[email-masked]>
Date: Sat, 15 Jan 2022 13:27:51 +0000

Hi Chris,

Chris Marusich <[email-masked]> writes:

(snip)

> It seems fishy that on aarch64-linux, there is no NEEDED entry for
> ld-linux-aarch64.so.1 in the ELF files under consideration.  As shown
> above, a similar entry DOES exist on both x86_64-linux and
> powerpc64le-linux.  For this reason, it seems plausible that maybe the
> missing NEEDED entry is bad.  However, I don't really know enough to say
> whether it's indicative of a problem with our aarch64-linux port.  Is
> there an aarch64-linux or ELF expert in the room who can help?  :-)
>
> It also seems fishy that, on powerpc64le-linux, file-needed/recursive
> apparently resolves ld64.so.2 successfully, even though it
> simultaneously includes it in the "failed to resolve" list.  Confusing
> as that is to me, I don't know if that's really related to the
> aarch64-linux issue.
>
> More investigation is needed...

I'm afraid I don't have any new insight if this is an issue or just
working as intended. Given we have a limited bandwidth to address this
thoroughly, would it make sense to apply a temporary work-around in the
mean time? I'd be good for at least guix to build on aarch64 in the 1.4
release.

I have the attached patch in my tree for instance (along with an update
of the guix package), and I've not noticed any issues on a rockpro64,
running cgit, DHCP and dnsmasq. That's just anecdotal :-), but I'm also
thinking if we unblock the guix package then the farm might catch other
issues that could help getting to the bottom of this.

WDYT?

Thanks,
Pierre

From cdd2c995b7c03400a9702a6b354655b0584b727c Mon Sep 17 00:00:00 2001
From: Pierre Langlois <[email-masked]>
Date: Wed, 22 Dec 2021 22:02:08 +0000
Subject: [PATCH] gremlin: Adjust test for aarch64.

---
 tests/gremlin.scm | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/tests/gremlin.scm b/tests/gremlin.scm
index 9e0017337a..c9b05ae21a 100644
--- a/tests/gremlin.scm
+++ b/tests/gremlin.scm
@@ -20,9 +20,11 @@
 (define-module (test-gremlin)
   #:use-module (guix elf)
   #:use-module (guix tests)
-  #:use-module ((guix utils) #:select (call-with-temporary-directory))
+  #:use-module ((guix utils) #:select (call-with-temporary-directory
+                                       target-aarch64?))
   #:use-module (guix build utils)
   #:use-module (guix build gremlin)
+  #:use-module (gnu packages bootstrap)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
@@ -99,7 +101,12 @@ (define ground-truth
                 (or (string-prefix? "linux-vdso.so" entry)
                     (string-prefix? "linux-vdso32.so" entry) ;32-bit powerpc
                     (string-prefix? "linux-vdso64.so" entry) ;64-bit powerpc
-                    (string-prefix? "linux-gate.so" entry))) ;i386
+                    (string-prefix? "linux-gate.so" entry)   ;i386
+                    ;; FIXME: Binaries on aarch64 do not always include the
+                    ;; dynamic linker in their NEEDED section, it's unclear if that's OK, see
+                    ;; ttps://bugs.gnu.org/52943.
+                    (and (target-aarch64?)
+                         (string-contains entry (glibc-dynamic-linker)))))
               (read-ldd-output pipe)))

     (and (zero? (close-pipe pipe))
--
2.34.0