Revised March 14, 2017
The Itanium C++ ABI is an ABI for C++. As an ABI, it gives precise rules for implementing the language, ensuring that separately-compiled parts of a program can successfully interoperate. Although it was initially developed for the Itanium architecture, it is not platform-specific and can be layered portably on top of an arbitrary C ABI. Accordingly, it is used as the standard C++ ABI for many major operating systems on all major architectures, and is implemented in many major C++ compilers, including GCC and Clang.
This website may be mirrored in many places, some of which may become stale. The current canonical location is:
The primary discussion forum for the ABI is the GitHub repository. Please open a new issue for any new topic you want to discuss. Previously, the ABI was discussed on a mailing list, cxx-abi-dev, whose archives are still accessible.
Proposals and auxiliary information:
# | Action | Who | Status | Opened | Closed |
---|---|---|---|---|---|
1 | Distribute Sun C++ ABI | Mike Ball | closed | 990603 | 990930 |
2 | Distribute Sun C++ ABI Rationale | Mike Ball | closed | 990603 | 990930 |
3 | Distribute Taligent C++ ABI | Cary Coutant | moot | 990603 | 991101 |
4 | Expedite Itanium RT Arch doc release | Cary Coutant | closed | 990603 | 990720 |
5 | Set up n-way NDA for eligible members | Priti Shrivastav | open | 990603 | |
6 | Organize/summarize object layout issues and alternatives | Matt Austern | closed | 990603 | 990624 |
7 | Write-up of Vfunc call protocol | Christophe de Dinechin | closed | 990610 | 990805 |
8 | Write-up of object layout strawman | Matt Austern | closed | 990610 | 990624 |
9 | Check with c++-core about empty base placement | Jason Merrill | closed | 990610 | 990618 |
10 | Describe dynamic cast / inaccessible base issue | Daveed Vandevoorde | closed | 990617 | 990701 |
11 | Summarize ctor/dtor issues | Michael Lam | closed | 990617 | 990729 |
12 | Describe Intel exception model | Priti Shrivastav | closed | 990624 | 990818 |
13 | Propose RTTI representation | Daveed Vandevoorde | closed | 990701 | 990819 |
14 | Open EDG exception stack? | Daveed Vandevoorde | moot | 990715 | 990930 |
15 | Priority scheme descriptor for C-2 | Jim Dehnert | closed | 990715 | 990804 |
16 | Covariant return scheme | Jason Merrill | closed | 990715 | 990729 |
17 | Validate Christophe's B-6 Vtable layout | Jim Dehnert | closed | 990729 | 990811 |
18 | Check Sun dynamic cast algorithm | Michael Lam | closed | 990805 | 990812 |
19 | Write up C-3 destructor proposal | Jim Dehnert | closed | 990805 | 990811 |
20 | Look at implications of discussion on B-1, B-6 | Christophe de Dinechin | closed | 990812 | 990830 |
21 | Look at alternative implementations of C-2 | Jim Dehnert | closed | 990812 | 991110 |
22 | Describe HP hash processing for RTTI | Christophe de Dinechin | moot | 990826 | 990930 |
23 | Complete RTTI proposal | Daveed Vandevoorde | closed | 990826 | 991006 |
24 | Summarize Vtable issues | Jason Merrill | closed | 990909 | 990930 |
25 | Update traceback personality API | Christophe de Dinechin | closed | 990923 | 000105 |
26 | Push COMDAT to base ABI group | Jim Dehnert | closed | 991014 | 000317 |
27 | Writeup Vtable Changes | Jason Merrill | closed | 991014 | 991021 |
28 | Write Virtual destructor proposal | Christophe de Dinechin | closed | 991014 | 000217 |
29 | dynamic_cast pseudocode | Jason Merrill | closed | 991028 | 000712 |
30 | Mangling proposal | Daveed Vandevoorde | closed | 991028 | 000118 |
31 | Construction vtable writeup | Coleen Phillimore | closed | 000127 | 000216 |
32 | Raise sorting issue C-2 with base ABI group | Jim Dehnert | closed | 991202 | 000717 |
33 | long double in psABI | Christophe de Dinechin | closed | 000210 | 0003xx |
34 | incomplete_type_info proposal | Christophe de Dinechin | closed | 000210 | 000316 |
35 | new array cookie writeup | Matt Austern | closed | 000210 | 000217 |
36 | Mangling document update | Daveed Vandevoorde | closed | 000210 | 000217 |
37 | Validate utility of has-public-base | Nathan Sidwell | closed | 000218 | 000705 |
call | Function call interface, i.e. call linkage |
data | Data layout |
lib | Runtime library support |
lif | Library interface, i.e. API |
g | Potential gABI impact |
ps | Potential psABI impact |
source | Source code conventions (i.e. API, not ABI) |
tools | May affect how program construction tools interact |
# | Issue | Class | Status | Source | Opened | Closed |
---|---|---|---|---|---|---|
A | Object Layout | |||||
A-1 | Vptr location | data | closed | SGI | 990520 | 990624 |
A-2 | Virtual base classes | data | closed | SGI | 990520 | 990624 |
A-3 | Multiple inheritance | data | closed | SGI | 990520 | 990701 |
A-4 | Empty base classes | data | closed | SGI | 990520 | 990624 |
A-5 | Empty parameters | data | closed | SGI | 990520 | 001117 |
A-6 | RTTI (type_info ) .o representation |
data call ps | closed | SGI | 990520 | 991028 |
A-7 | Vptr sharing with primary base class | data | closed | HP | 990603 | 990729 |
A-8 | (Virtual) base class alignment | data | closed | HP | 990603 | 990624 |
A-9 | Sorting fields as allowed by [class.mem]/12 | data | closed | HP | 990603 | 990624 |
A-10 | Class parameters in registers | call | closed | HP | 990603 | 990701 |
A-11 | Pointers to member functions | data | closed | Cygnus | 990603 | 990812 |
A-12 | Merging secondary vtables | data | closed | Sun | 990610 | 990805 |
A-13 | Parameter struct field promotion | call | closed | SGI | 990603 | 990701 |
A-14 | Pointers to data members | data | closed | SGI | 990729 | 990805 |
A-15 | Empty bit-fields | data | closed | CodeSourcery | 991214 | 000106 |
A-16 | Nearly empty virtual bases | data | closed | SGI | 991228 | 000106 |
A-17 | Primary indirect virtual base allocation | data | closed | SGI | 991228 | 000113 |
A-18 | Virtual base alignment | data | closed | SGI | 991228 | 000113 |
A-19 | Primary indirect virtual base choice | data | closed | All | 000106 | 000120 |
A-20 | Operator new array cookies | data | closed | All | 000113 | 000120 |
A-21 | Placement new array cookies | data | closed | All | 000113 | 000217 |
A-22 | RTTI for reference types | data | closed | CodeSourcery | 000119 | 000203 |
A-23 | RTTI class descriptors | data | closed | CodeSourcery | 000124 | 000302 |
A-24 | RTTI for incomplete types | data | closed | CodeSourcery | 000126 | 000330 |
A-25 | Excess-width bitfields | data | closed | IBM | 000204 | 000217 |
A-26 | NULL pointers to member functions | data | closed | CodeSourcery | 000221 | 000302 |
A-27 | NULL pointers to data members | data | closed | CodeSourcery | 000222 | 000302 |
A-28 | RTTI equality testing | data | closed | CodeSourcery | 000406 | 000504 |
A-29 | RTTI pointer-to-member | data | closed | CodeSourcery | 000407 | 000504 |
A-30 | RTTI portability | data | closed | HUB | 001012 | 001109 |
A-31 | Overlaying tail padding | data | closed | CodeSourcery | 001019 | 001109 |
B | Virtual Function Handling | |||||
B-1 | Adjustment of "this" pointer (e.g. thunks) | data call | closed | SGI | 990520 | 991202 |
B-2 | Covariant return types | call | closed | SGI | 990520 | 990722 |
B-3 | Allowed caching of vtable contents | call | closed | HP | 990603 | 990805 |
B-4 | Function descriptors in vtable | data | closed | HP | 990603 | 990805 |
B-5 | Where are vtables emitted? | data | closed | HP | 990603 | 991118 |
B-6 | Virtual function table layout | data | closed | SGI | 990520 | 991028 |
B-7 | Objects and Vtables in shared memory | data | closed | HP | 990624 | 990805 |
B-8 | dynamic_cast | data | closed | SGI | 990628 | 991014 |
B-9 | Primary base vtable embedding | data | closed | Cygnus | 000217 | 000302 |
B-10 | Pure virtual runtime | call | closed | CodeSourcery | 000629 | 000706 |
C | Object Construction/Destruction | |||||
C-1 | Interaction with .init/.fini | lif ps | closed | SGI | 990520 | 991202 |
C-2 | Order of ctors/dtors w.r.t. link | lif ps | closed | HP | 990603 | 000817 |
C-3 | Order of ctors/dtors w.r.t. DSOs | ps | closed | HP | 990603 | 000504 |
C-4 | Construction vtables | call | closed | Cygnus | 990603 | 000504 |
C-5 | Calling virtual destructors | call | closed | Sun | 990603 | 991104 |
C-6 | Extra parameters to ctors/dtors | call | closed | Cygnus | 990603 | 991104 |
C-7 | Passing value parameters by reference | call | closed | All | 990625 | 990805 |
C-8 | Returning classes with non-trival copy constructors | call | closed | All | 990625 | 990722 |
C-9 | Passing parameters with ctors/dtors | call | closed | All | 991028 | 991104 |
C-10 | Synthesized copy assignments | call | closed | All | 991028 | 991028 |
C-11 | Array constructors/destructors | call | closed | Cygnus | 000130 | 000309 |
C-12 | Constructor return values | call | closed | Cygnus | 000130 | 000309 |
C-13 | Allocating constructors | call | closed | HP | 000309 | 000803 |
C-14 | Local-scope dynamic constructors | data | closed | all | 000309 | 000511 |
C-15 | Alternate array allocators | call | closed | CodeSourcery | 000628 | 000720 |
C-16 | Copy constructor runtime | call | closed | CodeSourcery | 000628 | 000720 |
C-17 | Uncatch exception runtime | call | table | all | 000706 | 000720 |
C-18 | Result buffers | call | closed | SGI | 000724 | 000817 |
C-19 | NULL ctor/dtor API parameters | call | closed | CodeSourcery | 000806 | 000831 |
D | Exception Handling | |||||
D-0 | Exception handling framework | lib ps | closed | SGI | 990520 | 991216 |
D-1 | Language-specific data area format | lib ps | open | SGI | 990520 | |
D-2 | Unwind personality routines | lib ps | closed | SGI | 990520 | 000106 |
D-3 | Unwind process clarification | lib ps | closed | SGI | 990520 | 000106 |
D-4 | Unwind routines nested? | lib ps | closed | SGI | 990520 | 991209 |
D-5 | Interaction with other languages (e.g. Java) | lib ps | closed | HP | 990603 | 991007 |
D-6 | Allow resumption in other languages? | lib ps | closed | HP | 990603 | 991007 |
D-7 | Interaction with signals or asynch events | lib ps | closed | HP | 990603 | 991209 |
D-8 | Interaction with threads packages | lib ps | closed | SGI | 990603 | 000106 |
D-9 | longjmp interaction | lib ps | closed | HP | 990908 | 000113 |
D-10 | psABI proposal | lib ps | closed | all | 991216 | 000120 |
D-11 | pthreads interface | lib ps | closed | all | 991216 | 000203 |
D-12 | Table location | lib ps | closed | all | 991216 | 000504 |
D-13 | _Unwind_ForcedUnwind | lib ps | closed | all | 991216 | 000120 |
D-14 | __cxa_begin/end_catch | lib | closed | all | 991216 | 001109 |
D-15 | Terminate handler and threads | lib | closed | all | 991216 | 000106 |
D-16 | Exception specifications | lib | closed | all | 991216 | 000113 |
D-17 | bad_cast, bad_typeid runtime | call | closed | CodeSourcery | 000629 | 000706 |
D-18 | __cxa_throw_type_info | lib | closed | all | 001012 | 001109 |
E | Template Instantiation Model | |||||
E-1 | When does instantiation occur? | tools | closed | SGI | 990520 | 000511 |
E-2 | Export template model | tools | tabled | SGI | 990520 | |
E-3 | Template repository | tools | closed | HP | 990603 | 000511 |
F | Name Mangling | |||||
F-1 | Mangling convention | call | closed | SGI | 990520 | 000330 |
F-2 | Mangled name size | call g | closed | SGI | 990520 | 000511 |
F-3 | Consistency checks | call g | tabled | SGI | 990520 | |
F-4 | Empty throw specs | call g | tabled | HP | 990930 | |
F-5 | ILP32 vs. LP64 | call | closed | HP | 000210 | 000824 |
F-6 | Demangling | lib | closed | Cygnus | 000210 | 000504 |
F-7 | Mangling statics | call | closed | HP | 000223 | 000504 |
F-8 | Identifiers with unicode letters | call | closed | HU-Berlin | 000323 | 000413 |
F-9 | Strings with unicode letters | call | closed | HU-Berlin | 000323 | 000413 |
F-10 | Mangling function return types | call | closed | all | 000330 | 000413 |
F-11 | Hash for local strings | call | closed | all | 000330 | 000504 |
G | Miscellaneous | |||||
G-1 | Basic command line options | tools | closed | HP | 990603 | 000824 |
G-2 | Detection of 1-def rule violations | call | closed | Sun | 990603 | 000504 |
G-3 | Inlined routine linkage | call | closed | Sun | 990603 | 991202 |
G-4 | Dynamic init of local static objects and multithreading | call | closed | SCO | 990607 | 001109 |
G-5 | Varargs routine interface | call | closed | HU-B | 990810 | 991014 |
G-6 | bool parameters | call | closed | all | 991104 | 991202 |
H | Runtime Library Interface | |||||
H-1 | Runtime library DSO name | tools | closed | SGI | 990616 | 000817 |
H-2 | Runtime library API | lif | tabled | SGI | 990616 |