[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86: fix early boot output
commit b1c16800e52743d9afd9af62c810f03af16dd942 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Wed Jul 19 10:22:56 2023 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Jul 19 10:22:56 2023 +0200 x86: fix early boot output Loading the VGA base address involves sym_esi(), i.e. %esi still needs to hold the relocation base address. Therefore the address of the message to output cannot be "passed" in %esi. Put the message offset in %ecx instead, adding it into %esi _after_ its last use as base address. Fixes: b28044226e1c ("x86: make Xen early boot code relocatable") Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/boot/head.S | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S index 1eb829ab41..d8ac0f0494 100644 --- a/xen/arch/x86/boot/head.S +++ b/xen/arch/x86/boot/head.S @@ -146,17 +146,17 @@ efi_platform: early_error: /* Here to improve the disassembly. */ .Lbad_cpu: - add $sym_offs(.Lbad_cpu_msg), %esi + mov $sym_offs(.Lbad_cpu_msg), %ecx jmp .Lget_vtb .Lnot_multiboot: - add $sym_offs(.Lbad_ldr_msg), %esi + mov $sym_offs(.Lbad_ldr_msg), %ecx jmp .Lget_vtb .Lnot_aligned: - add $sym_offs(.Lbag_alg_msg), %esi + mov $sym_offs(.Lbag_alg_msg), %ecx jmp .Lget_vtb #ifdef CONFIG_REQUIRE_NX .Lno_nx: - add $sym_offs(.Lno_nx_msg), %esi + mov $sym_offs(.Lno_nx_msg), %ecx jmp .Lget_vtb #endif .Lmb2_no_st: @@ -164,11 +164,11 @@ early_error: /* Here to improve the disassembly. */ * Here we are on EFI platform. vga_text_buffer was zapped earlier * because there is pretty good chance that VGA is unavailable. */ - add $sym_offs(.Lbad_ldr_nst), %esi + mov $sym_offs(.Lbad_ldr_nst), %ecx jmp .Lget_vtb .Lmb2_no_ih: /* Ditto. */ - add $sym_offs(.Lbad_ldr_nih), %esi + mov $sym_offs(.Lbad_ldr_nih), %ecx jmp .Lget_vtb .Lmb2_no_bs: /* @@ -176,7 +176,7 @@ early_error: /* Here to improve the disassembly. */ * via start label. Then reliable vga_text_buffer zap is impossible * in Multiboot2 scanning loop and we have to zero %edi below. */ - add $sym_offs(.Lbad_ldr_nbs), %esi + mov $sym_offs(.Lbad_ldr_nbs), %ecx xor %edi,%edi # No VGA text buffer jmp .Lprint_err .Lmb2_efi_ia_32: @@ -184,12 +184,15 @@ early_error: /* Here to improve the disassembly. */ * Here we are on EFI IA-32 platform. Then reliable vga_text_buffer zap is * impossible in Multiboot2 scanning loop and we have to zero %edi below. */ - add $sym_offs(.Lbad_efi_msg), %esi + mov $sym_offs(.Lbad_efi_msg), %ecx xor %edi,%edi # No VGA text buffer jmp .Lprint_err .Lget_vtb: mov sym_esi(vga_text_buffer), %edi .Lprint_err: + add %ecx, %esi # Add string offset to relocation base. + # NOTE: No further use of sym_esi() till the end of the "function"! +1: lodsb test %al,%al # Terminate on '\0' sentinel je .Lhalt @@ -202,11 +205,11 @@ early_error: /* Here to improve the disassembly. */ mov %bl,%al out %al,%dx # Send a character over the serial line test %edi,%edi # Is the VGA text buffer available? - jz .Lprint_err + jz 1b stosb # Write a character to the VGA text buffer mov $7,%al stosb # Write an attribute to the VGA text buffer - jmp .Lprint_err + jmp 1b .Lhalt: hlt jmp .Lhalt -- generated by git-patchbot for /home/xen/git/xen.git#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |