X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Farch%2Fx86%2Fentry.S;h=8308fb7330cb32ce2530fbad7028392cab8b3b77;hp=997487e2af0437f9b3451cf1911579325e23f7b9;hb=139f54779f6395a1828261423cd8013ca940ff36;hpb=1ac390fe1e18444008857b056c947710be9621a8 diff --git a/kernel/arch/x86/entry.S b/kernel/arch/x86/entry.S index 997487e..8308fb7 100644 --- a/kernel/arch/x86/entry.S +++ b/kernel/arch/x86/entry.S @@ -14,7 +14,7 @@ #include -#define ROSHARED_PTR(x) (x - x86_syscall_ptr + 0x7fff0000) +#define ROSHARED_PTR(x) (x - roshared + 0x7fff0000) .org 0 .code32 @@ -321,6 +321,38 @@ x86_int99_entry: movl $ROSHARED_PTR(x86_shared_int98_ret), (%esp) iret + .global x86_int9a_entry +x86_int9a_entry: + pushl %edx + pushl %eax + enterkernel %edx + + pushl %esp + call x86_new_object + addl $4, %esp + + exitkernel + popl %eax + xorl %ecx, %ecx + xorl %edx, %edx + iret + + .global x86_int9b_entry +x86_int9b_entry: + pushl %edx + pushl %eax + enterkernel %edx + + pushl %esp + call x86_get_iface_hash + addl $4, %esp + + exitkernel + popl %eax + xorl %ecx, %ecx + xorl %edx, %edx + iret + .global x86_irq x86_irq: pushvolatilesnoeax @@ -406,19 +438,7 @@ arch_new_user_thread: iret .section ".roshared","ax" - .align 4096 - - // The vsyscall table must be the first thing in roshared - // (at vaddr 0x7fff0000). - - .global x86_syscall_ptr -x86_syscall_ptr: - .long ROSHARED_PTR(x86_shared_int98) - - .global x86_sysret_ptr -x86_sysret_ptr: - .long ROSHARED_PTR(x86_shared_int99) - +roshared: x86_shared_int98: // FIXME: This must be unpreemptible by traps pushl %gs @@ -437,12 +457,22 @@ x86_shared_int98_ret: popl %gs ret + . = roshared + 0x80 x86_shared_int99: int $0x99 ret + . = roshared + 0x100 +x86_shared_int9a: + int $0x9a + ret + + . = roshared + 0x180 +x86_shared_int9b: + int $0x9b + ret + .global test_user_ptr - .align 4 test_user_ptr: .long ROSHARED_PTR(test_user) @@ -459,7 +489,8 @@ test_objlist: test_user: movl $ROSHARED_PTR(test_pib), %eax - call *0x7fff0000 + movl $0x7fff0000, %ecx + call *%ecx 1: jmp 1b .section ".rwshared","a"