- 1 - 6.0 Base Compiler Execution Environment Release Notes - 2 - 1. Introduction These notes describe the IRIX Compiler Execution Environment (compiler_eoe), version 6.0, from Silicon Graphics, Inc. The IRIX Compiler EOE contains compiler execution utilites such as rld and those base compiler libraries supplied as DSOs (dynamic shared objects). It supports MIPSpro compilers in either 64-bit or 32-bit compilation mode. DSOs are discussed in Appendix A and in the dso(5) man page. Note: Packaged with this 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. 1.1 System_Prerequisite If you plan to run any IRIX applications, it is important to note that you must install the IRIX Compiler EOE. 1.2 Release_Identification_Information Following is the release identification information for the IRIX Compiler Execution Environment (compiler_eoe): Software Product Compiler_eoe Version 6.0 System Software Requirements IRIX 6.0 1.3 6.0 IRIX Compiler Execution Environment Subsystems The 6.0 IRIX Compiler EOE software (compiler_eoe) includes these subsystems: compiler_eoe IRIX compiler execution environment compiler_eoe.man IRIX compiler execution environment man pages - 3 - compiler_eoe.man.dso IRIX DSO man page compiler_eoe.man.unix IRIX compiler man pages compiler_eoe.sw IRIX compiler execution environment software compiler_eoe.sw.cpp Source code preprocessor compiler_eoe.sw.lboot Kernel lboot software compiler_eoe.sw.lib Base compilers execution libraries compiler_eoe.unix IRIX execution environment (compiler) 1.4 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. 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.5 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 - 4 - country. - 1 - 3.18 Base Compiler Execution Environment Release Notes - 2 - Document Number 007-1659-xxx 1. Dynamic_Shared_Objects A Dynamic Shared Object, or DSO, is an ELF format object file, very similar in structure to an executable program but with no "main". It has a shared component, consisting of shared text and read-only data; a private component, consisting of data and the GOT (Global Offset Table); several sections that hold information necessary to load and link the object; and a liblist, the list of other shared objects referenced by this object. Most of the libraries supplied by SGI are available as dynamic shared objects. A DSO is relocatable at runtime; it can be loaded at any virtual address. A consequence of this is that all references to external symbols must be resolved at runtime. References from the private region (.e.g. from private data) are resolved once at load-time; references from the shared region (e.g. from shared text) must go through an indirection table (GOT) and hence have a small performance penalty associated with them. Code compiled for use in a shared object is referred to as Position Independent Code (PIC), whereas non-PIC is usually referred to as non- shared. Non-shared code and PIC cannot be mixed in the same object. At Runtime, exec loads the main program and then loads rld, the runtime linking loader, which finishes the exec operation. Starting with main's liblist, rld loads each shared object on the list, reads that object's liblist, and repeats the operation until all shared objects have been loaded. Next, rld allocates common and fixes up symbolic references in each loaded object. (This is necessary because we don't know until runtime where the object will be loaded.) Next, each object's init code is executed. Finally, control is transferred to "__start". For a more complete discussion of DSOs, including answers to questions frequently asked - 3 - about them, see the dso(5) man page.