aboutsummaryrefslogtreecommitdiff
path: root/stand/i386
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2023-11-27 22:40:40 +0000
committerWarner Losh <imp@FreeBSD.org>2023-11-27 22:45:56 +0000
commitc596126a5d3d2ee015ee6807b4041efa5b9d9b07 (patch)
treeb09e12421134ebe0280ee71247e0c71c72f77423 /stand/i386
parenta5c27819344bfcbdf5ae6a430af9c6ca98b0a249 (diff)
downloadsrc-c596126a5d3d2ee015ee6807b4041efa5b9d9b07.tar.gz
src-c596126a5d3d2ee015ee6807b4041efa5b9d9b07.zip
Diffstat (limited to 'stand/i386')
-rw-r--r--stand/i386/pmbr/pmbr.S24
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"