Copyright © 2004, 2005, 2006 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 the registered trademark of Linus Torvalds in the U.S. and other countries.
UNIX is a registered trademark of The Open Group.
LSB is a trademark of the Free Standards Group in the United States and other countries.
AMD is a trademark of Advanced Micro Devices, Inc.
Intel and Itanium are registered trademarks and Intel386 is a trademark of Intel Corporation.
PowerPC is a registered trademark and PowerPC Architecture is a trademark of the IBM Corporation.
S/390 is a registered trademark of the IBM Corporation.
OpenGL is a registered trademark of Silicon Graphics, Inc.
This is version 3.1 of the Linux Standard Base C++ Specification. This specification is part of a family of specifications under the general title "Linux Standard Base". Developers of applications or implementations interested in using the LSB trademark should see the Free Standards Group Certification Policy for details.
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.
Since this specification is a descriptive Application Binary Interface, and not a source level API specification, it is not possible to make a guarantee of 100% backward compatibility between major releases. However, it is the intent that those parts of the binary interface that are visible in the source level API will remain backward compatible from version to version, except where a feature marked as "Deprecated" in one release may be removed from a future release.
Implementors are strongly encouraged to make use of symbol versioning to permit simultaneous support of applications conforming to different releases of this specification.
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" or "generic LSB"), ISO/IEC 23360 Part 1, describing those parts of the interface that remain constant across all implementations of the LSB, and an architecture-specific part ("LSB-arch" or "archLSB") describing the parts of the interface that vary by processor architecture. Together, the LSB-generic and the relevant architecture-specific part of ISO/IEC 23360 for a single hardware architecture provide a complete interface specification for compiled application programs on systems that share a common hardware architecture.
ISO/IEC 23360 Part 1, the LSB-generic document, should be used in conjunction with an architecture-specific part. Whenever a section of the LSB-generic specification is supplemented by architecture-specific information, the LSB-generic document includes a reference to the architecture part. Architecture-specific parts of ISO/IEC 23360 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 provides 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.
This is the C++ module of the Linux Standards Base (LSB). This module supplements the core interfaces by providing system interfaces, libraries, and a runtime environment for applications built using the C++ programming language. These interfaces provide low-level support for the core constructs of the language, and implement the standard base C++ libraries.
Interfaces described in this module are presented in terms of C++; the binary interfaces will use encoded or mangled versions of the names.
The specifications listed below are referenced in whole or in part by this module of 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 |
|---|---|---|
| ISO/IEC 23360 Part 1 | ISO/IEC 23360:2005 Linux Standard Base - Part 1 Generic Specification | http://www.linuxbase.org/spec/ |
| 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 14882: 2003 C++ Language | ISO/IEC 14882: 2003 Programming languages --C++ | |
| Itanium™ C++ ABI | Itanium™ C++ ABI (Revision 1.83) | http://refspecs.freestandards.org/cxxabi-1.83.html |
The libraries listed in Table 3-1 shall be available on a Linux Standard Base system, with the specified runtime names.
These libraries will be in an implementation-defined directory which the dynamic linker shall search by default.
An 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.
An 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.
For the purposes of this document, the following definitions, as specified in the ISO/IEC Directives, Part 2, 2001, 4th Edition, apply:
For the purposes of this document, the following terms apply:
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.
The total set of interfaces that are available to be used in the compiled binary code of a conforming application.
The common part of the LSB Specification that describes those parts of the interface that remain constant across all hardware implementations of the LSB.
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.
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.
The set of interfaces that are available to be used in the source code of a conforming application.
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.
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).
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,
refers to the interface named forkpty() with symbol versionGLIBC_2.0 that is defined in the
SUSv3 reference.
Note: Symbol versions are defined in the architecture specific parts of ISO/IEC 23360 only.
Support for the C++ language shall be as specified in Itanium™ C++ ABI.
Note: This document, although containing a few architecture specific matters, is written as a generic specification, to be usable by C++ implementations on a variety of architectures.
An object file generated by the compilation process for a C++ program shall contain several closely related internal objects, or Class Components, to represent each C++ Class. Such objects are not a visible part of the source code. Table 7-1 describes these Class Components at a high level.
Table 7-1. Class Components
| Object | Contains |
|---|---|
| Class Data | All non-static Class members |
| Virtual Table | Information needed to dispatch virtual functions, access virtual base class subobjects and to access the RTTI information |
| RTTI | Run-Time Type Information used by the typeid and dynamic_cast operators, and exception handlers |
| Typeinfo Name | String representation of Class name |
| Construction Virtual Table | Information needed during construction and destruction of Classes with non-trivial inheritance relationships. |
| VTT | A table of virtual table pointers which holds the addresses of construction and non-construction virtual tables. |
Virtual tables are specified in Section 2.5.3 of Itanium™ C++ ABI.
Of the various categories of virtual table described in that specification, Category 1 (Leaf) is further described in Figure 7-1 and Category 2 (Non-virtual bases only) is further described in Figure 7-2. LSB conforming systems shall support these categories.
Each type used in a C++ program has a data structure associated with it that provide information about the type which is used at runtime. This Run Time Type Information (RTTI) is defined in section 2.9.5 in Itanium™ C++ ABI. Additional details about the layout of this data is provided here.
struct {
void *basevtable;
char *name;
void *basetypeinfo[0];
}; |
Figure 7-4. Run-Time Type Information For Classes with no base class
struct {
void *basevtable;
char *name;
void *basetype;
void *basetypeinfo[0];
}; |
Figure 7-5. Run-Time Type Information for Classes with a single base class
struct base_type_info {
char *base_type;
unsigned long offset_flags;
};
struct {
void *basevtable;
char *name;
unsigned int flags;
unsigned int base_count;
struct base_type_info base_info[0];
}; |
Figure 7-6. Run-Time Type Information for classes with multiple inheritance
This chapter defines how names are mapped from the source symbol to the object symbol.
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.
External symbol names in a C++ object file shall be encoded according to the "name mangling" rules described in the Itanium™ C++ ABI.
An LSB-conforming implementation shall support some base libraries which provide interfaces for accessing the operating system, processor and other hardware in the system.
Table 9-1 defines the library name and shared object name for the libstdcxx library
Unless stated otherwise, all symbols are in the std:: namespace.
The behavior of the interfaces in this library is specified by the following specifications:
| [CXXABI] Itanium™ C++ ABI |
| [ISOCXX] ISO/IEC 14882: 2003 C++ Language |
| [LSB] ISO/IEC 23360 Part 1 |
An LSB conforming implementation shall provide the generic methods for C++ Runtime Support specified in Table 9-2, with the full mandatory functionality as described in the referenced underlying specification.
Table 9-2. libstdcxx - C++ Runtime Support Function Interfaces
| __gnu_cxx::__atomic_add(int volatile*, int)(GLIBCXX_3.4) [CXXABI] |
| __gnu_cxx::__exchange_and_add(int volatile*, int)(GLIBCXX_3.4) [CXXABI] |
| __gnu_cxx::__verbose_terminate_handler()(CXXABI_1.3) [CXXABI] |
| unexpected()(GLIBCXX_3.4) [ISOCXX] |
| set_terminate(void (*)())(GLIBCXX_3.4) [ISOCXX] |
| set_unexpected(void (*)())(GLIBCXX_3.4) [ISOCXX] |
| set_new_handler(void (*)())(GLIBCXX_3.4) [ISOCXX] |
| __throw_bad_cast()(GLIBCXX_3.4) [ISOCXX] |
| __throw_bad_alloc()(GLIBCXX_3.4) [ISOCXX] |
| __throw_bad_typeid()(GLIBCXX_3.4) [ISOCXX] |
| uncaught_exception()(GLIBCXX_3.4) [ISOCXX] |
| __throw_ios_failure(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_logic_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_range_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_domain_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_length_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_out_of_range(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_bad_exception()(GLIBCXX_3.4) [ISOCXX] |
| __throw_runtime_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_overflow_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_underflow_error(char const*)(GLIBCXX_3.4) [ISOCXX] |
| __throw_invalid_argument(char const*)(GLIBCXX_3.4) [ISOCXX] |
| terminate()(GLIBCXX_3.4) [ISOCXX] |
| operator delete[](void*)(GLIBCXX_3.4) [ISOCXX] |
| operator delete[](void*, nothrow_t const&)(GLIBCXX_3.4) [ISOCXX] |
| operator delete(void*)(GLIBCXX_3.4) [ISOCXX] |
| operator delete(void*, nothrow_t const&)(GLIBCXX_3.4) [ISOCXX] |
| __cxa_allocate_exception(CXXABI_1.3) [CXXABI] |
| __cxa_bad_cast(CXXABI_1.3) [CXXABI] |
| __cxa_bad_typeid(CXXABI_1.3) [CXXABI] |
| __cxa_begin_catch(CXXABI_1.3) [CXXABI] |
| __cxa_call_unexpected(CXXABI_1.3) [CXXABI] |
| __cxa_current_exception_type(CXXABI_1.3) [CXXABI] |
| __cxa_demangle(CXXABI_1.3) [CXXABI] |
| __cxa_end_catch(CXXABI_1.3) [CXXABI] |
| __cxa_free_exception(CXXABI_1.3) [CXXABI] |
| __cxa_get_globals(CXXABI_1.3) [CXXABI] |
| __cxa_get_globals_fast(CXXABI_1.3) [CXXABI] |
| __cxa_guard_abort(CXXABI_1.3) [CXXABI] |
| __cxa_guard_acquire(CXXABI_1.3) [CXXABI] |
| __cxa_guard_release(CXXABI_1.3) [CXXABI] |
| __cxa_pure_virtual(CXXABI_1.3) [CXXABI] |
| __cxa_rethrow(CXXABI_1.3) [CXXABI] |
| __cxa_throw(CXXABI_1.3) [CXXABI] |
| __cxa_vec_cctor(CXXABI_1.3) [CXXABI] |
| __cxa_vec_cleanup(CXXABI_1.3) [CXXABI] |
| __cxa_vec_ctor(CXXABI_1.3) [CXXABI] |
| __cxa_vec_delete(CXXABI_1.3) [CXXABI] |
| __cxa_vec_delete2(CXXABI_1.3) [CXXABI] |
| __cxa_vec_delete3(CXXABI_1.3) [CXXABI] |
| __cxa_vec_dtor(CXXABI_1.3) [CXXABI] |
| __cxa_vec_new(CXXABI_1.3) [CXXABI] |
| __cxa_vec_new2(CXXABI_1.3) [CXXABI] |
| __cxa_vec_new3(CXXABI_1.3) [CXXABI] |
| __dynamic_cast(CXXABI_1.3) [CXXABI] |
| __gxx_personality_v0(CXXABI_1.3) [CXXABI] |
An LSB conforming implementation shall provide the generic data interfaces for C++ Runtime Support specified in Table 9-3, with the full mandatory functionality as described in the referenced underlying specification.
No external methods are defined for libstdcxx - C++ type descriptors for built-in types in this part of the specification. See also the relevant architecture specific part of ISO/IEC 23360.
An LSB conforming implementation shall provide the generic data interfaces for C++ type descriptors for built-in types specified in Table 9-4, with the full mandatory functionality as described in the referenced underlying specification.
Table 9-4. libstdcxx - C++ type descriptors for built-in types Data Interfaces
| typeinfo for signed char const*(CXXABI_1.3) [CXXABI] |
| typeinfo for bool const*(CXXABI_1.3) [CXXABI] |
| typeinfo for char const*(CXXABI_1.3) [CXXABI] |
| typeinfo for double const*(CXXABI_1.3) [CXXABI] |
| typeinfo for long double const*(CXXABI_1.3) [CXXABI] |
| typeinfo for float const*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned char const*(CXXABI_1.3) [CXXABI] |
| typeinfo for int const*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned int const*(CXXABI_1.3) [CXXABI] |
| typeinfo for long const*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long const*(CXXABI_1.3) [CXXABI] |
| typeinfo for short const*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned short const*(CXXABI_1.3) [CXXABI] |
| typeinfo for void const*(CXXABI_1.3) [CXXABI] |
| typeinfo for wchar_t const*(CXXABI_1.3) [CXXABI] |
| typeinfo for long long const*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long long const*(CXXABI_1.3) [CXXABI] |
| typeinfo for signed char*(CXXABI_1.3) [CXXABI] |
| typeinfo for bool*(CXXABI_1.3) [CXXABI] |
| typeinfo for char*(CXXABI_1.3) [CXXABI] |
| typeinfo for double*(CXXABI_1.3) [CXXABI] |
| typeinfo for long double*(CXXABI_1.3) [CXXABI] |
| typeinfo for float*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned char*(CXXABI_1.3) [CXXABI] |
| typeinfo for int*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned int*(CXXABI_1.3) [CXXABI] |
| typeinfo for long*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long*(CXXABI_1.3) [CXXABI] |
| typeinfo for short*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned short*(CXXABI_1.3) [CXXABI] |
| typeinfo for void*(CXXABI_1.3) [CXXABI] |
| typeinfo for wchar_t*(CXXABI_1.3) [CXXABI] |
| typeinfo for long long*(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long long*(CXXABI_1.3) [CXXABI] |
| typeinfo for signed char(CXXABI_1.3) [CXXABI] |
| typeinfo for bool(CXXABI_1.3) [CXXABI] |
| typeinfo for char(CXXABI_1.3) [CXXABI] |
| typeinfo for double(CXXABI_1.3) [CXXABI] |
| typeinfo for long double(CXXABI_1.3) [CXXABI] |
| typeinfo for float(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned char(CXXABI_1.3) [CXXABI] |
| typeinfo for int(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned int(CXXABI_1.3) [CXXABI] |
| typeinfo for long(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long(CXXABI_1.3) [CXXABI] |
| typeinfo for short(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned short(CXXABI_1.3) [CXXABI] |
| typeinfo for void(CXXABI_1.3) [CXXABI] |
| typeinfo for wchar_t(CXXABI_1.3) [CXXABI] |
| typeinfo for long long(CXXABI_1.3) [CXXABI] |
| typeinfo for unsigned long long(CXXABI_1.3) [CXXABI] |
| typeinfo name for signed char const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for bool const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for char const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for double const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long double const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for float const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned char const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for int const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned int const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for short const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned short const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for void const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for wchar_t const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long long const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long long const*(CXXABI_1.3) [CXXABI] |
| typeinfo name for signed char*(CXXABI_1.3) [CXXABI] |
| typeinfo name for bool*(CXXABI_1.3) [CXXABI] |
| typeinfo name for char*(CXXABI_1.3) [CXXABI] |
| typeinfo name for double*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long double*(CXXABI_1.3) [CXXABI] |
| typeinfo name for float*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned char*(CXXABI_1.3) [CXXABI] |
| typeinfo name for int*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned int*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long*(CXXABI_1.3) [CXXABI] |
| typeinfo name for short*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned short*(CXXABI_1.3) [CXXABI] |
| typeinfo name for void*(CXXABI_1.3) [CXXABI] |
| typeinfo name for wchar_t*(CXXABI_1.3) [CXXABI] |
| typeinfo name for long long*(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long long*(CXXABI_1.3) [CXXABI] |
| typeinfo name for signed char(CXXABI_1.3) [CXXABI] |
| typeinfo name for bool(CXXABI_1.3) [CXXABI] |
| typeinfo name for char(CXXABI_1.3) [CXXABI] |
| typeinfo name for double(CXXABI_1.3) [CXXABI] |
| typeinfo name for long double(CXXABI_1.3) [CXXABI] |
| typeinfo name for float(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned char(CXXABI_1.3) [CXXABI] |
| typeinfo name for int(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned int(CXXABI_1.3) [CXXABI] |
| typeinfo name for long(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long(CXXABI_1.3) [CXXABI] |
| typeinfo name for short(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned short(CXXABI_1.3) [CXXABI] |
| typeinfo name for void(CXXABI_1.3) [CXXABI] |
| typeinfo name for wchar_t(CXXABI_1.3) [CXXABI] |
| typeinfo name for long long(CXXABI_1.3) [CXXABI] |
| typeinfo name for unsigned long long(CXXABI_1.3) [CXXABI] |
An LSB conforming implementation shall provide the generic methods for C++ _Rb_tree specified in Table 9-5, with the full mandatory functionality as described in the referenced underlying specification.
Table 9-5. libstdcxx - C++ _Rb_tree Function Interfaces
| _Rb_tree_decrement(_Rb_tree_node_base const*)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_decrement(_Rb_tree_node_base*)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_increment(_Rb_tree_node_base const*)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_increment(_Rb_tree_node_base*)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_black_count(_Rb_tree_node_base const*, _Rb_tree_node_base const*)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_rotate_left(_Rb_tree_node_base*, _Rb_tree_node_base*&)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_rotate_right(_Rb_tree_node_base*, _Rb_tree_node_base*&)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_rebalance_for_erase(_Rb_tree_node_base*, _Rb_tree_node_base&)(GLIBCXX_3.4) [LSB] |
| _Rb_tree_insert_and_rebalance(bool, _Rb_tree_node_base*, _Rb_tree_node_base*, _Rb_tree_node_base&)(GLIBCXX_3.4) [LSB] |
The virtual table for the std::type_info class is described by Table 9-6
Table 9-6. Primary vtable for type_info
| Base Offset | 0 |
| Virtual Base Offset | 0 |
| RTTI | typeinfo for type_info |
| vfunc[0]: | type_info::~type_info() |
| vfunc[1]: | type_info::~type_info() |
| vfunc[2]: | type_info::__is_pointer_p() const |
| vfunc[3]: | type_info::__is_function_p() const |
| vfunc[4]: | type_info::__do_catch(type_info const*, void**, unsigned int) const |
| vfunc[5]: | type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const |
The Run Time Type Information for the std::type_info class is described by Table 9-7
An LSB conforming implementation shall provide the generic methods for Class std::type_info specified in Table 9-8, with the full mandatory functionality as described in the referenced underlying specification.
Table 9-8. libstdcxx - Class type_info Function Interfaces
| type_info::__do_catch(type_info const*, void**, unsigned int) const(GLIBCXX_3.4) [ISOCXX] |
| type_info::__do_upcast(__cxxabiv1::__class_type_info const*, void**) const(GLIBCXX_3.4) [ISOCXX] |
| type_info::__is_pointer_p() const(GLIBCXX_3.4) [ISOCXX] |
| type_info::__is_function_p() const(GLIBCXX_3.4) [ISOCXX] |
| type_info::~type_info()(GLIBCXX_3.4) [ISOCXX] |
| type_info::~type_info()(GLIBCXX_3.4) [ISOCXX] |
| type_info::~type_info()(GLIBCXX_3.4) [ISOCXX] |
An LSB conforming implementation shall provide the generic data interfaces for Class std::type_info specified in Table 9-9, with the full mandatory functionality as described in the referenced underlying specification.
The virtual table for the __cxxabiv1::__enum_type_info class is described by Table 9-10