DEC Alpha OSF/1 V2.0 port. Begun 28 December 1994. Based in part on the preliminary port done by Nelson Zarate of STScI. Starting point is the Solaris/IRAF system at V2.10.3. This platform is BSD-oriented with only partial SYSV support so we will use the BSD code in the HSI. -------------------------------------------------------------------------- unix/hlib/motd Edited the motd to indicate that the system is DEC-ALPHA/IRAF, alpha test version. (12/28) unix/hlib/irafuser.csh Edited this file sufficiently to allow it to be sourced during login. 1. Set MACH to "alpha" using `uname -m`. 2. Set HSI flags to define "OSF1" for compile time ifdefs. For the moment set all other HSI compile and link flags to null. 3. Added some code to try to automatically determine $iraf if not defined in the user's environment when the script is run. A list of standard root directories are searched for; these can be links to the actual location and it will still work. (12/28) unix/hlib/libc/spp.h 1. Set LEN_JUMPBUF to 2*(84+1) for the Alpha (the 2 is because IRAF uses type int for the array while OSF1 uses type long). (See also hlib/config.h below). 2. Set XLONG to int (=32 bits) for this 64 bit machine. 3. Compiled osb/zzeps2.f and verified that the IEEE epsilons work. 4. OSF1 f77 evidently uses trailing underscores so it should not be necessary to modify the Fortran/C name mappings. (12/28) unix/hlib/libc/kernel.h 1. SIGFUNC is a pointer to void for OSF1. 2. OSF1 has bcopy but the manpage does not say whether it can handle overlapping arrays, so we will use memmove/memset instead. (12/28) unix/hlib/libc/setjmp.h Comment out the #pragma unknown_control_flow, not support for OSF1 and there doesn't appear to be anything comparable. (12/28) unix/os/getproc.c Added an #ifdef OSF1 to cause the nlist-based code to be used. (12/28) unix/os/irafpath.c Added a #ifdef __alpha for the alpha architecture. (12/28) unis/os/zfioks.c Changed a number of #ifdef SOLARIS conditionals to #ifdef OSF1 where appropriate. (for example use the select macros, updated typing for socket calls). (12/28) unis/os/zfiond.c Modified to use the socket macros as above. (12/28) unix/os/zgcmdl.c Modified similarly to the Ultrix version, using the external __Argv to pick up the host argument list. (12/28) unix/os/zopdir.c 1. Modified to use <dirent.h>. (12/28) 2. zopdir would pass back a pointer coerced to an int as the "file descriptor" but this would fail on 64 bit systems where pointers don't fit in 32 bits. Modified the routine to allocate a kernel file descriptor for the directory and pass back a normal fd instead. (12/29) unix/os/zxwhen.c Modified for OSF. OSF1 has sigaction, so this is used for handling the floating point exceptions (as with Solaris). (12/28) unix/os/zzstrt.c Modified to call the OSF1 function ieee_set_fp_control to enable the invalid, divide by zero, and overflow exceptions. (12/28) unix/os/zdojmp.c Had to modify to treat jmpbuf as pointer to long rather than to int, in order to retrieve the quadword address of the status variable from jmpbuf[0] and to correctly compute jmpbuf[1]. (12/28) unix/as.alpha + unix/as.alpha/zsvjmp.s + Set up an AS directory for the alpha/osf HSI. Wrote an Alpha version of zsvjmp. The trick with this one, which I missed at first, was to set register 27 (pv) to the address of setjmp before branching into it. The alpha procedure calling sequence assumes that the caller of a procedure does this and it is required to set the global pointer correctly for the procedure being executed. The STScI version of zsvjmp (produced by technical support at DEC) could not be used as it was just setjmp with the name changed. The status argument used by zsvjmp was being ignored, and setjmp was being called with the wrong jump buffer address. (12/28) unix/hlib/mkpkg.inc unix/hlib/mkpkg.sf.OSF1 + Set up a basic mkpkg.inc for OSF1. (12/28) unix/.../mkpkg.sh The OSF1 compilers refuses to produce a file with the extension ".e", so all the HSI mkpkg.sh files were modified to use .E instead. When the executables are moved to $hbin the extension is changed to .e. (12/28) unix/os/prwait.c Like Solaris, OSF1 wait() wants an int exit_status argument. (12/28) unix/os/zgtime.c time() is of type time_t in OSF1. (12/28) unix/os/gmttolst.c unix/boot/bootlib/ostime.c These routines use ftime() which on OSF1 is only available in an optional compatibility library. Added a #ifdef OSF1 case which uses localtime() instead of ftime to compute the timezone in seconds west of GMT. (12/28) unix/hlib/irafuser.csh 1. Set the default optimization level for Fortran files to -O3, to disable inter-procedural optimization which causes a warning when compiling files for a library. 2. Added a -lots reference to HSI_F77LIBS, this library is evidently used internally by the Fortran compiler. (12/28) unix/boot/wtar/wtar.c Fixed a bug in WTAR involving coercion of a pointer to an integer (line 536, bp = ...). (12/28) unix/boot/spp/xc.c Modified for OSF1. The Solaris version pretty much works, about all I had to modify was the list of Fortran libraries. Also set the default optimization to -O3 for f77 (-O1 for cc) and set up to produce a .E output executable which is renamed to the .e version internally. (12/28) --------------------------- Completed bootstrap. (12/28) Attempted the first sysgen, numerous errors to be tracked down. unix/boot/spp/xc.c Modified XC to call f77 with "-warn nounreachable" when compiling SPP generated Fortran files. Technically unreachable statements occur naturally and harmlessly in some cases in SPP generated Fortran. (for example in compile time conditionals). (12/29) sys/gio/gks/gcas.x Changed the procedure name from "gca" to "gcas". There is already another procedure in the same library called "gca". "gcas" is supposed to be the type short version. (12/29) sys/gio/ncarutil/autograph/agrstr.f Commented out statements number 901, 902: "no path to this statement". These statements are never called as the code that calls them is also commented out. (12/29) sys/gio/ncarutil/autograph/agsave.f Same thing, statement 901. (12/29) sys/gio/ncarutil/conlib/consld.f Commented out statement functions SCRTCH and IARVL. These are never called and result in a warning message. (12/29) sys/gio/ncarutil/conrec.f Commented out three lines around line 1226. These lines were no longer used because other code had been commented out, and were resulting in a "Variable XX is used before it value has been defined" warnings. (12/29) sys/gio/nspp/sysint/encd.f Commented out several lines that were no longer used and were causing a "no path to this statement" warning. (12/29) math/deboor/setdat2.f math/deboor/setdat3.f This library contains three files setdat.f, setdat2.f, setdat3.f all of which contain a procedure "setdat", causing library conflicts. These routines are not really part of the library anyway and are only used to generate data for examples in DeBoor's book, but to avoid the library conflicts I changed the names of the second and third procedures to setdt2, setdt3. (12/29) pkg/xtools/icfit/icdosetupd.x Problem with mixed type real and double arguments in calls to the min and max intrinsic functions for xmin, xmax. (12/29) pkg/cl/bkg.c pkg/cl/builtin.c pkg/cl/compile.c pkg/cl/config.h pkg/cl/debug.c pkg/cl/decl.c pkg/cl/errs.c pkg/cl/exec.c pkg/cl/gram.c pkg/cl/main.c pkg/cl/mem.h pkg/cl/modes.c pkg/cl/opcodes.c pkg/cl/opcodes.h pkg/cl/operand.c pkg/cl/param.c pkg/cl/prcache.c pkg/cl/scan.c pkg/cl/stack.c pkg/cl/task.c The CL has long defined the dictionary and stack as arrays of unsigned integer. This causes problems on a 64 bit machine like the Alpha where integer and pointer are not the same size. To avoid this problem a new type "memel" was defined in a typedef in config.h. The CL code was modified as necessary to declare all dictionary and stack storage and references using this new type. (12/29) pkg/cl/scan.c The varargs code in this routine failed to compile on the Alpha, which defines va_list as a structure rather than a variable. This caused a (va_list) cast to fail. After studying this for a while I couldn't find any way to safely and portably use varargs to fake an argument list as an array. The solution adopted was to just make a normal call to sscanf, putting the variable number of arguments on the argument list in the normal fashion as v[0], v[1], v[2], and so on. The current implementation imposes a limit of at most 32 arguments for a CL scan operation. (12/29-30) unix/as.alpha/ieee.gx unix/as.alpha/ieeed.x unix/as.alpha/ieeer.x Installed the DEC little-endian versions of the IEEE conversion routines. (12/29) mkpkg noao/mkpkg Added an entry for the "alpha" architecture. (12/29) unix/hlib/mkfloat.csh 1. Modified to look for .E files as well as .e files. 2. The script was failing because tar -tf would output file names with a trailing space after the filename (surely a bug in OSF1 tar). Had to add a filter to trim the whitespace. 3. Modified the script to treat the "generic" architecture specially, avoiding any attempt to restore any binaries etc. (12/29) sys/libc/zzdebug.c -> zztest.c Renamed zzdebug.c zztest.c to avoid a name conflict with the zzdebug.x in the same directory. (12/29) unix/hlib/libc/stdio.h In struct _iobuf, changed the type declarations from long and int to XLONG and XINT. (12/29) unix/hlib/config.h Also set LEN_JUMPBUF here (see above). (12/29) dev/hosts Added an entry for "lyra" to the hosts table. (12/29) --------------------------- Completed sysgen. Core system runs now but a few bugs are evident and remain to be tracked down. (12/29) dev/pix.imh dev/pix.pix dev/wpix.imh Replaced these files with the little-endian versions from Ultrix/IRAF. Having unreadable images was a major source of the "system" problems! (12/30) lib/helpdb.mip noao/lib/helpdb.mip The help system would not read these files... Had to rebuild them to get things to work. Woops - I forgot to set the byte swap flags in the HSI before building IRAF. (12/30) unix/hlib/mach.h Set all the SWAP variables to YES. Did a sysgen update. (12/30) unix/hlib/install Modified the install script for OSF1. (12/30) unix/boot/spp/xc.c unix/hlib/mkpkg.inc Moved the "-taso" flag into XC. This is needed to compile all iraf programs on the Alpha, and users shouldn't have to type it when running XC standalone outside of mkpkg. (12/30) --------------------------- Core system is up and running now with no serious bugs evident. Built bin.alpha for TABLES package. The libraries built (all IRAF uses) but the compiler core dumped trying to link the executables. Haven't looked into it yet. Started a sysgen of NOAO. noao/artdata/t_mk1dspec.x Fixed two cases of MAX called with arguments of different types, in this case the real constants 1. and 0. were being compared to a type double expression. (12/30) noao/mtlocal/cyber/pow.inc noao/mtlocal/cyber/rrcopy/pow.inc - noao/mtlocal/cyber/rrcopy/rcrbits.x The include file pow.inc contained some very small real constants in the E-38 or E-39 range, which caused compile time evaluation errors. The offending values in the table were replaced by the value 0.0. Probably other platforms that don't report this problem have been underflowing to zero when evaluationg the these values. Deleted the rrcopy of pow.inc and modified the include in rcrbits.x to reference the version in the root directory instead. (12/30) This program is pretty much obsolete and should probably be retired, but it is easier to fix the compile time problems for now. unix/hlib/mkpkg.sf.OSF1 Added cl$ytab.c to the list of special files for OSF1. This file needs to be compiled with -Olimit 2048 to have enough table space to optimize such a large file. (12/30) unix/hlib/fc.csh Modified for OSF1. The main change required was that the file /usr/lib/cmplrs/fort/for_main.o must be explicitly included on the link line in order to link the Fortran program. (12/30 1994) --------------------------- Merged in latest 2.10.3 revisions from tucana. (2/16 1995) dev/tapecap Modified the Ultrix/IRAF tapecap to add support for OSF/1. Added compressed and uncompressed DAT (TLZ06) unit 0, 1 entries. These worked on the first try, although I did have to add an ":se" to make appending work after readting to EOT. (3/01) unix/as.alpha/ieee.gx I did not actually modify this file for the problem noted below, but wanted to record this oddity of the Alpha architecture. (3/01) The inconsistency seen on the Alpha with the IEEE test files is not due to the NaN values, which are handled correctly, but to the special case negative zero (-0) value included in this test data. For some reason the Alpha fp unit is generating an exception for an operation comparing zero and negative zero. Other platforms have not had a problem with this (although one wonders what the correct result should be in this case). It does seem rather an odd problem and it is not clear if it is worth worrying about. If necessary we can modify our IEEE i/o routines to map such values to positive zero but I don't know if it is worth it, unless we find out that such values can occur in real world data. --------------------------- Merged in latest 2.10.4 revisions from tucana. (4/20 1995) unix/os/mkpkg.sh Modified the OS boot mkpkg.sh to use as$zshlib.s rather than os$zshlib.c. The mkpkg special file list was set up to do this, but the wrong version was used when the system was bootstrapped. (4/21) unix/hlib/mkpkg.sf.OSF1 Modified to compile as$zshlib.s without optimization, the default xc flags produce a warning message when used to compile as$zshlib.s. (4/21) unix/os/zxwhen.c This code was modified to use signal instead of signal plus sigaction. I was having problems with signals not being caught resulting in infinite loops. See the comments in the code. (5/03) unix/os/zawset.c Installed new version from tucana. (5/03) unix/hlib/libc/kernel.h Modified values of SZ_DEFWORKSET and SZ_MAXWORKSET to 8 Mb and 256 Mb as was done on tucana for ZAWSET above. (5/03) unix/hlib/zzsetenv.def Default printer changed to "lp". (5/03) unix/os/mkpkg.sh Fixed a couple minor problems found in redoing the bootstrap. 1. Changed HSI_LIBS to HSI_OSLIBS for building zalloc.e, which doesn't use the IRAF libraries. 2. The "set zsrc = ..." was incorrect for the Bourne shell, changed to BS syntax. (5/03) unix/os/zawset.c This routine would not work properly on OSF/1 even though it should according to the docs (behavior should be the same as on other systems). Any attempt to set RLIMIT_RSS would fail, causing the value 50 to be returned. Modified the code to merely comment out the setrlimit. getrlimit still works and the routine will still return an accurate indication of the physical memory available to a process. Probably this problem with setrlimit() explains why the "limit" command in the cshell doesn't work either. (5/09) unix/hlib/spy.cl Updated to use ps -ef instead of px -axu. (5/23) sys/fio/fioclean.x sys/fio/stropen.x Two new internal routines str{set,get}mode were added to stropen.x. These are used to set or query the file access mode as strored for the string file, which represents these in a file-dependent way. fio_cleanup was modified to force the access mode of a string file to READ_ONLY before closing it during file cleanup, to prevent the writing of the trailing EOS when closing a string file opened for writing. The latter could cause a segmentation violation if the string buffer was no longer in a mapped region of memory, as is possible if the string file is still open (i.e. not closed normally) following task termination when fio_cleanup is called. (6/06) --------------------------- V2.10.4 release June 07 1995. unix/hlib/install Changed /etc/mknod to /usr/sbin/mknod. (6/21)