diff options
author | Keir Fraser <keir@xensource.com> | 2007-10-23 09:41:06 +0100 |
---|---|---|
committer | Keir Fraser <keir@xensource.com> | 2007-10-23 09:41:06 +0100 |
commit | f767bbd02828f67d86c2f42d791d5a0c56295c15 (patch) | |
tree | b990cf020f279c57959ca16a18af63038c42b0b0 /xen/arch/x86/x86_64/entry.S | |
parent | 24852cb74458c8bb1f68be9f1178b8eac4c744bd (diff) | |
download | xen-f767bbd02828f67d86c2f42d791d5a0c56295c15.tar.gz xen-f767bbd02828f67d86c2f42d791d5a0c56295c15.tar.bz2 xen-f767bbd02828f67d86c2f42d791d5a0c56295c15.zip |
x86: Fix xentrace of hypercalls in debug builds of Xen.
Based on a patch by Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/x86_64/entry.S')
-rw-r--r-- | xen/arch/x86/x86_64/entry.S | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index ca67151e0b..dfc4df8942 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -148,18 +148,22 @@ ENTRY(syscall_enter) movq UREGS_rax(%rsp),%rax pushq %rax pushq UREGS_rip+8(%rsp) +#define SHADOW_BYTES 16 /* Shadow EIP + shadow hypercall # */ +#else +#define SHADOW_BYTES 0 /* No on-stack shadow state */ #endif cmpb $0,tb_init_done(%rip) je tracing_off call trace_hypercall /* Now restore all the registers that trace_hypercall clobbered */ - movq UREGS_rax(%rsp),%rax /* Hypercall # */ - movq UREGS_rdi(%rsp),%rdi /* Arg 1 */ - movq UREGS_rsi(%rsp),%rsi /* Arg 2 */ - movq UREGS_rdx(%rsp),%rdx /* Arg 3 */ - movq UREGS_r10(%rsp),%rcx /* Arg 4 */ - movq UREGS_rdi(%rsp),%r8 /* Arg 5 */ - movq UREGS_rbp(%rsp),%r9 /* Arg 6 */ + movq UREGS_rax+SHADOW_BYTES(%rsp),%rax /* Hypercall # */ + movq UREGS_rdi+SHADOW_BYTES(%rsp),%rdi /* Arg 1 */ + movq UREGS_rsi+SHADOW_BYTES(%rsp),%rsi /* Arg 2 */ + movq UREGS_rdx+SHADOW_BYTES(%rsp),%rdx /* Arg 3 */ + movq UREGS_r10+SHADOW_BYTES(%rsp),%rcx /* Arg 4 */ + movq UREGS_rdi+SHADOW_BYTES(%rsp),%r8 /* Arg 5 */ + movq UREGS_rbp+SHADOW_BYTES(%rsp),%r9 /* Arg 6 */ +#undef SHADOW_BYTES tracing_off: leaq hypercall_table(%rip),%r10 PERFC_INCR(PERFC_hypercalls, %rax, %rbx) |