This patch made by Petr Salinger improves compatibility with
LinuxThreads in rfork() syscall. The Linux clone() implementation
allows specifying the signal sent to parent when child terminates
(instead of SIGCHLD).
As the threading implementation in Debian GNU/kFreeBSD is
LinuxThreads-based, we had to diverge from upstream kFreeBSD ABI and
implement this extension.
I hope it is acceptable for you to use the same encoding, this way we
would archieve ABI compatibility to run Debian GNU/kFreeBSD inside a
chroot/jail on top of a FreeBSD system.
Thanks for considering
--
Robert Millan
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -477,7 +477,13 @@
p2->p_sigacts = newsigacts;
}
if (flags & RFLINUXTHPN)
- p2->p_sigparent = SIGUSR1;
+ {
+ int sig;
+ sig = RFTHPNSIGNUM(flags);
+ if (sig == 0) sig = SIGUSR1;
+ if (sig == SIGCHLD) sig = 0;
+ p2->p_sigparent = sig;
+ }
else
p2->p_sigparent = SIGCHLD;
--- a/sys/sys/unistd.h
+++ b/sys/sys/unistd.h
@@ -182,6 +182,10 @@
#define RFHIGHPID (1<<18) /* use a pid higher than 10 (idleproc)
*/
#define RFPPWAIT (1<<31) /* parent sleeps until child exits
(vfork) */
#define RFKERNELONLY (RFSTOPPED | RFHIGHPID | RFPPWAIT)
+#define RFTHPNSHIFT 24 /* reserve bits 24-30 */
+#define RFTHPNMASK 0x7F /* for compatibility with linuxthreads/clone()
*/
+ /* allow to specify "clone exit parent
notification" signal */
+#define RFTHPNSIGNUM(flags) (((flags) >> RFTHPNSHIFT) & RFTHPNMASK)
#endif /* __BSD_VISIBLE */
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"