Subject: CVS commit: src/sys/compat
To: None <source-changes@NetBSD.org>
From: Emmanuel Dreyfus <manu@netbsd.org>
List: source-changes
Date: 06/25/2006 16:15:40
Module Name:	src
Committed By:	manu
Date:		Sun Jun 25 16:15:40 UTC 2006

Modified Files:
	src/sys/compat/linux/arch/amd64: linux_syscall.h linux_syscallargs.h
	    linux_syscalls.c linux_sysent.c syscalls.master
	src/sys/compat/linux/common: linux_emuldata.h linux_exec.c
	    linux_sched.c
	src/sys/compat/linux32/arch/amd64: linux32_syscall.h
	    linux32_syscallargs.h linux32_syscalls.c linux32_sysent.c
	    syscalls.master
	src/sys/compat/linux32/common: linux32_exec.c linux32_resource.c
Removed Files:
	src/sys/compat/linux32/common: linux32_emuldata.h

Log Message:
- Complete exit_group() implementation. We now maintain a list of Linux
threads in a processes and kill them properly. The code is a bit too
complicated, but I could not find a simplier way of dealing with it

- Change getpid() and getppid() semantics to match what Linux does,
and implement gettid(). In the Linux kernel, threads are implemnted
as plain old processes. A thread group is just a set of processes,
with the parent called leader. Thread ID, which are returned by gettid(),
are just the PID of the plain old processes, and getpid() returns the
PID of the thread group leader.

- Remove struct linux32_emuldata. COMPAT_LINUX32 uses a lot of COMPAT_LINUX
code, where a struct linux_emuldata is assumed. By having distinct emuldata
structure with different sizes and layouts, we caused kernel memory
corruptions.

- Fix setprioriry() and getpriority()

Thanks to Nicolas Joly for tracking down the problem and providing me the
hardware to fix them.


To generate a diff of this commit:
cvs rdiff -r1.11 -r1.12 src/sys/compat/linux/arch/amd64/linux_syscall.h \
    src/sys/compat/linux/arch/amd64/linux_syscallargs.h \
    src/sys/compat/linux/arch/amd64/linux_syscalls.c \
    src/sys/compat/linux/arch/amd64/linux_sysent.c \
    src/sys/compat/linux/arch/amd64/syscalls.master
cvs rdiff -r1.10 -r1.11 src/sys/compat/linux/common/linux_emuldata.h
cvs rdiff -r1.83 -r1.84 src/sys/compat/linux/common/linux_exec.c
cvs rdiff -r1.30 -r1.31 src/sys/compat/linux/common/linux_sched.c
cvs rdiff -r1.3 -r1.4 src/sys/compat/linux32/arch/amd64/linux32_syscall.h \
    src/sys/compat/linux32/arch/amd64/linux32_syscallargs.h \
    src/sys/compat/linux32/arch/amd64/linux32_syscalls.c \
    src/sys/compat/linux32/arch/amd64/linux32_sysent.c
cvs rdiff -r1.2 -r1.3 src/sys/compat/linux32/arch/amd64/syscalls.master
cvs rdiff -r1.1 -r0 src/sys/compat/linux32/common/linux32_emuldata.h
cvs rdiff -r1.1 -r1.2 src/sys/compat/linux32/common/linux32_exec.c \
    src/sys/compat/linux32/common/linux32_resource.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.