-
Notifications
You must be signed in to change notification settings - Fork 97
/
abi-mangling.html
185 lines (173 loc) · 11.4 KB
/
abi-mangling.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<HTML>
<HEAD>
<title>C++ ABI for IA-64: Mangling</title>
<link rel=stylesheet href=small-table.css type="text/css">
<link rel=stylesheet href=code.css type="text/css">
<hr>
<font size=6><i><b>
<p>
C++ ABI for IA-64: Mangling
</b></i></font>
<font size=-1>
<p>
<i>Revised 5 September 2000</i>
</center>
</HEAD>
<BODY>
<p><hr><p>
<table border=on>
<tr><th>class</th> <th colspan=2> ID </th> <th align=left> Meaning </th> </tr>
<tr><td>type</td> <td>a</td> <td></td> <td> builtin type signed char </td> </tr>
<tr><td>oper</td> <td>a</td> <td> a </td> <td> Operator && </td> </tr>
<tr><td>oper</td> <td>a</td> <td> d </td> <td> Operator & (unary) </td> </tr>
<tr><td>oper</td> <td>a</td> <td> n </td> <td> Operator & </td> </tr>
<tr><td>oper</td> <td>a</td> <td> N </td> <td> Operator &= </td> </tr>
<tr><td>oper</td> <td>a</td> <td> S </td> <td> Operator = </td> </tr>
<tr><td>oper</td> <td>a</td> <td> t </td> <td> alignof of a type (C++11)</td> </tr>
<tr><td>oper</td> <td>a</td> <td> w </td> <td> co_await (C++2a)</td> </tr>
<tr><td>oper</td> <td>a</td> <td> z </td> <td> alignof of an expression (C++11) </td> </tr>
<tr><td>type</td> <td>A</td> <td></td> <td> array type </td> </tr>
<tr><td>type</td> <td>b</td> <td></td> <td> builtin type bool </td> </tr>
<tr><td>type</td> <td>c</td> <td></td> <td> builtin type char </td> </tr>
<tr><td>oper</td> <td>c</td> <td> l </td> <td> Operator () </td> </tr>
<tr><td>oper</td> <td>c</td> <td> m </td> <td> Operator , </td> </tr>
<tr><td>oper</td> <td>c</td> <td> o </td> <td> Operator ~ </td> </tr>
<tr><td>oper</td> <td>c</td> <td> v </td> <td> Operator (cast) </td> </tr>
<tr><td>obj </td> <td>C</td> <td> 1 </td> <td>Complete object (in-charge) constructor</td> </tr>
<tr><td>obj </td> <td>C</td> <td> 2 </td> <td>Base object (not-in-charge) constructor</td> </tr>
<tr><td>obj </td> <td>C</td> <td> 3 </td> <td>Complete object (in-charge) allocating constructor</td> </tr>
<tr><td>type</td> <td>d</td> <td></td> <td> builtin type double </td> </tr>
<tr><td>oper</td> <td>d</td> <td> a </td> <td> Operator delete[] </td> </tr>
<tr><td>oper</td> <td>d</td> <td> e </td> <td> Operator * (unary) </td> </tr>
<tr><td>syn </td> <td>d</td> <td> i </td> <td> Designated field initializer </td> </tr>
<tr><td>oper</td> <td>d</td> <td> l </td> <td> Operator delete </td> </tr>
<tr><td>oper</td> <td>d</td> <td> t </td> <td> Member access (.) </td> </tr>
<tr><td>oper</td> <td>d</td> <td> v </td> <td> Operator / </td> </tr>
<tr><td>oper</td> <td>d</td> <td> V </td> <td> Operator /= </td> </tr>
<tr><td>syn </td> <td>d</td> <td> x </td> <td> Designated array initializer </td> </tr>
<tr><td>syn </td> <td>d</td> <td> X </td> <td> Designated array range initializer </td> </tr>
<tr><td>type</td> <td>D</td> <td> p </td> <td> pack expansion of (C++11) </td> </tr>
<tr><td>type</td> <td>D</td> <td> t </td> <td> decltype of an id-expression or class member access (C++11) </td> </tr>
<tr><td>obj </td> <td>D</td> <td> C </td> <td> structured binding declaration (C++1z) </td> </tr>
<tr><td>type</td> <td>D</td> <td> T </td> <td> decltype of an expression (C++11) </td> </tr>
<tr><td>obj </td> <td>D</td> <td> 0 </td> <td> Deleting destructor</td> </tr>
<tr><td>obj </td> <td>D</td> <td> 1 </td> <td> Complete object (in-charge) destructor</td> </tr>
<tr><td>obj </td> <td>D</td> <td> 2 </td> <td> Base object (not-in-charge) destructor</td> </tr>
<tr><td>oper</td> <td>e</td> <td> o </td> <td> Operator ^ </td> </tr>
<tr><td>oper</td> <td>e</td> <td> O </td> <td> Operator ^= </td> </tr>
<tr><td>oper</td> <td>e</td> <td> q </td> <td> Operator == </td> </tr>
<tr><td>type</td> <td>e</td> <td></td> <td> builtin type long double </td> </tr>
<tr><td>delim</td> <td>E</td> <td></td> <td> End of argument list </td> </tr>
<tr><td>type</td> <td>f</td> <td></td> <td> builtin type float </td> </tr>
<tr><td>obj </td> <td>F</td> <td></td> <td> function </td> </tr>
<tr><td>type</td> <td>g</td> <td></td> <td> builtin type __float128 </td> </tr>
<tr><td>oper</td> <td>g</td> <td> e </td> <td> Operator >= </td> </tr>
<tr><td>oper</td> <td>g</td> <td> t </td> <td> Operator > </td> </tr>
<tr><td>type</td> <td>G</td> <td></td> <td> imaginary type qualifier (C 2000) </td> </tr>
<tr><td>obj </td> <td>G</td> <td> V </td> <td> Sentry object for 1-time init </td> </tr>
<tr><td>type</td> <td>h</td> <td></td> <td> builtin type unsigned char </td> </tr>
<tr><td>type</td> <td>H</td> <td></td> <td> complex type qualifier (C 2000) </td> </tr>
<tr><td>type</td> <td>i</td> <td></td> <td> builtin type int </td> </tr>
<tr><td>syn </td> <td>i</td> <td> l </td> <td> braced-init-list </td> </tr>
<tr><td>oper</td> <td>i</td> <td> x </td> <td> Operator [] </td> </tr>
<tr><td>delim</td> <td>I</td> <td></td> <td> Template argument list </td> </tr>
<tr><td>type</td> <td>j</td> <td></td> <td> builtin type unsigned int </td> </tr>
<tr><td>type</td> <td>K</td> <td></td> <td> const qualifier </td> </tr>
<tr><td>type</td> <td>l</td> <td></td> <td> builtin type long </td> </tr>
<tr><td>oper</td> <td>l</td> <td> e </td> <td> Operator <= </td> </tr>
<tr><td>oper</td> <td>l</td> <td> s </td> <td> Operator << </td> </tr>
<tr><td>oper</td> <td>l</td> <td> S </td> <td> Operator <<= </td> </tr>
<tr><td>oper</td> <td>l</td> <td> t </td> <td> Operator < </td> </tr>
<tr><td>obj </td> <td>L</td> <td></td> <td> literal, external name prefix </td> </tr>
<tr><td>type</td> <td>m</td> <td></td> <td> builtin type unsigned long </td> </tr>
<tr><td>oper</td> <td>m</td> <td> i </td> <td> Operator - </td> </tr>
<tr><td>oper</td> <td>m</td> <td> I </td> <td> Operator -= </td> </tr>
<tr><td>oper</td> <td>m</td> <td> l </td> <td> Operator * </td> </tr>
<tr><td>oper</td> <td>m</td> <td> L </td> <td> Operator *= </td> </tr>
<tr><td>oper</td> <td>m</td> <td> m </td> <td> Operator -- </td> </tr>
<tr><td>type</td> <td>M</td> <td></td> <td> pointer to member type </td> </tr>
<tr><td>type</td> <td>n</td> <td></td> <td> builtin type __int128 </td> </tr>
<tr><td>oper</td> <td>n</td> <td> a </td> <td> Operator new[] </td> </tr>
<tr><td>oper</td> <td>n</td> <td> e </td> <td> Operator != </td> </tr>
<tr><td>oper</td> <td>n</td> <td> g </td> <td> Operator - (unary) </td> </tr>
<tr><td>oper</td> <td>n</td> <td> t </td> <td> Operator ! </td> </tr>
<tr><td>oper</td> <td>n</td> <td> w </td> <td> Operator new </td> </tr>
<tr><td>delim</td> <td>N</td> <td></td> <td> dependent/qualifier name list </td> </tr>
<tr><td>type</td> <td>o</td> <td></td> <td> builtin type unsigned __int128 </td> </tr>
<tr><td>oper</td> <td>o</td> <td> o </td> <td> Operator || </td> </tr>
<tr><td>oper</td> <td>o</td> <td> r </td> <td> Operator | </td> </tr>
<tr><td>oper</td> <td>o</td> <td> R </td> <td> Operator |= </td> </tr>
<tr><td>type</td> <td>O</td> <td></td> <td> rvalue reference type (C++11) </td> </tr>
<tr><td>oper</td> <td>p</td> <td> l </td> <td> Operator + </td> </tr>
<tr><td>oper</td> <td>p</td> <td> L </td> <td> Operator += </td> </tr>
<tr><td>oper</td> <td>p</td> <td> m </td> <td> Operator ->* </td> </tr>
<tr><td>oper</td> <td>p</td> <td> p </td> <td> Operator ++ </td> </tr>
<tr><td>oper</td> <td>p</td> <td> s </td> <td> Operator + (unary) </td> </tr>
<tr><td>oper</td> <td>p</td> <td> t </td> <td> Operator -> </td> </tr>
<tr><td>type</td> <td>P</td> <td></td> <td> pointer type </td> </tr>
<tr><td>oper</td> <td>q</td> <td> u </td> <td> Operator ? </td> </tr>
<tr><td>type</td> <td>r</td> <td></td> <td> restrict qualifier (C 2000) </td> </tr>
<tr><td>oper</td> <td>r</td> <td> m </td> <td> Operator % </td> </tr>
<tr><td>oper</td> <td>r</td> <td> M </td> <td> Operator %= </td> </tr>
<tr><td>oper</td> <td>r</td> <td> s </td> <td> Operator >> </td> </tr>
<tr><td>oper</td> <td>r</td> <td> S </td> <td> Operator >>= </td> </tr>
<tr><td>type</td> <td>R</td> <td></td> <td> reference type </td> </tr>
<tr><td>type</td> <td>s</td> <td></td> <td> builtin type short </td> </tr>
<tr><td>name</td> <td>s</td> <td></td> <td> local string prefix </td> </tr>
<tr><td>oper</td> <td>s</td> <td> p </td> <td> Expression pack expansion operator</td> </tr>
<tr><td>oper</td> <td>s</td> <td> r </td> <td> Scope resolution operator </td> </tr>
<tr><td>oper</td> <td>s</td> <td> s </td> <td> Operator <=> (C++2a "spaceship") </td> </tr>
<tr><td>oper</td> <td>s</td> <td> t </td> <td> Operator sizeof (a type)</td> </tr>
<tr><td>oper</td> <td>s</td> <td> z </td> <td> Operator sizeof (an expression)</td> </tr>
<tr><td>oper</td> <td>s</td> <td> Z </td> <td> Operator sizeof (a pack expansion)</td> </tr>
<tr><td>abbr</td> <td>S</td> <td> _ </td> <td> substituted name </td> </tr>
<tr><td>abbr</td> <td>S</td> <td> <digit></td>
<td> substituted name (repeated) </td> </tr>
<tr><td>abbr</td> <td>S</td> <td> <upper></td>
<td> substituted name (repeated) </td> </tr>
<tr><td>abbr</td> <td>S</td> <td> <lower></td>
<td> substituted name (standard abbreviation) </td> </tr>
<tr><td>type</td> <td>S</td> <td> a </td>
<td> abbreviation ::std::allocator </td> </tr>
<tr><td>type</td> <td>S</td> <td> b </td>
<td> abbreviation ::std::basic_string </td> </tr>
<tr><td>type</td> <td>S</td> <td> d </td>
<td> abbreviation ::std::basic_iostream<char, std::char_traits<char> > </td> </tr>
<tr><td>type</td> <td>S</td> <td> i </td>
<td> abbreviation ::std::basic_istream<char, std::char_traits<char> > </td> </tr>
<tr><td>type</td> <td>S</td> <td> o </td>
<td> abbreviation ::std::basic_ostream<char, std::char_traits<char> > </td> </tr>
<tr><td>type</td> <td>S</td> <td> s </td>
<td> abbreviation ::std::basic_string<char, ::std::char_traits<char>,
::std::allocator<char> ></td> </tr>
<tr><td>abbr</td> <td>S</td> <td> t </td> <td> abbreviation ::std:: </td> </tr>
<tr><td>type</td> <td>t</td> <td></td> <td> builtin type unsigned short </td> </tr>
<tr><td>abbr</td> <td>T</td> <td> _ </td> <td> template parameter </td> </tr>
<tr><td>abbr</td> <td>T</td> <td> <digit></td>
<td> template parameter (repeated) </td> </tr>
<tr><td>obj </td> <td>T</td> <td> c </td>
<td> virtual function covariant override thunk </td> </tr>
<tr><td>obj </td> <td>T</td> <td> D </td> <td> typeinfo common proxy </td> </tr>
<tr><td>obj </td> <td>T</td> <td> h </td> <td> virtual function non-virtual override thunk </td> </tr>
<tr><td>obj </td> <td>T</td> <td> I </td> <td> typeinfo structure </td> </tr>
<tr><td>obj </td> <td>T</td> <td> S </td> <td> RTTI name (NTBS) </td> </tr>
<tr><td>obj </td> <td>T</td> <td> T </td> <td> VTT table </td> </tr>
<tr><td>obj </td> <td>T</td> <td> v </td> <td> virtual function virtual override thunk </td> </tr>
<tr><td>obj </td> <td>T</td> <td> V </td> <td> virtual table </td> </tr>
<tr><td>type</td> <td>u</td> <td></td> <td> vendor extended builtin type </td> </tr>
<tr><td>type</td> <td>U</td> <td></td> <td> vendor extended type qualifier </td> </tr>
<tr><td>type</td> <td>v</td> <td></td> <td> builtin type void </td> </tr>
<tr><td>oper</td> <td>v</td> <td> <digit> </td> <td> vendor extended operator </td> </tr>
<tr><td>type</td> <td>V</td> <td></td> <td> volatile qualifier </td> </tr>
<tr><td>type</td> <td>w</td> <td></td> <td> builtin type wchar_t </td> </tr>
<tr><td>type</td> <td>x</td> <td></td> <td> builtin type long long </td> </tr>
<tr><td>delim</td> <td>X</td> <td></td> <td> expression prefix </td> </tr>
<tr><td>type</td> <td>y</td> <td></td> <td> builtin type unsigned long long </td> </tr>
<tr><td>type</td> <td>Y</td> <td></td> <td> extern "C" type qualifier </td> </tr>
<tr><td>type</td> <td>z</td> <td></td> <td> ellipsis </td> </tr>
<tr><td>obj </td> <td>Z</td> <td></td> <td> local name prefix </td> </tr>
<tr><td>obj </td> <td><digit></td><td></td> <td> name (length followed by name) </td> </tr>
</table>
</ol>
</BODY>
</HTML>