[PATCH] Improve LinuxThreads compatibility in rfork()
Petr Salinger
Petr.Salinger at seznam.cz
Mon Jul 11 17:57:12 UTC 2011
>> Should the bit slice be 7 or 8 bits ?
> I propose to go 8 bits, and add the check to be future-proof.
> It seems that we already parse GNU/kFreeBSD brandnote. I think this
> could be used to distinguish between old behaviour, that is currently
> used by your libc, and proposed new interface, if __FreeBSD_version
> is bumped and honored by glibc. You might need to store the brandinfo
> somewhere in struct proc or use the separate struct sysentvec.
No, the version in brandnote is compile-time minimal supported version,
we will detect at runtime (by "sysctl kern.osreldate") which interface we
should use.
So far defined rfork() options:
/*
* XXX currently, some operations without RFPROC set are not supported.
*/
#define RFNAMEG (1<<0) /* UNIMPL new plan9 `name space' */
#define RFENVG (1<<1) /* UNIMPL copy plan9 `env space' */
#define RFFDG (1<<2) /* copy fd table */
#define RFNOTEG (1<<3) /* UNIMPL create new plan9 `note group' */
#define RFPROC (1<<4) /* change child (else changes curproc) */
#define RFMEM (1<<5) /* share `address space' */
#define RFNOWAIT (1<<6) /* give child to init */
#define RFCNAMEG (1<<10) /* UNIMPL zero plan9 `name space' */
#define RFCENVG (1<<11) /* UNIMPL zero plan9 `env space' */
#define RFCFDG (1<<12) /* close all fds, zero fd table */
#define RFTHREAD (1<<13) /* enable kernel thread support */
#define RFSIGSHARE (1<<14) /* share signal handlers */
#define RFLINUXTHPN (1<<16) /* do linux clone exit parent notification */
#define RFSTOPPED (1<<17) /* leave child in a stopped state */
#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)
The new interface will add:
#define RFTSIGZMB (1<<19)
#define RFTSIGSHIFT 20 /* reserve bits 20-27 */
#define RFTSIGMASK 0xFF
#define RFTSIGNUM(flags) (((flags) >> RFTSIGSHIFT) & RFTSIGMASK)
#define RFTSIGFLAGS(signum) ((signum) << RFTSIGSHIFT)
Seems this interface be acceptable ?
Petr
More information about the freebsd-current
mailing list