.section .init.text, "ax", @progbits
bad_cpu:
- add $sym_offs(.Lbad_cpu_msg),%esi # Error message
+ mov $sym_offs(.Lbad_cpu_msg), %ecx
jmp .Lget_vtb
not_multiboot:
- add $sym_offs(.Lbad_ldr_msg),%esi # Error message
+ mov $sym_offs(.Lbad_ldr_msg), %ecx
jmp .Lget_vtb
.Lmb2_no_st:
/*
* 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 # Error message
+ mov $sym_offs(.Lbad_ldr_nst), %ecx
jmp .Lget_vtb
.Lmb2_no_ih:
/* Ditto. */
- add $sym_offs(.Lbad_ldr_nih),%esi # Error message
+ mov $sym_offs(.Lbad_ldr_nih), %ecx
jmp .Lget_vtb
.Lmb2_no_bs:
/*
* 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 # Error message
+ mov $sym_offs(.Lbad_ldr_nbs), %ecx
xor %edi,%edi # No VGA text buffer
jmp .Lprint_err
.Lmb2_efi_ia_32:
* 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 # Error message
+ 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
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