bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#64794: Guile 3.0.9 in guix shell container with emulated FHS throws


From: Thiago Jung Bauermann
Subject: bug#64794: Guile 3.0.9 in guix shell container with emulated FHS throws ldconfig error @ a050897
Date: Thu, 20 Jun 2024 13:17:44 -0300

Hello,

Rostislav Svoboda <rostislav.svoboda@gmail.com> writes:

> The warning appears also for guile@2.0 and later. guile@1.8 works fine:
>
> ```
> $ guix shell --emulate-fhs --container guile@1.8
> [env]$ exit
> $ guix shell --emulate-fhs --container guile@2.0
> ldconfig: /lib/libguile-2.0.so.22.8.1-gdb.scm is not an ELF file - it
> has the wrong magic bytes at the start.
>
> [env]$
> ```

The error is harmless. AFAIU ldconfig ignores the non-ELF file and
compiles the ld cache with the ELF shared libraries.

libguile-…-gdb.scm is a GDB extension file¹ that GDB auto-loads when
debugging programs using libguile.so². From the beginning of said .scm
file:

;;; Commentary:
;;;
;;; This file defines GDB extensions to pretty-print 'SCM' objects, and
;;; to walk Guile's virtual machine stack.
;;;
;;; This file is installed under a name that follows the convention that
;;; allows GDB to auto-load it anytime the user is debugging libguile
;;; (info "(gdb) objfile-gdbdotext file").

In distros using the Filesystem Hierarchy Standard, this file is
installed in GDB's data directory instead of /lib, so ldconfig doesn't
run into it. For example, in Debian/Ubuntu:

$ dpkg -L guile-3.0-dev | grep gdb.scm
/usr/share/gdb/auto-load/libguile-3.0.so.1.6.0-gdb.scm

Unfortunately, in the case of Guix the auto-load directory is in GDB's
own immutable installation directory so Guile can't put it there:

$ gdb -q
(gdb) show auto-load scripts-directory 
List of directories from which to load auto-loaded scripts is 
$debugdir:$datadir/auto-load.
(gdb) show data-directory 
GDB's data directory is 
"/gnu/store/i6x19fvlb1ladc3hcg70hnkcq6i6x232-gdb-14.2/share/gdb".

One way to improve that would be to propose a patch to upstream GDB so
that additional auto-load scripts directories could be specified via an
environment variable. Then Guile and other packages that provided GDB
extentions (such as libstdc++) could install them in their respective
/gnu/store/…-package/share/gdb/auto-load directories, and the Guix
profile could set the GDB environment variable to point to them.

-- 
Thiago

¹ https://sourceware.org/gdb/current/onlinedocs/gdb.html/Guile.html
² 
https://sourceware.org/gdb/current/onlinedocs/gdb.html/objfile_002dgdbdotext-file.html





reply via email to

[Prev in Thread] Current Thread [Next in Thread]