2d72cbec41
. 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 |
||
---|---|---|
.. | ||
arch/i386 | ||
system | ||
clock.c | ||
clock.h | ||
config.h | ||
const.h | ||
cpulocals.c | ||
cpulocals.h | ||
debug.c | ||
debug.h | ||
extract-errno.sh | ||
extract-mfield.sh | ||
extract-mtype.sh | ||
glo.h | ||
interrupt.c | ||
interrupt.h | ||
ipc.h | ||
kernel.h | ||
main.c | ||
Makefile | ||
perf.h | ||
priv.h | ||
proc.c | ||
proc.h | ||
profile.c | ||
profile.h | ||
proto.h | ||
smp.c | ||
smp.h | ||
spinlock.h | ||
system.c | ||
system.h | ||
table.c | ||
type.h | ||
usermapped_data.c | ||
utility.c | ||
vm.h | ||
watchdog.c | ||
watchdog.h |