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

Attachment: test-sig.c
Description: Binary data

Attachment: sigreturn.o.d
Description: Binary data

Attachment: sigreturn.o.d
Description: Binary data

-- 
Janneke Nieuwenhuizen <jann...@gnu.org>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | AvatarĀ® https://AvatarAcademy.com

Reply via email to