111
|
1 /* Interface between GCC C++ FE and GDB
|
|
2
|
|
3 Copyright (C) 2014-2017 Free Software Foundation, Inc.
|
|
4
|
|
5 This file is part of GCC.
|
|
6
|
|
7 This program is free software; you can redistribute it and/or modify
|
|
8 it under the terms of the GNU General Public License as published by
|
|
9 the Free Software Foundation; either version 3 of the License, or
|
|
10 (at your option) any later version.
|
|
11
|
|
12 This program is distributed in the hope that it will be useful,
|
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15 GNU General Public License for more details.
|
|
16
|
|
17 You should have received a copy of the GNU General Public License
|
|
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
19
|
|
20 #ifndef GCC_CP_INTERFACE_H
|
|
21 #define GCC_CP_INTERFACE_H
|
|
22
|
|
23 #include "gcc-interface.h"
|
|
24
|
|
25 /* This header defines the interface to the GCC API. It must be both
|
|
26 valid C and valid C++, because it is included by both programs. */
|
|
27
|
|
28 #ifdef __cplusplus
|
|
29 extern "C" {
|
|
30 #endif
|
|
31
|
|
32 /* Forward declaration. */
|
|
33
|
|
34 struct gcc_cp_context;
|
|
35
|
|
36 /*
|
|
37 * Definitions and declarations for the C++ front end.
|
|
38 */
|
|
39
|
|
40 /* Defined versions of the C++ front-end API. */
|
|
41
|
|
42 enum gcc_cp_api_version
|
|
43 {
|
|
44 GCC_CP_FE_VERSION_0 = 0
|
|
45 };
|
|
46
|
|
47 /* Qualifiers. */
|
|
48
|
|
49 enum gcc_cp_qualifiers
|
|
50 {
|
|
51 GCC_CP_QUALIFIER_CONST = 1,
|
|
52 GCC_CP_QUALIFIER_VOLATILE = 2,
|
|
53 GCC_CP_QUALIFIER_RESTRICT = 4
|
|
54 };
|
|
55
|
|
56 /* Ref qualifiers. */
|
|
57
|
|
58 enum gcc_cp_ref_qualifiers {
|
|
59 GCC_CP_REF_QUAL_NONE = 0,
|
|
60 GCC_CP_REF_QUAL_LVALUE = 1,
|
|
61 GCC_CP_REF_QUAL_RVALUE = 2
|
|
62 };
|
|
63
|
|
64 /* Opaque typedef for unbound class templates. They are used for
|
|
65 template arguments, and defaults for template template
|
|
66 parameters. */
|
|
67
|
|
68 typedef unsigned long long gcc_utempl;
|
|
69
|
|
70 /* Opaque typedef for expressions. They are used for template
|
|
71 arguments, defaults for non-type template parameters, and defaults
|
|
72 for function arguments. */
|
|
73
|
|
74 typedef unsigned long long gcc_expr;
|
|
75
|
|
76 typedef enum
|
|
77 { GCC_CP_TPARG_VALUE, GCC_CP_TPARG_CLASS,
|
|
78 GCC_CP_TPARG_TEMPL, GCC_CP_TPARG_PACK }
|
|
79 gcc_cp_template_arg_kind;
|
|
80
|
|
81 typedef union
|
|
82 { gcc_expr value; gcc_type type; gcc_utempl templ; gcc_type pack; }
|
|
83 gcc_cp_template_arg;
|
|
84
|
|
85 /* An array of template arguments. */
|
|
86
|
|
87 struct gcc_cp_template_args
|
|
88 {
|
|
89 /* Number of elements. */
|
|
90
|
|
91 int n_elements;
|
|
92
|
|
93 /* kind[i] indicates what kind of template argument type[i] is. */
|
|
94
|
|
95 char /* gcc_cp_template_arg_kind */ *kinds;
|
|
96
|
|
97 /* The template arguments. */
|
|
98
|
|
99 gcc_cp_template_arg *elements;
|
|
100 };
|
|
101
|
|
102 /* An array of (default) function arguments. */
|
|
103
|
|
104 struct gcc_cp_function_args
|
|
105 {
|
|
106 /* Number of elements. */
|
|
107
|
|
108 int n_elements;
|
|
109
|
|
110 /* The (default) values for each argument. */
|
|
111
|
|
112 gcc_expr *elements;
|
|
113 };
|
|
114
|
|
115 /* This enumerates the kinds of decls that GDB can create. */
|
|
116
|
|
117 enum gcc_cp_symbol_kind
|
|
118 {
|
|
119 /* A function. */
|
|
120
|
|
121 GCC_CP_SYMBOL_FUNCTION,
|
|
122
|
|
123 /* A variable. */
|
|
124
|
|
125 GCC_CP_SYMBOL_VARIABLE,
|
|
126
|
|
127 /* A typedef, or an alias declaration (including template ones). */
|
|
128
|
|
129 GCC_CP_SYMBOL_TYPEDEF,
|
|
130
|
|
131 /* A label. */
|
|
132
|
|
133 GCC_CP_SYMBOL_LABEL,
|
|
134
|
|
135 /* A class, forward declared in build_decl (to be later defined in
|
|
136 start_class_definition), or, in a template parameter list scope,
|
|
137 a declaration of a template class, closing the parameter
|
|
138 list. */
|
|
139
|
|
140 GCC_CP_SYMBOL_CLASS,
|
|
141
|
|
142 /* A union, forward declared in build_decl (to be later defined in
|
|
143 start_class_definition). */
|
|
144
|
|
145 GCC_CP_SYMBOL_UNION,
|
|
146
|
|
147 /* An enumeration type being introduced with start_new_enum_type. */
|
|
148
|
|
149 GCC_CP_SYMBOL_ENUM,
|
|
150
|
|
151 /* A nonstatic data member being introduced with new_field. */
|
|
152
|
|
153 GCC_CP_SYMBOL_FIELD,
|
|
154
|
|
155 /* A base class in a gcc_vbase_array. */
|
|
156
|
|
157 GCC_CP_SYMBOL_BASECLASS,
|
|
158
|
|
159 /* A using declaration in new_using_decl. */
|
|
160
|
|
161 GCC_CP_SYMBOL_USING,
|
|
162
|
|
163 /* A (lambda) closure class type. In many regards this is just like
|
|
164 a regular class, but it's not supposed to have base classes, some
|
|
165 of the member functions that are usually implicitly-defined are
|
|
166 deleted, and it should have an operator() member function that
|
|
167 holds the lambda body. We can't instantiate objects of lambda
|
|
168 types from the snippet, but we can interact with them in such
|
|
169 ways as passing them to functions that take their types, and
|
|
170 calling their body. */
|
|
171
|
|
172 GCC_CP_SYMBOL_LAMBDA_CLOSURE,
|
|
173
|
|
174 /* Marker to check that we haven't exceeded GCC_CP_SYMBOL_MASK. */
|
|
175 GCC_CP_SYMBOL_END,
|
|
176
|
|
177 GCC_CP_SYMBOL_MASK = 15,
|
|
178
|
|
179 /* When defining a class member, at least one of the
|
|
180 GCC_CP_ACCESS_MASK bits must be set; when defining a namespace-
|
|
181 or union-scoped symbol, none of them must be set. */
|
|
182
|
|
183 GCC_CP_ACCESS_PRIVATE,
|
|
184 GCC_CP_ACCESS_PUBLIC = GCC_CP_ACCESS_PRIVATE << 1,
|
|
185 GCC_CP_ACCESS_MASK = (GCC_CP_ACCESS_PUBLIC
|
|
186 | GCC_CP_ACCESS_PRIVATE),
|
|
187 GCC_CP_ACCESS_PROTECTED = GCC_CP_ACCESS_MASK,
|
|
188 GCC_CP_ACCESS_NONE = 0,
|
|
189
|
|
190 GCC_CP_FLAG_BASE = GCC_CP_ACCESS_PRIVATE << 2,
|
|
191
|
|
192 /* Flags to be used along with GCC_CP_SYMBOL_FUNCTION: */
|
|
193
|
|
194 /* This flag should be set for constructors, destructors and
|
|
195 operators. */
|
|
196 GCC_CP_FLAG_SPECIAL_FUNCTION = GCC_CP_FLAG_BASE,
|
|
197
|
|
198 /* We intentionally cannot express inline, constexpr, or virtual
|
|
199 override for functions. We can't inline or constexpr-replace
|
|
200 without a source-level body. The override keyword is only
|
|
201 meaningful within the definition of the containing class. */
|
|
202
|
|
203 /* This indicates a "virtual" member function, explicitly or
|
|
204 implicitly (due to a virtual function with the same name and
|
|
205 prototype in a base class) declared as such. */
|
|
206 GCC_CP_FLAG_VIRTUAL_FUNCTION = GCC_CP_FLAG_BASE << 1,
|
|
207
|
|
208 /* The following two flags should only be set when the flag above is
|
|
209 set. */
|
|
210
|
|
211 /* This indicates a pure virtual member function, i.e., one that is
|
|
212 declared with "= 0", even if a body is provided in the
|
|
213 definition. */
|
|
214 GCC_CP_FLAG_PURE_VIRTUAL_FUNCTION = GCC_CP_FLAG_BASE << 2,
|
|
215
|
|
216 /* This indicates a "final" virtual member function. */
|
|
217 GCC_CP_FLAG_FINAL_VIRTUAL_FUNCTION = GCC_CP_FLAG_BASE << 3,
|
|
218
|
|
219 /* This indicates a special member function should have its default
|
|
220 implementation. This either means the function declaration
|
|
221 contains the "= default" tokens, or that the member function was
|
|
222 implicitly generated by the compiler, although the latter use is
|
|
223 discouraged: just let the compiler implicitly introduce it.
|
|
224
|
|
225 A member function defaulted after its first declaration has
|
|
226 slightly different ABI implications from one implicitly generated
|
|
227 or explicitly defaulted at the declaration (and definition)
|
|
228 point. To avoid silent (possibly harmless) violation of the one
|
|
229 definition rule, it is recommended that this flag not be used for
|
|
230 such functions, and that the address of the definition be
|
|
231 supplied instead. */
|
|
232 GCC_CP_FLAG_DEFAULTED_FUNCTION = GCC_CP_FLAG_BASE << 4,
|
|
233
|
|
234 /* This indicates a deleted member function, i.e., one that has been
|
|
235 defined as "= delete" at its declaration point, or one that has
|
|
236 been implicitly defined as deleted (with or without an explicit
|
|
237 "= default" definition).
|
|
238
|
|
239 This should not be used for implicitly-declared member functions
|
|
240 that resolve to deleted definitions, as it may affect the
|
|
241 implicit declaration of other member functions. */
|
|
242 GCC_CP_FLAG_DELETED_FUNCTION = GCC_CP_FLAG_BASE << 5,
|
|
243
|
|
244 /* This indicates a constructor or type-conversion operator declared
|
|
245 as "explicit". */
|
|
246
|
|
247 GCC_CP_FLAG_EXPLICIT_FUNCTION = GCC_CP_FLAG_BASE << 6,
|
|
248
|
|
249 GCC_CP_FLAG_END_FUNCTION,
|
|
250 GCC_CP_FLAG_MASK_FUNCTION = (((GCC_CP_FLAG_END_FUNCTION - 1) << 1)
|
|
251 - GCC_CP_FLAG_BASE),
|
|
252
|
|
253 /* Flags to be used along with GCC_CP_SYMBOL_VARIABLE: */
|
|
254
|
|
255 /* This indicates a variable declared as "constexpr". */
|
|
256
|
|
257 GCC_CP_FLAG_CONSTEXPR_VARIABLE = GCC_CP_FLAG_BASE,
|
|
258
|
|
259 /* This indicates a variable declared as "thread_local". ??? What
|
|
260 should the ADDRESS be? */
|
|
261
|
|
262 GCC_CP_FLAG_THREAD_LOCAL_VARIABLE = GCC_CP_FLAG_BASE << 1,
|
|
263
|
|
264 GCC_CP_FLAG_END_VARIABLE,
|
|
265 GCC_CP_FLAG_MASK_VARIABLE = (((GCC_CP_FLAG_END_VARIABLE - 1) << 1)
|
|
266 - GCC_CP_FLAG_BASE),
|
|
267
|
|
268 /* Flags to be used when defining nonstatic data members of classes
|
|
269 with new_field. */
|
|
270
|
|
271 /* Use this when no flags are present. */
|
|
272 GCC_CP_FLAG_FIELD_NOFLAG = 0,
|
|
273
|
|
274 /* This indicates the field is declared as mutable. */
|
|
275 GCC_CP_FLAG_FIELD_MUTABLE = GCC_CP_FLAG_BASE,
|
|
276
|
|
277 GCC_CP_FLAG_END_FIELD,
|
|
278 GCC_CP_FLAG_MASK_FIELD = (((GCC_CP_FLAG_END_FIELD - 1) << 1)
|
|
279 - GCC_CP_FLAG_BASE),
|
|
280
|
|
281 /* Flags to be used when defining an enum with
|
|
282 start_new_enum_type. */
|
|
283
|
|
284 /* This indicates an enum type without any flags. */
|
|
285 GCC_CP_FLAG_ENUM_NOFLAG = 0,
|
|
286
|
|
287 /* This indicates a scoped enum type. */
|
|
288 GCC_CP_FLAG_ENUM_SCOPED = GCC_CP_FLAG_BASE,
|
|
289
|
|
290 GCC_CP_FLAG_END_ENUM,
|
|
291 GCC_CP_FLAG_MASK_ENUM = (((GCC_CP_FLAG_END_ENUM - 1) << 1)
|
|
292 - GCC_CP_FLAG_BASE),
|
|
293
|
|
294
|
|
295 /* Flags to be used when introducing a class or a class template
|
|
296 with build_decl. */
|
|
297
|
|
298 /* This indicates an enum type without any flags. */
|
|
299 GCC_CP_FLAG_CLASS_NOFLAG = 0,
|
|
300
|
|
301 /* This indicates the class is actually a struct. This has no
|
|
302 effect whatsoever on access control in this interface, since all
|
|
303 class members must have explicit access control bits set, but it
|
|
304 may affect error messages. */
|
|
305 GCC_CP_FLAG_CLASS_IS_STRUCT = GCC_CP_FLAG_BASE,
|
|
306
|
|
307 GCC_CP_FLAG_END_CLASS,
|
|
308 GCC_CP_FLAG_MASK_CLASS = (((GCC_CP_FLAG_END_CLASS - 1) << 1)
|
|
309 - GCC_CP_FLAG_BASE),
|
|
310
|
|
311
|
|
312 /* Flags to be used when introducing a virtual base class in a
|
|
313 gcc_vbase_array. */
|
|
314
|
|
315 /* This indicates an enum type without any flags. */
|
|
316 GCC_CP_FLAG_BASECLASS_NOFLAG = 0,
|
|
317
|
|
318 /* This indicates the class is actually a struct. This has no
|
|
319 effect whatsoever on access control in this interface, since all
|
|
320 class members must have explicit access control bits set, but it
|
|
321 may affect error messages. */
|
|
322 GCC_CP_FLAG_BASECLASS_VIRTUAL = GCC_CP_FLAG_BASE,
|
|
323
|
|
324 GCC_CP_FLAG_END_BASECLASS,
|
|
325 GCC_CP_FLAG_MASK_BASECLASS = (((GCC_CP_FLAG_END_BASECLASS - 1) << 1)
|
|
326 - GCC_CP_FLAG_BASE),
|
|
327
|
|
328
|
|
329 GCC_CP_FLAG_MASK = (GCC_CP_FLAG_MASK_FUNCTION
|
|
330 | GCC_CP_FLAG_MASK_VARIABLE
|
|
331 | GCC_CP_FLAG_MASK_FIELD
|
|
332 | GCC_CP_FLAG_MASK_ENUM
|
|
333 | GCC_CP_FLAG_MASK_CLASS
|
|
334 | GCC_CP_FLAG_MASK_BASECLASS
|
|
335 )
|
|
336 };
|
|
337
|
|
338
|
|
339 /* An array of types used for creating lists of base classes. */
|
|
340
|
|
341 struct gcc_vbase_array
|
|
342 {
|
|
343 /* Number of elements. */
|
|
344
|
|
345 int n_elements;
|
|
346
|
|
347 /* The base classes. */
|
|
348
|
|
349 gcc_type *elements;
|
|
350
|
|
351 /* Flags for each base class. Used to indicate access control and
|
|
352 virtualness. */
|
|
353
|
|
354 enum gcc_cp_symbol_kind *flags;
|
|
355 };
|
|
356
|
|
357
|
|
358 /* This enumerates the types of symbols that GCC might request from
|
|
359 GDB. */
|
|
360
|
|
361 enum gcc_cp_oracle_request
|
|
362 {
|
|
363 /* An identifier in namespace scope -- type, variable, function,
|
|
364 namespace, template. All namespace-scoped symbols with the
|
|
365 requested name, in any namespace (including the global
|
|
366 namespace), should be defined in response to this request. */
|
|
367
|
|
368 GCC_CP_ORACLE_IDENTIFIER
|
|
369 };
|
|
370
|
|
371 /* The type of the function called by GCC to ask GDB for a symbol's
|
|
372 definition. DATUM is an arbitrary value supplied when the oracle
|
|
373 function is registered. CONTEXT is the GCC context in which the
|
|
374 request is being made. REQUEST specifies what sort of symbol is
|
|
375 being requested, and IDENTIFIER is the name of the symbol. */
|
|
376
|
|
377 typedef void gcc_cp_oracle_function (void *datum,
|
|
378 struct gcc_cp_context *context,
|
|
379 enum gcc_cp_oracle_request request,
|
|
380 const char *identifier);
|
|
381
|
|
382 /* The type of the function called by GCC to ask GDB for a symbol's
|
|
383 address. This should return 0 if the address is not known. */
|
|
384
|
|
385 typedef gcc_address gcc_cp_symbol_address_function (void *datum,
|
|
386 struct gcc_cp_context *ctxt,
|
|
387 const char *identifier);
|
|
388
|
|
389 /* The type of the function called by GCC to ask GDB to enter or leave
|
|
390 the user expression scope. */
|
|
391
|
|
392 typedef void gcc_cp_enter_leave_user_expr_scope_function (void *datum,
|
|
393 struct gcc_cp_context
|
|
394 *context);
|
|
395
|
|
396 /* The vtable used by the C front end. */
|
|
397
|
|
398 struct gcc_cp_fe_vtable
|
|
399 {
|
|
400 /* The version of the C interface. The value is one of the
|
|
401 gcc_cp_api_version constants. */
|
|
402
|
|
403 unsigned int cp_version;
|
|
404
|
|
405 /* Set the callbacks for this context.
|
|
406
|
|
407 The binding oracle is called whenever the C++ parser needs to
|
|
408 look up a symbol. This gives the caller a chance to lazily
|
|
409 instantiate symbols using other parts of the gcc_cp_fe_interface
|
|
410 API. The symbol is looked up without a scope, and the oracle
|
|
411 must supply a definition for ALL namespace-scoped definitions
|
|
412 bound to the symbol.
|
|
413
|
|
414 The address oracle is called whenever the C++ parser needs to
|
|
415 look up a symbol. This may be called for symbols not provided by
|
|
416 the symbol oracle, such as built-in functions where GCC provides
|
|
417 the declaration; other internal symbols, such as those related
|
|
418 with thunks, rtti, and virtual tables are likely to be queried
|
|
419 through this interface too. The identifier is a mangled symbol
|
|
420 name.
|
|
421
|
|
422 DATUM is an arbitrary piece of data that is passed back verbatim
|
|
423 to the callbacks in requests. */
|
|
424
|
|
425 void (*set_callbacks) (struct gcc_cp_context *self,
|
|
426 gcc_cp_oracle_function *binding_oracle,
|
|
427 gcc_cp_symbol_address_function *address_oracle,
|
|
428 gcc_cp_enter_leave_user_expr_scope_function *enter_scope,
|
|
429 gcc_cp_enter_leave_user_expr_scope_function *leave_scope,
|
|
430 void *datum);
|
|
431
|
|
432 #define GCC_METHOD0(R, N) \
|
|
433 R (*N) (struct gcc_cp_context *);
|
|
434 #define GCC_METHOD1(R, N, A) \
|
|
435 R (*N) (struct gcc_cp_context *, A);
|
|
436 #define GCC_METHOD2(R, N, A, B) \
|
|
437 R (*N) (struct gcc_cp_context *, A, B);
|
|
438 #define GCC_METHOD3(R, N, A, B, C) \
|
|
439 R (*N) (struct gcc_cp_context *, A, B, C);
|
|
440 #define GCC_METHOD4(R, N, A, B, C, D) \
|
|
441 R (*N) (struct gcc_cp_context *, A, B, C, D);
|
|
442 #define GCC_METHOD5(R, N, A, B, C, D, E) \
|
|
443 R (*N) (struct gcc_cp_context *, A, B, C, D, E);
|
|
444 #define GCC_METHOD7(R, N, A, B, C, D, E, F, G) \
|
|
445 R (*N) (struct gcc_cp_context *, A, B, C, D, E, F, G);
|
|
446
|
|
447 #include "gcc-cp-fe.def"
|
|
448
|
|
449 #undef GCC_METHOD0
|
|
450 #undef GCC_METHOD1
|
|
451 #undef GCC_METHOD2
|
|
452 #undef GCC_METHOD3
|
|
453 #undef GCC_METHOD4
|
|
454 #undef GCC_METHOD5
|
|
455 #undef GCC_METHOD7
|
|
456
|
|
457 };
|
|
458
|
|
459 /* The C front end object. */
|
|
460
|
|
461 struct gcc_cp_context
|
|
462 {
|
|
463 /* Base class. */
|
|
464
|
|
465 struct gcc_base_context base;
|
|
466
|
|
467 /* Our vtable. This is a separate field because this is simpler
|
|
468 than implementing a vtable inheritance scheme in C. */
|
|
469
|
|
470 const struct gcc_cp_fe_vtable *cp_ops;
|
|
471 };
|
|
472
|
|
473 /* The name of the .so that the compiler builds. We dlopen this
|
|
474 later. */
|
|
475
|
|
476 #define GCC_CP_FE_LIBCC libcc1.so
|
|
477
|
|
478 /* The compiler exports a single initialization function. This macro
|
|
479 holds its name as a symbol. */
|
|
480
|
|
481 #define GCC_CP_FE_CONTEXT gcc_cp_fe_context
|
|
482
|
|
483 /* The type of the initialization function. The caller passes in the
|
|
484 desired base version and desired C-specific version. If the
|
|
485 request can be satisfied, a compatible gcc_context object will be
|
|
486 returned. Otherwise, the function returns NULL. */
|
|
487
|
|
488 typedef struct gcc_cp_context *gcc_cp_fe_context_function
|
|
489 (enum gcc_base_api_version,
|
|
490 enum gcc_cp_api_version);
|
|
491
|
|
492 #ifdef __cplusplus
|
|
493 }
|
|
494 #endif
|
|
495
|
|
496 #endif /* GCC_CP_INTERFACE_H */
|