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

Bug#1117592: libgc1 fails with pthread_atfork when trying to start on hurd



Package: libgc1
Version: 1:8.2.8-1
Severity: normal
X-Debbugs-Cc: debian-hurd@lists.debian.org, pvaneynd@debian.org
User: debian-hurd@lists.debian.org
Usertags: hurd-amd64 hurd-i386

Hello,

While investigating a FTBFS for ecl on the hurd platforms I noticed that the problem seems to be in libgc1. 

The build fails (see [1]) with a terse:

make[3]: Leaving directory '/build/reproducible-path/ecl-24.5.10.20250914.git294da20+dfsg/build/c'
Building ecl_min...
pthread_atfork failed
/bin/bash: line 5:  6131 Aborted                    ECLDIR=`pwd`/ ./ecl_min compile

When I run the ecl_min binary (created during the ecl build process) in 
gdb I at first get a SIGSEGV, but when I allow this signal to pass through I get the pthread_atfork failure message with an abort traceback: 

(gdb) run compile
Starting program: /home/pvaneynd/ecl-24.5.10.20250914.git294da20+dfsg/build/ecl_min compile

Thread 4 received signal SIGSEGV, Segmentation fault.
0x012b8b0d in GC_find_limit_with_bound (p=0x1212c88 "x-!\001\374\372\t", up=up@entry=1, bound=bound@entry=0xffffffff <error: Cannot access memory at address 0xffffffff>)
    at ../extra/../os_dep.c:1029
warning: 1029   ../extra/../os_dep.c: No such file or directory
(gdb) handle  SIGSEGV nostop
Signal        Stop      Print   Pass to program Description
SIGSEGV       No        Yes     Yes             Segmentation fault
(gdb) run compile
Starting program: /home/pvaneynd/ecl-24.5.10.20250914.git294da20+dfsg/build/ecl_min compile

Thread 4 received signal SIGSEGV, Segmentation fault.
pthread_atfork failed

Thread 4 received signal SIGABRT, Aborted.
0x014284ac in ?? () from /lib/i386-gnu/libc.so.0.3
(gdb) bt
#0  0x014284ac in ?? () from /lib/i386-gnu/libc.so.0.3
#1  0x01428c60 in mach_msg () from /lib/i386-gnu/libc.so.0.3
#2  0x016c3136 in msg_sig_post () from /lib/i386-gnu/libhurduser.so.0.3
#3  0x01438aa9 in _hurd_raise_signal () from /lib/i386-gnu/libc.so.0.3
#4  0x0168dc84 in pthread_kill () from /lib/i386-gnu/libpthread.so.0.3
#5  0x014765ed in raise () from /lib/i386-gnu/libc.so.0.3
#6  0x01427953 in abort () from /lib/i386-gnu/libc.so.0.3
#7  0x012c6981 in GC_thr_init () at ../extra/../pthread_support.c:1353
#8  0x012c5431 in GC_init () at ../extra/../misc.c:1361
#9  GC_init () at ../extra/../misc.c:927
#10 0x0009fafc in init_alloc (pass=0) at ./src/c/alloc_2.d:774
#11 0x00036573 in cl_boot (argc=2, argv=0x1212e04) at ./src/c/main.d:507
#12 0x00034cd9 in main (argc=2, args=0x1212e04) at ./src/c/cinit.d:175
(gdb)

GC_thr_init [2] is straight going to abort because CAN_HANDLE_FORK is defined, GC_handle_fork is set but CAN_CALL_ATFORK is not true from the disassembly. So this seems to be a 
general problem:

(gdb) break ../extra/../pthread_support.c:1344
Breakpoint 10 at 0x12c64c7: file ../extra/../pthread_support.c, line 1344.
(gdb) run compile
Starting program: /home/pvaneynd/ecl-24.5.10.20250914.git294da20+dfsg/build/ecl_min compile

Thread 4 received signal SIGSEGV, Segmentation fault.

Thread 4 hit Breakpoint 10, GC_thr_init () at ../extra/../pthread_support.c:1352
warning: 1352   ../extra/../pthread_support.c: No such file or directory
(gdb) print GC_handle_fork
$1 = 1
(gdb) disassemble  GC_thr_init
Dump of assembler code for function GC_thr_init:
   0x012c6490 <+0>:       push   %ebp
   0x012c6491 <+1>:       mov    %esp,%ebp
   0x012c6493 <+3>:       push   %edi
   0x012c6494 <+4>:       push   %esi
   0x012c6495 <+5>:       push   %ebx
   0x012c6496 <+6>:       call   0x12b4fb0 <__x86.get_pc_thunk.bx>
   0x012c649b <+11>:      add    $0x14b59,%ebx
   0x012c64a1 <+17>:      sub    $0x2c,%esp
   0x012c64a4 <+20>:      mov    %gs:0x14,%eax
   0x012c64aa <+26>:      mov    %eax,-0x1c(%ebp)
   0x012c64ad <+29>:      xor    %eax,%eax
   0x012c64af <+31>:      mov    0x271b0(%ebx),%eax
   0x012c64b5 <+37>:      test   %eax,%eax
   0x012c64b7 <+39>:      jne    0x12c674e <GC_thr_init+702>
   0x012c64bd <+45>:      movl   $0x1,0x271b0(%ebx)
=> 0x012c64c7 <+55>:      mov    0x278b8(%ebx),%eax
   0x012c64cd <+61>:      add    $0x1,%eax
   0x012c64d0 <+64>:      cmp    $0x1,%eax
   0x012c64d3 <+67>:      ja     0x12c696a <GC_thr_init+1242>

-> straight to abort.

Best regards, Peter

1
https://buildd.debian.org/status/fetch.php?pkg=ecl&arch=hurd-amd64&ver=24.5.10.20250914.git294da20%2Bdfsg-2&stamp=1759858415&raw=0

2
https://salsa.debian.org/debian/libgc/-/blob/master/pthread_support.c?ref_type=heads#L1335
-- System Information:
Debian Release: forky/sid
  APT prefers unreleased
  APT policy: (500, 'unreleased'), (500, 'unstable')
Architecture: hurd-i386 (i686-AT386)

Kernel: GNU-Mach 1.8+git20250731-up-486/Hurd-0.9
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: unable to detect

Versions of packages libgc1 depends on:
ii  libc0.3     2.41-12+b1
ii  libstdc++6  15.2.0-4

libgc1 recommends no packages.

libgc1 suggests no packages.

-- no debconf information


Reply to: