aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/entry.S
diff options
context:
space:
mode:
authorKeir Fraser <keir@xensource.com>2007-10-23 09:41:06 +0100
committerKeir Fraser <keir@xensource.com>2007-10-23 09:41:06 +0100
commitf767bbd02828f67d86c2f42d791d5a0c56295c15 (patch)
treeb990cf020f279c57959ca16a18af63038c42b0b0 /xen/arch/x86/x86_64/entry.S
parent24852cb74458c8bb1f68be9f1178b8eac4c744bd (diff)
downloadxen-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.S18
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)