]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
64-bit bugfixes
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 3 Aug 2009 11:45:37 +0000 (13:45 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 3 Aug 2009 11:45:37 +0000 (13:45 +0200)
lib/i386/relocator_asm.S

index 3ef1fa08384ceda3cbbc0a9f18a85bff044cbfa5..f16d7f2634f303fafe4f4bb0a6667319d6fc0542 100644 (file)
@@ -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. */