aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/entry.S
diff options
context:
space:
mode:
authorKeir Fraser <keir@xensource.com>2007-10-12 13:06:02 +0100
committerKeir Fraser <keir@xensource.com>2007-10-12 13:06:02 +0100
commit06a73c9f9380bba455cbf1a5502b902d01a5dc3f (patch)
tree56e70068152a5fb6d4a893a15c3cf4449549d919 /xen/arch/x86/x86_64/entry.S
parent70c2e55854116bee937026175e54985a73f159fa (diff)
downloadxen-06a73c9f9380bba455cbf1a5502b902d01a5dc3f.tar.gz
xen-06a73c9f9380bba455cbf1a5502b902d01a5dc3f.tar.bz2
xen-06a73c9f9380bba455cbf1a5502b902d01a5dc3f.zip
xentrace/x86: PV guest tracing extensions.
From: George Dunlap <gdunlap@xensource.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.S12
1 files changed, 12 insertions, 0 deletions
diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S
index 30d3bf38ce..ad9e9ceebc 100644
--- a/xen/arch/x86/x86_64/entry.S
+++ b/xen/arch/x86/x86_64/entry.S
@@ -148,6 +148,18 @@ ENTRY(syscall_enter)
pushq %rax
pushq UREGS_rip+8(%rsp)
#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 */
+tracing_off:
leaq hypercall_table(%rip),%r10
PERFC_INCR(PERFC_hypercalls, %rax, %rbx)
callq *(%r10,%rax,8)