Linux Standard Base Core Specification 3.0Preview1 Copyright © 2004 Free Standards Group Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Portions of the text are copyrighted by the following parties: * The Regents of the University of California * Free Software Foundation * Ian F. Darwin * Paul Vixie * BSDI (now Wind River) * Andrew G Morgan * Jean-loup Gailly and Mark Adler * Massachusetts Institute of Technology These excerpts are being used in accordance with their respective licenses. Linux is a trademark of Linus Torvalds. UNIX a registered trademark of the Open Group in the United States and other countries. LSB is a trademark of the Free Standards Group in the USA and other countries. AMD is a trademark of Advanced Micro Devices, Inc. Intel and Itanium are registered trademarks and Intel386 is a trademarks of Intel Corporation. OpenGL is a registered trademark of Silicon Graphics, Inc. Table of Contents Specification Introduction ELF Specification Linux Standard Base Specification Linux Packaging Specification Free Documentation License Specification Introduction _________________________________________________________ Table of Contents Foreword Introduction I. Introductory Elements 1. Scope 1.1. General 1.2. Module Specific Scope 2. Normative References 3. Requirements 3.1. Relevant Libraries 3.2. LSB Implementation Conformance 3.3. LSB Application Conformance 4. Definitions 5. Terminology 6. Documentation Conventions 7. Relationship To ISO/IEC 9945 POSIX List of Tables 2-1. Normative References 3-1. Standard Library Names 3-2. Standard Library Names defined in the Architecture Specific Supplement _________________________________________________________ Foreword This is version 3.0Preview1 of the Linux Standard Base Core Specification. An implementation of this version of the specification may not claim to be an implementation of the Linux Standard Base unless it has successfully completed the compliance process as defined by the Free Standards Group. _________________________________________________________ Introduction The LSB defines a binary interface for application programs that are compiled and packaged for LSB-conforming implementations on many different hardware architectures. Since a binary specification shall include information specific to the computer processor architecture for which it is intended, it is not possible for a single document to specify the interface for all possible LSB-conforming implementations. Therefore, the LSB is a family of specifications, rather than a single one. This document should be used in conjunction with the documents it references. This document enumerates the system components it includes, but descriptions of those components may be included entirely or partly in this document, partly in other documents, or entirely in other reference documents. For example, the section that describes system service routines includes a list of the system routines supported in this interface, formal declarations of the data structures they use that are visible to applications, and a pointer to the underlying referenced specification for information about the syntax and semantics of each call. Only those routines not described in standards referenced by this document, or extensions to those standards, are described in the detail. Information referenced in this way is as much a part of this document as is the information explicitly included here. The specification carries a version number of either the form x.y or x.y.z. This version number carries the following meaning: * The first number (x) is the major version number. All versions with the same major version number should share binary compatibility. Any addition or deletion of a new library results in a new version number. Interfaces marked as deprecated may be removed from the specification at a major version change. * The second number (y) is the minor version number. Individual interfaces may be added if all certified implementations already had that (previously undocumented) interface. Interfaces may be marked as deprecated at a minor version change. Other minor changes may be permitted at the discretion of the LSB workgroup. * The third number (z), if present, is the editorial level. Only editorial changes should be included in such versions. I. Introductory Elements Table of Contents 1. Scope 2. Normative References 3. Requirements 4. Definitions 5. Terminology 6. Documentation Conventions 7. Relationship To ISO/IEC 9945 POSIX _________________________________________________________ Chapter 1. Scope 1.1. General The Linux Standard Base (LSB) defines a system interface for compiled applications and a minimal environment for support of installation scripts. Its purpose is to enable a uniform industry standard environment for high-volume applications conforming to the LSB. These specifications are composed of two basic parts: A common specification ("LSB-generic") describing those parts of the interface that remain constant across all implementations of the LSB, and an architecture-specific specification ("LSB-arch") describing the parts of the interface that vary by processor architecture. Together, the LSB-generic and the architecture-specific supplement for a single hardware architecture provide a complete interface specification for compiled application programs on systems that share a common hardware architecture. The LSB-generic document shall be used in conjunction with an architecture-specific supplement. Whenever a section of the LSB-generic specification shall be supplemented by architecture-specific information, the LSB-generic document includes a reference to the architecture supplement. Architecture supplements may also contain additional information that is not referenced in the LSB-generic document. The LSB contains both a set of Application Program Interfaces (APIs) and Application Binary Interfaces (ABIs). APIs may appear in the source code of portable applications, while the compiled binary of that application may use the larger set of ABIs. A conforming implementation shall provide all of the ABIs listed here. The compilation system may replace (e.g. by macro definition) certain APIs with calls to one or more of the underlying binary interfaces, and may insert calls to binary interfaces as needed. The LSB is primarily a binary interface definition. Not all of the source level APIs available to applications may be contained in this specification. _________________________________________________________ 1.2. Module Specific Scope This is the Core module of the Linux Standards Base (LSB). This module provides the fundamental system interfaces, libraries, and runtime environment upon which all conforming applications and libraries depend. Interfaces described in this module are mandatory except where explicitly listed otherwise. Core interfaces may be supplemented by other modules; all modules are built upon the core. _________________________________________________________ Chapter 2. Normative References The specifications listed below are referenced in whole or in part by the Linux Standard Base. In this specification, where only a particular section of one of these references is identified, then the normative reference is to that section alone, and the rest of the referenced document is informative. Table 2-1. Normative References Name Title URL DWARF Debugging Information Format DWARF Debugging Information Format, Revision 2.0.0 (July 27, 1993) http://www.eagercon.com/dwarf/dwarf-2.0.0.pdf Filesystem Hierarchy Standard Filesystem Hierarchy Standard (FHS) 2.3 http://www.pathname.com/fhs/ Gdk 2.6.2 Reference Manual Gdk 2.6.2 Reference Manual http://www.gtk.org/api/2.6/gdk/index.html Gdk-pixbuf 2.6.2 Reference Manual Gdk-pixbuf 2.6.2 Reference Manual http://www.gtk.org/api/2.6/gdk-pixbuf/index.html Glib 2.6.2 Reference Manual Glib 2.6.2 Reference Manual http://www.gtk.org/api/2.6/glib/index.html Gobject 2.6.2 Reference Manual Gobject 2.6.2 Reference Manual http://www.gtk.org/api/2.6/gobject/index.html Gtk 2.6.2 Reference Manual Gtk 2.6.2 Reference Manual http://www.gtk.org/api/2.6/gtk/index.html IEEE Std 754-1985 IEEE Standard 754 for Binary Floating-Point Arithmetic http://www.ieee.org/ ISO C (1999) ISO/IEC 9899: 1999, Programming Languages --C ISO POSIX (2003) ISO/IEC 9945-1:2003 Information technology -- Portable Operating System Interface (POSIX) -- Part 1: Base Definitions ISO/IEC 9945-2:2003 Information technology -- Portable Operating System Interface (POSIX) -- Part 2: System Interfaces ISO/IEC 9945-3:2003 Information technology -- Portable Operating System Interface (POSIX) -- Part 3: Shell and Utilities ISO/IEC 9945-4:2003 Information technology -- Portable Operating System Interface (POSIX) -- Part 4: Rationale Including Technical Cor. 1: 2004 http://www.unix.org/version3/ ISO/IEC TR14652 ISO/IEC Technical Report 14652:2002 Specification method for cultural conventions ITU-T V.42 International Telecommunication Union Recommendation V.42 (2002): Error-correcting procedures for DCEs using asynchronous-to-synchronous conversionITUV http://www.itu.int/rec/recommendation.asp?type=folders&lang=e& parent=T-REC-V.42 Large File Support Large File Support http://www.UNIX-systems.org/version2/whatsnew/lfs20mar.html Li18nux Globalization Specification LI18NUX 2000 Globalization Specification, Version 1.0 with Amendment 4 http://www.li18nux.org/docs/html/LI18NUX-2000-amd4.htm Linux Allocated Device Registry LINUX ALLOCATED DEVICES http://www.lanana.org/docs/device-list/devices.txt PAM Open Software Foundation, Request For Comments: 86.0 , October 1995, V. Samar & R.Schemers (SunSoft) http://www.opengroup.org/tech/rfc/mirror-rfc/rfc86.0.txt RFC 1321: The MD5 Message-Digest Algorithm IETF RFC 1321: The MD5 Message-Digest Algorithm http://www.ietf.org/rfc/rfc1321.txt RFC 1833: Binding Protocols for ONC RPC Version 2 IETF RFC 1833: Binding Protocols for ONC RPC Version 2 http://www.ietf.org/rfc/rfc1833.txt RFC 1950: ZLIB Compressed Data Format Specication IETF RFC 1950: ZLIB Compressed Data Format Specification http://www.ietf.org/rfc/rfc1950.txt RFC 1951: DEFLATE Compressed Data Format Specification IETF RFC 1951: DEFLATE Compressed Data Format Specification version 1.3 http://www.ietf.org/rfc/rfc1951.txt RFC 1952: GZIP File Format Specification IETF RFC 1952: GZIP file format specification version 4.3 http://www.ietf.org/rfc/rfc1952.txt RFC 2440: OpenPGP Message Format IETF RFC 2440: OpenPGP Message Format http://www.ietf.org/rfc/rfc2440.txt RFC 2821:Simple Mail Transfer Protocol IETF RFC 2821: Simple Mail Transfer Protocol http://www.ietf.org/rfc/rfc2821.txt RFC 2822:Internet Message Format IETF RFC 2822: Internet Message Format http://www.ietf.org/rfc/rfc2822.txt RFC 791:Internet Protocol IETF RFC 791: Internet Protocol Specification http://www.ietf.org/rfc/rfc791.txt SUSv2 CAE Specification, January 1997, System Interfaces and Headers (XSH),Issue 5 (ISBN: 1-85912-181-0, C606) http://www.opengroup.org/publications/catalog/un.htm SUSv2 Commands and Utilities The Single UNIX® Specification(SUS) Version 2, Commands and Utilities (XCU), Issue 5 (ISBN: 1-85912-191-8, C604) http://www.opengroup.org/publications/catalog/un.htm SVID Issue 3 American Telephone and Telegraph Company, System V Interface Definition, Issue 3 ; Morristown, NJ, UNIX Press, 1989.(ISBN 0201566524) SVID Issue 4 System V Interface Definition,Fourth Edition System V ABI System V Application Binary Interface, Edition 4.1 http://www.caldera.com/developers/devspecs/gabi41.pdf System V ABI Update System V Application Binary Interface - DRAFT - 17 December 2003 http://www.caldera.com/developers/gabi/2003-12-17/contents.htm l this specification Linux Standard Base http://www.linuxbase.org/spec/ X/Open Curses CAE Specification, May 1996, X/Open Curses, Issue 4, Version 2 (ISBN: 1-85912-171-3, C610), plus Corrigendum U018 http://www.opengroup.org/publications/catalog/un.htm _________________________________________________________ Chapter 3. Requirements 3.1. Relevant Libraries The libraries listed in Table 3-1 shall be available on a Linux Standard Base system, with the specified runtime names. The libraries listed in Table 3-2 are architecture specific, but shall be available on all LSB conforming systems. This list may be supplemented or amended by the architecture-specific specification. Table 3-1. Standard Library Names Library Runtime Name libdl libdl.so.2 libcrypt libcrypt.so.1 libz libz.so.1 libncurses libncurses.so.5 libutil libutil.so.1 libpthread libpthread.so.0 libpam libpam.so.0 libgcc_s libgcc_s.so.1 Table 3-2. Standard Library Names defined in the Architecture Specific Supplement Library Runtime Name libm See archLSB libc See archLSB proginterp See archLSB These libraries will be in an implementation-defined directory which the dynamic linker shall search by default. _________________________________________________________ 3.2. LSB Implementation Conformance A conforming implementation shall satisfy the following requirements: * The implementation shall implement fully the architecture described in the hardware manual for the target processor architecture. * The implementation shall be capable of executing compiled applications having the format and using the system interfaces described in this document. * The implementation shall provide libraries containing the interfaces specified by this document, and shall provide a dynamic linking mechanism that allows these interfaces to be attached to applications at runtime. All the interfaces shall behave as specified in this document. * The map of virtual memory provided by the implementation shall conform to the requirements of this document. * The implementation's low-level behavior with respect to function call linkage, system traps, signals, and other such activities shall conform to the formats described in this document. * The implementation shall provide all of the mandatory interfaces in their entirety. * The implementation may provide one or more of the optional interfaces. Each optional interface that is provided shall be provided in its entirety. The product documentation shall state which optional interfaces are provided. * The implementation shall provide all files and utilities specified as part of this document in the format defined here and in other referenced documents. All commands and utilities shall behave as required by this document. The implementation shall also provide all mandatory components of an application's runtime environment that are included or referenced in this document. * The implementation, when provided with standard data formats and values at a named interface, shall provide the behavior defined for those values and data formats at that interface. However, a conforming implementation may consist of components which are separately packaged and/or sold. For example, a vendor of a conforming implementation might sell the hardware, operating system, and windowing system as separately packaged items. * The implementation may provide additional interfaces with different names. It may also provide additional behavior corresponding to data values outside the standard ranges, for standard named interfaces. _________________________________________________________ 3.3. LSB Application Conformance A conforming application shall satisfy the following requirements: * Its executable files are either shell scripts or object files in the format defined for the Object File Format system interface. * Its object files participate in dynamic linking as defined in the Program Loading and Linking System interface. * It employs only the instructions, traps, and other low-level facilities defined in the Low-Level System interface as being for use by applications. * If it requires any optional interface defined in this document in order to be installed or to execute successfully, the requirement for that optional interface is stated in the application's documentation. * It does not use any interface or data format that is not required to be provided by a conforming implementation, unless: + If such an interface or data format is supplied by another application through direct invocation of that application during execution, that application is in turn an LSB conforming application. + The use of that interface or data format, as well as its source, is identified in the documentation of the application. * It shall not use any values for a named interface that are reserved for vendor extensions. A strictly conforming application does not require or use any interface, facility, or implementation-defined extension that is not defined in this document in order to be installed or to execute successfully. _________________________________________________________ Chapter 4. Definitions For the purposes of this document, the following definitions, as specified in the ISO/IEC Directives, Part 2, 2001, 4th Edition, apply: can be able to; there is a possibility of; it is possible to cannot be unable to; there is no possibilty of; it is not possible to may is permitted; is allowed; is permissible need not it is not required that; no...is required shall is to; is required to; it is required that; has to; only...is permitted; it is necessary shall not is not allowed [permitted] [acceptable] [permissible]; is required to be not; is required that...be not; is not to be should it is recommended that; ought to should not it is not recommended that; ought not to _________________________________________________________ Chapter 5. Terminology For the purposes of this document, the following terms apply: archLSB The architectural part of the LSB Specification which describes the specific parts of the interface that are platform specific. The archLSB is complementary to the gLSB. Binary Standard The total set of interfaces that are available to be used in the compiled binary code of a conforming application. gLSB The common part of the LSB Specification that describes those parts of the interface that remain constant across all hardware implementations of the LSB. implementation-defined Describes a value or behavior that is not defined by this document but is selected by an implementor. The value or behavior may vary among implementations that conform to this document. An application should not rely on the existence of the value or behavior. An application that relies on such a value or behavior cannot be assured to be portable across conforming implementations. The implementor shall document such a value or behavior so that it can be used correctly by an application. Shell Script A file that is read by an interpreter (e.g., awk). The first line of the shell script includes a reference to its interpreter binary. Source Standard The set of interfaces that are available to be used in the source code of a conforming application. undefined Describes the nature of a value or behavior not defined by this document which results from use of an invalid program construct or invalid data input. The value or behavior may vary among implementations that conform to this document. An application should not rely on the existence or validity of the value or behavior. An application that relies on any particular value or behavior cannot be assured to be portable across conforming implementations. unspecified Describes the nature of a value or behavior not specified by this document which results from use of a valid program construct or valid data input. The value or behavior may vary among implementations that conform to this document. An application should not rely on the existence or validity of the value or behavior. An application that relies on any particular value or behavior cannot be assured to be portable across conforming implementations. Other terms and definitions used in this document shall have the same meaning as defined in Chapter 3 of the Base Definitions volume of ISO POSIX (2003). _________________________________________________________ Chapter 6. Documentation Conventions Throughout this document, the following typographic conventions are used: function() the name of a function command the name of a command or utility CONSTANT a constant value parameter a parameter variable a variable Throughout this specification, several tables of interfaces are presented. Each entry in these tables has the following format: name the name of the interface (symver) An optional symbol version identifier, if required. [refno] A reference number indexing the table of referenced specifications that follows this table. For example, forkpty(GLIBC_2.0) [1] refers to the interface named forkpty() with symbol version GLIBC_2.0 that is defined in the first of the listed references below the table. _________________________________________________________ Chapter 7. Relationship To ISO/IEC 9945 POSIX This specification includes many interfaces described in ISO POSIX (2003). Unless otherwise specified, such interfaces should behave exactly as described in that specification. Any conflict between the requirements described here and the ISO POSIX (2003) standard is unintentional, except as explicitly noted otherwise. Note: In addition to the differences noted inline in this specification, PDTR 24715 has extracted the differences between this specification and ISO POSIX (2003) into a single place. It is the long term plan of the LSB to converge with ISO/IEC 9945 POSIX. The LSB Specification Authority is responsible for deciding the meaning of conformance to normative referenced standards in the LSB context. Problem Reports regarding underlying or referenced standards in any other context will be referred to the relevant maintenance body for that standard. ELF Specification _________________________________________________________ Table of Contents I. Low Level System Information 1. Operating System Interface 2. Machine Interface 2.1. Data Representation II. Object Format 3. Object Files 4. Sections 4.1. Introduction 4.2. Sections Types 5. Special Sections 5.1. Special Sections 6. Symbol Mapping 6.1. Introduction 6.2. Symbol Mapping 7. DWARF Extensions 8. EH Frame 9. EH Frame Header 9.1. Introduction 9.2. DWARF Exception Header Encoding 10. Symbol Versioning 10.1. Introduction 10.2. Symbol Version Table 10.3. Version Definitions 10.4. Version Requirements 10.5. Startup Sequence 10.6. Symbol Resolution 11. ABI note tag III. Dynamic Linking 12. Program Loading and Dynamic Linking 13. Program Header 14. Dynamic Entries 14.1. Introduction 14.2. Dynamic Entries List of Figures 10-1. Version Definition Entries 10-2. Version Definition Auxiliary Entries 10-3. Version Needed Entries 10-4. Version Needed Auxiliary Entries 14-1. Dynamic Structure List of Tables 2-1. Scalar Types 4-1. ELF Section Types 4-2. Additional Section Types 5-1. ELF Special Sections 5-2. Additional Special Sections 7-1. Additional DWARF Call Frame Instructions 9-1. .eh_frame_hdr Section Format 9-2. DWARF Exception Header value format 9-3. DWARF Exception Header application 13-1. Linux Segment Types I. Low Level System Information Table of Contents 1. Operating System Interface 2. Machine Interface _________________________________________________________ Chapter 1. Operating System Interface LSB-conforming applications shall assume that stack, heap and other allocated memory regions will be non-executable. The application must take steps to make them executable if needed. _________________________________________________________ Chapter 2. Machine Interface 2.1. Data Representation LSB-conforming applications shall use the data representation as defined in the Arcitecture specific ELF documents. _________________________________________________________ 2.1.1. Fundamental Types In addition to the fundamental types specified in the Architecture specific ELF documents, a 1 byte data type is defined here. Table 2-1. Scalar Types Type C C++ sizeof Alignment (bytes) Architecture Representation Integral _Bool bool 1 1 byte II. Object Format Table of Contents 3. Object Files 4. Sections 5. Special Sections 6. Symbol Mapping 7. DWARF Extensions 8. EH Frame 9. EH Frame Header 10. Symbol Versioning 11. ABI note tag _________________________________________________________ Chapter 3. Object Files LSB-conforming implementations shall support the object file Executable and Linking Format (ELF), which is defined by the following documents: * System V ABI * System V ABI Update * this document * an architecture-specific LSB specification Conforming implementations may also support other unspecified object file formats. _________________________________________________________ Chapter 4. Sections 4.1. Introduction As described in System V ABI, an ELF object file contains a number of sections. _________________________________________________________ 4.2. Sections Types The section header table is an array of Elf32_Shdr or Elf64_Shdr structures as described in System V ABI. The sh_type member shall be either a value from Table 4-1, drawn from the System V ABI, or one of the additional values specified in Table 4-2. A section header's sh_type member specifies the sections's semantics. _________________________________________________________ 4.2.1. ELF Section Types The following section types are defined in the System V ABI and the System V ABI Update. Table 4-1. ELF Section Types Name Value Description SHT_DYNAMIC 0x6 The section holds information for dynamic linking. Currently, an object file shall have only one dynamic section, but this restriction may be relaxed in the future. See `Dynamic Section' in Chapter 5 for details. SHT_DYNSYM 0xb This section holds a minimal set of symbols adequate for dynamic linking. See also SHT_SYMTAB. Currently, an object file may have either a section of SHT_SYMTAB type or a section of SHT_DYNSYM type, but not both. This restriction may be relaxed in the future. SHT_FINI_ARRAY 0xf This section contains an array of pointers to termination functions, as described in `Initialization and Termination Functions' in Chapter 5. Each pointer in the array is taken as a parameterless procedure with a void return. SHT_HASH 0x5 The section holds a symbol hash table. Currently, an object file shall have only one hash table, but this restriction may be relaxed in the future. See `Hash Table' in the Chapter 5 for details. SHT_HIPROC 0x7fffffff Values in this inclusive range are reserved for processor-specific semantics. SHT_HIUSER 0xffffffff This value specifies the upper bound of the range of indexes reserved for application programs. Section types between SHT_LOUSER and SHT_HIUSER can be used by the application, without conflicting with current or future system-defined section types. SHT_INIT_ARRAY 0xe This section contains an array of pointers to initialization functions, as described in `Initialization and Termination Functions' in Chapter 5. Each pointer in the array is taken as a parameterless procedure with a void return. SHT_LOPROC 0x70000000 Values in this inclusive range are reserved for processor-specific semantics. SHT_LOUSER 0x80000000 This value specifies the lower bound of the range of indexes reserved for application programs. SHT_NOBITS 0x8 A section of this type occupies no space in the file but otherwise resembles SHT_PROGBITS. Although this section contains no bytes, the sh_offset member contains the conceptual file offset. SHT_NOTE 0x7 The section holds information that marks the file in some way. See `Note Section' in Chapter 5 for details. SHT_NULL 0x0 This value marks the section header as inactive; it does not have an associated section. Other members of the section header have undefined values. SHT_PREINIT_ARRAY 0x10 This section contains an array of pointers to functions that are invoked before all other initialization functions, as described in `Initialization and Termination Functions' in Chapter 5. Each pointer in the array is taken as a parameterless proceure with a void return. SHT_PROGBITS 0x1 The section holds information defined by the program, whose format and meaning are determined solely by the program. SHT_REL 0x9 The section holds relocation entries without explicit addends, such as type Elf32_Rel for the 32-bit class of object files or type Elf64_Rel for the 64-bit class of object files. An object file may have multiple relocation sections. See "Relocation" SHT_RELA 0x4 The section holds relocation entries with explicit addends, such as type Elf32_Rela for the 32-bit class of object files or type Elf64_Rela for the 64-bit class of object files. An object file may have multiple relocation sections. `Relocation' b SHT_SHLIB 0xa This section type is reserved but has unspecified semantics. SHT_STRTAB 0x3 The section holds a string table. An object file may have multiple string table sections. See `String Table' below for details. SHT_SYMTAB 0x2 This section holds a symbol table. Currently, an object file may have either a section of SHT_SYMTAB type or a section of SHT_DYNSYM type, but not both. This restriction may be relaxed in the future. Typically, SHT_SYMTAB provides symbols for link editing, though it may also be used for dynamic linking. As a complete symbol table, it may contain many symbols unnecessary for dynamic linking. _________________________________________________________ 4.2.2. Additional Section Types The following additional section types are defined here. Table 4-2. Additional Section Types Name Value Description SHT_GNU_verdef 0x6ffffffd This section contains the symbol versions that are provided. SHT_GNU_verneed 0x6ffffffe This section contains the symbol versions that are required. SHT_GNU_versym 0x6fffffff This section contains the Symbol Version Table. _________________________________________________________ Chapter 5. Special Sections 5.1. Special Sections Various sections hold program and control information. Sections in the lists below are used by the system and have the indicated types and attributes. _________________________________________________________ 5.1.1. ELF Special Sections The following sections are defined in the System V ABI and the System V ABI Update. Table 5-1. ELF Special Sections Name Type Attributes .bss SHT_NOBITS SHF_ALLOC+SHF_WRITE .comment SHT_PROGBITS 0 .data SHT_PROGBITS SHF_ALLOC+SHF_WRITE .data1 SHT_PROGBITS SHF_ALLOC+SHF_WRITE .debug SHT_PROGBITS 0 .dynamic SHT_DYNAMIC SHF_ALLOC+SHF_WRITE .dynstr SHT_STRTAB SHF_ALLOC .dynsym SHT_DYNSYM SHF_ALLOC .fini SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR .fini_array SHT_FINI_ARRAY SHF_ALLOC+SHF_WRITE .hash SHT_HASH SHF_ALLOC .init SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR .init_array SHT_INIT_ARRAY SHF_ALLOC+SHF_WRITE .interp SHT_PROGBITS SHF_ALLOC .line SHT_PROGBITS 0 .note SHT_NOTE 0 .preinit_array SHT_PREINIT_ARRAY SHF_ALLOC+SHF_WRITE .rodata SHT_PROGBITS SHF_ALLOC .rodata1 SHT_PROGBITS SHF_ALLOC .shstrtab SHT_STRTAB 0 .strtab SHT_STRTAB SHF_ALLOC .symtab SHT_SYMTAB SHF_ALLOC .tbss SHT_NOBITS SHF_ALLOC+SHF_WRITE+SHF_TLS .tdata SHT_PROGBITS SHF_ALLOC+SHF_WRITE+SHF_TLS .text SHT_PROGBITS SHF_ALLOC+SHF_EXECINSTR .bss This section holds data that contributes to the program's memory image. The program may treat this data as uninitialized. However, the system shall initialize this data with zeroes when the program begins to run. The section occupies no file space, as indicated by the section type, SHT_NOBITS .comment This section holds version control information. .data This section holds initialized data that contribute to the program's memory image. .data1 This section holds initialized data that contribute to the program's memory image. .debug This section holds information for symbolic debugging. The contents are unspecified. All section names with the prefix .debug hold information for symbolic debugging. The contents of these sections are unspecified. .dynamic This section holds dynamic linking information. The section's attributes will include the SHF_ALLOC bit. Whether the SHF_WRITE bit is set is processor specific. See Chapter 5 for more information. .dynstr This section holds strings needed for dynamic linking, most commonly the strings that represent the names associated with symbol table entries. See Chapter 5 for more information. .dynsym This section holds the dynamic linking symbol table, as described in `Symbol Table'. See Chapter 5 for more information. .fini This section holds executable instructions that contribute to the process termination code. That is, when a program exits normally, the system arranges to execute the code in this section. .fini_array This section holds an array of function pointers that contributes to a single termination array for the executable or shared object containing the section. .hash This section holds a symbol hash table. See `Hash Table' in Chapter 5 for more information. .init This section holds executable instructions that contribute to the process initialization code. When a program starts to run, the system arranges to execute the code in this section before calling the main program entry point (called main for C programs) .init_array This section holds an array of function pointers that contributes to a single initialization array for the executable or shared object containing the section. .interp This section holds the path name of a program interpreter. If the file has a loadable segment that includes relocation, the sections' attributes will include the SHF_ALLOC bit; otherwise, that bit will be off. See Chapter 5 for more information. .line This section holds line number information for symbolic debugging, which describes the correspondence between the source program and the machine code. The contents are unspecified. .note This section holds information in the format that `Note Section' in Chapter 5 describes of the System V Application Binary Interface, Edition 4.1. .preinit_array This section holds an array of function pointers that contributes to a single pre-initialization array for the executable or shared object containing the section. .rodata This section holds read-only data that typically contribute to a non-writable segment in the process image. See `Program Header' in Chapter 5 for more information. .rodata1 This section hold sread-only data that typically contribute to a non-writable segment in the process image. See `Program Header' in Chapter 5 for more information. .shstrtab This section holds section names. .strtab This section holds strings, most commonly the strings that represent the names associated with symbol table entries. If the file has a loadable segment that includes the symbol string table, the section's attributes will include the SHF_ALLOC bit; otherwi .symtab This section holds a symbol table, as `Symbol Table'. in this chapter describes. If the file has a loadable segment that includes the symbol table, the section's attributes will include the SHF_ALLOC bit; otherwise, that bit will be off. .tbss This section holds uninitialized thread-local data that contribute to the program's memory image. By definition, the system initializes the data with zeros when the data is instantiated for each new execution flow. The section occupies no file space, as indicated by the section type, SHT_NOBITS. Implementations need not support thread-local storage. .tdata This section holds initialized thread-local data that contributes to the program's memory image. A copy of its contents is instantiated by the system for each new execution flow. Implementations need not support thread-local storage. .text This section holds the `text,' or executable instructions, of a program. _________________________________________________________ 5.1.2. Additional Special Sections Object files in an LSB conforming application may also contain one or more of the additional special sections described below. Table 5-2. Additional Special Sections Name Type Attributes .ctors SHT_PROGBITS SHF_ALLOC+SHF_WRITE .dtors SHT_PROGBITS SHF_ALLOC+SHF_WRITE .eh_frame SHT_PROGBITS SHF_ALLOC .eh_frame_hdr SHT_PROGBITS SHF_ALLOC .gnu.version SHT_GNU_versym SHF_ALLOC .gnu.version_d SHT_GNU_verdef SHF_ALLOC .gnu.version_r SHT_GNU_verneed SHF_ALLOC .jcr SHT_PROGBITS SHF_ALLOC+SHF_WRITE .note.ABI-tag SHT_NOTE SHF_ALLOC .stab SHT_PROGBITS 0 .stabstr SHT_STRTAB 0 .ctors This section contains a list of global constructor function pointers. .dtors This section contains a list of global destructor function pointers. .eh_frame This section contains information necessary for frame unwinding during exception handling. .eh_frame_hdr This section contains a pointer to the .eh_frame section which is accessible to the runtime support code of a C++ application. This section may also contain a binary search table which may be used by the runtime support code to more efficiently access records in the .eh_frame section. .gnu.version This section contains the Symbol Version Table. .gnu.version_d This section contains the Version Definitions. .gnu.version_r This section contains the Version Requirments. .jcr This section contains information necessary for registering compiled Java classes. The contents are compiler-specific and used by compiler initialization functions. .note.ABI-tag Specify ABI details. .stab This section contains debugging information. The contents are not specified as part of the LSB. .stabstr This section contains strings associated with the debugging infomation contained in the .stab section. _________________________________________________________ Chapter 6. Symbol Mapping 6.1. Introduction This chapter defines how names are mapped from the source symbol to the object symbol. _________________________________________________________ 6.2. Symbol Mapping Symbols in a source program are translated by the compilation system into symbols that exist in the object file. The rules for this translation are defined here. _________________________________________________________ 6.2.1. C Language External C symbols have the same names in C and object files' symbol tables. _________________________________________________________ Chapter 7. DWARF Extensions In addition to the Call Frame Instructions defined in section 6.4.2 of DWARF Debugging Information Format, the following Call Frame Instructions may also be used. Table 7-1. Additional DWARF Call Frame Instructions Name Value Meaning DW_CFA_expression 0x10 The DW_CFA_expression instruction takes two operands: an unsigned LEB128 value representing a register number, and a DW_FORM_block value representing a DWARF expression. The required action is to establish the DWARF expression as the means by which the address in which the given register contents are found may be computed. The value of the CFA is pushed on the DWARF evaluation stack prior to execution of the DWARF expression. The DW_OP_call2, DW_OP_call4, DW_OP_call_ref and DW_OP_push_object_address DWARF operators (see Section 2.4.1 of DWARF Debugging Information Format) cannot be used in such a DWARF expression. DW_CFA_offset_extended_sf 0x11 The DW_CFA_offset_extended_sf instruction takes two operands: an unsigned LEB128 value representing a register number and a signed LEB128 factored offset. This instruction is identical to DW_CFA_offset_extended except that the second operand is signed. DW_CFA_def_cfa_sf 0x12 The DW_CFA_def_cfa_sf instruction takes two operands: an unsigned LEB128 value representing a register number and a signed LEB128 factored offset. This instruction is identical to DW_CFA_def_cfa except that the second operand is signed and factored. DW_CFA_def_cfa_offset_sf 0x13 The DW_CFA_def_cfa_offset_sf instruction takes a signed LEB128 operand representing a factored offset. This instruction is identical to DW_CFA_def_cfa_offset except that the operand is signed and factored. DW_CFA_GNU_args_size 0x2e The DW_CFA_def_cfa_offset_sf instruction takes an unsigned LEB128 operand representing an argument size. DW_CFA_GNU_negative_offset_extended 0x2f The DW_CFA_def_cfa_sf instruction takes two operands: an unsigned LEB128 value representing a register number and an unsigned LEB128 which represents the magnitude of the offset. This instruction is identical to DW_CFA_offset_extended_sf except that the operand is subtracted to produce the offset. This instructions is obsoleted by DW_CFA_offset_extended_sf. _________________________________________________________ Chapter 8. EH Frame This chapter will contain a formal description of the contents of the .eh_frame_hdr section. _________________________________________________________ Chapter 9. EH Frame Header 9.1. Introduction The .eh_frame_hdr section contains additional information about the .eh_frame section. A pointer to the start of the .eh_frame data, and optionally, a binary search table of pointers to the .eh_frame records are found in this section. Data in this section is encoded according to the DWARF Exception Header Encoding described below. Table 9-1. .eh_frame_hdr Section Format Encoding Field unsigned byte version unsigned byte eh_frame_ptr_enc unsigned byte fde_count_enc unsigned byte table_enc encoded eh_frame_ptr encoded fde_count binary search table version Version of the .eh_frame_hdr format. This value shall be 1. eh_frame_ptr_enc The encoding format of the eh_frame_ptr field. fde_count_enc The encoding format of the fde_count field. A value of DW_EH_PE_omit indicates the binary search table is not present. table_enc The encoding format of the entries in the binary search table. A value of DW_EH_PE_omit indicates the binary search table is not present. eh_frame_ptr The encoded value of the pointer to the start of the .eh_frame section. fde_count The encoded value of the count of entries in the binary search table. binary search table A binary search table containing fde_count entries. Each entry of the table consist of two encoded values, the initial location, and the address. The entries are sorted in an increasing order by the initial location value. _________________________________________________________ 9.2. DWARF Exception Header Encoding The DWARF Exception Header Encoding is used to describe the type of data used in the .eh_frame_hdr section. The upper 4 bits indicate how the value is to be applied. The lower 4 bits indicate the format of the data. Table 9-2. DWARF Exception Header value format Name Value Meaning DW_EH_PE_omit 0xff No value is present. DW_EH_PE_uleb128 0x01 Unsigned value is encoded using the Little Endian Base 128 (LEB128) as defined by DWARF Debugging Information Format. DW_EH_PE_udata2 0x02 A 2 bytes unsigned value. DW_EH_PE_udata4 0x03 A 4 bytes unsigned value. DW_EH_PE_udata8 0x04 An 8 bytes unsigned value. DW_EH_PE_sleb128 0x09 Signed value is encoded using the Little Endian Base 128 (LEB128) as defined by DWARF Debugging Information Format. DW_EH_PE_sdata2 0x0A A 2 bytes signed value. DW_EH_PE_sdata4 0x0B A 4 bytes signed value. DW_EH_PE_sdata8 0x0C An 8 bytes signed value. Table 9-3. DWARF Exception Header application Name Value Meaning DW_EH_PE_absptr 0x00 Value is used with no modification. DW_EH_PE_pcrel 0x10 Value is reletive to the current program counter. DW_EH_PE_datarel 0x30 Value is reletive to the beginning of the .eh_frame_hdr section. DW_EH_PE_omit 0xff No value is present. _________________________________________________________ Chapter 10. Symbol Versioning 10.1. Introduction This chapter describes the Symbol Versioning mechanism. All ELF objects may provide or depend on versioned symbols. Symbol Versioning is implemented by 3 section types: SHT_GNU_versym, SHT_GNU_verdef, and SHT_GNU_verneed. The prefix Elfxx in the following descriptions and code fragments stands for either "Elf32" or "Elf64", depending on the architecture. Versions are described by strings. The structures that are used for symbol versions also contain a member that holds the ELF hashing values of the strings. This allows for more efficient processing. _________________________________________________________ 10.2. Symbol Version Table The special section .gnu.version which has a section type of SHT_GNU_versym shall contain the Symbol Version Table. This section shall have the same number of entries as the Dynamic Symbol Table in the .dynsym section. The .gnu.version section shall contain an array of elements of type Elfxx_Half. Each entry specifies the version defined for or required by the corresponding symbol in the Dynamic Symbol Table. The values in the Symbol Version Table are specific to the object in which they are located. These values are identifiers that are provided by the the vna_other member of the Elfxx_Vernaux structure or the vd_ndx member of the Elfxx_Verdef structure. The values 0 and 1 are reserved. 0 The symbol is local, not available outside the object. 1 The symbol is defined in this object and is globally available. All other values are used to identify version strings located in one of the other Symbol Version sections. The value itself is not the version associated with the symbol. The string identified by the value defines the version of the symbol. _________________________________________________________ 10.3. Version Definitions Symbol definitions are contained in the special section .gnu.version_d which has a section type of SHT_GNU_verdef. The number of entries in this section is contained in the DT_VERDEFNUM entry of the Dynamic Section. The sh_link member of the section header points to the section that contains the strings referenced by this section. The special section .gnu.version_d which has a section type of SHT_GNU_verdef shall contain symbol version definitions. The number of entries in this section shall be contained in the DT_VERDEFNUM entry of the Dynamic Section .dynamic. The sh_link member of the section header (see figure 4-8 in the System V ABI) shall point to the section that contains the strings referenced by this section. The section shall contain an array of Elfxx_Verdef structures, as described in Figure 10-1, optionally followed by an array of Elfxx_Verdaux structures, as defined in Figure 10-2. typedef struct { Elfxx_Half vd_version; Elfxx_Half vd_flags; Elfxx_Half vd_ndx; Elfxx_Half vd_cnt; Elfxx_Word vd_hash; Elfxx_Word vd_aux; Elfxx_Word vd_next; } Elfxx_Verdef; Figure 10-1. Version Definition Entries vd_version Version revision. This field shall be set to 1. vd_flags Version information flag bitmask. vd_ndx Version index numeric value referencing the SHT_GNU_versym section. vd_cnt Number of associated verdaux array entries. vd_hash Version name hash value (ELF hash function). vd_aux Offset in bytes to a corresponding entry in an array of Elfxx_Verdaux structures as defined in Figure 10-2 vd_next Offset to the next verdef entry, in bytes. typedef struct { Elfxx_Word vda_name; Elfxx_Word vda_next; } Elfxx_Verdaux; Figure 10-2. Version Definition Auxiliary Entries vda_name Offset to the version or dependency name string in the section header, in bytes. vda_next Offset to the next verdaux entry, in bytes. _________________________________________________________ 10.4. Version Requirements The special section .gnu.version_r which has a section type of SHT_GNU_verneed shall contain required symbol version definitions. The number of entries in this section shall be contained in the DT_VERNEEDNUM entry of the Dynamic Section .dynamic. The sh_link member of the section header (see figure 4-8 in System V ABI) shall point to the section that contains the strings referenced by this section. The section shall contain an array of Elfxx_Verneed structures, as described in Figure 10-3, optionally followed by an array of Elfxx_Vernaux structures, as defined in Figure 10-4. typedef struct { Elfxx_Half vn_version; Elfxx_Half vn_cnt; Elfxx_Word vn_file; Elfxx_Word vn_aux; Elfxx_Word vn_next; } Elfxx_Verneed; Figure 10-3. Version Needed Entries vn_version Version of structure. This value is currently set to 1, and will be reset if the versioning implementation is incompatibly altered. vn_cnt Number of associated verneed array entries. vn_file Offset to the file name string in the section header, in bytes. vn_aux Offset to a corresponding entry in the vernaux array, in bytes. vn_next Offset to the next verneed entry, in bytes. typedef struct { Elfxx_Word vna_hash; Elfxx_Half vna_flags; Elfxx_Half vna_other; Elfxx_Word vna_name; Elfxx_Word vna_next; } Elfxx_Vernaux; Figure 10-4. Version Needed Auxiliary Entries vna_hash Dependency name hash value (ELF hash function). vna_flags Dependency information flag bitmask. vna_other Object file version identifier used in the .gnu.version symbol version array. Bit number 15 controls whether or not the object is hidden; if this bit is set, the object cannot be used and the static linker will ignore the symbol's presence in the object. vna_name Offset to the dependency name string in the section header, in bytes. vna_next Offset to the next vernaux entry, in bytes. _________________________________________________________ 10.5. Startup Sequence When loading a sharable object the system shall analyze version definition data from the loaded object to assure that it meets the version requirements of the calling object. This step is referred to as definition testing. The dynamic loader shall retrieve the entries in the caller's Elfxx_Verneed array and attempt to find matching definition information in the loaded Elfxx_Verdef table. Each object and dependency shall be tested in turn. If a symbol definition is missing and the vna_flags bit for VER_FLG_WEAK is not set, the loader shall return an error and exit. If the vna_flags bit for VER_FLG_WEAK is set in the Elfxx_Vernaux entry, and the loader shall issue a warning and continue operation. When the versions referenced by undefined symbols in the loaded object are found, version availability is certified. The test completes without error and the object shall be made available. _________________________________________________________ 10.6. Symbol Resolution When symbol versioning is used in an object, relocations extend definition testing beyond the simple match of symbol name strings: the version of the reference shall also equal the name of the definition. The same index that is used in the symbol table can be referenced in the SHT_GNU_versym section, and the value of this index is then used to acquire name data. The corresponding requirement string is retrieved from the Elfxx_Verneed array, and likewise, the corresponding definition string from the Elfxx_Verdef table. If the high order bit (bit number 15) of the version symbolis set, the object cannot be used and the static linker shall ignore the symbol's presence in the object. When an object with a reference and an object with the definition are being linked, the following rules shall govern the result: * The object with the reference and the object with the definitions both use versioning. All described matching is processed in this case. A fatal error shall be triggered when no matching definition can be found in the object whose name is the one referenced by the vn_name element in the Elfxx_Verneed entry. * The object with the reference does not use versioning, while the object with the definitions does. In this instance, only the definitions with index numbers 1 and 2 will be used in the reference match, the same identified by the static linker as the base definition. In cases where the static linker was not used, such as in calls to dlopen(), a version that does not have the base definition index shall be acceptable if it is the only version for which the symbol is defined. * The object with the reference uses versioning, but the object with the definitions specifies none. A matching symbol shall be accepted in this case. A fatal error shall be triggered if a corruption in the required symbols list obscures an outdated object file and causes a match on the object filename in the Elfxx_Verneed entry. * Neither the object with the reference nor the object with the definitions use versioning. The behavior in this instance shall default to pre-existing symbol rules. _________________________________________________________ Chapter 11. ABI note tag Every executable shall contain a section named .note.ABI-tag of type SHT_NOTE. This section is structured as a note section as documented in the ELF spec. The section shall contain at least the following entry. The name field (namesz/name) contains the string "GNU". The type field shall be 1. The descsz field shall be at least 16, and the first 16 bytes of the desc field shall be as follows. The first 32-bit word of the desc field shall be 0 (this signifies a Linux executable). The second, third, and fourth 32-bit words of the desc field contain the earliest compatible kernel version. For example, if the 3 words are 2, 2, and 5, this signifies a 2.2.5 kernel. III. Dynamic Linking Table of Contents 12. Program Loading and Dynamic Linking 13. Program Header 14. Dynamic Entries _________________________________________________________ Chapter 12. Program Loading and Dynamic Linking LSB-conforming implementations shall support the object file information and system actions that create running programs as specified in the System V ABI and System V ABI Update and as supplemented by this document and an architecture-specific LSB specification. Any shared object that is loaded shall contain sufficient DT_NEEDED records to satisfy the symbols on the shared library. _________________________________________________________ Chapter 13. Program Header In addition to the Segment Types defined in the System V ABI and System V ABI Update the following Segment Types shall also be supported. Table 13-1. Linux Segment Types Name Value PT_GNU_EH_FRAME 0x6474e550 PT_GNU_STACK 0x6474e551 PT_GNU_EH_FRAME The array element specifies the location and size of the exception handling information as defined by the .eh_frame_hdr section. PT_GNU_STACK The p_flags member specifies the permissions on the segment containing the stack and is used to indicate wether the stack should be executable. The absense of this header indicates that the stack will be executable. _________________________________________________________ Chapter 14. Dynamic Entries 14.1. Introduction As described in System V ABI, if an object file participates in dynamic linking, its program header table shall have an element of type PT_DYNAMIC. This `segment' contains the .dynamic section. A special symbol, _DYNAMIC, labels the section, which contains an array of the following structures. typedef struct { Elf32_Sword d_tag; union { Elf32_Word d_val; Elf32_Addr d_ptr; } d_un; } Elf32_Dyn; extern Elf32_Dyn _DYNAMIC[]; typedef struct { Elf64_Sxword d_tag; union { Elf64_Xword d_val; Elf64_Addr d_ptr; } d_un; } Elf64_Dyn; extern Elf64_Dyn _DYNAMIC[]; Figure 14-1. Dynamic Structure For each object with this type, d_tag controls the interpretation of d_un. _________________________________________________________ 14.2. Dynamic Entries _________________________________________________________ 14.2.1. ELF Dynamic Entries The following dynamic entries are defined in the System V ABI and System V ABI Update. DT_BIND_NOW Process relocations of object DT_DEBUG For debugging; unspecified DT_FINI Address of termination function DT_HASH Address of symbol hash table DT_HIPROC End of processor-specific DT_INIT Address of init function DT_JMPREL Address of PLT relocs DT_LOPROC Start of processor-specific DT_NEEDED Name of needed library DT_NULL Marks end of dynamic section DT_PLTREL Type of reloc in PLT DT_PLTRELSZ Size in bytes of PLT relocs DT_REL Address of Rel relocs DT_RELA Address of Rela relocs DT_RELAENT Size of one Rela reloc DT_RELASZ Total size of Rela relocs DT_RELENT Size of one Rel reloc DT_RELSZ Total size of Rel relocs DT_RPATH Library search path DT_SONAME Name of shared object DT_STRSZ Size of string table DT_STRTAB Address of string table DT_SYMBOLIC Start symbol search here DT_SYMENT Size of one symbol table entry DT_SYMTAB Address of symbol table DT_TEXTREL Reloc might modify .text _________________________________________________________ 14.2.2. Additional Dynamic Entries An LSB conforming object may also use the following additional Dynamic Entry types. DT_ADDRRNGHI Values from DT_ADDRRNGLO through DT_ADDRRNGHI are reserved for definition by an archLSB. DT_ADDRRNGLO Values from DT_ADDRRNGLO through DT_ADDRRNGHI are reserved for definition by an archLSB. DT_AUXILIARY Shared object to load before self DT_FILTER Shared object to get values from DT_FINI_ARRAY The address of an array of pointers to termination functions. DT_FINI_ARRAYSZ Size in bytes of DT_FINI_ARRAY DT_HIOS Values from DT_LOOS through DT_HIOS are reserved for definition by specific operating systems. DT_INIT_ARRAY The address of an array of pointers to initialization functions. DT_INIT_ARRAYSZ Size in bytes of DT_INIT_ARRAY DT_LOOS Values from DT_LOOS through DT_HIOS are reserved for definition by specific operating systems. DT_NUM Number of dynamic entry tags defined (excepting reserved ranges). DT_POSFLAG_1 Flags for DT_* entries, effecting the following DT_* entry DT_RELCOUNT All Elf32_Rel R_*_RELATIVE relocations have been placed into a single block and this entry specifies the number of entries in that block. This permits ld.so.1 to streamline the processing of RELATIVE relocations. DT_RUNPATH null-terminated library search path string DT_SYMINENT Entry size of syminfo DT_SYMINFO Address of the Syminfo table. DT_SYMINSZ Size of syminfo table (in bytes) DT_VALRNGHI Entries which fall between DT_VALRNGHI & DT_VALRNGLO use the Dyn.d_un.d_val field of the Elf*_Dyn structure. DT_VALRNGLO Entries which fall between DT_VALRNGHI & DT_VALRNGLO use the Dyn.d_un.d_val field of the Elf*_Dyn structure. DT_VERDEF Address of version definition table DT_VERDEFNUM Number of version definitions DT_VERNEED Address of table with needed versions DT_VERNEEDNUM Number of needed versions DT_VERSYM Address of the table provided by the .gnu.version section. Linux Standard Base Specification _________________________________________________________ Table of Contents I. Base Libraries 1. Libraries 1.1. Introduction 1.2. Program Interpreter 1.3. Interfaces for libc 1.4. Data Definitions for libc 1.5. Interface Definitions for libc 1.6. Interfaces for libm 1.7. Data Definitions for libm 1.8. Interface Definitions for libm 1.9. Interfaces for libpthread 1.10. Data Definitions for libpthread 1.11. Interface Definitions for libpthread 1.12. Interfaces for libgcc_s 1.13. Data Definitions for libgcc_s 1.14. Interfaces for libdl 1.15. Data Definitions for libdl 1.16. Interface Definitions for libdl 1.17. Interfaces for libcrypt 1.18. Interfaces for libpam 1.19. Data Definitions for libpam 1.20. Interface Definitions for libpam II. Utility Libraries 2. Utility Libraries 2.1. Introduction 2.2. Interfaces for libz 2.3. Data Definitions for libz 2.4. Interface Definitions for libz 2.5. Interfaces for libncurses 2.6. Data Definitions for libncurses 2.7. Interfaces for libutil 2.8. Interface Definitions for libutil III. Commands and Utilities 3. Commands and Utilities 3.1. Commands and Utilities 3.2. Command Behavior IV. Execution Environment 4. File System Hierarchy 4.1. /dev 4.2. User Accounting Databases 4.3. Path For System Administration Utilities 5. Additional Recommendations 5.1. Minimal granted Directory and File permissions 5.2. Recommendations for applications on ownership and permissions 6. Additional Behaviors 6.1. Mandatory Optional Behaviors 7. Localization 7.1. Introduction 7.2. Regular Expressions 7.3. Pattern Matching Notation V. System Initialization 8. System Initialization 8.1. Cron Jobs 8.2. Init Script Actions 8.3. Comment Conventions for Init Scripts 8.4. Installation and Removal of init.d Files 8.5. Run Levels 8.6. Facility Names 8.7. Script Names 8.8. Init Script Functions VI. Users & Groups 9. Users & Groups 9.1. User and Group Database 9.2. User & Group Names 9.3. UID Ranges 9.4. Rationale A. Alphabetical Listing of Interfaces A.1. libc A.2. libcrypt A.3. libdl A.4. libm A.5. libncurses A.6. libpam A.7. libpthread A.8. libutil A.9. libz List of Tables 1-1. libc Definition 1-2. libc - RPC Function Interfaces 1-3. libc - System Calls Function Interfaces 1-4. libc - Standard I/O Function Interfaces 1-5. libc - Standard I/O Data Interfaces 1-6. libc - Signal Handling Function Interfaces 1-7. libc - Signal Handling Data Interfaces 1-8. libc - Localization Functions Function Interfaces 1-9. libc - Localization Functions Data Interfaces 1-10. libc - Socket Interface Function Interfaces 1-11. libc - Wide Characters Function Interfaces 1-12. libc - String Functions Function Interfaces 1-13. libc - IPC Functions Function Interfaces 1-14. libc - Regular Expressions Function Interfaces 1-15. libc - Character Type Functions Function Interfaces 1-16. libc - Time Manipulation Function Interfaces 1-17. libc - Time Manipulation Data Interfaces 1-18. libc - Terminal Interface Functions Function Interfaces 1-19. libc - System Database Interface Function Interfaces 1-20. libc - Language Support Function Interfaces 1-21. libc - Large File Support Function Interfaces 1-22. libc - Standard Library Function Interfaces 1-23. libc - Standard Library Data Interfaces 1-24. libm Definition 1-25. libm - Math Function Interfaces 1-26. libm - Math Data Interfaces 1-27. libpthread Definition 1-28. libpthread - Realtime Threads Function Interfaces 1-29. libpthread - Posix Threads Function Interfaces 1-30. libgcc_s Definition 1-31. libdl Definition 1-32. libdl - Dynamic Loader Function Interfaces 1-33. libcrypt Definition 1-34. libcrypt - Encryption Function Interfaces 1-35. libpam Definition 1-36. libpam - Pluggable Authentication API Function Interfaces 2-1. libz Definition 2-2. libz - Compression Library Function Interfaces 2-3. libncurses Definition 2-4. libncurses - Curses Function Interfaces 2-5. libncurses - Curses Data Interfaces 2-6. libutil Definition 2-7. libutil - Utility Functions Function Interfaces 3-1. Commands And Utilities 3-2. Built In Utilities 3-1. Escape Sequences 9-1. Required User & Group Names 9-2. Optional User & Group Names A-1. libc Function Interfaces A-2. libc Data Interfaces A-3. libcrypt Function Interfaces A-4. libdl Function Interfaces A-5. libm Function Interfaces A-6. libm Data Interfaces A-7. libncurses Function Interfaces A-8. libncurses Data Interfaces A-9. libpam Function Interfaces A-10. libpthread Function Interfaces A-11. libutil Function Interfaces A-12. libz Function Interfaces I. Base Libraries Table of Contents 1. Libraries _________________________________________________________ Chapter 1. Libraries 1.1. Introduction An LSB-conforming implementation shall support the following base libraries which provide interfaces for accessing the operating system, processor and other hardware in the system. * libc * libm * libgcc_s * libdl * libcrypt * libpam _________________________________________________________ 1.2. Program Interpreter The Program Interpreter is specified in the appropriate architecture-specific LSB specification. _________________________________________________________ 1.3. Interfaces for libc Table 1-1 defines the library name and shared object name for the libc library Table 1-1. libc Definition Library: libc SONAME: See archLSB. The behavior of the interfaces in this library is specified by the following specifications: Large File Support this specification SUSv2 ISO POSIX (2003) SVID Issue 3 SVID Issue 4 _________________________________________________________ 1.3.1. RPC _________________________________________________________ 1.3.1.1. Interfaces for RPC An LSB conforming implementation shall provide the generic functions for RPC specified in Table 1-2, with the full mandatory functionality as described in the referenced underlying specification. Table 1-2. libc - RPC Function Interfaces authnone_create [1] svc_getreqset [2] svcudp_create [3] xdr_int [2] xdr_u_long [2] clnt_create [1] svc_register [3] xdr_accepted_reply [2] xdr_long [2] xdr_u_short [2] clnt_pcreateerror [1] svc_run [3] xdr_array [2] xdr_opaque [2] xdr_union [2] clnt_perrno [1] svc_sendreply [3] xdr_bool [2] xdr_opaque_auth [2] xdr_vector [2] clnt_perror [1] svcerr_auth [2] xdr_bytes [2] xdr_pointer [2] xdr_void [2] clnt_spcreateerror [1] svcerr_decode [2] xdr_callhdr [2] xdr_reference [2] xdr_wrapstring [2] clnt_sperrno [1] svcerr_noproc [2] xdr_callmsg [2] xdr_rejected_reply [2] xdrmem_create [2] clnt_sperror [1] svcerr_noprog [2] xdr_char [2] xdr_replymsg [2] xdrrec_create [2] key_decryptsession [2] svcerr_progvers [2] xdr_double [2] xdr_short [2] xdrrec_eof [2] pmap_getport [3] svcerr_systemerr [2] xdr_enum [2] xdr_string [2] pmap_set [3] svcerr_weakauth [2] xdr_float [2] xdr_u_char [2] pmap_unset [3] svctcp_create [3] xdr_free [2] xdr_u_int [3] Referenced Specification(s) [1]. SVID Issue 4 [2]. SVID Issue 3 [3]. this specification _________________________________________________________ 1.3.2. System Calls _________________________________________________________ 1.3.2.1. Interfaces for System Calls An LSB conforming implementation shall provide the generic functions for System Calls specified in Table 1-3, with the full mandatory functionality as described in the referenced underlying specification. Table 1-3. libc - System Calls Function Interfaces __fxstat [1] fchmod [2] getwd [2] read [2] setrlimit [2] __getpgid [1] fchown [2] initgroups [1] readdir [2] setrlimit64 [3] __lxstat [1] fcntl [1] ioctl [1] readdir_r [2] setsid [2] __xmknod [1] fdatasync [2] kill [1] readlink [2] setuid [2] __xstat [1] flock [1] killpg [2] readv [2] sleep [2] access [2] fork [2] lchown [2] rename [2] statvfs [2] acct [1] fstatvfs [2] link [1] rmdir [2] stime [1] alarm [2] fsync [2] lockf [2] sbrk [4] symlink [2] brk [4] ftime [2] lseek [2] sched_get_priority_max [2] sync [2] chdir [2] ftruncate [2] mkdir [2] sched_get_priority_min [2] sysconf [2] chmod [2] getcontext [2] mkfifo [2] sched_getparam [2] time [2] chown [2] getegid [2] mlock [2] sched_getscheduler [2] times [2] chroot [4] geteuid [2] mlockall [2] sched_rr_get_interval [2] truncate [2] clock [2] getgid [2] mmap [2] sched_setparam [2] ulimit [2] close [2] getgroups [2] mprotect [2] sched_setscheduler [2] umask [2] closedir [2] getitimer [2] msync [2] sched_yield [2] uname [2] creat [2] getloadavg [1] munlock [2] select [2] unlink [1] dup [2] getpagesize [4] munlockall [2] setcontext [2] utime [2] dup2 [2] getpgid [2] munmap [2] setegid [2] utimes [2] execl [2] getpgrp [2] nanosleep [2] seteuid [2] vfork [2] execle [2] getpid [2] nice [2] setgid [2] wait [2] execlp [2] getppid [2] open [2] setitimer [2] wait4 [1] execv [2] getpriority [2] opendir [2] setpgid [2] waitpid [1] execve [2] getrlimit [2] pathconf [2] setpgrp [2] write [2] execvp [2] getrusage [2] pause [2] setpriority [2] writev [2] exit [2] getsid [2] pipe [2] setregid [2] fchdir [2] getuid [2] poll [2] setreuid [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) [3]. Large File Support [4]. SUSv2 _________________________________________________________ 1.3.3. Standard I/O _________________________________________________________ 1.3.3.1. Interfaces for Standard I/O An LSB conforming implementation shall provide the generic functions for Standard I/O specified in Table 1-4, with the full mandatory functionality as described in the referenced underlying specification. Table 1-4. libc - Standard I/O Function Interfaces _IO_feof [1] fgetpos [2] fsetpos [2] putchar [2] sscanf [1] _IO_getc [1] fgets [2] ftell [2] putchar_unlocked [2] telldir [2] _IO_putc [1] fgetwc_unlocked [1] ftello [2] puts [2] tempnam [2] _IO_puts [1] fileno [2] fwrite [2] putw [3] ungetc [2] asprintf [1] flockfile [2] getc [2] remove [2] vasprintf [1] clearerr [2] fopen [2] getc_unlocked [2] rewind [2] vdprintf [1] ctermid [2] fprintf [2] getchar [2] rewinddir [2] vfprintf [2] fclose [2] fputc [2] getchar_unlocked [2] scanf [1] vprintf [2] fdopen [2] fputs [2] getw [3] seekdir [2] vsnprintf [2] feof [2] fread [2] pclose [2] setbuf [2] vsprintf [2] ferror [2] freopen [2] popen [2] setbuffer [1] fflush [2] fscanf [1] printf [2] setvbuf [2] fflush_unlocked [1] fseek [2] putc [2] snprintf [2] fgetc [2] fseeko [2] putc_unlocked [2] sprintf [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) [3]. SUSv2 An LSB conforming implementation shall provide the generic data interfaces for Standard I/O specified in Table 1-5, with the full mandatory functionality as described in the referenced underlying specification. Table 1-5. libc - Standard I/O Data Interfaces stderr [1] stdin [1] stdout [1] Referenced Specification(s) [1]. ISO POSIX (2003) _________________________________________________________ 1.3.4. Signal Handling _________________________________________________________ 1.3.4.1. Interfaces for Signal Handling An LSB conforming implementation shall provide the generic functions for Signal Handling specified in Table 1-6, with the full mandatory functionality as described in the referenced underlying specification. Table 1-6. libc - Signal Handling Function Interfaces __libc_current_sigrtmax [1] sigaction [2] sighold [2] sigorset [1] sigset [2] __libc_current_sigrtmin [1] sigaddset [2] sigignore [2] sigpause [2] sigsuspend [2] __sigsetjmp [1] sigaltstack [2] siginterrupt [2] sigpending [2] sigtimedwait [2] __sysv_signal [1] sigandset [1] sigisemptyset [1] sigprocmask [2] sigwait [2] bsd_signal [2] sigdelset [2] sigismember [2] sigqueue [2] sigwaitinfo [2] psignal [1] sigemptyset [2] siglongjmp [2] sigrelse [2] raise [2] sigfillset [2] signal [2] sigreturn [1] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) An LSB conforming implementation shall provide the generic data interfaces for Signal Handling specified in Table 1-7, with the full mandatory functionality as described in the referenced underlying specification. Table 1-7. libc - Signal Handling Data Interfaces _sys_siglist [1] Referenced Specification(s) [1]. this specification _________________________________________________________ 1.3.5. Localization Functions _________________________________________________________ 1.3.5.1. Interfaces for Localization Functions An LSB conforming implementation shall provide the generic functions for Localization Functions specified in Table 1-8, with the full mandatory functionality as described in the referenced underlying specification. Table 1-8. libc - Localization Functions Function Interfaces bind_textdomain_codeset [1] dcgettext [1] freelocale(GLIBC_2.3) [1] localeconv [2] textdomain [1] bindtextdomain [1] dcngettext [1] gettext [1] newlocale(GLIBC_2.3) [1] uselocale(GLIBC_2.3) [1] catclose [2] dgettext [1] iconv [2] ngettext [1] catgets [2] dngettext [1] iconv_close [2] nl_langinfo [2] catopen [2] duplocale(GLIBC_2.3) [1] iconv_open [2] setlocale [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) An LSB conforming implementation shall provide the generic data interfaces for Localization Functions specified in Table 1-9, with the full mandatory functionality as described in the referenced underlying specification. Table 1-9. libc - Localization Functions Data Interfaces _nl_msg_cat_cntr [1] Referenced Specification(s) [1]. this specification _________________________________________________________ 1.3.6. Socket Interface _________________________________________________________ 1.3.6.1. Interfaces for Socket Interface An LSB conforming implementation shall provide the generic functions for Socket Interface specified in Table 1-10, with the full mandatory functionality as described in the referenced underlying specification. Table 1-10. libc - Socket Interface Function Interfaces __h_errno_location [1] gethostname [2] if_nameindex [2] send [2] socket [2] accept [2] getpeername [2] if_nametoindex [2] sendmsg [2] socketpair [2] bind [2] getsockname [2] listen [2] sendto [2] bindresvport [1] getsockopt [1] recv [2] setsockopt [1] connect [2] if_freenameindex [2] recvfrom [2] shutdown [2] gethostid [2] if_indextoname [2] recvmsg [2] sockatmark [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.3.7. Wide Characters _________________________________________________________ 1.3.7.1. Interfaces for Wide Characters An LSB conforming implementation shall provide the generic functions for Wide Characters specified in Table 1-11, with the full mandatory functionality as described in the referenced underlying specification. Table 1-11. libc - Wide Characters Function Interfaces __wcstod_internal [1] mbsinit [2] vwscanf [1] wcsnlen [1] wcstoumax [2] __wcstof_internal [1] mbsnrtowcs [1] wcpcpy [1] wcsnrtombs [1] wcstouq [1] __wcstol_internal [1] mbsrtowcs [2] wcpncpy [1] wcspbrk [2] wcswcs [2] __wcstold_internal [1] mbstowcs [2] wcrtomb [2] wcsrchr [2] wcswidth [2] __wcstoul_internal [1] mbtowc [2] wcscasecmp [1] wcsrtombs [2] wcsxfrm [2] btowc [2] putwc [2] wcscat [2] wcsspn [2] wctob [2] fgetwc [2] putwchar [2] wcschr [2] wcsstr [2] wctomb [2] fgetws [2] swprintf [2] wcscmp [2] wcstod [2] wctrans [2] fputwc [2] swscanf [1] wcscoll [2] wcstof [2] wctype [2] fputws [2] towctrans [2] wcscpy [2] wcstoimax [2] wcwidth [2] fwide [2] towlower [2] wcscspn [2] wcstok [2] wmemchr [2] fwprintf [2] towupper [2] wcsdup [1] wcstol [2] wmemcmp [2] fwscanf [1] ungetwc [2] wcsftime [2] wcstold [2] wmemcpy [2] getwc [2] vfwprintf [2] wcslen [2] wcstoll [2] wmemmove [2] getwchar [2] vfwscanf [1] wcsncasecmp [1] wcstombs [2] wmemset [2] mblen [2] vswprintf [2] wcsncat [2] wcstoq [1] wprintf [2] mbrlen [2] vswscanf [1] wcsncmp [2] wcstoul [2] wscanf [1] mbrtowc [2] vwprintf [2] wcsncpy [2] wcstoull [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.3.8. String Functions _________________________________________________________ 1.3.8.1. Interfaces for String Functions An LSB conforming implementation shall provide the generic functions for String Functions specified in Table 1-12, with the full mandatory functionality as described in the referenced underlying specification. Table 1-12. libc - String Functions Function Interfaces __mempcpy [1] bzero [2] strcasestr [1] strncat [2] strtok [2] __rawmemchr [1] ffs [2] strcat [2] strncmp [2] strtok_r [2] __stpcpy [1] index [2] strchr [2] strncpy [2] strtold [2] __strdup [1] memccpy [2] strcmp [2] strndup [1] strtoll [2] __strtod_internal [1] memchr [2] strcoll [2] strnlen [1] strtoq [1] __strtof_internal [1] memcmp [2] strcpy [2] strpbrk [2] strtoull [2] __strtok_r [1] memcpy [2] strcspn [2] strptime [1] strtoumax [2] __strtol_internal [1] memmove [2] strdup [2] strrchr [2] strtouq [1] __strtold_internal [1] memrchr [1] strerror [2] strsep [1] strxfrm [2] __strtoll_internal [1] memset [2] strerror_r [1] strsignal [1] swab [2] __strtoul_internal [1] rindex [2] strfmon [2] strspn [2] __strtoull_internal [1] stpcpy [1] strftime [2] strstr [2] bcmp [2] stpncpy [1] strlen [2] strtof [2] bcopy [2] strcasecmp [2] strncasecmp [2] strtoimax [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.3.9. IPC Functions _________________________________________________________ 1.3.9.1. Interfaces for IPC Functions An LSB conforming implementation shall provide the generic functions for IPC Functions specified in Table 1-13, with the full mandatory functionality as described in the referenced underlying specification. Table 1-13. libc - IPC Functions Function Interfaces ftok [1] msgrcv [1] semget [1] shmctl [1] msgctl [1] msgsnd [1] semop [1] shmdt [1] msgget [1] semctl [1] shmat [1] shmget [1] Referenced Specification(s) [1]. ISO POSIX (2003) _________________________________________________________ 1.3.10. Regular Expressions _________________________________________________________ 1.3.10.1. Interfaces for Regular Expressions An LSB conforming implementation shall provide the generic functions for Regular Expressions specified in Table 1-14, with the full mandatory functionality as described in the referenced underlying specification. Table 1-14. libc - Regular Expressions Function Interfaces regcomp [1] regerror [1] regexec [2] regfree [1] Referenced Specification(s) [1]. ISO POSIX (2003) [2]. this specification _________________________________________________________ 1.3.11. Character Type Functions _________________________________________________________ 1.3.11.1. Interfaces for Character Type Functions An LSB conforming implementation shall provide the generic functions for Character Type Functions specified in Table 1-15, with the full mandatory functionality as described in the referenced underlying specification. Table 1-15. libc - Character Type Functions Function Interfaces __ctype_b_loc(GLIBC_2.3) [1] isalpha [2] ispunct [2] iswctype [2] iswupper [2] __ctype_get_mb_cur_max [1] isascii [2] isspace [2] iswdigit [2] iswxdigit [2] __ctype_tolower_loc(GLIBC_2.3) [1] iscntrl [2] isupper [2] iswgraph [2] isxdigit [2] __ctype_toupper_loc(GLIBC_2.3) [1] isdigit [2] iswalnum [2] iswlower [2] toascii [2] _tolower [2] isgraph [2] iswalpha [2] iswprint [2] tolower [2] _toupper [2] islower [2] iswblank [2] iswpunct [2] toupper [2] isalnum [2] isprint [2] iswcntrl [2] iswspace [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.3.12. Time Manipulation _________________________________________________________ 1.3.12.1. Interfaces for Time Manipulation An LSB conforming implementation shall provide the generic functions for Time Manipulation specified in Table 1-16, with the full mandatory functionality as described in the referenced underlying specification. Table 1-16. libc - Time Manipulation Function Interfaces adjtime [1] ctime [2] gmtime [2] localtime_r [2] ualarm [2] asctime [2] ctime_r [2] gmtime_r [2] mktime [2] asctime_r [2] difftime [2] localtime [2] tzset [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) An LSB conforming implementation shall provide the generic data interfaces for Time Manipulation specified in Table 1-17, with the full mandatory functionality as described in the referenced underlying specification. Table 1-17. libc - Time Manipulation Data Interfaces __daylight [1] __tzname [1] timezone [2] __timezone [1] daylight [2] tzname [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.3.13. Terminal Interface Functions _________________________________________________________ 1.3.13.1. Interfaces for Terminal Interface Functions An LSB conforming implementation shall provide the generic functions for Terminal Interface Functions specified in Table 1-18, with the full mandatory functionality as described in the referenced underlying specification. Table 1-18. libc - Terminal Interface Functions Function Interfaces cfgetispeed [1] cfsetispeed [1] tcdrain [1] tcgetattr [1] tcsendbreak [1] cfgetospeed [1] cfsetospeed [1] tcflow [1] tcgetpgrp [1] tcsetattr [1] cfmakeraw [2] cfsetspeed [2] tcflush [1] tcgetsid [1] tcsetpgrp [1] Referenced Specification(s) [1]. ISO POSIX (2003) [2]. this specification _________________________________________________________ 1.3.14. System Database Interface _________________________________________________________ 1.3.14.1. Interfaces for System Database Interface An LSB conforming implementation shall provide the generic functions for System Database Interface specified in Table 1-19, with the full mandatory functionality as described in the referenced underlying specification. Table 1-19. libc - System Database Interface Function Interfaces endgrent [1] getgrgid_r [1] getprotoent [1] getservent [1] setgroups [2] endprotoent [1] getgrnam [1] getpwent [1] getutent [2] setprotoent [1] endpwent [1] getgrnam_r [1] getpwnam [1] getutent_r [2] setpwent [1] endservent [1] getgrouplist [2] getpwnam_r [1] getutxent [1] setservent [1] endutent [3] gethostbyaddr [1] getpwuid [1] getutxid [1] setutent [2] endutxent [1] gethostbyname [1] getpwuid_r [1] getutxline [1] setutxent [1] getgrent [1] getprotobyname [1] getservbyname [1] pututxline [1] utmpname [2] getgrgid [1] getprotobynumber [1] getservbyport [1] setgrent [1] Referenced Specification(s) [1]. ISO POSIX (2003) [2]. this specification [3]. SUSv2 _________________________________________________________ 1.3.15. Language Support _________________________________________________________ 1.3.15.1. Interfaces for Language Support An LSB conforming implementation shall provide the generic functions for Language Support specified in Table 1-20, with the full mandatory functionality as described in the referenced underlying specification. Table 1-20. libc - Language Support Function Interfaces __libc_start_main [1] __register_atfork(GLIBC_2.3.2) [1] Referenced Specification(s) [1]. this specification _________________________________________________________ 1.3.16. Large File Support _________________________________________________________ 1.3.16.1. Interfaces for Large File Support An LSB conforming implementation shall provide the generic functions for Large File Support specified in Table 1-21, with the full mandatory functionality as described in the referenced underlying specification. Table 1-21. libc - Large File Support Function Interfaces __fxstat64 [1] fopen64 [2] ftello64 [2] lseek64 [2] readdir64 [2] __lxstat64 [1] freopen64 [2] ftruncate64 [2] mkstemp64 [2] statvfs64 [2] __xstat64 [1] fseeko64 [2] ftw64 [2] mmap64 [2] tmpfile64 [2] creat64 [2] fsetpos64 [2] getrlimit64 [2] nftw64 [2] truncate64 [2] fgetpos64 [2] fstatvfs64 [2] lockf64 [2] open64 [2] Referenced Specification(s) [1]. this specification [2]. Large File Support _________________________________________________________ 1.3.17. Standard Library _________________________________________________________ 1.3.17.1. Interfaces for Standard Library An LSB conforming implementation shall provide the generic functions for Standard Library specified in Table 1-22, with the full mandatory functionality as described in the referenced underlying specification. Table 1-22. libc - Standard Library Function Interfaces _Exit [1] dirname [1] glob [1] lsearch [1] srand48 [1] __assert_fail [2] div [1] glob64 [2] makecontext [1] srandom [1] __cxa_atexit [2] drand48 [1] globfree [1] malloc [1] strtod [1] __errno_location [2] ecvt [1] globfree64 [2] memmem [2] strtol [1] __fpending [2] erand48 [1] grantpt [1] mkstemp [1] strtoul [1] __getpagesize [2] err [2] hcreate [1] mktemp [1] swapcontext [1] __isinf [2] error [2] hdestroy [1] mrand48 [1] syslog [1] __isinff [2] errx [2] hsearch [1] nftw [1] system [2] __isinfl [2] fcvt [1] htonl [1] nrand48 [1] tdelete [1] __isnan [2] fmtmsg [1] htons [1] ntohl [1] tfind [1] __isnanf [2] fnmatch [1] imaxabs [1] ntohs [1] tmpfile [1] __isnanl [2] fpathconf [1] imaxdiv [1] openlog [1] tmpnam [1] __sysconf [2] free [1] inet_addr [1] perror [1] tsearch [1] _exit [1] freeaddrinfo [1] inet_ntoa [1] posix_memalign [1] ttyname [1] _longjmp [1] ftrylockfile [1] inet_ntop [1] posix_openpt [1] ttyname_r [1] _setjmp [1] ftw [1] inet_pton [1] ptsname [1] twalk [1] a64l [1] funlockfile [1] initstate [1] putenv [1] unlockpt [1] abort [1] gai_strerror [1] insque [1] qsort [1] unsetenv [1] abs [1] gcvt [1] isatty [1] rand [1] usleep [1] atof [1] getaddrinfo [1] isblank [1] rand_r [1] verrx [2] atoi [1] getcwd [1] jrand48 [1] random [1] vfscanf [2] atol [1] getdate [1] l64a [1] realloc [1] vscanf [2] atoll [1] getenv [1] labs [1] realpath [1] vsscanf [2] basename [1] getlogin [1] lcong48 [1] remque [1] vsyslog [2] bsearch [1] getnameinfo [1] ldiv [1] seed48 [1] warn [2] calloc [1] getopt [2] lfind [1] setenv [1] warnx [2] closelog [1] getopt_long [2] llabs [1] sethostname [2] wordexp [1] confstr [1] getopt_long_only [2] lldiv [1] setlogmask [1] wordfree [1] cuserid [3] getsubopt [1] longjmp [1] setstate [1] daemon [2] gettimeofday [1] lrand48 [1] srand [1] Referenced Specification(s) [1]. ISO POSIX (2003) [2]. this specification [3]. SUSv2 An LSB conforming implementation shall provide the generic data interfaces for Standard Library specified in Table 1-23, with the full mandatory functionality as described in the referenced underlying specification. Table 1-23. libc - Standard Library Data Interfaces __environ [1] _sys_errlist [1] getdate_err [2] opterr [2] optopt [2] _environ [1] environ [2] optarg [2] optind [2] Referenced Specification(s) [1]. this specification [2]. ISO POSIX (2003) _________________________________________________________ 1.4. Data Definitions for libc This section defines global identifiers and their values that are associated with interfaces contained in libc. These definitions are organized into groups that correspond to system headers. This convention is used as a convenience for the reader, and does not imply the existence of these headers, or their content. These definitions are intended to supplement those provided in the referenced underlying specifications. This specification uses ISO/IEC 9899 C Language as the reference programming language, and data definitions are specified in ISO C format. The C language is used here as a convenient notation. Using a C language description of these data objects does not preclude their use by other programming languages. _________________________________________________________ 1.4.1. ctype.h enum { _ISupper, _ISlower, _ISalpha, _ISdigit, _ISxdigit, _ISspace, _ISprint , _ISgraph, _ISblank, _IScntrl, _ISpunct, _ISalnum } ; _________________________________________________________ 1.4.2. dirent.h typedef struct __dirstream DIR; struct dirent { long int d_ino; off_t d_off; unsigned short d_reclen; unsigned char d_type; char d_name[256]; } ; struct dirent64 { uint64_t d_ino; int64_t d_off; unsigned short d_reclen; unsigned char d_type; char d_name[256]; } ; _________________________________________________________ 1.4.3. errno.h ISO POSIX (2003) requires that each error value shall be unique, with permission for EAGAIN and EWOULDBLOCK possibly having the same value. This specification also requires that ENOTSUP and EOPNOTSUPP have the same value. Note: A defect report against ISO POSIX (2003) has been filed to request that specification also permit these two symbols to have the same value. #define errno (*__errno_location()) #define EPERM 1 #define ECHILD 10 #define ENETDOWN 100 #define ENETUNREACH 101 #define ENETRESET 102 #define ECONNABORTED 103 #define ECONNRESET 104 #define ENOBUFS 105 #define EISCONN 106 #define ENOTCONN 107 #define ESHUTDOWN 108 #define ETOOMANYREFS 109 #define EAGAIN 11 #define ETIMEDOUT 110 #define ECONNREFUSED 111 #define EHOSTDOWN 112 #define EHOSTUNREACH 113 #define EALREADY 114 #define EINPROGRESS 115 #define ESTALE 116 #define EUCLEAN 117 #define ENOTNAM 118 #define ENAVAIL 119 #define ENOMEM 12 #define EISNAM 120 #define EREMOTEIO 121 #define EDQUOT 122 #define ENOMEDIUM 123 #define EMEDIUMTYPE 124 #define ECANCELED 125 #define EACCES 13 #define EFAULT 14 #define ENOTBLK 15 #define EBUSY 16 #define EEXIST 17 #define EXDEV 18 #define ENODEV 19 #define ENOENT 2 #define ENOTDIR 20 #define EISDIR 21 #define EINVAL 22 #define ENFILE 23 #define EMFILE 24 #define ENOTTY 25 #define ETXTBSY 26 #define EFBIG 27 #define ENOSPC 28 #define ESPIPE 29 #define ESRCH 3 #define EROFS 30 #define EMLINK 31 #define EPIPE 32 #define EDOM 33 #define ERANGE 34 #define EDEADLK 35 #define ENAMETOOLONG 36 #define ENOLCK 37 #define ENOSYS 38 #define ENOTEMPTY 39 #define EINTR 4 #define ELOOP 40 #define ENOMSG 42 #define EIDRM 43 #define ECHRNG 44 #define EL2NSYNC 45 #define EL3HLT 46 #define EL3RST 47 #define ELNRNG 48 #define EUNATCH 49 #define EIO 5 #define ENOANO 55 #define EBADRQC 56 #define EBADSLT 57 #define EBFONT 59 #define ENXIO 6 #define ENOSTR 60 #define ENODATA 61 #define ETIME 62 #define ENOSR 63 #define ENONET 64 #define ENOPKG 65 #define EREMOTE 66 #define ENOLINK 67 #define EADV 68 #define ESRMNT 69 #define E2BIG 7 #define ECOMM 70 #define EPROTO 71 #define EMULTIHOP 72 #define EDOTDOT 73 #define EBADMSG 74 #define EOVERFLOW 75 #define ENOTUNIQ 76 #define EBADFD 77 #define EREMCHG 78 #define ELIBACC 79 #define ENOEXEC 8 #define ELIBBAD 80 #define ELIBSCN 81 #define ELIBMAX 82 #define ELIBEXEC 83 #define EILSEQ 84 #define ERESTART 85 #define ESTRPIPE 86 #define EUSERS 87 #define ENOTSOCK 88 #define EDESTADDRREQ 89 #define EBADF 9 #define EMSGSIZE 90 #define EPROTOTYPE 91 #define ENOPROTOOPT 92 #define EPROTONOSUPPORT 93 #define ESOCKTNOSUPPORT 94 #define EOPNOTSUPP 95 #define EPFNOSUPPORT 96 #define EAFNOSUPPORT 97 #define EADDRINUSE 98 #define EADDRNOTAVAIL 99 #define EWOULDBLOCK EAGAIN #define ENOTSUP EOPNOTSUPP _________________________________________________________ 1.4.4. fcntl.h #define O_RDONLY 00 #define O_ACCMODE 0003 #define O_WRONLY 01 #define O_CREAT 0100 #define O_TRUNC 01000 #define O_SYNC 010000 #define O_RDWR 02 #define O_EXCL 0200 #define O_APPEND 02000 #define O_ASYNC 020000 #define O_NOCTTY 0400 #define O_NDELAY 04000 #define O_NONBLOCK 04000 #define FD_CLOEXEC 1 struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; pid_t l_pid; } ; struct flock64 { short l_type; short l_whence; loff_t l_start; loff_t l_len; pid_t l_pid; } ; #define F_DUPFD 0 #define F_RDLCK 0 #define F_GETFD 1 #define F_WRLCK 1 #define F_SETFD 2 #define F_UNLCK 2 #define F_GETFL 3 #define F_SETFL 4 #define F_GETLK 5 #define F_SETLK 6 #define F_SETLKW 7 #define F_SETOWN 8 #define F_GETOWN 9 _________________________________________________________ 1.4.5. fmtmsg.h #define MM_HARD 1 #define MM_NRECOV 128 #define MM_UTIL 16 #define MM_SOFT 2 #define MM_OPSYS 32 #define MM_FIRM 4 #define MM_RECOVER 64 #define MM_APPL 8 #define MM_NOSEV 0 #define MM_HALT 1 #define MM_ERROR 2 #define MM_NULLLBL ((char *) 0) _________________________________________________________ 1.4.6. fnmatch.h #define FNM_PATHNAME (1<<0) #define FNM_NOESCAPE (1<<1) #define FNM_PERIOD (1<<2) #define FNM_NOMATCH 1 _________________________________________________________ 1.4.7. ftw.h #define FTW_D FTW_D #define FTW_DNR FTW_DNR #define FTW_DP FTW_DP #define FTW_F FTW_F #define FTW_NS FTW_NS #define FTW_SL FTW_SL #define FTW_SLN FTW_SLN enum { FTW_F, FTW_D, FTW_DNR, FTW_NS, FTW_SL, FTW_DP, FTW_SLN } ; enum { FTW_PHYS, FTW_MOUNT, FTW_CHDIR, FTW_DEPTH } ; struct FTW { int base; int level; } ; typedef int (*__ftw_func_t) (char *__filename, struct stat * __status, int __flag); typedef int (*__ftw64_func_t) (char *__filename, struct stat64 * __stat us, int __flag); typedef int (*__nftw_func_t) (char *__filename, struct stat * __status, int __flag, struct FTW * __info); typedef int (*__nftw64_func_t) (char *__filename, struct stat64 * __sta tus, int __flag, struct FTW * __info); _________________________________________________________ 1.4.8. getopt.h #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct option { char *name; int has_arg; int *flag; int val; } ; _________________________________________________________ 1.4.9. glob.h #define GLOB_ERR (1<<0) #define GLOB_MARK (1<<1) #define GLOB_BRACE (1<<10) #define GLOB_NOMAGIC (1<<11) #define GLOB_TILDE (1<<12) #define GLOB_ONLYDIR (1<<13) #define GLOB_TILDE_CHECK (1<<14) #define GLOB_NOSORT (1<<2) #define GLOB_DOOFFS (1<<3) #define GLOB_NOCHECK (1<<4) #define GLOB_APPEND (1<<5) #define GLOB_NOESCAPE (1<<6) #define GLOB_PERIOD (1<<7) #define GLOB_MAGCHAR (1<<8) #define GLOB_ALTDIRFUNC (1<<9) #define GLOB_NOSPACE 1 #define GLOB_ABORTED 2 #define GLOB_NOMATCH 3 #define GLOB_NOSYS 4 typedef struct { size_t gl_pathc; char **gl_pathv; size_t gl_offs; int gl_flags; void (*gl_closedir) (void *); struct dirent *(*gl_readdir) (void *); void *(*gl_opendir) (const char *); int (*gl_lstat) (const char *, struct stat *); int (*gl_stat) (const char *, struct stat *); } glob_t; typedef struct { size_t gl_pathc; char **gl_pathv; size_t gl_offs; int gl_flags; void (*gl_closedir) (void *); struct dirent64 *(*gl_readdir64) (void *); void *(*gl_opendir) (const char *); int (*gl_lstat) (const char *, struct stat *); int (*gl_stat) (const char *, struct stat *); } glob64_t; _________________________________________________________ 1.4.10. grp.h struct group { char *gr_name; char *gr_passwd; gid_t gr_gid; char **gr_mem; } ; _________________________________________________________ 1.4.11. iconv.h typedef void *iconv_t; _________________________________________________________ 1.4.12. inttypes.h typedef lldiv_t imaxdiv_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; _________________________________________________________ 1.4.13. langinfo.h #define ABDAY_1 0x20000 #define ABDAY_2 0x20001 #define ABDAY_3 0x20002 #define ABDAY_4 0x20003 #define ABDAY_5 0x20004 #define ABDAY_6 0x20005 #define ABDAY_7 0x20006 #define DAY_1 0x20007 #define DAY_2 0x20008 #define DAY_3 0x20009 #define DAY_4 0x2000A #define DAY_5 0x2000B #define DAY_6 0x2000C #define DAY_7 0x2000D #define ABMON_1 0x2000E #define ABMON_2 0x2000F #define ABMON_3 0x20010 #define ABMON_4 0x20011 #define ABMON_5 0x20012 #define ABMON_6 0x20013 #define ABMON_7 0x20014 #define ABMON_8 0x20015 #define ABMON_9 0x20016 #define ABMON_10 0x20017 #define ABMON_11 0x20018 #define ABMON_12 0x20019 #define MON_1 0x2001A #define MON_2 0x2001B #define MON_3 0x2001C #define MON_4 0x2001D #define MON_5 0x2001E #define MON_6 0x2001F #define MON_7 0x20020 #define MON_8 0x20021 #define MON_9 0x20022 #define MON_10 0x20023 #define MON_11 0x20024 #define MON_12 0x20025 #define AM_STR 0x20026 #define PM_STR 0x20027 #define D_T_FMT 0x20028 #define D_FMT 0x20029 #define T_FMT 0x2002A #define T_FMT_AMPM 0x2002B #define ERA 0x2002C #define ERA_D_FMT 0x2002E #define ALT_DIGITS 0x2002F #define ERA_D_T_FMT 0x20030 #define ERA_T_FMT 0x20031 #define CODESET 14 #define CRNCYSTR 0x4000F #define RADIXCHAR 0x10000 #define THOUSEP 0x10001 #define YESEXPR 0x50000 #define NOEXPR 0x50001 #define YESSTR 0x50002 #define NOSTR 0x50003 _________________________________________________________ 1.4.14. limits.h #define LLONG_MIN (-LLONG_MAX-1LL) #define ULLONG_MAX 18446744073709551615ULL #define OPEN_MAX 256 #define PATH_MAX 4096 #define LLONG_MAX 9223372036854775807LL #define SSIZE_MAX LONG_MAX #define MB_LEN_MAX 16 #define SCHAR_MIN (-128) #define SCHAR_MAX 127 #define UCHAR_MAX 255 #define CHAR_BIT 8 #define SHRT_MIN (-32768) #define SHRT_MAX 32767 #define USHRT_MAX 65535 #define INT_MIN (-INT_MAX-1) #define INT_MAX 2147483647 #define __INT_MAX__ 2147483647 #define UINT_MAX 4294967295U #define LONG_MIN (-LONG_MAX-1L) #define PTHREAD_KEYS_MAX 1024 #define PTHREAD_STACK_MIN 16384 #define PTHREAD_THREADS_MAX 16384 #define PTHREAD_DESTRUCTOR_ITERATIONS 4 _________________________________________________________ 1.4.15. locale.h struct lconv { char *decimal_point; char *thousands_sep; char *grouping; char *int_curr_symbol; char *currency_symbol; char *mon_decimal_point; char *mon_thousands_sep; char *mon_grouping; char *positive_sign; char *negative_sign; char int_frac_digits; char frac_digits; char p_cs_precedes; char p_sep_by_space; char n_cs_precedes; char n_sep_by_space; char p_sign_posn; char n_sign_posn; char int_p_cs_precedes; char int_p_sep_by_space; char int_n_cs_precedes; char int_n_sep_by_space; char int_p_sign_posn; char int_n_sign_posn; } ; #define LC_GLOBAL_LOCALE ((locale_t) -1L) #define LC_CTYPE 0 #define LC_NUMERIC 1 #define LC_TELEPHONE 10 #define LC_MEASUREMENT 11 #define LC_IDENTIFICATION 12 #define LC_TIME 2 #define LC_COLLATE 3 #define LC_MONETARY 4 #define LC_MESSAGES 5 #define LC_ALL 6 #define LC_PAPER 7 #define LC_NAME 8 #define LC_ADDRESS 9 typedef struct __locale_struct { struct locale_data *__locales[13]; const unsigned short *__ctype_b; const int *__ctype_tolower; const int *__ctype_toupper; const char *__names[13]; } *__locale_t; typedef struct __locale_struct *locale_t; #define LC_ADDRESS_MASK (1 << LC_ADDRESS) #define LC_COLLATE_MASK (1 << LC_COLLATE) #define LC_IDENTIFICATION_MASK (1 << LC_IDENTIFICATION) #define LC_MEASUREMENT_MASK (1 << LC_MEASUREMENT) #define LC_MESSAGES_MASK (1 << LC_MESSAGES) #define LC_MONETARY_MASK (1 << LC_MONETARY) #define LC_NAME_MASK (1 << LC_NAME) #define LC_NUMERIC_MASK (1 << LC_NUMERIC) #define LC_PAPER_MASK (1 << LC_PAPER) #define LC_TELEPHONE_MASK (1 << LC_TELEPHONE) #define LC_TIME_MASK (1 << LC_TIME) #define LC_CTYPE_MASK (1<cl_ops->cl_control)(cl,rq,in)) #define clnt_abort(rh) ((*(rh)->cl_ops->cl_abort)(rh)) #define clnt_call(rh, proc, xargs, argsp, xres, resp, secs) ((*(rh) ->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs)) #define clnt_destroy(rh) ((*(rh)->cl_ops->cl_destroy)(rh)) #define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh ,xres,resp)) #define clnt_geterr(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp)) #define NULLPROC ((u_long)0) #define CLSET_TIMEOUT 1 #define CLGET_XID 10 #define CLSET_XID 11 #define CLGET_VERS 12 #define CLSET_VERS 13 #define CLGET_PROG 14 #define CLSET_PROG 15 #define CLGET_TIMEOUT 2 #define CLGET_SERVER_ADDR 3 #define CLSET_RETRY_TIMEOUT 4 #define CLGET_RETRY_TIMEOUT 5 #define CLGET_FD 6 #define CLGET_SVC_ADDR 7 #define CLSET_FD_CLOSE 8 #define CLSET_FD_NCLOSE 9 enum clnt_stat { RPC_SUCCESS, RPC_CANTENCODEARGS = 1, RPC_CANTDECODERES = 2, RPC_CANTS END = 3, RPC_CANTRECV = 4, RPC_TIMEDOUT = 5, RPC_VERSMISMATCH = 6, RPC_AUTHERROR = 7, RPC_PROGUNAVAIL = 8, RPC_PROGVERSMISMATCH = 9, RPC_PROCUNAVAIL = 10, RPC_CANTDECODEARGS = 11, RPC_SYSTEMERROR = 12, RPC_NOBROADCAST = 21, RPC_UNKNOWNHOST = 13, RPC_UNKNOWNPROTO = 17, RPC_UNKNOWNADDR = 19, RPC_RPCBFAILURE = 14, RPC_PROGNOTREGISTER ED = 15, RPC_N2AXLATEFAILURE = 22, RPC_FAILED = 16, RPC_INTR = 18, RPC_TLIERROR = 20, RPC_UDERROR = 23, RPC_INPROGRESS = 24, RPC_STALERACHANDLE = 25 } ; struct rpc_err { enum clnt_stat re_status; union { int RE_errno; enum auth_stat RE_why; struct { u_long low; u_long high; } RE_vers; struct { long int s1; long int s2; } RE_lb; } ru; } ; typedef struct CLIENT { struct AUTH *cl_auth; struct clnt_ops *cl_ops; caddr_t cl_private; } CLIENT; struct clnt_ops { enum clnt_stat (*cl_call) (struct CLIENT *, u_long, xdrproc_t, caddr_ t, xdrproc_t, caddr_t, struct timeval); void (*cl_abort) (void); void (*cl_geterr) (struct CLIENT *, struct rpc_err *); bool_t (*cl_freeres) (struct CLIENT *, xdrproc_t, caddr_t); void (*cl_destroy) (struct CLIENT *); bool_t (*cl_control) (struct CLIENT *, int, char *); } ; _________________________________________________________ 1.4.28. rpc/rpc_msg.h enum msg_type { CALL, REPLY = 1 } ; enum reply_stat { MSG_ACCEPTED, MSG_DENIED = 1 } ; enum accept_stat { SUCCESS, PROG_UNAVAIL = 1, PROG_MISMATCH = 2, PROC_UNAVAIL = 3, GARBAGE_ARGS = 4, SYSTEM_ERR = 5 } ; enum reject_stat { RPC_MISMATCH, AUTH_ERROR = 1 } ; struct accepted_reply { struct opaque_auth ar_verf; enum accept_stat ar_stat; union { struct { unsigned long int low; unsigned long int high; } AR_versions; struct { caddr_t where; xdrproc_t proc; } AR_results; } ru; } ; struct rejected_reply { enum reject_stat rj_stat; union { struct { unsigned long int low; unsigned long int high; } RJ_versions; enum auth_stat RJ_why; } ru; } ; struct reply_body { enum reply_stat rp_stat; union { struct accepted_reply RP_ar; struct rejected_reply RP_dr; } ru; } ; struct call_body { unsigned long int cb_rpcvers; unsigned long int cb_prog; unsigned long int cb_vers; unsigned long int cb_proc; struct opaque_auth cb_cred; struct opaque_auth cb_verf; } ; struct rpc_msg { unsigned long int rm_xid; enum msg_type rm_direction; union { struct call_body RM_cmb; struct reply_body RM_rmb; } ru; } ; _________________________________________________________ 1.4.29. rpc/svc.h #define svc_freeargs(xprt,xargs, argsp) (*(xprt)->xp_ops->xp_freeargs)( (xprt), (xargs), (argsp)) #define svc_getargs(xprt,xargs, argsp) (*(xprt)->xp_ops->xp_getargs)(( xprt), (xargs), (argsp)) #define RPC_ANYSOCK -1 typedef struct SVCXPRT { int xp_sock; u_short xp_port; struct xp_ops *xp_ops; int xp_addrlen; struct sockaddr_in xp_raddr; struct opaque_auth xp_verf; caddr_t xp_p1; caddr_t xp_p2; char xp_pad[256]; } SVCXPRT; struct svc_req { rpcprog_t rq_prog; rpcvers_t rq_vers; rpcproc_t rq_proc; struct opaque_auth rq_cred; caddr_t rq_clntcred; SVCXPRT *rq_xprt; } ; typedef void (*__dispatch_fn_t) (struct svc_req *, SVCXPRT *); struct xp_ops { bool_t (*xp_recv) (SVCXPRT * __xprt, struct rpc_msg * __msg); enum xprt_stat (*xp_stat) (SVCXPRT * __xprt); bool_t (*xp_getargs) (SVCXPRT * __xprt, xdrproc_t __xdr_args, caddr_t args_ptr); bool_t (*xp_reply) (SVCXPRT * __xprt, struct rpc_msg * __msg); bool_t (*xp_freeargs) (SVCXPRT * __xprt, xdrproc_t __xdr_args, caddr_t args_ptr); void (*xp_destroy) (SVCXPRT * __xprt); } ; _________________________________________________________ 1.4.30. rpc/types.h typedef int bool_t; typedef int enum_t; typedef unsigned long int rpcprog_t; typedef unsigned long int rpcvers_t; typedef unsigned long int rpcproc_t; typedef unsigned long int rpcprot_t; _________________________________________________________ 1.4.31. rpc/xdr.h enum xdr_op { XDR_ENCODE, XDR_DECODE, XDR_FREE } ; typedef struct XDR { enum xdr_op x_op; struct xdr_ops *x_ops; caddr_t x_public; caddr_t x_private; caddr_t x_base; int x_handy; } XDR; struct xdr_ops { bool_t (*x_getlong) (XDR * __xdrs, long int *__lp); bool_t (*x_putlong) (XDR * __xdrs, long int *__lp); bool_t (*x_getbytes) (XDR * __xdrs, caddr_t __addr, u_int __len); bool_t (*x_putbytes) (XDR * __xdrs, char *__addr, u_int __len); u_int (*x_getpostn) (XDR * __xdrs); bool_t (*x_setpostn) (XDR * __xdrs, u_int __pos); int32_t *(*x_inline) (XDR * __xdrs, int __len); void (*x_destroy) (XDR * __xdrs); bool_t (*x_getint32) (XDR * __xdrs, int32_t * __ip); bool_t (*x_putint32) (XDR * __xdrs, int32_t * __ip); } ; typedef bool_t (*xdrproc_t) (XDR *, void *, ...); struct xdr_discrim { int value; xdrproc_t proc; } ; _________________________________________________________ 1.4.32. sched.h #define SCHED_OTHER 0 #define SCHED_FIFO 1 #define SCHED_RR 2 struct sched_param { int sched_priority; } ; _________________________________________________________ 1.4.33. search.h typedef struct entry { char *key; void *data; } ENTRY; typedef enum { FIND, ENTER } ACTION; typedef enum { preorder, postorder, endorder, leaf } VISIT; typedef void (*__action_fn_t) (void *__nodep, VISIT __value, int __leve l); _________________________________________________________ 1.4.34. setjmp.h #define setjmp(env) _setjmp(env) #define sigsetjmp(a,b) __sigsetjmp(a,b) struct __jmp_buf_tag { __jmp_buf __jmpbuf; int __mask_was_saved; sigset_t __saved_mask; } ; typedef struct __jmp_buf_tag jmp_buf[1]; typedef jmp_buf sigjmp_buf; _________________________________________________________ 1.4.35. signal.h #define _SIGSET_NWORDS (1024/(8*sizeof(unsigned long))) #define SIGRTMAX (__libc_current_sigrtmax ()) #define SIGRTMIN (__libc_current_sigrtmin ()) #define SIG_BLOCK 0 #define SIG_UNBLOCK 1 #define SIG_SETMASK 2 #define NSIG 65 typedef int sig_atomic_t; typedef void (*sighandler_t) (int); #define SIG_HOLD ((sighandler_t) 2) #define SIG_ERR ((sighandler_t)-1) #define SIG_DFL ((sighandler_t)0) #define SIG_IGN ((sighandler_t)1) #define SIGHUP 1 #define SIGUSR1 10 #define SIGSEGV 11 #define SIGUSR2 12 #define SIGPIPE 13 #define SIGALRM 14 #define SIGTERM 15 #define SIGSTKFLT 16 #define SIGCHLD 17 #define SIGCONT 18 #define SIGSTOP 19 #define SIGINT 2 #define SIGTSTP 20 #define SIGTTIN 21 #define SIGTTOU 22 #define SIGURG 23 #define SIGXCPU 24 #define SIGXFSZ 25 #define SIGVTALRM 26 #define SIGPROF 27 #define SIGWINCH 28 #define SIGIO 29 #define SIGQUIT 3 #define SIGPWR 30 #define SIGSYS 31 #define SIGUNUSED 31 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFPE 8 #define SIGKILL 9 #define SIGCLD SIGCHLD #define SIGPOLL SIGIO #define SV_ONSTACK (1<<0) #define SV_INTERRUPT (1<<1) #define SV_RESETHAND (1<<2) typedef union sigval { int sival_int; void *sival_ptr; } sigval_t; #define SIGEV_SIGNAL 0 #define SIGEV_NONE 1 #define SIGEV_THREAD 2 #define SIGEV_MAX_SIZE 64 typedef struct sigevent { sigval_t sigev_value; int sigev_signo; int sigev_notify; union { int _pad[SIGEV_PAD_SIZE]; struct { void (*sigev_thread_func) (sigval_t); void *_attribute; } _sigev_thread; } _sigev_un; } sigevent_t; #define SI_MAX_SIZE 128 #define si_pid _sifields._kill._pid #define si_uid _sifields._kill._uid #define si_value _sifields._rt._sigval #define si_int _sifields._rt._sigval.sival_int #define si_ptr _sifields._rt._sigval.sival_ptr #define si_status _sifields._sigchld._status #define si_stime _sifields._sigchld._stime #define si_utime _sifields._sigchld._utime #define si_addr _sifields._sigfault._addr #define si_band _sifields._sigpoll._band #define si_fd _sifields._sigpoll._fd #define si_timer1 _sifields._timer._timer1 #define si_timer2 _sifields._timer._timer2 typedef struct siginfo { int si_signo; int si_errno; int si_code; union { int _pad[SI_PAD_SIZE]; struct { pid_t _pid; uid_t _uid; } _kill; struct { unsigned int _timer1; unsigned int _timer2; } _timer; struct { pid_t _pid; uid_t _uid; sigval_t _sigval; } _rt; struct { pid_t _pid; uid_t _uid; int _status; clock_t _utime; clock_t _stime; } _sigchld; struct { void *_addr; } _sigfault; struct { int _band; int _fd; } _sigpoll; } _sifields; } siginfo_t; #define SI_QUEUE -1 #define SI_TIMER -2 #define SI_MESGQ -3 #define SI_ASYNCIO -4 #define SI_SIGIO -5 #define SI_TKILL -6 #define SI_ASYNCNL -60 #define SI_USER 0 #define SI_KERNEL 0x80 #define ILL_ILLOPC 1 #define ILL_ILLOPN 2 #define ILL_ILLADR 3 #define ILL_ILLTRP 4 #define ILL_PRVOPC 5 #define ILL_PRVREG 6 #define ILL_COPROC 7 #define ILL_BADSTK 8 #define FPE_INTDIV 1 #define FPE_INTOVF 2 #define FPE_FLTDIV 3 #define FPE_FLTOVF 4 #define FPE_FLTUND 5 #define FPE_FLTRES 6 #define FPE_FLTINV 7 #define FPE_FLTSUB 8 #define SEGV_MAPERR 1 #define SEGV_ACCERR 2 #define BUS_ADRALN 1 #define BUS_ADRERR 2 #define BUS_OBJERR 3 #define TRAP_BRKPT 1 #define TRAP_TRACE 2 #define CLD_EXITED 1 #define CLD_KILLED 2 #define CLD_DUMPED 3 #define CLD_TRAPPED 4 #define CLD_STOPPED 5 #define CLD_CONTINUED 6 #define POLL_IN 1 #define POLL_OUT 2 #define POLL_MSG 3 #define POLL_ERR 4 #define POLL_PRI 5 #define POLL_HUP 6 typedef struct { unsigned long int sig[_SIGSET_NWORDS]; } sigset_t; #define SA_NOCLDSTOP 0x00000001 #define SA_NOCLDWAIT 0x00000002 #define SA_SIGINFO 0x00000004 #define SA_ONSTACK 0x08000000 #define SA_RESTART 0x10000000 #define SA_INTERRUPT 0x20000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND typedef struct sigaltstack { void *ss_sp; int ss_flags; size_t ss_size; } stack_t; #define SS_ONSTACK 1 #define SS_DISABLE 2 _________________________________________________________ 1.4.36. stddef.h #define offsetof(TYPE,MEMBER) ((size_t)& ((TYPE*)0)->MEMBER) #define NULL (0L) typedef int wchar_t; _________________________________________________________ 1.4.37. stdio.h #define EOF (-1) #define P_tmpdir "/tmp" #define FOPEN_MAX 16 #define L_tmpnam 20 #define FILENAME_MAX 4096 #define BUFSIZ 8192 #define L_ctermid 9 #define L_cuserid 9 typedef struct { off_t __pos; mbstate_t __state; } fpos_t; typedef struct { off64_t __pos; mbstate_t __state; } fpos64_t; typedef struct _IO_FILE FILE; #define _IOFBF 0 #define _IOLBF 1 #define _IONBF 2 _________________________________________________________ 1.4.38. stdlib.h #define MB_CUR_MAX (__ctype_get_mb_cur_max()) #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 #define RAND_MAX 2147483647 typedef int (*__compar_fn_t) (const void *, const void *); struct random_data { int32_t *fptr; int32_t *rptr; int32_t *state; int rand_type; int rand_deg; int rand_sep; int32_t *end_ptr; } ; typedef struct { int quot; int rem; } div_t; typedef struct { long int quot; long int rem; } ldiv_t; typedef struct { long long int quot; long long int rem; } lldiv_t; _________________________________________________________ 1.4.39. sys/file.h #define LOCK_SH 1 #define LOCK_EX 2 #define LOCK_NB 4 #define LOCK_UN 8 _________________________________________________________ 1.4.40. sys/ipc.h #define IPC_PRIVATE ((key_t)0) #define IPC_RMID 0 #define IPC_CREAT 00001