x86/boot: use %ecx instead of %eax

Use %ecx instead of %eax to store low memory upper limit from EBDA.
This way we do not wipe multiboot protocol identifier. It is needed
in reloc() to differentiate between multiboot (v1) and
multiboot2 protocol.

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
Daniel Kiper authored and Jan Beulich committed 2016-08-25 14:03:24 +02:00
1 parent 8290b39f2b
commit 8bc02b47e5
1 file changed
+12 -12
+12 -12
View File
@@ -87,14 +87,14 @@ __start:
jne not_multiboot
/* Set up trampoline segment 64k below EBDA */
movzwl 0x40e,%eax /* EBDA segment */
cmp $0xa000,%eax /* sanity check (high) */
movzwl 0x40e,%ecx /* EBDA segment */
cmp $0xa000,%ecx /* sanity check (high) */
jae 0f
cmp $0x4000,%eax /* sanity check (low) */
cmp $0x4000,%ecx /* sanity check (low) */
jae 1f
0:
movzwl 0x413,%eax /* use base memory size on failure */
shl $10-4,%eax
movzwl 0x413,%ecx /* use base memory size on failure */
shl $10-4,%ecx
1:
/*
* Compare the value in the BDA with the information from the
@@ -106,20 +106,20 @@ __start:
cmp $0x100,%edx /* is the multiboot value too small? */
jb 2f /* if so, do not use it */
shl $10-4,%edx
cmp %eax,%edx /* compare with BDA value */
cmovb %edx,%eax /* and use the smaller */
cmp %ecx,%edx /* compare with BDA value */
cmovb %edx,%ecx /* and use the smaller */
2: /* Reserve 64kb for the trampoline */
sub $0x1000,%eax
sub $0x1000,%ecx
/* From arch/x86/smpboot.c: start_eip had better be page-aligned! */
xor %al, %al
shl $4, %eax
mov %eax,sym_phys(trampoline_phys)
xor %cl, %cl
shl $4, %ecx
mov %ecx,sym_phys(trampoline_phys)
/* Save the Multiboot info struct (after relocation) for later use. */
mov $sym_phys(cpu0_stack)+1024,%esp
push %eax /* Boot trampoline address. */
push %ecx /* Boot trampoline address. */
push %ebx /* Multiboot information address. */
call reloc
mov %eax,sym_phys(multiboot_ptr)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.