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’.

Reply via email to