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

64-bit swtch.S

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