diff options
Diffstat (limited to 'arch/x86/boot/compressed/head_64.S')
-rw-r--r-- | arch/x86/boot/compressed/head_64.S | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index e8657b98c902..7a212a62db36 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <asm/segment.h> | 28 | #include <asm/segment.h> |
29 | #include <asm/pgtable.h> | 29 | #include <asm/pgtable.h> |
30 | #include <asm/page.h> | 30 | #include <asm/page.h> |
31 | #include <asm/boot.h> | ||
31 | #include <asm/msr.h> | 32 | #include <asm/msr.h> |
32 | #include <asm/asm-offsets.h> | 33 | #include <asm/asm-offsets.h> |
33 | 34 | ||
@@ -62,7 +63,7 @@ startup_32: | |||
62 | subl $1b, %ebp | 63 | subl $1b, %ebp |
63 | 64 | ||
64 | /* setup a stack and make sure cpu supports long mode. */ | 65 | /* setup a stack and make sure cpu supports long mode. */ |
65 | movl $user_stack_end, %eax | 66 | movl $boot_stack_end, %eax |
66 | addl %ebp, %eax | 67 | addl %ebp, %eax |
67 | movl %eax, %esp | 68 | movl %eax, %esp |
68 | 69 | ||
@@ -274,7 +275,7 @@ relocated: | |||
274 | stosb | 275 | stosb |
275 | 276 | ||
276 | /* Setup the stack */ | 277 | /* Setup the stack */ |
277 | leaq user_stack_end(%rip), %rsp | 278 | leaq boot_stack_end(%rip), %rsp |
278 | 279 | ||
279 | /* zero EFLAGS after setting rsp */ | 280 | /* zero EFLAGS after setting rsp */ |
280 | pushq $0 | 281 | pushq $0 |
@@ -285,7 +286,7 @@ relocated: | |||
285 | */ | 286 | */ |
286 | pushq %rsi # Save the real mode argument | 287 | pushq %rsi # Save the real mode argument |
287 | movq %rsi, %rdi # real mode address | 288 | movq %rsi, %rdi # real mode address |
288 | leaq _heap(%rip), %rsi # _heap | 289 | leaq boot_heap(%rip), %rsi # malloc area for uncompression |
289 | leaq input_data(%rip), %rdx # input_data | 290 | leaq input_data(%rip), %rdx # input_data |
290 | movl input_len(%rip), %eax | 291 | movl input_len(%rip), %eax |
291 | movq %rax, %rcx # input_len | 292 | movq %rax, %rcx # input_len |
@@ -310,9 +311,12 @@ gdt: | |||
310 | .quad 0x0080890000000000 /* TS descriptor */ | 311 | .quad 0x0080890000000000 /* TS descriptor */ |
311 | .quad 0x0000000000000000 /* TS continued */ | 312 | .quad 0x0000000000000000 /* TS continued */ |
312 | gdt_end: | 313 | gdt_end: |
313 | .bss | 314 | |
314 | /* Stack for uncompression */ | 315 | .bss |
315 | .balign 4 | 316 | /* Stack and heap for uncompression */ |
316 | user_stack: | 317 | .balign 4 |
317 | .fill 4096,4,0 | 318 | boot_heap: |
318 | user_stack_end: | 319 | .fill BOOT_HEAP_SIZE, 1, 0 |
320 | boot_stack: | ||
321 | .fill BOOT_STACK_SIZE, 1, 0 | ||
322 | boot_stack_end: | ||