5 Known Problems and Workarounds
- 1 - 1. Introduction These notes describe the Base Development (dev) of the 5.2 IRIS Development Option from Silicon Graphicsr, Inc. They include discussion of make(1), header files, libraries, the kernel, and device drivers. Note: Packaged with the IRIS Development Option software is a separate sheet that contains the Software License Agreement. This software is provided to you solely under the terms and conditions of the Software License Agreement. Please take a few moments to review the Agreement. This document contains the following chapters: 1. Introduction 2. Installation Information 3. Changes and Additions 4. Bug Fixes 5. Known Problems and Workarounds 1.1 Release_Identification_Information Following is the release identification information for the Base Development (dev) portion of the 5.2 IRIS Development Option: Software Product IRIS Development Option Version 5.2 Product Code SC4-IDO-5.2 System Software Requirements IRIX 5.2 or later 1.2 Online_Release_Notes After you install the online documentation for a product (the relnotes subsystem), you can view the release notes on your screen. If you have a graphics system, select ``Release Notes'' from the Tools submenu of the Toolchest. This displays the grelnotes(1) graphical browser for the online release notes. - 2 - Refer to the grelnotes(1) man page for information on options to this command. If you have a nongraphics system, you can use the relnotes command. Refer to the relnotes(1) man page for accessing the online release notes. 1.3 Product_Support Silicon Graphics, Inc., provides a comprehensive product support maintenance program for its products. If you are in the U.S. or Canada and would like support for your Silicon Graphics-supported products, contact the Technical Assistance Center at 1-800-800-4SGI. If you are outside these areas, contact the Silicon Graphics subsidiary or authorized distributor in your country. - 1 - 2. Installation_Information The IRIS Software Installation Guide fully documents the process for installing the Base Development software. 2.1 5.2_Base_Development_Subsystems The 5.2 Base Development (dev) software includes these subsystems: dev.books.IRIX_NetPG Network Programming Guide dev.books.IRIX_SysPG IRIX System Programming Guide dev.books.IndigoMagic_IG Indigo Magic Integration Guide dev.hdr.lib Development environment headers dev.man.irix_lib Development environment manual pages dev.man.relnotes These release notes. dev.sw.abi MIPS ABI development libraries. dev.sw.irix_speclibs NonShared Libraries for Benchmarks dev.sw.lib Development libraries dev.sw.make Parallel make utilities 2.1.1 Subsystem_Disk_Space_Requirements This section lists the dev subsystems (and their sizes). If you are installing this software for the first time, the subsystems marked ``default'' are those selected for installation automatically. They will be installed when you give the go command unless you explicitly request (with the keep command) that they not be installed. Those marked ``miniroot'' must be installed from the miniroot. Note: The listed subsystem sizes are approximate. Refer to the IRIS Software Installation Guide for information on finding exact sizes. - 2 - Subsystem Name Subsystem Size (512-byte blocks) dev.books.IRIX_NetPG (default) 2980 dev.books.IRIX_SysPG (default) 4937 dev.books.IndigoMagic_IG (default) 1513 dev.hdr.lib (default) 2170 dev.man.irix_lib (default) 3978 dev.man.relnotes (default) 10 dev.sw.abi 22760 dev.sw.irix_speclibs 7220 dev.sw.lib (default) 4341 dev.sw.make (default) 328 - 1 - 3. Changes_and_Additions The features in this chapter are new or significantly changed in the 5.0, 5.0.1, 5.1, and 5.2 Base Development software. Except as noted, changes apply to all versions. 3.1 Library_and_System_Call_Functionality The following additions and changes were made to library and system call functionality between versions 4.1 and 5.2 of the IRIS Development Option. o IRIX now provides a complete implementation of the core interfaces described in the System V Interface Definition, Third Edition, Volume V (SVR4), published by UNIX System Laboratories. Specifically, the Base OS Service Routines, BASE OS Library Routines, and Terminal Interface Library Routines are now fully implemented. IRIX now complies with X/Open Portability Guide Issue 3 (XPG3), Volumes 1, 2, and 3. Among the significant features provided by these interfaces is the ability to write application software that can be localized for different languages and local customs. Examples are setcat(3) and pfmt(3). Another major addition is the support for SVR4 network interfaces, particularly those functions included in libnsl and libsocket. The kernel modules necessary to implement this at run time are available with a separately installable subsystem in the eoe image. See intro(3N) for a introduction of the networking functions and how to invoke them. The mmap(2) system call now works on arbitrary page boundaries, although for performance reasons the system should choose the mapping address. The munmap(2) call can now be done to an arbitrary portion of a region. The mprotect(2) system call has been added to change protections of a process' virtual address space at the page-level granularity. See mprotect(2) for programs that use self-modifying code. You can now associate (and eventually dissociate) a STREAMS-based file descriptor to a filename. See fattach(3C) and fdetach(3C) for details. The SVR4 /proc file system is now fully supported, with IRIX 5.0 and later implementing a superset of the associated ioctl ioctl requests that can be applied to a process. The old /debug fcntl requests are no longer - 2 - supported. See proc(4) for information on this virtual file system and its interfaces. o The SVR4 fd file system is supported. Refer to fd(4) for information. o IRIX 5.0.1 and later releases comply with the POSIX 1003.1-1990 specification. Previous versions implemented POSIX 1003.1-1988. o IRIX 4.0 source programming interfaces to system calls and system libraries in IRIX 5.2 and later are compatible with those in IRIX 4.0. Code that compiled under IRIX 4.0 and uses commonly recognized practices for writing portable code should compile without modification on IRIX 5.2 and later. o A new user-level DMA support interface is provided which allows user-level VME drivers to get considerable performance increases on their PIO accesses to VME space on the Challenge/Onyx series. As DMA engines become available on other platforms and other busses, this interface will be expanded to support them. For information on using this facility, refer to the manual page for udmalib(3x). o A new direct I/O interface is provided that allows sophisticated applications, such as database servers, better control of their disk operations. Direct I/O allows the application to transfer data directly between a disk file in an EFS file system and a buffer in user space. For information on using this facility, refer to the manual entries for open(2) and fcntl(2). o The POSIX 1003.4a (Draft 12) interface for asynchronous I/O is supported. Asynchronous I/O allows an application program to request an I/O operation without being suspended until the completion of the operation. The program is notified by the delivery of a signal when the requested operation has been completed. If you want, the program can also poll the system for the completion status of asynchronous I/O operations. Refer to the manual entries for aio_read(3) and aio_write(3) for further information. o The POSIX 1003.4a (Draft 12) interface for queued signals is supported in IRIX 5.0.1 and later. Traditional UNIXr signals are not queued. If more than one signal is sent to a process before it can process the first one, it is impossible for the process to distinguish that more than one signal has been sent. - 3 - Using this mechanism, multiple occurrences of the same signal can be queued for a process. Refer to the manual entries sigaction(2), sigqueue(3), and signal(5) for more information. o Recursive versions of some libc functions have been provided. These correspond to the POSIX 1003.4a specification for reentrant functions. These functions are present in the default compilation mode-if you are compiling in POSIX-compliant mode (_POSIX_SOURCE defined), programs should be compiled with the feature test macro _SGI_REENTRANT_FUNCTIONS defined. o The POSIX 1003.4a specification for making stdio multi-thread safe has been implemented. In the default compilation mode, all stdio functions are thread safe. In POSIX or ANSI compilation mode, the program must define the feature test macro _SGI_MP_SOURCE in order to get the thread safe versions of stdio functions and macros. o The handling of the global error value, errno, has changed from IRIX 4.0. If the program includesand defines the feature test macro _SGI_MP_SOURCE, references to errno actually reference a per-thread errno; otherwise, the global variable errno is accessed. All system calls update both the per-thread and global versions of errno. o Support for collection of audit data of system events is now available as a separately installable option in the eoe image. See satctl(2), satread(2), and satwrite(2) for details. o The MIPS ABI mutual exclusion library libmutex.so is supported. The actual implementation of the routines is in libc.so.1. These routines, init_lock, acquire_lock, release_lock, and stat_lock, provide low-level portable access to a mutual exclusion primitive (see abilock(3x)). o Additional mutual exclusion primitives test_and_set and a set of derivative functions are also provided (see test_and_set(3P)). o A new option to usconfig(3P) permits setting whether an arena should be set up using autogrow mapped files or whether the file should be grown at initialization time to its specified size. Setting this option reduces the ability to recover from errors if the file system runs out of space. - 4 - o A new environment variable, USERROR, when set, prints out any errors encountered when calling various (3P) functions. It is considerably less verbose than USTRACE. o A new function, usdetach(3P), permits removing a previously attached arena. o All R4000 systems now use the load-linked instruction to provide fast user-level atomic operations. o The arena memory allocation function, amalloc, now returns NULL if it is working out of an autogrow mapped file and the file system runs out of space. Previously, the program received a SIGSEGV signal. See amalloc(3P) and mmap(2) for details. o Both the main and arena memory allocation packages have a new associated function to easily and efficiently allocate arbitrarily aligned data. See memalign(3C) and amemalign(3P). o The math library libm.a has been carefully checked to ensure its conformance with both the SVID 3rd Edition and ANSI X3.159-1989. Specific information can be found in the man pages sinh, exp, bessel, floor, gamma, math, hypot, sinh, sqrt, and trig. o The interface to the function scalb(3m) has changed to conform to SVR4. In previous releases, the type of the second argument to scalb (the exponent) was int. In this release, the type of the second argument is double. In addition, the functions scalb and rint have been moved from the math library to the C library. o A new option, flush_to_zero, has been added to libfpe.a. On an R4000-based system, using this option can improve execution performance if many floating point underflows occur. o The job control special character VSWTCH in the termio and termios structure field c_cc has been replaced by the POSIX control character VSUSP. Recompiled binaries that modify the VSWTCH special character no longer affect job control behavior, but binaries from 4.0.x that previously used this value continue to work as expected. o IRIX 5.2 uses the libc resolver routines from the BIND 4.9 release, (These routines send queries to the BIND name server, named(1M)). Some changes were made to the - 5 - prototypes described in resolver(3N) and declared in /usr/include/resolv.h. The struct state data structure was renamed to avoid potential conflicts with user code, also several fields were added. If you have programs that access this data structure directly, you will need to modify them and recompile them under 5.1. o The dev.sw.speclibs subsystem includes the non-shared libraries used in generating the SPEC benchmark report. The default mode of compilation on SGI systems in this release is to use position independent code (PIC) and dynamic shared objects (DSOs). There is a very small performance penalty associated with DSOs. For essentially all applications, the benefits of DSOs for application portability far outweigh the costs of this performance penalty. Use of the non-shared libraries is not encouraged. Please read the /usr/lib/nonshared/README file that is present in the dev.sw.speclibs subsystem for more details. 3.2 Kernel_Interface_Changes 3.2.1 SVR4 DDI/DKI (Device Driver Interface/Device Kernel Interface) SGI now supports the routines and header files specified by the System V Release 4 DDI/DKI Reference Manual (blue book) for SVR4 and the UNIX System V Release 4 DDI/DKI Reference Manual for Intel Processors (Includes Multiprocessing) (red book), published by UNIX System Laboratories. Conformance to these interfaces should improve the ability to port device drivers to Silicon Graphics systems, as well as minimize the changes necessary to keep a driver working in future releases of IRIX. Refer to the IRIX Device Drivers Programming Guide for details of Silicon Graphics extensions to DDI/DKI as well as other details needed to write kernel device drivers for IRIX. The device driver objects must remain in COFF format; they do not change to ELF. Driver binaries used with IRIX 4.0.x are not supported. They must be recompiled, and some design changes are required for IRIX 5.0.1 and later. 3.2.2 New_Procedures_for_Device_Driver_Configuration The ``system file'' that specifies modules to load into the kernel is now a ``system directory''; that is, the configuration data is now the concatenation of all files in the directory. This allows for release upgrades that do not clobber private modifications to the configuration. In addition, the system files no longer rely upon CPU-specific virtual address mappings to probe for devices. See lboot(1M) and system(4) for details. - 6 - 3.2.3 Loadable_Device_Drivers As of 5.0.1, IRIX supports dynamic loading and unloading of block, character, and STREAMS modules into a running kernel. See mload(4) and lboot(4) for details. 3.2.4 Vnode/VFS_Interface The IRIX 5.0.1 kernel was converted to use the Vnode/VFS interfaces to support different types of filesystems. In IRIX 4.0, the File System Switch (FSS) provided this functionality. The conversion to vnodes makes it far easier to provide support for new file system types in IRIX. 3.2.5 DLPI_(Data_Link_Provide_Interface) As of release 5.0.1, IRIX supports the connectionless mode of this interface to provide alternate protocol stacks over Ethernet. See dlpi(7) for details. - 1 - 4. Bug_Fixes This section lists the significant bugs fixed in the compilers and in IRIX since the IRIX 4.0.1 release. 4.1 IRIX_Bug_Fixes o Numerous additional prototypes have been added to header files for use when compiling for ANSI/ISO C. o The usinit now allows multiple processes with a different uid to attach to the shared arena. - 1 - 5. Known_Problems_and_Workarounds This section lists known problems with the IRIS Development Option version 5.2. 5.1 IRIX o The clock(3c) function in this release is defined to return the amount of processor time used since the first call to clock by the process. This is inconsistent with the Standard, which defines clock as simply returning the processor time used by the process. The discrepancy is transparent, however, in the usual case where two invocations of clock are used to time an interval. As this inconsistency is widespread on UNIX systems, its status in future releases might not change. As discussed previously, (and, as recommended in the Standard), make sure that any timing information is generated by subtracting the values returned by two invocations of clock, one at the beginning of your program and one at the end.