summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2009-02-24 03:28:27 +0100
committerNeal H. Walfield <neal@gnu.org>2009-02-24 03:28:27 +0100
commitb7808dc11f8433dfa4b706f2a819e11ce4f370c7 (patch)
tree0d838766b28014f797b2ec232068f16371b3a2dd
parente3791678aeb77756ee517fbd0af2600ea32033c9 (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.h12
-rw-r--r--viengoos/server.c25
-rw-r--r--viengoos/sysdeps/x86_64/syscall.c10
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"