From c2a583ec38e29afa894a236c2bda65bf1e0bb83c Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Mon, 3 Aug 2009 13:45:37 +0200 Subject: [PATCH] 64-bit bugfixes --- lib/i386/relocator_asm.S | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/i386/relocator_asm.S b/lib/i386/relocator_asm.S index 3ef1fa083..f16d7f263 100644 --- a/lib/i386/relocator_asm.S +++ b/lib/i386/relocator_asm.S @@ -89,12 +89,13 @@ RELOCATOR_VARIABLE(dest) mov %eax, %edi /* mov imm64, %rax */ + .byte 0x48 .byte 0xb8 RELOCATOR_VARIABLE(src) .long 0, 0 mov %rax, %rsi - xorl %rcx, %rcx + xorq %rcx, %rcx /* mov imm32, %ecx */ .byte 0xb9 RELOCATOR_VARIABLE(size) @@ -109,13 +110,13 @@ RELOCATOR_VARIABLE(size) #ifdef BACKWARD /* Backward movsl is implicitly off-by-four. compensate that. */ - subl $4, %rsi - subl $4, %rdi + subq $4, %rsi + subq $4, %rdi /* Backward copy. */ std - addl %rcx, %rsi - addl %rcx, %rdi + addq %rcx, %rsi + addq %rcx, %rdi rep movsl @@ -230,7 +231,11 @@ RELOCATOR_VARIABLE (edx) .byte 0xea RELOCATOR_VARIABLE (eip) .long 0 +#ifdef __x86_64__ + .word 0x10 +#else .word 0x08 +#endif #ifdef __x86_64__ /* GDT. Copied from loader/i386/linux.c. */