diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-02-24 03:28:27 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-02-24 03:28:27 +0100 |
commit | b7808dc11f8433dfa4b706f2a819e11ce4f370c7 (patch) | |
tree | 0d838766b28014f797b2ec232068f16371b3a2dd | |
parent | e3791678aeb77756ee517fbd0af2600ea32033c9 (diff) |
Revert "When making a system call, pass the return address in rbp."
This reverts commit 603de8d432d2e1f025e0f98b744440d95eb7a427.
-rw-r--r-- | libviengoos/viengoos/x86_64/ipc.h | 12 | ||||
-rw-r--r-- | viengoos/server.c | 25 | ||||
-rw-r--r-- | viengoos/sysdeps/x86_64/syscall.c | 10 |
3 files changed, 10 insertions, 37 deletions
diff --git a/libviengoos/viengoos/x86_64/ipc.h b/libviengoos/viengoos/x86_64/ipc.h index 0eadeca..5ae6ee4 100644 --- a/libviengoos/viengoos/x86_64/ipc.h +++ b/libviengoos/viengoos/x86_64/ipc.h @@ -33,9 +33,6 @@ vg_ipc_syscall (uintptr_t flags, error_t err = 0; int dummy; -#ifndef NDEBUG - uint64_t ret = __builtin_return_address (0); -#endif __asm__ __volatile__ ("movq %[recv_inline_cap], %%r8\n\t" "movq %[send_activity], %%r9\n\t" @@ -46,18 +43,13 @@ vg_ipc_syscall (uintptr_t flags, "movq %[send_inline_cap], %%r15\n\t" "movq %[target_messenger], %%rax\n\t" "pushq %%rbp\n\t" - "mov %%rcx, %%rbp\n\t" "syscall\n\t" "popq %%rbp\n\t" - : "=a" (err), "=D"(dummy), "=S"(dummy), "=d"(dummy), "=b"(dummy), - "=c"(dummy) + : "=a" (err), "=D"(dummy), "=S"(dummy), "=d"(dummy), "=b"(dummy) : "D" (flags), "S" (recv_activity), "d" (recv_messenger), "b" (recv_buf), -#ifndef NDEBUG - "c" (ret), -#endif [recv_inline_cap] "m" (recv_inline_cap), [send_activity] "m" (send_activity), [target_messenger] "m" (target_messenger), @@ -66,7 +58,7 @@ vg_ipc_syscall (uintptr_t flags, [send_inline_word1] "m" (send_inline_word1), [send_inline_word2] "m" (send_inline_word2), [send_inline_cap] "m" (send_inline_cap) - : "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + : "rcx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "memory"); return err; diff --git a/viengoos/server.c b/viengoos/server.c index 2c74018..33ac0d9 100644 --- a/viengoos/server.c +++ b/viengoos/server.c @@ -87,22 +87,21 @@ static struct debug_command trace_buffer_debug = { \ if (level <= 4) \ trace_buffer_add (&rpc_trace, \ - "("OBJECT_NAME_FMT"@%"PRIxPTR \ - " %s %"PRIdPTR") " format, \ + "("OBJECT_NAME_FMT" %s %"PRIdPTR") " format, \ OBJECT_NAME_PRINTF ((struct vg_object *) thread), \ - user_ret, METHOD, METHOD_ID, \ + METHOD, METHOD_ID, \ ##args); \ - debug (level, "("OBJECT_NAME_FMT"@%"PRIxPTR" %s:%"PRIdPTR") " format, \ + debug (level, "("OBJECT_NAME_FMT" %s:%"PRIdPTR") " format, \ OBJECT_NAME_PRINTF ((struct vg_object *) thread), \ - user_ret, METHOD, METHOD_ID, ##args); \ + METHOD, METHOD_ID, ##args); \ } \ while (0) #else # define DEBUG(level, format, args...) \ - debug (level, "("OBJECT_NAME_FMT"@%"PRIxPTR" %s:%"PRIdPTR") " format, \ - OBJECT_NAME_PRINTF ((struct vg_object *) thread), \ - user_ret, METHOD, METHOD_ID, ##args) + debug (level, "("OBJECT_NAME_FMT" %s:%"PRIdPTR") " format, \ + OBJECT_NAME_PRINTF ((struct vg_object *) thread), \ + METHOD, METHOD_ID, ##args) #endif void @@ -116,8 +115,6 @@ server_bootstrap (void) bool page_fault_handler (struct thread *thread, uintptr_t fault, int access) { - uintptr_t user_ret = thread_ip (thread); - #define METHOD "pagefault" #define METHOD_ID ((uintptr_t) (0)) @@ -304,12 +301,6 @@ page_fault_handler (struct thread *thread, uintptr_t fault, int access) return true; } -#ifndef NDEBUG -extern uintptr_t user_ret; -#else -# define user_ret ((uintptr_t) 0) -#endif - void dispatcher (uintptr_t flags, vg_addr_t recv_activity, vg_addr_t recv_messenger, @@ -1459,8 +1450,6 @@ dispatcher (uintptr_t flags, folio_object_content_set (folio, objects_folio_offset (target), false); - memory_object_destroy (principal, target); - memory_frame_free ((uintptr_t) target); vg_object_discard_reply (activity, reply); break; diff --git a/viengoos/sysdeps/x86_64/syscall.c b/viengoos/sysdeps/x86_64/syscall.c index e43ac19..6481538 100644 --- a/viengoos/sysdeps/x86_64/syscall.c +++ b/viengoos/sysdeps/x86_64/syscall.c @@ -42,24 +42,16 @@ returner (void) panic ("Failed to schedule something!!!"); } -#ifndef NDEBUG -uintptr_t user_ret; -#endif - static void __attribute__ ((used)) dummy (void) { #define S_(x) #x #define S(x) S_(x) - /* On entry, RCX contains the user's RIP and R11 the user's flags. */ + /* On entry, RCX contains the old RIP. */ asm volatile (".global syscall_entry\n\t" "syscall_entry:\n\t" -#ifndef NDEBUG - "mov %%rbp, user_ret\n\t" -#endif - /* Save the user's RSP in RBP and switch to the kernel stack. */ "mov %%rsp, %%rbp\n\t" "leaq stack_end, %%rsp\n\t" |