#include <arch/addrs.h>
-#define ROSHARED_PTR(x) (x - x86_syscall_ptr + 0x7fff0000)
+#define ROSHARED_PTR(x) (x - roshared + 0x7fff0000)
.org 0
.code32
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
.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"