This appendix provides an overview of new features and updates that have been added to the Solaris operating environment and indicates the release to which they were added:
Performance improvements within ld(1) may significantly reduce the link-edit time of very large applications.
dlsym(3DL) symbol processing can be reduced using a dlopen(3DL) handle created with the RTLD_FIRST flag. See Obtaining New Symbols.
The signal used by the runtime linker to terminate an erroneous process can be managed using the dlinfo(3DL) flags RTLD_DI_GETSIGNAL, and RTLD_DI_SETSIGNAL.
String table compression is provided by the link-editor. This can result in reduced .dynstr and .strtab sections. This default processing can be disabled using the link-editor's -z nocompstrtab option. See String Table Compression.
The -z ignore option has been extended to eliminate unreferenced sections during a link-edit. See Remove Unused Material.
Unreferenced dependencies can be determined using ldd(1). See the -U option.
Support for extended ELF sections is provided by the link-editors. See ELF Header, Table 7–12, Sections, Table 7–16 and Symbol Table Section.
Greater flexibility in defining a symbols visibility is provided with the protected mapfile directive. See Defining Additional Symbols.
Thread-Local Storage (TLS) support is provided. See Thread-Local Storage Section, Table 7–14, Special Sections, Table 7–23, Table 7–36 and Table 7–44.
The -z rescan option provides greater flexibility in specifying archive libraries to a link-edit. See Position of an Archive on the Command Line.
The -z ld32 and -z ld64 options provide greater flexibility in using the link-editor support interfaces. See 32–Bit and 64–Bit Environments.
Additional link-editor support interfaces ld_input_done(), ld_input_section(), ld_input_section64() and ld_version() have been added. See Support Interface Functions.
Environment variables interpreted by the runtime linker can now be established for multiple processes by specifying them within a configuration file. See the -e and -E options of crle(1).
Support for more than 32,768 procedure linkage table entries within 64–bit SPARC objects has been added. See SPARC: 64–bit Procedure Linkage Table.
An mdb(1) debugger module enables you to inspect runtime linker data structures as part of process debugging. See Debugger Module.
The bss segment declaration directive makes the creation of a bss segment easier. See Segment Declarations.
Unused dependencies can be determined using ldd(1). See the -u option.
Various ELF ABI extensions have been added. See Initialization and Termination Sections, Initialization and Termination Routines, Table 7–4, Table 7–7, Table 7–14, Table 7–15, Group Section, Table 7–16, Table 7–24, Table 7–43, Table 7–44, and Program Loading (Processor-Specific).
Greater flexibility in the use of link-editor environment variables has been provided with the addition of _32 and _64 variants. See Environment Variables.
The symbolic information available from dladdr(3DL) has been enhanced with the introduction of dladdr1().
The $ORIGIN of a dynamic object can be obtained from dlinfo(3DL).
The maintenance of runtime configuration files created with crle(1) has been simplified. Inspection of a configuration file displays the command-line options used to create the file. An update capability is provided with the -u option.
The runtime linker and its debugger interface have been extended to detect procedure linkage table entry resolution. This update is identified by a new version number. See rd_init() under Agent Manipulation Interfaces. This update extends the rd_plt_info_t structure. See rd_plt_resolution() under Procedure Linkage Table Skipping.
An application's stack can be defined non-executable using the new mapfile segment descriptor STACK. See Segment Declarations.
The environment variable LD_BREADTH
is ignored by the runtime linker. See Initialization and Termination Routines.
The runtime linker and its debugger interface have been extended for better runtime and core file analysis. This update is identified by a new version number. See rd_init() under Agent Manipulation Interfaces. This update extends the rd_loadobj_t structure. See Scanning Loadable Objects.
You can now validate displacement relocated data in regard to its use, or possible use, with copy relocations. See Displacement Relocations.
64–bit filters can be built solely from a mapfile using the link-editor's -64 option. See Generating a Standard Filter.
The search paths used to locate the dependencies of dynamic objects can be inspected using dlinfo(3DL).
dlsym(3DL) and dlinfo(3DL) lookup semantics have been expanded with a new handle RTLD_SELF.
The runtime symbol lookup mechanism used to relocate dynamic objects can be significantly reduced by establishing direct binding information within each dynamic object. See External Bindings and Direct Binding.
The secure directory from which files can be preloaded is now /usr/lib/secure for 32–bit objects and /usr/lib/secure/64 for 64–bit objects. See Security.
Greater flexibility in modifying the runtime linker's search paths can be achieved with the link-editor's -z nodefaultlib option, and runtime configuration files created by the new utility crle(1). See Directories Searched by the Runtime Linker and Configuring the Default Search Paths.
The new extern mapfile directive enables you to use -z defs with externally defined symbols. See Defining Additional Symbols.
The new $ISALIST, $OSNAME, and $OSREL dynamic string tokens provide greater flexibility in establishing instruction set specific, and system specific dependencies. See Dynamic String Tokens.
The link-editor options -p and -P provide additional means of invoking runtime link auditing libraries. See Recording Local Auditors. The runtime link auditing interfaces la_activity() and la_objsearch() have been added. See Audit Interface Functions.
A new dynamic section tag, DT_CHECKSUM, enables you to coordinate ELF files with core images. See Table 7–43.
The 64–bit ELF object format is now supported. See File Format for details. Link-editor extensions and differences for 64–bit processing
include the use of /usr/lib/64 (see Directories Searched by the Link-Editor, Directories Searched by the Runtime Linker, and Naming Conventions), the environment variable LD_LIBRARY_PATH_64
(see Using an Environment Variable, and Directories Searched by the Runtime Linker), and the runtime linker /usr/lib/64/ld.so.1 (see Chapter 3, Runtime Linker).
You can build shared objects with optimized relocation sections using the link-editor's -z combreloc option. See Combined Relocation Sections.
The new $ORIGIN dynamic string token provides greater flexibility in establishing dependencies within unbundled software. See Dynamic String Tokens.
The loading of a shared object can now be deferred until the object is actually referenced by the running program. See Lazy Loading of Dynamic Dependencies.
The new SHT_SUNW_COMDAT section type enables the elimination of multiply-defined symbols. See COMDAT Section.
The new SHT_SUNW_move section type enables partially initialized symbols. See Move Section.
The runtime link auditing interfaces la_symbind64(), la_sparcv9_pltenter(), and la_pltexit64(), together with a new link-auditing flag LA_SYMB_ALTVALUE, have been added. See Audit Interface Functions.
Weak symbol references can trigger archive member extraction by using the link-editor's -z weakextract option. Extracting all archive members can be achieved using the -z allextract option. See Archive Processing.
Shared objects specified as part of a link-edit that are not referenced by the object being built can be ignored, and hence their dependency recording suppressed, using the link-editor's -z ignore option. See Shared Object Processing.
The link-editor generates the reserved symbols _START_ and _END_ to provide a means of establishing an object's address range. See Generating the Output File.
Changes have been made to the runtime ordering of initialization and finalization code to better accommodate dependency requirements. See Initialization and Termination Routines.
Symbol resolution semantics have been expanded for dlopen(3DL). See Symbol Lookup, RTLD_GROUP in Isolating a Group, and RTLD_PARENT in Object Hierarchies.
Symbol lookup semantics have been expanded with a new dlsym(3DL) handle RTLD_DEFAULT. See Default Symbol Lookup Model.
Extensions have been made to filter processing that allow more than one filtee to be defined, and provide for forcibly loading filtees. See Shared Objects as Filters.
You can record additional version dependencies using the mapfile file control directive $ADDVERS. See Binding to Additional Version Definitions.
A runtime linker audit interface provides support for monitoring and modifying a dynamically linked application from within the process. See Runtime Linker Auditing Interface.
A runtime linker debugger interface provides support for monitoring and modifying a dynamically linked application from an external process. See Runtime Linker Debugger Interface.
Additional section information is supported. See Table 7–11 for SHN_BEFORE and SHN_AFTER. See Table 7–14 for SHF_ORDERED and SHF_EXCLUDE.
A new dynamic section tag, DT_1_FLAGS, is supported. See Table 7–45 for the various flag values.
A package of demonstration ELF programs is provided. See Chapter 7, Object File Format.
The link-editors now support internationalized messages. All system errors are reported using strerror(3C).
The new eliminate mapfile directive, or the -B eliminate option, enable you to elimination local symbol table entries. See Symbol Elimination.