Samuel Thibault <samuel.thiba...@gnu.org> skribis: > Manolis Ragkousis, le Wed 02 Apr 2014 00:29:13 +0000, a écrit : >> > /../build/libc_pic.os: In function `__fork': >> > /../source/posix/../sysdeps/mach/hurd/fork.c:71: undefined reference to >> > `__start__hurd_atfork_prepare_hook' >> > /../gcc-cross-sans-libc-i686-pc-gnu-4.8.2/libexec/gcc/i686-pc-gnu/ld: >> > /../build/libc_pic.os: relocation R_386_GOTOFF against undefined hidden > >> > symbol `__start__hurd_atfork_prepare_hook' can not be used when making a >> > shared object >> > /../gcc-cross-sans-libc-i686-pc-gnu-4.8.2/libexec/gcc/i686-pc-gnu/ld: >> > final link failed: Bad value >> > collect2: error: ld returned 1 exit status >> > ../Makerules:614: recipe for target '/../build/libc.so' failed >> > make[2]: *** >> > [/tmp/nix-build-glibc-hurd-cross-i686-pc-gnu-2.18.drv-38/build/libc.so] >> > Error 1 >> > make[2]: Leaving directory >> > '/tmp/nix-build-glibc-hurd-cross-i686-pc-gnu-2.18.drv-38/source/elf' >> > Makefile:233: recipe for target 'elf/subdir_lib' failed >> >> I searched the source files in posix and sysdeps/mach/hurd/ and I >> can't seem to find any reference to >> `__start__hurd_atfork_prepare_hook'. >> >> Any ideas? > > In such cases, look for subparts of the name, here atfork_prepare, and > you'll see > > sysdeps/mach/hurd/fork.c:DEFINE_HOOK (_hurd_atfork_prepare_hook, (void)); > > The symbol is supposed to be defined automagically by the linker. I > don't know how exactly.
The linker magic is in the shlib.lds rules of Makerules, added in commit 56798c44 of glibc/Savannah. However, it adds the start/stop symbols for the hurd_fork hooks, but not for the hurd_atfork hooks. Do we need something like this:
diff --git a/Makerules b/Makerules index fe967ad..cbf1b39 100644 --- a/Makerules +++ b/Makerules @@ -506,6 +506,15 @@ $(common-objpfx)shlib.lds: $(common-objpfx)config.make $(..)Makerules PROVIDE(__start__hurd_preinit_hook = .);\ _hurd_preinit_hook : { *(_hurd_preinit_hook) }\ PROVIDE(__stop__hurd_preinit_hook = .);\ + PROVIDE(__start__hurd_atfork_prepare_hook = .);\ + _hurd_atfork_prepare_hook : { *(_hurd_atfork_prepare_hook) }\ + PROVIDE(__stop__hurd_atfork_prepare_hook = .);\ + PROVIDE(__start__hurd_atfork_child_hook = .);\ + _hurd_atfork_child_hook : { *(_hurd_atfork_child_hook) }\ + PROVIDE(__stop__hurd_atfork_child_hook = .);\ + PROVIDE(__start__hurd_atfork_parent_hook = .);\ + _hurd_atfork_parent_hook : { *(_hurd_atfork_parent_hook) }\ + PROVIDE(__stop__hurd_atfork_parent_hook = .);\ PROVIDE(__start__hurd_fork_prepare_hook = .);\ _hurd_fork_prepare_hook : { *(_hurd_fork_prepare_hook) }\ PROVIDE(__stop__hurd_fork_prepare_hook = .);\
Thanks, Ludo’.