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 includes
and 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.