1
#ifndef __X86_32_ELF_H__
2
#define __X86_32_ELF_H__
16
unsigned long orig_eax;
24
static inline void elf_core_save_regs(ELF_Gregset *core_regs,
25
crash_xen_core_t *xen_core_regs)
29
asm volatile("movl %%ebx,%0" : "=m"(core_regs->ebx));
30
asm volatile("movl %%ecx,%0" : "=m"(core_regs->ecx));
31
asm volatile("movl %%edx,%0" : "=m"(core_regs->edx));
32
asm volatile("movl %%esi,%0" : "=m"(core_regs->esi));
33
asm volatile("movl %%edi,%0" : "=m"(core_regs->edi));
34
asm volatile("movl %%ebp,%0" : "=m"(core_regs->ebp));
35
asm volatile("movl %%eax,%0" : "=m"(core_regs->eax));
36
asm volatile("movw %%ds, %%ax;" :"=a"(core_regs->ds));
37
asm volatile("movw %%es, %%ax;" :"=a"(core_regs->es));
38
asm volatile("movw %%fs, %%ax;" :"=a"(core_regs->fs));
39
asm volatile("movw %%gs, %%ax;" :"=a"(core_regs->gs));
40
/* orig_eax not filled in for now */
41
core_regs->eip = (unsigned long)elf_core_save_regs;
42
asm volatile("movw %%cs, %%ax;" :"=a"(core_regs->cs));
43
asm volatile("pushfl; popl %0" :"=m"(core_regs->eflags));
44
asm volatile("movl %%esp,%0" : "=m"(core_regs->esp));
45
asm volatile("movw %%ss, %%ax;" :"=a"(core_regs->ss));
47
asm volatile("mov %%cr0, %0" : "=r" (tmp) : );
48
xen_core_regs->cr0 = tmp;
50
asm volatile("mov %%cr2, %0" : "=r" (tmp) : );
51
xen_core_regs->cr2 = tmp;
53
asm volatile("mov %%cr3, %0" : "=r" (tmp) : );
54
xen_core_regs->cr3 = tmp;
56
asm volatile("mov %%cr4, %0" : "=r" (tmp) : );
57
xen_core_regs->cr4 = tmp;
60
#endif /* __X86_32_ELF_H__ */
68
* indent-tabs-mode: nil