[MIPS] Kexec: Fix several 64-bit bugs.
authorRalf Baechle <ralf@linux-mips.org>
Tue, 31 Jul 2007 14:17:21 +0000 (15:17 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 31 Jul 2007 20:35:36 +0000 (21:35 +0100)
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/kernel/relocate_kernel.S

index a3f0d00c13349aecae7997c97b530c5ea417c070..87481f916a61bb4ed8743a5d1b2b5b3778639daa 100644 (file)
 #include <asm/stackframe.h>
 #include <asm/addrspace.h>
 
-       .globl relocate_new_kernel
-relocate_new_kernel:
-
-       PTR_L   s0, kexec_indirection_page
-       PTR_L   s1, kexec_start_address
+LEAF(relocate_new_kernel)
+       PTR_L           s0, kexec_indirection_page
+       PTR_L           s1, kexec_start_address
 
 process_entry:
-       PTR_L   s2, (s0)
-       PTR_ADD s0, s0, SZREG
+       PTR_L           s2, (s0)
+       PTR_ADD         s0, s0, SZREG
 
        /* destination page */
-       and     s3, s2, 0x1
-       beq     s3, zero, 1f
-       and     s4, s2, ~0x1    /* store destination addr in s4 */
-       move    a0, s4
-       b       process_entry
+       and             s3, s2, 0x1
+       beq             s3, zero, 1f
+       and             s4, s2, ~0x1    /* store destination addr in s4 */
+       move            a0, s4
+       b               process_entry
 
 1:
        /* indirection page, update s0  */
-       and     s3, s2, 0x2
-       beq     s3, zero, 1f
-       and     s0, s2, ~0x2
-       b       process_entry
+       and             s3, s2, 0x2
+       beq             s3, zero, 1f
+       and             s0, s2, ~0x2
+       b               process_entry
 
 1:
        /* done page */
-       and     s3, s2, 0x4
-       beq     s3, zero, 1f
-       b       done
+       and             s3, s2, 0x4
+       beq             s3, zero, 1f
+       b               done
 1:
        /* source page */
-       and     s3, s2, 0x8
-       beq     s3, zero, process_entry
-       and     s2, s2, ~0x8
-       li      s6, (1 << PAGE_SHIFT) / SZREG
+       and             s3, s2, 0x8
+       beq             s3, zero, process_entry
+       and             s2, s2, ~0x8
+       li              s6, (1 << PAGE_SHIFT) / SZREG
 
 copy_word:
        /* copy page word by word */
-       REG_L   s5, (s2)
-       REG_S   s5, (s4)
-       INT_ADD s4, s4, SZREG
-       INT_ADD s2, s2, SZREG
-       INT_SUB s6, s6, 1
-       beq     s6, zero, process_entry
-       b       copy_word
-       b       process_entry
+       REG_L           s5, (s2)
+       REG_S           s5, (s4)
+       PTR_ADD         s4, s4, SZREG
+       PTR_ADD         s2, s2, SZREG
+       LONG_SUB        s6, s6, 1
+       beq             s6, zero, process_entry
+       b               copy_word
+       b               process_entry
 
 done:
        /* jump to kexec_start_address */
-       j       s1
+       j               s1
+       END(relocate_new_kernel)
 
-       .globl kexec_start_address
 kexec_start_address:
-       .long   0x0
+       EXPORT(kexec_start_address)
+       PTR             0x0
+       .size           kexec_start_address, PTRSIZE
 
-       .globl kexec_indirection_page
 kexec_indirection_page:
-       .long   0x0
+       EXPORT(kexec_indirection_page)
+       PTR             0
+       .size           kexec_indirection_page, PTRSIZE
 
 relocate_new_kernel_end:
 
-       .globl relocate_new_kernel_size
 relocate_new_kernel_size:
-       .long relocate_new_kernel_end - relocate_new_kernel
+       EXPORT(relocate_new_kernel_size)
+       PTR             relocate_new_kernel_end - relocate_new_kernel
+       .size           relocate_new_kernel_size, PTRSIZE