This appendix provides an overview of the updates and new features that have been added to releases of the Oracle Solaris OS.
The link-editor can provide guidance in creating high quality objects using the -z guidance option. See ld(1).
Local auditors can now receive la_preinit() and la_activity() events. See Runtime Linker Auditing Interface.
A more robust model for testing for the existence of functionality is provided with deferred dependencies. See Testing for Functionality and Providing an Alternative to dlopen().
A new mapfile syntax is provided. See Chapter 9, Mapfiles. This syntax provides a more human readable, and extensible language than the original System V Release 4 language. Full support for processing original mapfiles is maintained within the link-editor. See Appendix E, System V Release 4 (Version 1) Mapfiles for the original mapfile syntax and use.
Individual symbols can be associated with capability requirements. See Identifying Capability Requirements. This functionality provides for the creation of a family of optimized functions within a dynamic object. See Creating a Family of Symbol Capabilities Functions, and Capabilities Section.
Objects that are created with the link-editor, and contain Oracle Solaris specific ELF data, are tagged with ELFOSABI_SOLARIS in the e_ident[EI_OSABI] ELF header. Historically, ELFOSABI_NONE has been used for all objects. This change is primarily of informational value, as the runtime linker continues to consider ELFOSABI_NONE and ELFOSABI_SOLARIS to be equivalent. However, elfdump(1), and similar diagnostic tools, can use this ABI information to produce more accurate information for a given object.
elfdump(1) has been extended to use the value of e_ident[EI_OSABI] ELF header, or the new -O option, to identify ELF data types and values that are specific to a given ABI, and to use this information to provide a more accurate display of the object contents. The ability to display ABI-specific information in objects from the Linux operating system has been greatly expanded.
The segment mapping information for an object that is loaded with a process can be obtained using the dlinfo(3C) flags RTLD_DI_MMAPCNT and RTLD_DI_MMAPS.
64–bit processes can be restricted to the lower 32–bit address space by encoding a software capabilities attribute. See Software Capability Address Space Restriction Processing.
The link-editor recognizes a number of GNU link-editor options. See ld(1).
The link-editor provides cross linking for SPARC and x86 targets. See Cross Link-Editing.
The link-editor now provides for merging SHF_MERGE | SHF_STRING string sections. See Section Merging.
The merging of relocation sections when creating executables and shared objects is now the default behavior. See Combined Relocation Sections. This behavior used to require the link-editor's -z combreloc option. The -z nocombreloc is provided to disable this default behavior, and preserve the one-to-one relationship with the sections to which the relocations must be applied.
ELF objects can be edited with the new utility elfedit(1).
Additional symbol visibility attributes are provided. See the exported, singleton and eliminate attribute descriptions under SYMBOL_SCOPE / SYMBOL_VERSION Directives and Table 7–20.
The link-editor, and associated ELF utilities have been moved from /usr/ccs/bin to /usr/bin. See Invoking the Link-Editor.
Symbol sort sections have been added, that allow for simplified correlation of memory addresses to symbolic names. See Symbol Sort Sections.
The symbol table information that is available with dynamic objects has been extended with the addition of a new .SUNW_ldynsym section. See Symbol Table Section and Table 7–5.
The format of configuration files that are managed with crle(1) has been enhanced for better file identification. The improved format ensures that the runtime linker does not use a configuration file generated on an incompatible platform.
New relocation types have been added that use the size of the associated symbol in the relocation calculation. See Relocation Types (Processor-Specific).
The following items have been made obsolete. These items provided internal, or seldom used features. Any existing use of the associated ELF definitions is ignored, however the definitions can still be displayed by tools such as elfdump(1).
This dynamic section tag identified runtime feature requirements. See Dynamic Section. This tag provided the feature flags DTF_1_PARINIT and DTF_1_CONVEXP. The DT_FEATURE_1 tag and the associated flags are no longer created by the link-editor, or processed by the runtime linker.
The -z rescan-now, -z recan-start, and -z rescan-end options provide additional flexibility in specifying archive libraries to a link-edit. See Position of an Archive on the Command Line.
Global auditing can now be enabled by recording an auditor within an application together with the link-editor -z globalaudit option. See Recording Global Auditors.
Additional link-editor support interfaces, ld_open() and ld_open64() have been added. See Support Interface Functions.
Greater flexibility in executing an alternative link-editor is provided with the link-editor -z altexec64 option, and the LD_ALTEXEC environment variable.
Symbol definitions that are generated using mapfiles can now be associated to ELF sections. See SYMBOL_SCOPE / SYMBOL_VERSION Directives.
The link-editor and runtime linker provide for the creation of static TLS within shared objects. In addition, a backup TLS reservation is established to provide for limited use of static TLS within post-startup shared objects. See Program Startup.
Support for the x64 medium code model is provided. See Table 7–4, Table 7–8, and Table 7–10.
The command line arguments, environment variables, and auxiliary vector array of the process, can be obtained using the dlinfo(3C) flag RTLD_DI_ARGSINFO.
Greater flexibility in prohibiting direct binding from external references is provided with the link-editor -B nodirect option. See Appendix D, Direct Bindings.
x64 is now supported. See Table 7–5, Special Sections, x64: Relocation Types, x64: Thread-Local Variable Access, and x64: Thread-Local Storage Relocation Types.
A restructuring of the filesystem has moved many components from under /usr/lib to /lib. Both the link-editor and runtime linkers default search paths have been changed accordingly. See Directories Searched by the Link-Editor, Directories Searched by the Runtime Linker, and Security.
System archive libraries are no longer provided. Therefore, the creation of a statically linked executable is no longer possible. See Static Executables.
Greater flexibility for defining alternative dependencies is provided with the -A option of crle(1).
The link-editor and runtime linker process environment variables specified without a value. See Environment Variables.
Path names used with dlopen(3C), and as explicit dependency definitions, can now use any reserved tokens. See Appendix C, Establishing Dependencies with Dynamic String Tokens. The evaluation of path names that use reserved tokens is provided with the new utility moe(1).
An optimal means of testing for the existence of an interface is provide with dlsym(3C) and the new handle RTLD_PROBE. See Providing an Alternative to dlopen().
Greater flexibility in defining the hardware and software requirements of ELF objects is provided with the link-editor and runtime linker. See Capabilities Section.
The runtime link auditing interface la_objfilter() has been added. See Audit Interface Functions.
Shared object filtering has been extended to provide filtering on a per-symbol basis. See Shared Objects as Filters.
The new section types SHT_SUNW_ANNOTATE, SHT_SUNW_DEBUGSTR, SHT_SUNW_DEBUG, and SHT_SPARC_GOTDATA are supported. See Table 7–5.
The analysis of runtime interfaces is simplified with the new utility lari(1).
Greater control of direct bindings is provided with the link-editor options -z direct and -z nodirect, together with the DIRECT and NODIRECT mapfile directives. See SYMBOL_SCOPE / SYMBOL_VERSION Directives, and Appendix D, Direct Bindings.
Performance improvements within ld(1) can significantly reduce the link-edit time of very large applications.
dlsym(3C) symbol processing can be reduced using a dlopen(3C) handle that is 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(3C) flags RTLD_DI_GETSIGNAL, and RTLD_DI_SETSIGNAL.
The link-editor provides string table compression, that 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.
The link-editor supports extended ELF sections. See ELF Header, Table 7–5, Sections, Table 7–10 and Symbol Table Section.
Greater flexibility in defining a symbols visibility is provided with the protected mapfile directive. See SYMBOL_SCOPE / SYMBOL_VERSION Directives.
Thread-Local Storage (TLS) support is provided. See Chapter 8, Thread-Local Storage.
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 Environments 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 be established for multiple processes by specifying these variables 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 64-bit SPARC: 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–3, Table 7–8, Table 7–9, Group Section, Table 7–10, Table 7–20, Table 7–32, Table 7–33, 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 that is made available from dladdr(3C) has been enhanced with the introduction of dladdr1().
The $ORIGIN of a dynamic object can be obtained from dlinfo(3C).
The maintenance of runtime configuration files that are 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 by 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 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 by using the link-editor's -64 option. See Generating Standard Filters.
The search paths used to locate the dependencies of dynamic objects can be inspected using dlinfo(3C).
dlsym(3C) and dlinfo(3C) 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 Appendix D, Direct Bindings.
The secure directory from which files can be preloaded is /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 SYMBOL_SCOPE / SYMBOL_VERSION Directives.
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–32.