On Sun, 17 Nov 2002, Linus Torvalds wrote:
> First off, a program had better be correctly startable even if the
> process that does the execve() is _not_ using the new glibc. [...]
it most definitely is. Binary compatibility is taken very seriously.
the SETTID change only affects the fork() case. Ie. there are 4 major ways
a context can be started:
execve(): here we build a process image from scratch. NPTL changes
nothing here, except that if a new NPTL binary is started up,
it will call sys_set_tid_address() to get the 'initial thread'
set up properly. Old binaries continue to work.
fork(): here we build a new process image by copying the parent image.
NPTL applications are using sys_clone(CLONE_SETTID) internally,
to set up the initial thread of the new process image. [the
fork() code in glibc also does other cleanup work to get a true
initial thread going, even if a threaded application forks, but
this is nothing the kernel should worry about.]
pthread_create(): here we create a new thread that shares all sharable
state with the parent thread. LinuxThreads (old glibc)
does whatever it always did, NPTL uses all the new
flags.
raw clone(): share a subset of the parent thread's resources.
there is no change anywhere due to NPTL. You can start and old glibc
application from within a new glibc application and vice versa.
Ingo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Nov 23 2002 - 22:00:19 EST