tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

updating COMPAT_LINUX for linux 2.6.x support (take 2)



hi folks,

I rewrote my COMPAT_LINUX changes using the 1-proc-many-LWPs model.
the patch is at:

ftp://ftp.netbsd.org/pub/NetBSD/misc/chs/linux/diff.linux-nptl-take2.23


this patch includes:

 - joerg's patch for amd64 TLS.
 - update linux syscall table (for each platform).
 - support new-style (NPTL) linux pthreads on all platforms
   where linux supports it.  clone() with CLONE_THREAD uses
   1 process with many LWPs instead of separate processes.
 - update linux_release[] to "2.6.18".
 - adjust placement of emul fork/exec/exit hooks as needed
   and adjust other emul code to match.
 - convert all struct emul definitions to use named initializers.
 - change the pid allocator to allow multiple pids to refer to the same proc.
 - remove a few fields from struct proc that are no longer needed.
 - fix obreak() to honor RLIMIT_AS as well as RLIMIT_DATA.
   this will affect native processes as well as linux ones,
   but it seems appropriate.


what is missing:

 - linux32 support (needs 32-bit-compat TLS on amd64)


I've tested this on i386 and amd64 using both the netbsd regress/lib/libpthread
tests and the LTP pthreads tests.  the netbsd tests all pass except for
"cancel2", which also fails on linux.  as for the LTP/posixtest tests,
there are a number of failures remaining, all of which fall into one of
the following categories:

 - sched_[sg]etscheduler() has rounding errors converting back and forth.
 - the test uses PTHREAD_PROCESS_SHARED, which we don't implement.
 - the test requires clock_getcpuclockid(), which we don't implement.
 - the test fails on linux too.

I don't see any of these as being a showstopper.

I've also verified that with these changes, the latest and greatest
flash plugin works fine on i386 (though it needs a bunch more shared
libs that are not part of the pkgsrc pkgs).

other than finishing the linux32 stuff, does anyone see anything else
that I should do for this?

-Chuck


Home | Main Index | Thread Index | Old Index