x86: Uses rbx for the initial vcoreid (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 18:42:55 +0000 (14:42 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Mar 2015 19:18:55 +0000 (15:18 -0400)
Using rax prevents us from using SW contexts.

Rebuild your toolchain.  You don't need to make clean.

kern/arch/x86/process64.c
user/parlib/include/x86/vcore32.h
user/parlib/include/x86/vcore64.h

index 3e6dc38..b942722 100644 (file)
@@ -93,7 +93,7 @@ void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
        tf->tf_rip = entryp;
        /* Coupled closely with user's entry.S.  id is the vcoreid, which entry.S
         * uses to determine what to do.  vcoreid == 0 is the main core/context. */
-       tf->tf_rax = vcoreid;
+       tf->tf_rbx = vcoreid;
        tf->tf_fsbase = tls_desc;
        proc_secure_ctx(ctx);
 }
index d3a3e3d..d133273 100644 (file)
@@ -316,7 +316,7 @@ static inline void init_user_ctx(struct user_context *ctx, uint32_t entry_pt,
 // this is how we get our thread id on entry.
 #define __vcore_id_on_entry \
 ({ \
-       register int temp asm ("eax"); \
+       register int temp asm ("ebx"); \
        temp; \
 })
 
index 9ae612d..d746392 100644 (file)
@@ -355,7 +355,7 @@ static inline void init_user_ctx(struct user_context *ctx, uintptr_t entry_pt,
 // this is how we get our thread id on entry.
 #define __vcore_id_on_entry \
 ({ \
-       register int temp asm ("rax"); \
+       register int temp asm ("rbx"); \
        temp; \
 })