#include <arch/addrs.h>
-#define ROSHARED_PTR(x) (x - x86_syscall_ptr + 0x7fff0000)
+#define ROSHARED_PTR(x) (x - roshared + 0x7fff0000)
.org 0
.code32
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
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
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)
test_user:
movl $ROSHARED_PTR(test_pib), %eax
- call *0x7fff0000
+ movl $0x7fff0000, %ecx
+ call *%ecx
1: jmp 1b
.section ".rwshared","a"