Files
xen/extras/mini-os/x86_64.S
T
kaf24@scramble.cl.cam.ac.uk 5deb88b1a9 bitkeeper revision 1.1236.1.36 (4221cfd30UrMyu3TpXKGjVNXNVS1Bw)
Update 'xen version' in guest-OS images to 3.0.
Signed-off-by: Keir Fraser <keir@xensource.com>
2005-02-27 13:49:07 +00:00

223 lines
4.6 KiB
ArmAsm

#include <os.h>
.section __xen_guest
.asciz "XEN_VER=3.0,LOADER=generic,PT_MODE_WRITABLE"
.text
#define ENTRY(X) .globl X ; X :
.globl _start, shared_info
#define SAVE_ALL \
cld; \
pushq %rdi; \
pushq %rsi; \
pushq %rdx; \
pushq %rcx; \
pushq %rax; \
pushq %r8; \
pushq %r9; \
pushq %r10; \
pushq %r11; \
pushq %rbx; \
pushq %rbp; \
pushq %r12; \
pushq %r13; \
pushq %r14; \
pushq %r15;
#define RESTORE_ALL \
popq %r15; \
popq %r14; \
popq %r13; \
popq %r12; \
popq %rbp; \
popq %rbx; \
popq %r11; \
popq %r10; \
popq %r9; \
popq %r8; \
popq %rax; \
popq %rcx; \
popq %rdx; \
popq %rsi; \
popq %rdi
_start:
cld
movq stack_start(%rip),%rsp
movq %rsi,%rdi
call start_kernel
stack_start:
.quad stack+8192
/* Unpleasant -- the PTE that maps this page is actually overwritten */
/* to map the real shared-info page! :-) */
.org 0x1000
shared_info:
.org 0x2000
ENTRY(hypervisor_callback)
popq %rcx
popq %r11
iretq
ENTRY(failsafe_callback)
popq %rcx
popq %r11
iretq
error_code:
SAVE_ALL
movq %rsp,%rdi
movl 15*8+4(%rsp),%eax
leaq exception_table(%rip),%rdx
callq *(%rdx,%rax,8)
RESTORE_ALL
addq $8,%rsp
iretq
ENTRY(divide_error)
popq %rcx
popq %r11
pushq $0
movl $TRAP_divide_error,4(%rsp)
jmp error_code
ENTRY(coprocessor_error)
popq %rcx
popq %r11
pushq $0
movl $TRAP_copro_error,4(%rsp)
jmp error_code
ENTRY(simd_coprocessor_error)
popq %rcx
popq %r11
pushq $0
movl $TRAP_simd_error,4(%rsp)
jmp error_code
ENTRY(device_not_available)
popq %rcx
popq %r11
movl $TRAP_no_device,4(%rsp)
jmp error_code
ENTRY(debug)
popq %rcx
popq %r11
pushq $0
movl $TRAP_debug,4(%rsp)
jmp error_code
ENTRY(int3)
popq %rcx
popq %r11
pushq $0
movl $TRAP_int3,4(%rsp)
jmp error_code
ENTRY(overflow)
popq %rcx
popq %r11
pushq $0
movl $TRAP_overflow,4(%rsp)
jmp error_code
ENTRY(bounds)
popq %rcx
popq %r11
pushq $0
movl $TRAP_bounds,4(%rsp)
jmp error_code
ENTRY(invalid_op)
popq %rcx
popq %r11
pushq $0
movl $TRAP_invalid_op,4(%rsp)
jmp error_code
ENTRY(coprocessor_segment_overrun)
popq %rcx
popq %r11
pushq $0
movl $TRAP_copro_seg,4(%rsp)
jmp error_code
ENTRY(invalid_TSS)
popq %rcx
popq %r11
movl $TRAP_invalid_tss,4(%rsp)
jmp error_code
ENTRY(segment_not_present)
popq %rcx
popq %r11
movl $TRAP_no_segment,4(%rsp)
jmp error_code
ENTRY(stack_segment)
popq %rcx
popq %r11
movl $TRAP_stack_error,4(%rsp)
jmp error_code
ENTRY(general_protection)
popq %rcx
popq %r11
movl $TRAP_gp_fault,4(%rsp)
jmp error_code
ENTRY(alignment_check)
popq %rcx
popq %r11
movl $TRAP_alignment_check,4(%rsp)
jmp error_code
ENTRY(virt_cr2)
.quad 0
ENTRY(page_fault)
popq %rcx
popq %r11
popq virt_cr2(%rip)
movl $TRAP_page_fault,4(%rsp)
jmp error_code
ENTRY(machine_check)
popq %rcx
popq %r11
pushq $0
movl $TRAP_machine_check,4(%rsp)
jmp error_code
ENTRY(spurious_interrupt_bug)
popq %rcx
popq %r11
pushq $0
movl $TRAP_spurious_int,4(%rsp)
jmp error_code
ENTRY(exception_table)
.quad do_divide_error
.quad do_debug
.quad 0 # nmi
.quad do_int3
.quad do_overflow
.quad do_bounds
.quad do_invalid_op
.quad 0
.quad 0
.quad do_coprocessor_segment_overrun
.quad do_invalid_TSS
.quad do_segment_not_present
.quad do_stack_segment
.quad do_general_protection
.quad do_page_fault
.quad do_spurious_interrupt_bug
.quad do_coprocessor_error
.quad do_alignment_check
.quad do_machine_check
.quad do_simd_coprocessor_error