blob: 3fb94deedc7b9bc7ff3c88b28a450e9e7fbe3654 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#ifndef __X86_REGS_H__
#define __X86_REGS_H__
#include <asm/x86_64/regs.h>
#define guest_mode(r) \
({ \
unsigned long diff = (char *)guest_cpu_user_regs() - (char *)(r); \
/* Frame pointer must point into current CPU stack. */ \
ASSERT(diff < STACK_SIZE); \
/* If not a guest frame, it must be a hypervisor frame. */ \
if ( diff < PRIMARY_STACK_SIZE ) \
ASSERT(!diff || ((r)->cs == __HYPERVISOR_CS)); \
/* Return TRUE if it's a guest frame. */ \
!diff || ((r)->cs != __HYPERVISOR_CS); \
})
#define read_sreg(name) ({ \
unsigned int __sel; \
asm ( "mov %%" STR(name) ",%0" : "=r" (__sel) ); \
__sel; \
})
static inline void read_sregs(struct cpu_user_regs *regs)
{
asm ( "mov %%ds, %0" : "=m" (regs->ds) );
asm ( "mov %%es, %0" : "=m" (regs->es) );
asm ( "mov %%fs, %0" : "=m" (regs->fs) );
asm ( "mov %%gs, %0" : "=m" (regs->gs) );
}
#endif /* __X86_REGS_H__ */
|