SYSENTER/SYSCALL support
authorBen Gras <ben@minix3.org>
Sun, 10 Jun 2012 17:50:17 +0000 (17:50 +0000)
committerBen Gras <ben@minix3.org>
Mon, 24 Sep 2012 13:53:43 +0000 (15:53 +0200)
commit2d72cbec418fc500da13b6bbea46af899db2b73a
tree4b1f3a7cd19076ca93fdd4896ccac38cdf7b5439
parent629829e69c0797c3ad84e840716d1e67aab1862c
SYSENTER/SYSCALL support

. add cpufeature detection of both
. use it for both ipc and kernelcall traps, using a register
  for call number
. SYSENTER/SYSCALL does not save any context, therefore userland
  has to save it
. to accomodate multiple kernel entry/exit types, the entry
  type is recorded in the process struct. hitherto all types
  were interrupt (soft int, exception, hard int); now SYSENTER/SYSCALL
  is new, with the difference that context is not fully restored
  from proc struct when running the process again. this can't be
  done as some information is missing.
. complication: cases in which the kernel has to fully change
  process context (i.e. sigreturn). in that case the exit type
  is changed from SYSENTER/SYSEXIT to soft-int (i.e. iret) and
  context is fully restored from the proc struct. this does mean
  the PC and SP must change, as the sysenter/sysexit userland code
  will otherwise try to restore its own context. this is true in the
  sigreturn case.
. override all usage by setting libc_ipc=1
38 files changed:
include/arch/i386/include/archtypes.h
include/arch/i386/include/asm.h
include/arch/i386/include/interrupt.h
include/arch/i386/include/vm.h
include/minix/com.h
include/minix/const.h
include/minix/cpufeature.h
include/minix/ipc.h
include/minix/type.h
kernel/arch/i386/Makefile.inc
kernel/arch/i386/apic.c
kernel/arch/i386/apic_asm.S
kernel/arch/i386/arch_system.c
kernel/arch/i386/arch_watchdog.c
kernel/arch/i386/exception.c
kernel/arch/i386/include/arch_proto.h
kernel/arch/i386/include/archconst.h
kernel/arch/i386/memory.c
kernel/arch/i386/mpx.S
kernel/arch/i386/procoffsets.cf
kernel/arch/i386/protect.c
kernel/arch/i386/sconst.h
kernel/arch/i386/usermapped_data_arch.c [new file with mode: 0644]
kernel/arch/i386/usermapped_glo_ipc.S [new file with mode: 0644]
kernel/main.c
kernel/proc.h
kernel/proto.h
kernel/system/do_sigreturn.c
kernel/system/do_vmctl.c
lib/libc/arch/i386/sys-minix/_ipc.S
lib/libc/arch/i386/sys-minix/_senda.S
lib/libc/sys-minix/init.c
lib/libc/sys-minix/syscall.c
lib/libexec/exec_general.c
lib/libminlib/i386/_cpufeature.c
lib/libsys/kernel_call.c
lib/libsys/taskcall.c
servers/vm/main.c