1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
|
# MIPS/IRAF alpha port.
# System arrived on thursday 17 May.
-----------------
Configure UNIX (RISC/os 4.10)
/etc/passwd
/etc/hosts
/etc/group
/etc/fstab
/etc/local_hostname
/tucana/ +
/u2 +
1. Usual local configuration of passwd,hosts,group,fstab. NFS
mounted a number of tucana disks.
2. local_hostname is a MIPS special, used to set hostname (columba
in this case) and network parameters (netmask, broadcast). (4/17)
[didn't do anything more with the system for several days...]
/usr/adm/periodic/daily/10.makehosts.system
/usr/hosts
Sometime later I discovered that /usr was 99% full and the directory
/usr/hosts contained over 8000 files totalling about 9 Mb. There
turned out to be a crontab file which makes a link to rsh in /usr/hosts
for every node alias in /etc/hosts. We like to keep a very large
hosts file around for reference, so this would end up producing an
enormous /usr/hosts. It is not clear if /usr/hosts is needed; the
node name entries can be executed to rsh to the node so perhaps that
is what it is for. Rather than disable the facility entirely, I
edited the makehosts script to make entries only for the local hosts.
(4/26)
login customization
The MIPS is a nearly pure SysV UNIX machine with the default login,
which provides the SysV ls, ps, etc., the old unix kill, erase, etc.
characters for the terminal driver, and so on. A bit of hunting
turned up the following interesting items.
/bds43/bin
/usr/ucb
Contains 200 or so BSD commands which are no where else to be
found, e.g., nroff, troff, lpr, head, etc., as well as BSD
versions of popular commands like ls, stty (in some cases there
are merely front ends to the SysV versions, like stty).
/usr/new
Contains some interesting utilities, including LESS and PATCH,
and a couple of things I hadn't seen before, VSAR (a screen
oriented version of the SysV SAR) and VMSBACKUP (claims to be
able to read VMS BACKUP tapes).
man pages
PAGER can be defined as "less -cqm" to use less to page man
pages. There are two man programs, /bsd43/bin/man or /usr/ucb/man,
which prints the BSD man pages, and /usr/bin/man, which prints
the SysV man pages followed by other entries for the named topic,
prompting each time the pager is exited. Given the default search
path, you have to type /usr/bin/man explicitly to get the SysV
version.
If the SysV STTY is used one needs to use "winsize" to set the
screen size for programs like LESS and VI. (4/26)
/usr/lib/cmplrs
This directory contains the runtime files for the compilers. It
appears that the system as delivered by MIPS does not have the
latest (2.10) versions of the compilers installed. The installed
versions are all 2.0. I sent mail off to MIPS to see if we can
get the 2.10 compiler tape (we already have the 2.10 Fortran tape,
but this is useless on the MIPS without the 2.10 compiler backend
programs). (4/26)
/etc/printcap +
/usr/spool/* +
/etc/rc2.d/S01noao +
Configured LPR for the noao devices. (4/26)
/usr/lib/tmac/tmac.s
/usr/local/bin/itroff* +
/usr/local/bin/vpr +
/usr/local/bin/qdplot +
Configured nroff/troff and the local noao troff and printer queues.
(4/26)
/usr/lib/aliases
Installed the noao mail aliases file. (4/26)
------------------------
Begin IRAF port to the MIPS.
Start with DECstation/IRAF sources, since these are already set up to
use the MIPS compilers.
Using MIPS BSD43 programming environment. (5/27)
local/.login
unix/hlib/cl.csh
unix/hlib/irafuser.csh
unix/hlib/libc/iraf.h
unix/hlib/mach.h
unix/hlib/mkpkg.inc
1. Set new iraf root.
2. In mach.h, change the byte swap parameters to NO.
3. Checked size of setjmp buffer; DECstation value is larger
than needed for MIPS, so leave it as is. (5/27)
bin.mips +
noao/bin.mips +
mkpkg
unix/hlib/mkpkg.inc
unix/hlib/mkpkg.sf.MIPS +
noao/mkpkg
noao/lib/mkpkg.inc
noao/lib/mkpkg.sf.MIPS +
unix/mkpkg.sh
unix/setarch.sh +
unix/bin.mips +
unix/as.mips +
Add support for architecture "mips". (5/27)
unix/os/irafpath.c
unix/os/zgcmdl.c
unix/os/zxwhen.c
1. irafpath.c and zgcmdl.c modified to discriminate between Ultrix
and RISC/os operating systems: #ifdef mips is true for both systems.
On a DECstation the architecture is known as "dsux", on a MIPS it
is "mips".
2. Modified zxwhen for the MIPS hardware exception codes. (5/27)
unix/boot/bootlib/osputenv.c
The MIPS does not have putenv, but it has setenv. (5/27)
unix/boot/mkpkg/host.c
The MIPS has COFF libraries, so disabled ranlib. (5/27)
unix/hlib/install
It turns out that when using the BSD version of CC, the include
files in /bsd43/usr/include are used rather than /usr/include.
Modified INSTALL to make an <iraf.h> link in both places (and
manually created the link in order to complete the bootstrap). (5/27)
-------------------
Bootstrap successfully completed, except for alloc.c which failed to
link. Will take a look at that later. (5/27)
unix/boot/spp/xc.c
The MIPS is unusual in that it has two sets of compilers (or at
least compiler front-ends) and two sets of programming environments
for BSD and SysV. For our purposes it is simplest to use the BSD
environment. This necessitated a change to XC since we want to
use the versions of CC and F77 in /bsd43/bin rather than the SysV
versions in /usr/bin.
1. Modified "run" in XC to search /bsd43/bin before /usr/bin (we
should, of course, be using PATH instead).
2. Modified XC to link with F77 instead of CC. Using CC is awkward
since the F77 libraries are hidden away in /bds43/usr/lib/cmplrs/...
(5/27)
-------------------
Begin sysgen.
The initial sysgen went well except for some problems with the F77
compiler, which was not installed properly when the system was set
up. First I had to modify XC to use the /bsd43/bin versions of the
compilers (see above). Even when this was done links would still
fail, due to the compiler being only partially installed. I was
able to continue by faking a BSD F77 compiler by combining the 2.10
F77 front end and libraries with the cc2.0 back end. The full compile
sysgen will have to be redone when the new compilers are properly
installed, and there is little point in pursuing any bugs until
this is done. (5/27)
math/deboor/mkpkg
math/deboor/setdat.f -
math/deboor/setdat2.f -
math/deboor/setdat3.f -
The DEBOORT math package turned out to have a set of files setdat.f,
setdat2.f, setdat3.f, all of which defined the same routine "setdat"
and which were being redundantly loaded into the library. It turns
out that these routines are not part of the math library anyhow, and
are only used to generate test data for the test programs. I moved
them to deboor/progs (the test programs source library) and deleted
the entries in the mkpkg file. (5/27)
sys/gio/gks/gcas.x
The MIPS librarian found another duplicate library entry here. The
GKS emulation library has two files gca.x and gcas.x, both of which
define the same routine "gca". Changed the gcas.x version to define
a subroutine "gcas" instead. (These are integer and short versions
of the cell array routine - GCAS is a nonstandard IRAF extension to
GKS, which is not used anywhere to my knowledge). (5/27)
-------------------
Sysgen complete.
With these changes the first sysgen completed, except for x_images.e
which failed to link, probably due to the F77 compiler problems
discussed above. Other than that the sysgen went remarkably well.
None of the problems we had with the MIPS compilers on the DECstation
were present on this system. IRAF is up and running, minus IMAGES,
although from browsing the MIPS manuals I see that there are still
some subtle items to take care of. (5/28)
dev/hosts
Added an entry for node columba and tested iraf networking. (5/28)
unix/os/zmaloc.c
RISC/os uses the BSD 4.3 memory allocator, which allocates storage in
units that are a power of 2. This can be very wasteful of space for
large buffers, so we don't want to use the default memory allocator.
MIPS provides a couple of other allocators as options, but I had
trouble using these with the BSD43 environment due to unresolved
symbols resulting from the SysV libraries not being searched.
The solution was to replace zmaloc.c by the version used on BSD 4.3
and Ultrix, which includes an older, simpler, and better behaved
memory allocator. (5/28)
unix/hlib/libc/iraf.h
unix/os/zzstrt.c
unix/os/zxwhen.c
unix/os/zgcmdl.c
unix/os/irafpath.c
Added a #define MIPS and a commented out #define DSUX. This is more
direct than trying to use #ifdef mips (which is defined by the system)
since this is defined for both the MIPS and DECstation (at least) and
doesn't really tell us what system we are compiling for. (5/28)
MIPS bug
Running NM on a library with the output redirected causes a
segmentation fault when the process exits. (cd /lib; nm *.a | ...).
unix/os/zzstrt.c
unix/os/zxwhen.c
Enabled the IEEE exceptions (overflow, divide by zero, and invalid
operand) for MIPS/IRAF processes. Modified ZXWHEN to detect and
decode the floating point exceptions (this required doing bit tests
on the floating point control and status register).
To figure out how to do this I first did a "man -k ieee". This
turned up a man page for fp[get|set][round|mask|sticky], which
looked like it would do the trick, except that evidently this routine
doesn't exist anywhere in the system (maybe it is a standard SysV
feature which MIPS doesn't support; the man page mentions the default
behavior on 3B systems). By doing an "nm *.a | grep fp" on the system
libraries I eventually turned up set_fpc_csr/get_fpc_csr which is
what is actually implemented on the MIPS. This seems to do the
trick; thus far, setting a nondefault FPCSR doesn't seem to introduce
any new problems. (5/28)
/etc/init.d/netdaemons
/etc/rc2.d/S01noao
/usr/local/bin/ntp +
/usr/spool/cron/crontabs/root
1. Had to add a command "route add default gateway 1" to allow network
access to the outside world.
2. Commented out the gated/routed daemons, which we don't need.
3. Installed a copy of NTP in local/bin, and set up cron to run it
once a day. This sets the system clock from atomic clock at another
site, by requesting the time via the internet from a network time
daemon running on the remote node. (Forgot to log it, but the timezone
had to be changed to MST a while back too). (5/31)
-----------------------
New compilers (V2.10) installed and the system bootstrapped and fully
recompiled from scratch. Lacking a tape drive on the system, the compilers
had to be installed manually from the raw distribution tape: I think I set
up all the necessary links etc., but the installation was complex enough
that it is difficult to be sure. (6/19)
Perusing the output of the sysgen, it appears that there were a number of
problems with the V2.10 compile, whereas the sysgen with the V2.0 compilers
went almost flawlessly. At this point, from the nature of the errors I think
they are real and not something induced by errors in the installation of the
compilers. Another problem was that the disk filled up during the sysgen,
a dangerous problem which can cause errors such as zero length objects being
inserted into libraries.
At least one compiler bug was observed, this one harmless. Some of the old
NCAR and math library Fortran code contains statement functions. The dummy
variables in such statements functions result in "local variable X never used"
warning messages. (6/20)
unix/hlib/mkpkg.inc
Added -Olimit 1024 to the default sysgen flags. This sets the max
size in blocks of a procedure to be optimized. With the default
value of 500 the compiler issued warnings for 7 files during the full
sysgen, and failed to optimize 9 procedures. (6/20)
math/deboor/core
sys/gio/ncarutil/autograph/core
sys/vops/core
pkg/dataio/cardimage/core
pkg/images/tv/cv/core
pkg/images/geometry/core
pkg/plot/core
pkg/xtools/ranges/core
pkg/xtools/core
noao/imred/ccdred/src/generic/core
noao/imred/vtel/core
noao/onedspec/dispcor/core
noao/twodspec/multispec/core
Discovered why the sysgen ran out of disk space - 12 Mb of core
files from compiler optimizer (uopt) crashes! Deleted. (6/20)
----------------
I tried recompiling a couple of the files that were associated with
optimizer core dumps in the first sysgen, but could not duplicate the
problem. Started an incremental sysgen to compile the files skipped
in the first sysgen, and this completed without any errors. The system
comes up and runs, ready for runtime testing. (6/20)
----------------
/usr/local/bin/saoimage
Installed saoimage. 7.6 Mb left in /usr. As there was so little
disk space, the RISC/os source for saoimage is currently in
/tucana/tmp3/rooke/sao/riscos. (6/21 SRo)
/usr/man/manl/saoimage.man
Created /usr/man/manl, and placed saoimage manpage in it. (6/21 SRo)
----------------
Resume testing on alpha port, 16 July 90.
sys/vops/amov.gx
This routine could fail, corrupting the data array, in some cases
when the input and output arrays overlap. The same problem exists
in standard V2.9 iraf except that in most iraf implementations,
a host optimized version of AMOV is used, hence the bug has not
been seen. (7/16)
unix/hlib/mkpkg.sf.MIPS
I added entries for the host optimized versions of AMOV, ACLR, etc.,
using the C versions in AS that use bcopy/bzero. Unfortunately
it turned out that the MIPS version of bcopy also cannot be used
when the input and output arrays overlap in a certain way, hence
I had to copy out the entries for the AMOV and BYTMOV routines.
The optimized versions of the ACLR routines are still used. (7/16)
unix/as.mips/zsvjmp.o
I tried setting the address of MEM to zero and it worked on the MIPS.
The same code failed on the DECstation with a linker error. (7/16)
unix/os/zmain.c
unix/os/zzsetk.c
unix/os/zfiopr.c
Added a new facility to UNIX/IRAF for debugging interprocess
communication (IPC). This feature will also be useful for debugging
tasks standalone, particularly in cases where a bug seen when the
task is run from the CL is difficult to reproduce when the task
is run standalone. If LOGIPC is defined in the host environment,
the input and output IPC streams of each connected process with
process id PID are logged to the files PID.in and PID.out. (7/18)
unix/hlib/mkpkg.sf.MIPS
Added system/help/lroff/textout.x to the list of files requiring
compilation without optimization (actually it is the first such file
for this system). Evidently the use of multiple entry points in
this procedure is running into an optimizer bug. The argument "out",
which should be the address of "putline" was being transformed to
the address of "getline" somewhere in this routine, causing output
via textout to be discarded. (7/18)
sys/imfort/tasks/pcube.f
This file contained a subroutine containing the following sequence of
statements (irrelevant statements ommitted):
subroutine pcuber (pix, nx,ny,nz, i1,i2, j1,j2, k1,k2)
real pix(nx,ny,nz)
integer nx, ny, nz
On the MIPS, this produced a warning about nx/ny/nz already having
been declared. Probably when the compiler processes the REAL
statement it assumes the parameters are type integer. This seems
reasonable, so I moved the INTEGER card up before the REAL and the
warning went away. (7/19)
unix/os/zxwhen.c
While looking into a problem of a task aborting on a floating point
exception, I noticed that the IEEE exception being reported was
"floating inexact", which iraf does not enable. It turned out that
both inexact and overflow were being signalled, but due to the way
the zxwhen code was written only the inexact was being reported.
Since we are not very interested in those exceptions which are not
enabled, I changed the code to check the exception bits for the
enabled exceptions before checking the others.
In this case the exception of interest was floating overflow, which
is occuring in the routine DET called by SPLOT. It appears that
the matrix being input to this routine is garbage. Since only the
one application is affected I will leave it to someone else to check
into it further. (7/19)
-------------
Full system testing has been in progress for the past week or so. Things
looks pretty good. One task is dying with an out of memory error; after
hunting around a bit, I determined that the MIPS/SysV command used to
monitor swap space usage is "swap l", which gives the free space in 512
byte blocks. (7/30).
|