提交 d9545e8b 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

64-bit swtch.S

上级 6ed206c5
...@@ -40,9 +40,16 @@ struct vmap { ...@@ -40,9 +40,16 @@ struct vmap {
}; };
// Saved registers for kernel context switches. // Saved registers for kernel context switches.
// (also implicitly defined in swtch.S)
struct context { struct context {
u64 r15;
u64 r14;
u64 r13;
u64 r12;
u64 rbp;
u64 rbx;
u64 rip; u64 rip;
}; } __attribute__((packed));
// Per-process, per-stack meta data for mtrace // Per-process, per-stack meta data for mtrace
#define MTRACE_NSTACKS 16 #define MTRACE_NSTACKS 16
......
...@@ -4,29 +4,23 @@ ...@@ -4,29 +4,23 @@
# #
# Save current register context in old # Save current register context in old
# and then load register context from new. # and then load register context from new.
# %rdi holds old, %rsi holds new.
.globl swtch .globl swtch
swtch: swtch:
jmp swtch pushq %rbx
#if 0 pushq %rbp
movl 4(%esp), %eax pushq %r12
movl 8(%esp), %edx pushq %r13
pushq %r14
# Save old callee-save registers pushq %r15
pushl %ebp
pushl %ebx
pushl %esi
pushl %edi
# Switch stacks movq %rsp, (%rdi)
movl %esp, (%eax) movq %rsi, %rsp
movl %edx, %esp
# Load new callee-save registers popq %r15
popl %edi popq %r14
popl %esi popq %r13
popl %ebx popq %r12
popl %ebp popq %rbp
popq %rbx
ret ret
#endif
\ No newline at end of file
...@@ -130,6 +130,7 @@ static inline void lcr3(u64 val) ...@@ -130,6 +130,7 @@ static inline void lcr3(u64 val)
// Layout of the trap frame built on the stack by the // Layout of the trap frame built on the stack by the
// hardware and by trapasm.S, and passed to trap(). // hardware and by trapasm.S, and passed to trap().
struct trapframe { struct trapframe {
// amd64 ABI callee saved registers
u64 r15; u64 r15;
u64 r14; u64 r14;
u64 r13; u64 r13;
...@@ -137,7 +138,7 @@ struct trapframe { ...@@ -137,7 +138,7 @@ struct trapframe {
u64 rbp; u64 rbp;
u64 rbx; u64 rbx;
// amd64 ABI callee saved registers // amd64 ABI caller saved registers
u64 r11; u64 r11;
u64 r10; u64 r10;
u64 r9; u64 r9;
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论