evans@ditsyda.oz (Bruce Evans) (07/25/89)
The function get_phys_byte() was not suitably reentrant, so printer
and rs232 (old driver) interrupts might corrupt the segments used by
other special protected mode functions, notably phys_copy() :-(.
CRCs:
08846 8017 klib286.x
36319 1576 klib286.x.cdif
12547 7691 klib286.x~
#! /bin/sh
# Contents: klib286.x.cdif
# Wrapped by evans@ditsyda on Tue Jul 25 06:37:16 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'klib286.x.cdif' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'klib286.x.cdif'\"
else
echo shar: Extracting \"'klib286.x.cdif'\" \(1576 characters\)
sed "s/^X//" >'klib286.x.cdif' <<'END_OF_FILE'
X*** /local/sys/kernel/klib286.x Mon Mar 13 04:51:55 1989
X--- klib286.x Tue Jul 25 01:13:05 1989
X***************
X*** 147,166 ****
X
X p_get_phys_byte:
X! pop dx
X! pop _gdt+DS_286_OFFSET+DESC_BASE
X! pop ax | pop source into base of source descriptor
X movb _gdt+DS_286_OFFSET+DESC_BASE_MIDDLE,al
X- sub sp,#4
X mov cx,ds
X mov ax,#DS_286_SELECTOR
X- pushf | lock may be necessary since this is (only)
X- cli | called by the badly behaved printer task
X mov ds,ax
X movb al,0 | get the byte from the start of the segment
X- mov ds,cx
X- popf
X subb ah,ah
X! jmpreg (dx)
X
X
X |*===========================================================================*
X--- 184,215 ----
X
X p_get_phys_byte:
X! push bp
X! mov bp,sp
X!
X! | Save the part of the DS_286 segment descriptor which is going to be
X! | modified, so badly behaved interrupt handlers (printer and old tty)
X! | can use this routine.
X! | This is cheaper than locking all the other descriptor-fiddling routines
X! | in this file.
X!
X! push _gdt+DS_286_OFFSET+DESC_BASE
X! push _gdt+DS_286_OFFSET+DESC_BASE_MIDDLE
X!
X! mov ax,4(bp) | move source into base of source descriptor
X! mov _gdt+DS_286_OFFSET+DESC_BASE,ax
X! mov al,4+2(bp)
X movb _gdt+DS_286_OFFSET+DESC_BASE_MIDDLE,al
X mov cx,ds
X mov ax,#DS_286_SELECTOR
X mov ds,ax
X movb al,0 | get the byte from the start of the segment
X subb ah,ah
X! mov ds,cx
X
X+ pop _gdt+DS_286_OFFSET+DESC_BASE_MIDDLE
X+ pop _gdt+DS_286_OFFSET+DESC_BASE
X+ pop bp
X+ ret
X+
X
X |*===========================================================================*
END_OF_FILE
if test 1576 -ne `wc -c <'klib286.x.cdif'`; then
echo shar: \"'klib286.x.cdif'\" unpacked with wrong size!
fi
# end of 'klib286.x.cdif'
fi
echo shar: End of shell archive.
exit 0
---
Bruce Evans evans@ditsyda.oz.au
--
Bruce Evans evans@ditsyda.oz.aurbthomas@athos.rutgers.edu (Rick Thomas) (07/31/89)
I tried installing this bug fix and got the message
klib286.s 804: register error
when I ran make.
Until I find out if this is expected behavior, I am leaving the bugfix
out.
Bruce? Any wisdom?
Rick
--
Rick Thomas
uucp: {ames, att, harvard}!rutgers!jove.rutgers.edu!rbthomas
internet: rbthomas@JOVE.RUTGERS.EDU
bitnet: rbthomas@zodiac.bitnet
Phone: (201) 932-4301evans@ditsyda.oz (Bruce Evans) (08/02/89)
In article <Jul.30.17.53.09.1989.21520@athos.rutgers.edu> rbthomas@athos.rutgers.edu (Rick Thomas) writes: >I tried installing this bug fix and got the message > > klib286.s 804: register error > >when I ran make. Oops. mov al,4+2(bp) should be movb al,4+2(bp) Asld needs to have the size-specifier 'b' on instructions dealing with byte quantities, even when the size is determined by a byte register as here :-(. I do not normally use asld... -- Bruce Evans evans@ditsyda.oz.au