Autzoo.879
net.v7bugs
utzoo!henry
Tue Aug 11 19:17:02 1981
non-I/D floating-point
Mike Tilson of Human Computing Resources has uncovered a fairly serious
bug in the machine-language assist for non-I/D machines.  The code
tests to see whether the machine has hardware floating-point, and
sets the variable "fpp" appropriately;  said variable is consulted at
context-switch time to determine whether floating-point registers should
be saved and restored.  But in the version of this code for non-I/D
machines, fpp is set just before the clearing of the kernel bss -- and
fpp is IN THE BSS!  Hence, on a non-I/D machine, fpp is always 0,
floating-point registers are NEVER saved/restored, and if the machine
has floating-point hardware and more than one process is trying to use
it, chaos and madness will ensue.

Fix is to move the six lines of code starting "/ test for floating point"
and ending "clr nofault", at about line 55 of /usr/sys/40/m40.s, to just
after the clearing of the bss (i.e. to about line 69).

This bug is present in both the Bell m40.s and the Dec-Merrimack mch_i.s .
The I/D versions get things right in both cases.

-----------------------------------------------------------------
gopher://quux.org/ conversion by John Goerzen <[email protected]>
of http://communication.ucsd.edu/A-News/


This Usenet Oldnews Archive
article may be copied and distributed freely, provided:

1. There is no money collected for the text(s) of the articles.

2. The following notice remains appended to each copy:

The Usenet Oldnews Archive: Compilation Copyright (C) 1981, 1996
Bruce Jones, Henry Spencer, David Wiseman.