1 /* Interface between GCC C++ FE and GDB 2 3 Copyright (C) 2014-2020 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 */ 497