diff options
author | Warner Losh <imp@FreeBSD.org> | 2023-11-27 22:40:40 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2023-11-27 22:45:56 +0000 |
commit | c596126a5d3d2ee015ee6807b4041efa5b9d9b07 (patch) | |
tree | b09e12421134ebe0280ee71247e0c71c72f77423 /stand/i386 | |
parent | a5c27819344bfcbdf5ae6a430af9c6ca98b0a249 (diff) | |
download | src-c596126a5d3d2ee015ee6807b4041efa5b9d9b07.tar.gz src-c596126a5d3d2ee015ee6807b4041efa5b9d9b07.zip |
Diffstat (limited to 'stand/i386')
-rw-r--r-- | stand/i386/pmbr/pmbr.S | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/stand/i386/pmbr/pmbr.S b/stand/i386/pmbr/pmbr.S index c61acbe261bd..60b26df15720 100644 --- a/stand/i386/pmbr/pmbr.S +++ b/stand/i386/pmbr/pmbr.S @@ -155,8 +155,10 @@ next_boot: addl $1,(%si) # Next LBA mov %es,%ax # Adjust segment for next addw $SECSIZE/16,%ax # sector cmp $0x9000,%ax # Don't load past 0x90000, - jae err_big # 545k should be enough for - mov %ax,%es # any boot code. :) + jb sz_ok # 545k should be enough for + call err_big # any boot code, but warn + mov $0x9000-SECSIZE/16,%ax # and truncate +sz_ok: mov %ax,%es jmp load_boot # # Move to the next partition. If we walk off the end of the sector, load @@ -203,17 +205,21 @@ getdrvparams: # # Various error message entry points. # -err_big: movw $msg_big,%si # "Boot loader too - jmp putstr # large" +err_big: movw $msg_big,%si # "Truncated + call putstr # to 545k" + ret err_pt: movw $msg_pt,%si # "Invalid partition - jmp putstr # table" + call putstr # table" +err_pt.1: jmp err_pt.1 # Await reset err_rd: movw $msg_rd,%si # "I/O error loading - jmp putstr # boot loader" + call putstr # boot loader" + jmp err_pt.1 err_noboot: movw $msg_noboot,%si # "Missing boot - jmp putstr # loader" + call putstr # loader" + jmp err_pt.1 # # Output an ASCIZ string to the console via the BIOS. # @@ -223,9 +229,9 @@ putstr.0: movw $0x7,%bx # Page:attribute putstr: lodsb # Get character testb %al,%al # End of string? jnz putstr.0 # No -putstr.1: jmp putstr.1 # Await reset + ret -msg_big: .asciz "Boot loader too large" +msg_big: .asciz "Loaded only 545k" msg_pt: .asciz "Invalid partition table" msg_rd: .asciz "I/O error loading boot loader" msg_noboot: .asciz "Missing boot loader" |