Date: Sun, 2 Jan 2000 08:03:24 -0800 (PST) From: sepotvin@videotron.ca To: freebsd-gnats-submit@freebsd.org Subject: i386/15841: [patch] Assembler syntax fixes for the boot programs. Message-ID: <20000102160324.6382E14FC3@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 15841
>Category: i386
>Synopsis: [patch] Assembler syntax fixes for the boot programs.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Jan 2 08:10:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator: Stephane E. Potvin
>Release: 4.0-CURRENT
>Organization:
InnoMediaLogic Inc.
>Environment:
FreeBSD leonard.videotron.ca 4.0-CURRENT FreeBSD 4.0-CURRENT #6: Sat Jan 1 12:52:14 GMT 2000 spotvin@leonard.videotron.ca:/mnt/.0/src/sys/compile/LEONARD i386
>Description:
Various assembler fixes for the boot programs. These were discovered
by binutils-2.9.5
>How-To-Repeat:
>Fix:
Index: boot0/boot0.s
===================================================================
RCS file: /usr/FreeBSD/ncvs/src/sys/boot/i386/boot0/boot0.s,v
retrieving revision 1.14
diff -c -r1.14 boot0.s
*** boot0/boot0.s 1999/09/03 01:38:29 1.14
--- boot0/boot0.s 1999/12/31 14:33:53
***************
*** 333,345 ****
tstbi1(0x80,_FLAGS,_bp_) # Use packet interface?
jz intx13.1 # No
o16 # Set
! pushb $0x0 # the
o16 # LBA
pushw1(0x8,_si_) # address
pushl %es # Set the transfer
pushl %ebx # buffer address
! pushb $0x1 # Block count
! pushb $0x10 # Packet size
movl %esp,%esi # Packet pointer
decl %eax # Verify off
orb $0x40,%ah # Use disk packet
--- 333,345 ----
tstbi1(0x80,_FLAGS,_bp_) # Use packet interface?
jz intx13.1 # No
o16 # Set
! push $0x0 # the
o16 # LBA
pushw1(0x8,_si_) # address
pushl %es # Set the transfer
pushl %ebx # buffer address
! push $0x1 # Block count
! push $0x10 # Packet size
movl %esp,%esi # Packet pointer
decl %eax # Verify off
orb $0x40,%ah # Use disk packet
Index: boot2/boot1.s
===================================================================
RCS file: /usr/FreeBSD/ncvs/src/sys/boot/i386/boot2/boot1.s,v
retrieving revision 1.10
diff -c -r1.10 boot1.s
*** boot2/boot1.s 1999/08/28 00:40:01 1.10
--- boot2/boot1.s 2000/01/02 10:37:14
***************
*** 42,48 ****
xread: pushl %ss # Address
popl %ds # data
xread.1: o16 # Starting
! pushb $0x0 # absolute
pushl %ecx # block
pushl %eax # number
pushl %es # Address of
--- 42,48 ----
xread: pushl %ss # Address
popl %ds # data
xread.1: o16 # Starting
! push $0x0 # absolute
pushl %ecx # block
pushl %eax # number
pushl %es # Address of
***************
*** 50,56 ****
xorl %eax,%eax # Number of
movb %dh,%al # blocks to
pushl %eax # transfer
! pushb $0x10 # Size of packet
movl %esp,%ebp # Packet pointer
callwi(read) # Read from disk
leaw1r(0x10,_bp_,_sp) # Clear stack
--- 50,56 ----
xorl %eax,%eax # Number of
movb %dh,%al # blocks to
pushl %eax # transfer
! push $0x10 # Size of packet
movl %esp,%ebp # Packet pointer
callwi(read) # Read from disk
leaw1r(0x10,_bp_,_sp) # Clear stack
***************
*** 60,68 ****
main: cld # String ops inc
xorl %ecx,%ecx # Zero
! movl %cx,%es # Address
! movl %cx,%ds # data
! movl %cx,%ss # Set up
movwir(start,_sp) # stack
movl %esp,%esi # Source
movwir(MEM_REL,_di) # Destination
--- 60,68 ----
main: cld # String ops inc
xorl %ecx,%ecx # Zero
! movl %ecx,%es # Address
! movl %ecx,%ds # data
! movl %ecx,%ss # Set up
movwir(start,_sp) # stack
movl %esp,%esi # Source
movwir(MEM_REL,_di) # Destination
Index: btx/btx/btx.s
===================================================================
RCS file: /usr/FreeBSD/ncvs/src/sys/boot/i386/btx/btx/btx.s,v
retrieving revision 1.13
diff -c -r1.13 btx.s
*** btx/btx/btx.s 1999/10/27 02:22:52 1.13
--- btx/btx/btx.s 2000/01/02 10:39:10
***************
*** 110,119 ****
#
init: cli # Disable interrupts
xorl %eax,%eax # Zero/segment
! movl %ax,%ss # Set up
movwir(MEM_ESP0,_sp) # stack
! movl %ax,%es # Address
! movl %ax,%ds # data
pushw $0x2 # Clear
popfw # flags
#
--- 110,119 ----
#
init: cli # Disable interrupts
xorl %eax,%eax # Zero/segment
! movl %eax,%ss # Set up
movwir(MEM_ESP0,_sp) # stack
! movl %eax,%es # Address
! movl %eax,%ds # data
pushw $0x2 # Clear
popfw # flags
#
***************
*** 213,224 ****
jmpfwi(SEL_SCODE,init.8) # To 32-bit code
init.8: xorl %ecx,%ecx # Zero
movb $SEL_SDATA,%cl # To 32-bit
! movl %cx,%ss # stack
#
# Launch user task.
#
movb $SEL_TSS,%cl # Set task
! ltrl %ecx # register
movl $MEM_USR,%edx # User base address
movzwl %ss:BDA_MEM,%eax # Get free memory
shll $0xa,%eax # To bytes
--- 213,224 ----
jmpfwi(SEL_SCODE,init.8) # To 32-bit code
init.8: xorl %ecx,%ecx # Zero
movb $SEL_SDATA,%cl # To 32-bit
! movl %ecx,%ss # stack
#
# Launch user task.
#
movb $SEL_TSS,%cl # Set task
! ltr %cx # register
movl $MEM_USR,%edx # User base address
movzwl %ss:BDA_MEM,%eax # Get free memory
shll $0xa,%eax # To bytes
***************
*** 236,242 ****
pushl %ecx # Set ES
pushl %edx # Set EAX
movb $0x7,%cl # Set remaining
! init.9: pushb $0x0 # general
loop init.9 # registers
popa # and initialize
popl %es # Initialize
--- 236,242 ----
pushl %ecx # Set ES
pushl %edx # Set EAX
movb $0x7,%cl # Set remaining
! init.9: push $0x0 # general
loop init.9 # registers
popa # and initialize
popl %es # Initialize
***************
*** 267,277 ****
o16 # Reload
jmpfwi(SEL_RCODE,exit.1) # CS
exit.1: movb $SEL_RDATA,%cl # 16-bit selector
! movl %cx,%ss # Reload SS
! movl %cx,%ds # Load
! movl %cx,%es # remaining
! movl %cx,%fs # segment
! movl %cx,%gs # registers
#
# To real-address mode.
#
--- 267,277 ----
o16 # Reload
jmpfwi(SEL_RCODE,exit.1) # CS
exit.1: movb $SEL_RDATA,%cl # 16-bit selector
! movl %ecx,%ss # Reload SS
! movl %ecx,%ds # Load
! movl %ecx,%es # remaining
! movl %ecx,%fs # segment
! movl %ecx,%gs # registers
#
# To real-address mode.
#
***************
*** 279,286 ****
movl %eax,%cr0 # real mode
jmpfwi(0x0,exit.2) # Reload CS
exit.2: xorl %eax,%eax # Real mode segment
! movl %ax,%ss # Reload SS
! movl %ax,%ds # Address data
movwir(0x7008,_bx) # Set real mode
callwi(setpic) # IRQ offsets
lidtwm(ivtdesc) # Set IVT
--- 279,286 ----
movl %eax,%cr0 # real mode
jmpfwi(0x0,exit.2) # Reload CS
exit.2: xorl %eax,%eax # Real mode segment
! movl %eax,%ss # Reload SS
! movl %eax,%ds # Address data
movwir(0x7008,_bx) # Set real mode
callwi(setpic) # IRQ offsets
lidtwm(ivtdesc) # Set IVT
***************
*** 324,356 ****
#
# Exception jump table.
#
! intx00: pushb $0x0 # Int 0x0: #DE
jmp ex_noc # Divide error
! pushb $0x1 # Int 0x1: #DB
jmp ex_noc # Debug
! pushb $0x3 # Int 0x3: #BP
jmp ex_noc # Breakpoint
! pushb $0x4 # Int 0x4: #OF
jmp ex_noc # Overflow
! pushb $0x5 # Int 0x5: #BR
jmp ex_noc # BOUND range exceeded
! pushb $0x6 # Int 0x6: #UD
jmp ex_noc # Invalid opcode
! pushb $0x7 # Int 0x7: #NM
jmp ex_noc # Device not available
! pushb $0x8 # Int 0x8: #DF
jmp except # Double fault
! pushb $0xa # Int 0xa: #TS
jmp except # Invalid TSS
! pushb $0xb # Int 0xb: #NP
jmp except # Segment not present
! pushb $0xc # Int 0xc: #SS
jmp except # Stack segment fault
! pushb $0xd # Int 0xd: #GP
jmp ex_v86 # General protection
! pushb $0xe # Int 0xe: #PF
jmp except # Page fault
! intx10: pushb $0x10 # Int 0x10: #MF
jmp ex_noc # Floating-point error
#
# Handle #GP exception.
--- 324,356 ----
#
# Exception jump table.
#
! intx00: push $0x0 # Int 0x0: #DE
jmp ex_noc # Divide error
! push $0x1 # Int 0x1: #DB
jmp ex_noc # Debug
! push $0x3 # Int 0x3: #BP
jmp ex_noc # Breakpoint
! push $0x4 # Int 0x4: #OF
jmp ex_noc # Overflow
! push $0x5 # Int 0x5: #BR
jmp ex_noc # BOUND range exceeded
! push $0x6 # Int 0x6: #UD
jmp ex_noc # Invalid opcode
! push $0x7 # Int 0x7: #NM
jmp ex_noc # Device not available
! push $0x8 # Int 0x8: #DF
jmp except # Double fault
! push $0xa # Int 0xa: #TS
jmp except # Invalid TSS
! push $0xb # Int 0xb: #NP
jmp except # Segment not present
! push $0xc # Int 0xc: #SS
jmp except # Stack segment fault
! push $0xd # Int 0xd: #GP
jmp ex_v86 # General protection
! push $0xe # Int 0xe: #PF
jmp except # Page fault
! intx10: push $0x10 # Int 0x10: #MF
jmp ex_noc # Floating-point error
#
# Handle #GP exception.
***************
*** 631,667 ****
#
# Hardware interrupt jump table.
#
! intx20: pushb $0x8 # Int 0x20: IRQ0
jmp int_hw # V86 int 0x8
! pushb $0x9 # Int 0x21: IRQ1
jmp int_hw # V86 int 0x9
! pushb $0xa # Int 0x22: IRQ2
jmp int_hw # V86 int 0xa
! pushb $0xb # Int 0x23: IRQ3
jmp int_hw # V86 int 0xb
! pushb $0xc # Int 0x24: IRQ4
jmp int_hw # V86 int 0xc
! pushb $0xd # Int 0x25: IRQ5
jmp int_hw # V86 int 0xd
! pushb $0xe # Int 0x26: IRQ6
jmp int_hw # V86 int 0xe
! pushb $0xf # Int 0x27: IRQ7
jmp int_hw # V86 int 0xf
! pushb $0x70 # Int 0x28: IRQ8
jmp int_hw # V86 int 0x70
! pushb $0x71 # Int 0x29: IRQ9
jmp int_hw # V86 int 0x71
! pushb $0x72 # Int 0x2a: IRQ10
jmp int_hw # V86 int 0x72
! pushb $0x73 # Int 0x2b: IRQ11
jmp int_hw # V86 int 0x73
! pushb $0x74 # Int 0x2c: IRQ12
jmp int_hw # V86 int 0x74
! pushb $0x75 # Int 0x2d: IRQ13
jmp int_hw # V86 int 0x75
! pushb $0x76 # Int 0x2e: IRQ14
jmp int_hw # V86 int 0x76
! pushb $0x77 # Int 0x2f: IRQ15
jmp int_hw # V86 int 0x77
#
# Reflect hardware interrupts.
--- 631,667 ----
#
# Hardware interrupt jump table.
#
! intx20: push $0x8 # Int 0x20: IRQ0
jmp int_hw # V86 int 0x8
! push $0x9 # Int 0x21: IRQ1
jmp int_hw # V86 int 0x9
! push $0xa # Int 0x22: IRQ2
jmp int_hw # V86 int 0xa
! push $0xb # Int 0x23: IRQ3
jmp int_hw # V86 int 0xb
! push $0xc # Int 0x24: IRQ4
jmp int_hw # V86 int 0xc
! push $0xd # Int 0x25: IRQ5
jmp int_hw # V86 int 0xd
! push $0xe # Int 0x26: IRQ6
jmp int_hw # V86 int 0xe
! push $0xf # Int 0x27: IRQ7
jmp int_hw # V86 int 0xf
! push $0x70 # Int 0x28: IRQ8
jmp int_hw # V86 int 0x70
! push $0x71 # Int 0x29: IRQ9
jmp int_hw # V86 int 0x71
! push $0x72 # Int 0x2a: IRQ10
jmp int_hw # V86 int 0x72
! push $0x73 # Int 0x2b: IRQ11
jmp int_hw # V86 int 0x73
! push $0x74 # Int 0x2c: IRQ12
jmp int_hw # V86 int 0x74
! push $0x75 # Int 0x2d: IRQ13
jmp int_hw # V86 int 0x75
! push $0x76 # Int 0x2e: IRQ14
jmp int_hw # V86 int 0x76
! push $0x77 # Int 0x2f: IRQ15
jmp int_hw # V86 int 0x77
#
# Reflect hardware interrupts.
***************
*** 710,716 ****
pushl %fs # and
pushl %ds # point
pushl %es # to them
! pushb $SEL_SDATA # Set up
popl %ds # to
pushl %ds # address
popl %es # data
--- 710,716 ----
pushl %fs # and
pushl %ds # point
pushl %es # to them
! push $SEL_SDATA # Set up
popl %ds # to
pushl %ds # address
popl %es # data
***************
*** 838,844 ****
pushl %ds # Save
testb $0x2,0x52(%ebx) # V86 mode?
jnz dump.3 # Yes
! verrl 0x4(%esi) # Readable selector?
jnz dump.3 # No
ldsl (%esi),%esi # Load pointer
jmp dump.4 # Join common code
--- 838,844 ----
pushl %ds # Save
testb $0x2,0x52(%ebx) # V86 mode?
jnz dump.3 # Yes
! verr 0x4(%esi) # Readable selector?
jnz dump.3 # No
ldsl (%esi),%esi # Load pointer
jmp dump.4 # Join common code
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000102160324.6382E14FC3>
