1
#ifndef __X86_64_ELF_H__
2
#define __X86_64_ELF_H__
20
unsigned long orig_rax;
26
unsigned long thread_fs;
27
unsigned long thread_gs;
34
static inline void elf_core_save_regs(ELF_Gregset *core_regs,
35
crash_xen_core_t *xen_core_regs)
39
asm volatile("movq %%r15,%0" : "=m"(core_regs->r15));
40
asm volatile("movq %%r14,%0" : "=m"(core_regs->r14));
41
asm volatile("movq %%r13,%0" : "=m"(core_regs->r13));
42
asm volatile("movq %%r12,%0" : "=m"(core_regs->r12));
43
asm volatile("movq %%rbp,%0" : "=m"(core_regs->rbp));
44
asm volatile("movq %%rbx,%0" : "=m"(core_regs->rbx));
45
asm volatile("movq %%r11,%0" : "=m"(core_regs->r11));
46
asm volatile("movq %%r10,%0" : "=m"(core_regs->r10));
47
asm volatile("movq %%r9,%0" : "=m"(core_regs->r9));
48
asm volatile("movq %%r8,%0" : "=m"(core_regs->r8));
49
asm volatile("movq %%rax,%0" : "=m"(core_regs->rax));
50
asm volatile("movq %%rcx,%0" : "=m"(core_regs->rcx));
51
asm volatile("movq %%rdx,%0" : "=m"(core_regs->rdx));
52
asm volatile("movq %%rsi,%0" : "=m"(core_regs->rsi));
53
asm volatile("movq %%rdi,%0" : "=m"(core_regs->rdi));
54
/* orig_rax not filled in for now */
55
core_regs->rip = (unsigned long)elf_core_save_regs;
56
asm volatile("movl %%cs, %%eax;" :"=a"(core_regs->cs));
57
asm volatile("pushfq; popq %0" :"=m"(core_regs->eflags));
58
asm volatile("movq %%rsp,%0" : "=m"(core_regs->rsp));
59
asm volatile("movl %%ss, %%eax;" :"=a"(core_regs->ss));
60
/* thread_fs not filled in for now */
61
/* thread_gs not filled in for now */
62
asm volatile("movl %%ds, %%eax;" :"=a"(core_regs->ds));
63
asm volatile("movl %%es, %%eax;" :"=a"(core_regs->es));
64
asm volatile("movl %%fs, %%eax;" :"=a"(core_regs->fs));
65
asm volatile("movl %%gs, %%eax;" :"=a"(core_regs->gs));
67
asm volatile("mov %%cr0, %0" : "=r" (tmp) : );
68
xen_core_regs->cr0 = tmp;
70
asm volatile("mov %%cr2, %0" : "=r" (tmp) : );
71
xen_core_regs->cr2 = tmp;
73
asm volatile("mov %%cr3, %0" : "=r" (tmp) : );
74
xen_core_regs->cr3 = tmp;
76
asm volatile("mov %%cr4, %0" : "=r" (tmp) : );
77
xen_core_regs->cr4 = tmp;
80
#endif /* __X86_64_ELF_H__ */
88
* indent-tabs-mode: nil