5 Known Problems and Workarounds
- 1 - 1. Introduction These notes describe the Base Development (dev) of the 6.0 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 6.0 IRIS Development Option: Software Product IRIS Development Option Version 6.0 Product Code SC4-IDO-6.0 System Software Requirements IRIX 6.0 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 6.0_Base_Development_Subsystems The 6.0 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) 2994 dev.books.IRIX_SysPG (default) 4360 dev.books.IndigoMagic_IG (default) 1896 dev.hdr.lib (default) 2310 dev.man.irix_lib (default) 5247 dev.man.relnotes (default) 6 dev.sw.abi 18331 dev.sw.irix_speclibs 34070 dev.sw.lib (default) 9848 dev.sw.make (default) 303 - 1 - 3. Changes_and_Additions The features in this chapter are for IRIX 6.0. Since IRIX 6.0 is based on the IRIX 5.2 many of these changes have be noticed during the transition from IRIX 4.X to IRIX 5.2. 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 6.0 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 like it was in IRIX 5.2, 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 6.0 release complies with the POSIX 1003.1-1990 specification. o IRIX 4.0 source programming interfaces to system calls and system libraries in IRIX 6.0 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 6.0. 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 6.0. 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. Using this mechanism, multiple occurrences of the same signal can - 3 - 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 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)). There are now additional test_and_set(3P) primitives between 64 and 32 bit programs. (see test_and_set(3P) for more details). 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 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 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 6.0 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 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 6.0, or 5.1 and later. - 5 - 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. o Default compilation on a 64 bit machine is for 64 bit "mips-4" binaries. To change this behavior use the environment variable SGI_ABI to "-32" which will product "mips-1" binaries. o 32 bit binaries that use the nlist call into the kernel will not work properly. (see nlist(3X)). o 64 bit libs are broken down as follows : /usr/lib64 *.so *.a mips3/ *.so *.a nonshared/ *.a mips4/ *.so *.a nonshared/ *.a nonshared/ *.a The search algorithm: e.g. in the case that -mips4 is specified, ld will first look in /usr/lib64/mips4, following that, ld will look in /usr/lib64. In the case of -mips3 is specified, ld will first look in /usr/lib64/mips3, then in /usr/lib64. 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 - 6 - 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 maybe required for IRIX 6.0. 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. 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 6.0 kernel also uses 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) Not support for IRIX 6.0. - 1 - 4. Bug_Fixes This section lists the significant bugs fixed in the compilers and in IRIX since the IRIX 5.2 release. 4.1 IRIX_Bug_Fixes o Currently bug compatible with IRIX 5.2. - 1 - 5. Known_Problems_and_Workarounds This section lists known problems with the IRIS Development Option version 6.0. 5.1 IRIX o A warning message will be produced from ld when linking with both libc and libm (64 bits) if using the function qlogb. In the next release this symbol will reside in libm only. Please make if you use the quad math functions please link with libm.