Hi! The attached test-sig.c is a slightly modified version of gnulib-tests/test-sigaction.c (<https://git.savannah.gnu.org/cgit/gnulib.git/tree/tests/test-sigaction.c>) as used by findutils.
When compiled statically on Debian/Hurd with Debian's glibc it succeeds
but when using Guix's libc it fails.
I have bisected the problem to be in sigaction.o: when linking with
sigaction.o from Debian's libcrt.a it passes, when using Guix's
sigaction.o it fails. Problem solved, you would say?
When trying to debug this in gdb, I cannot seem to get past __kill, and
wherever I put breakpoints (in __sigreturn and __sigreturn2), both the
faulty and correct program behave apparently identical under gdb.
Assuming that we're just missing some patch to sigreturn.c, but failing
to find an obvious candidate I went to apply the Debian and Guix patch
series and do some inventory.
Guix is currently not applying/missing:
proc_reauth.diff
submitted-bind_umask2.diff
tg-ifaddrs_v6.diff
tg-libc_rwlock_recursive.diff
tg-sendmsg-SCM_CREDS.diff
tg-sysvshm.diff
tg-thread-cancel.diff
These are the diffs between guix's glibc on the hurd-team branch and
debian 2.39-7 (20240825 is using 2.39-8...) with all patches applied:
<https://dezyne.org/janneke/hurd/glibc-2.39-guix-hurd-team-to-debian-2.39-7.patch>
and only the hurd-specific patches applied
<https://dezyne.org/janneke/hurd/glibc-2.39-guix-hurd-team-to-debian-hurd-only.patch>
There is no patch to sigreturn.c, and I also cannot see an obvious
header being patched
--8<---------------cut here---------------start------------->8---
diff --git a/config.h.in b/config.h.in
diff --git a/hurd/hurd/fd.h b/hurd/hurd/fd.h
diff --git a/hurd/sysvshm.h b/hurd/sysvshm.h
diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
diff --git a/sysdeps/mach/hurd/bits/ioctls.h b/sysdeps/mach/hurd/bits/ioctls.h
diff --git a/sysdeps/mach/hurd/bits/posix_opt.h
b/sysdeps/mach/hurd/bits/posix_opt.h
diff --git a/sysdeps/mach/hurd/htl/pt-sysdep.h
b/sysdeps/mach/hurd/htl/pt-sysdep.h
diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h
--8<---------------cut here---------------end--------------->8---
Anyway, attached are the disassembled versions of Debian's and Guix's
sigaction.o.d. Maybe some of you can spot the significant difference
and where it might come from?
Note: on our 32bit Hurd which uses the same patch set for glibc, the
test runs fine. For now I have disabled running check on
findutils...but I'm afraid this test will keep coming back and fail for
every package that uses gnulib :-(
So, any pointers highly appreciated!
Greetings,
Janneke
test-sig.c
Description: Binary data
sigreturn.o.d
Description: Binary data
sigreturn.o.d
Description: Binary data
-- Janneke Nieuwenhuizen <[email protected]> | GNU LilyPond https://LilyPond.org Freelance IT https://www.JoyOfSource.com | AvatarĀ® https://AvatarAcademy.com
