GRUB relied on %rdi being preserved across hypercall which isn't true.
+2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/lib/x86_64/xen/relocator.S: Fix hypercall ABI violation.
+
+ GRUB relied on %rdi being preserved across hypercall which isn't true.
+
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement XEN VFB support.
.quad 0
movq %rax, %rdi
+ movq %rax, %rbx
/* mov imm64, %rax */
.byte 0x48
movq $__HYPERVISOR_update_va_mapping, %rax
syscall
- addq $(LOCAL(cont) - LOCAL(base)), %rdi
+ addq $(LOCAL(cont) - LOCAL(base)), %rbx
- jmp *%rdi
+ jmp *%rbx
LOCAL(cont):
VARIABLE(grub_relocator_xen_paging_start)
.quad 0
- movq %rax, %rdi
+ movq %rax, %r12
/* mov imm64, %rax */
.byte 0x48
.quad 0
movq %rax, %rsi
-1:
+1:
+ movq %r12, %rdi
movq %rsi, %rbx
movq 0(%rsi), %rsi
shlq $12, %rsi
movq %r9, %rcx
addq $8, %rbx
- addq $4096, %rdi
+ addq $4096, %r12
movq %rbx, %rsi
loop 1b