]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/gnu-v3-abi.c
* value.h (value_subscript, value_subscripted_rvalue,
[thirdparty/binutils-gdb.git] / gdb / gnu-v3-abi.c
1 /* Abstraction of GNU v3 abi.
2 Contributed by Jim Blandy <jimb@redhat.com>
3
4 Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "value.h"
24 #include "cp-abi.h"
25 #include "cp-support.h"
26 #include "demangle.h"
27 #include "objfiles.h"
28 #include "valprint.h"
29
30 #include "gdb_assert.h"
31 #include "gdb_string.h"
32
33 static struct cp_abi_ops gnu_v3_abi_ops;
34
35 static int
36 gnuv3_is_vtable_name (const char *name)
37 {
38 return strncmp (name, "_ZTV", 4) == 0;
39 }
40
41 static int
42 gnuv3_is_operator_name (const char *name)
43 {
44 return strncmp (name, "operator", 8) == 0;
45 }
46
47
48 /* Determine architecture of class DOMAIN. This architecture is used
49 to query C++ ABI details (types, method pointer layout, etc.).
50
51 Note that we assume DOMAIN must have been allocated with an OBJFILE;
52 GDB does not provide any built-in class types. Thus we use the
53 architecture of that OBJFILE to define the C++ ABI. */
54
55 static struct gdbarch *
56 get_class_arch (struct type *domain)
57 {
58 gdb_assert (TYPE_CODE (domain) == TYPE_CODE_CLASS);
59 gdb_assert (TYPE_OBJFILE (domain) != NULL);
60 return get_objfile_arch (TYPE_OBJFILE (domain));
61 }
62
63 /* To help us find the components of a vtable, we build ourselves a
64 GDB type object representing the vtable structure. Following the
65 V3 ABI, it goes something like this:
66
67 struct gdb_gnu_v3_abi_vtable {
68
69 / * An array of virtual call and virtual base offsets. The real
70 length of this array depends on the class hierarchy; we use
71 negative subscripts to access the elements. Yucky, but
72 better than the alternatives. * /
73 ptrdiff_t vcall_and_vbase_offsets[0];
74
75 / * The offset from a virtual pointer referring to this table
76 to the top of the complete object. * /
77 ptrdiff_t offset_to_top;
78
79 / * The type_info pointer for this class. This is really a
80 std::type_info *, but GDB doesn't really look at the
81 type_info object itself, so we don't bother to get the type
82 exactly right. * /
83 void *type_info;
84
85 / * Virtual table pointers in objects point here. * /
86
87 / * Virtual function pointers. Like the vcall/vbase array, the
88 real length of this table depends on the class hierarchy. * /
89 void (*virtual_functions[0]) ();
90
91 };
92
93 The catch, of course, is that the exact layout of this table
94 depends on the ABI --- word size, endianness, alignment, etc. So
95 the GDB type object is actually a per-architecture kind of thing.
96
97 vtable_type_gdbarch_data is a gdbarch per-architecture data pointer
98 which refers to the struct type * for this structure, laid out
99 appropriately for the architecture. */
100 static struct gdbarch_data *vtable_type_gdbarch_data;
101
102
103 /* Human-readable names for the numbers of the fields above. */
104 enum {
105 vtable_field_vcall_and_vbase_offsets,
106 vtable_field_offset_to_top,
107 vtable_field_type_info,
108 vtable_field_virtual_functions
109 };
110
111
112 /* Return a GDB type representing `struct gdb_gnu_v3_abi_vtable',
113 described above, laid out appropriately for ARCH.
114
115 We use this function as the gdbarch per-architecture data
116 initialization function. */
117 static void *
118 build_gdb_vtable_type (struct gdbarch *arch)
119 {
120 struct type *t;
121 struct field *field_list, *field;
122 int offset;
123
124 struct type *void_ptr_type
125 = builtin_type (arch)->builtin_data_ptr;
126 struct type *ptr_to_void_fn_type
127 = builtin_type (arch)->builtin_func_ptr;
128
129 /* ARCH can't give us the true ptrdiff_t type, so we guess. */
130 struct type *ptrdiff_type
131 = init_type (TYPE_CODE_INT,
132 gdbarch_ptr_bit (arch) / TARGET_CHAR_BIT, 0,
133 "ptrdiff_t", 0);
134
135 /* We assume no padding is necessary, since GDB doesn't know
136 anything about alignment at the moment. If this assumption bites
137 us, we should add a gdbarch method which, given a type, returns
138 the alignment that type requires, and then use that here. */
139
140 /* Build the field list. */
141 field_list = xmalloc (sizeof (struct field [4]));
142 memset (field_list, 0, sizeof (struct field [4]));
143 field = &field_list[0];
144 offset = 0;
145
146 /* ptrdiff_t vcall_and_vbase_offsets[0]; */
147 FIELD_NAME (*field) = "vcall_and_vbase_offsets";
148 FIELD_TYPE (*field)
149 = create_array_type (0, ptrdiff_type,
150 create_range_type (0, builtin_type_int32, 0, -1));
151 FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
152 offset += TYPE_LENGTH (FIELD_TYPE (*field));
153 field++;
154
155 /* ptrdiff_t offset_to_top; */
156 FIELD_NAME (*field) = "offset_to_top";
157 FIELD_TYPE (*field) = ptrdiff_type;
158 FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
159 offset += TYPE_LENGTH (FIELD_TYPE (*field));
160 field++;
161
162 /* void *type_info; */
163 FIELD_NAME (*field) = "type_info";
164 FIELD_TYPE (*field) = void_ptr_type;
165 FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
166 offset += TYPE_LENGTH (FIELD_TYPE (*field));
167 field++;
168
169 /* void (*virtual_functions[0]) (); */
170 FIELD_NAME (*field) = "virtual_functions";
171 FIELD_TYPE (*field)
172 = create_array_type (0, ptr_to_void_fn_type,
173 create_range_type (0, builtin_type_int32, 0, -1));
174 FIELD_BITPOS (*field) = offset * TARGET_CHAR_BIT;
175 offset += TYPE_LENGTH (FIELD_TYPE (*field));
176 field++;
177
178 /* We assumed in the allocation above that there were four fields. */
179 gdb_assert (field == (field_list + 4));
180
181 t = init_type (TYPE_CODE_STRUCT, offset, 0, 0, 0);
182 TYPE_NFIELDS (t) = field - field_list;
183 TYPE_FIELDS (t) = field_list;
184 TYPE_TAG_NAME (t) = "gdb_gnu_v3_abi_vtable";
185
186 return t;
187 }
188
189
190 /* Return the ptrdiff_t type used in the vtable type. */
191 static struct type *
192 vtable_ptrdiff_type (struct gdbarch *gdbarch)
193 {
194 struct type *vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
195
196 /* The "offset_to_top" field has the appropriate (ptrdiff_t) type. */
197 return TYPE_FIELD_TYPE (vtable_type, vtable_field_offset_to_top);
198 }
199
200 /* Return the offset from the start of the imaginary `struct
201 gdb_gnu_v3_abi_vtable' object to the vtable's "address point"
202 (i.e., where objects' virtual table pointers point). */
203 static int
204 vtable_address_point_offset (struct gdbarch *gdbarch)
205 {
206 struct type *vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
207
208 return (TYPE_FIELD_BITPOS (vtable_type, vtable_field_virtual_functions)
209 / TARGET_CHAR_BIT);
210 }
211
212
213 static struct type *
214 gnuv3_rtti_type (struct value *value,
215 int *full_p, int *top_p, int *using_enc_p)
216 {
217 struct gdbarch *gdbarch;
218 struct type *vtable_type;
219 struct type *values_type = check_typedef (value_type (value));
220 CORE_ADDR vtable_address;
221 struct value *vtable;
222 struct minimal_symbol *vtable_symbol;
223 const char *vtable_symbol_name;
224 const char *class_name;
225 struct type *run_time_type;
226 struct type *base_type;
227 LONGEST offset_to_top;
228 struct type *values_type_vptr_basetype;
229 int values_type_vptr_fieldno;
230
231 /* We only have RTTI for class objects. */
232 if (TYPE_CODE (values_type) != TYPE_CODE_CLASS)
233 return NULL;
234
235 /* This routine may be called for Java types that do not have
236 a proper objfile. Just return NULL for those. */
237 if (!TYPE_OBJFILE (values_type)
238 || !TYPE_OBJFILE (values_type)->obfd)
239 return NULL;
240
241 /* Determine architecture. */
242 gdbarch = get_class_arch (values_type);
243 vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
244
245 /* If we can't find the virtual table pointer for values_type, we
246 can't find the RTTI. */
247 values_type_vptr_fieldno = get_vptr_fieldno (values_type,
248 &values_type_vptr_basetype);
249 if (values_type_vptr_fieldno == -1)
250 return NULL;
251
252 if (using_enc_p)
253 *using_enc_p = 0;
254
255 /* Fetch VALUE's virtual table pointer, and tweak it to point at
256 an instance of our imaginary gdb_gnu_v3_abi_vtable structure. */
257 base_type = check_typedef (values_type_vptr_basetype);
258 if (values_type != base_type)
259 {
260 value = value_cast (base_type, value);
261 if (using_enc_p)
262 *using_enc_p = 1;
263 }
264 vtable_address
265 = value_as_address (value_field (value, values_type_vptr_fieldno));
266 vtable
267 = value_at_lazy (vtable_type,
268 vtable_address - vtable_address_point_offset (gdbarch));
269
270 /* Find the linker symbol for this vtable. */
271 vtable_symbol
272 = lookup_minimal_symbol_by_pc (value_address (vtable)
273 + value_embedded_offset (vtable));
274 if (! vtable_symbol)
275 return NULL;
276
277 /* The symbol's demangled name should be something like "vtable for
278 CLASS", where CLASS is the name of the run-time type of VALUE.
279 If we didn't like this approach, we could instead look in the
280 type_info object itself to get the class name. But this way
281 should work just as well, and doesn't read target memory. */
282 vtable_symbol_name = SYMBOL_DEMANGLED_NAME (vtable_symbol);
283 if (vtable_symbol_name == NULL
284 || strncmp (vtable_symbol_name, "vtable for ", 11))
285 {
286 warning (_("can't find linker symbol for virtual table for `%s' value"),
287 TYPE_NAME (values_type));
288 if (vtable_symbol_name)
289 warning (_(" found `%s' instead"), vtable_symbol_name);
290 return NULL;
291 }
292 class_name = vtable_symbol_name + 11;
293
294 /* Try to look up the class name as a type name. */
295 /* FIXME: chastain/2003-11-26: block=NULL is bogus. See pr gdb/1465. */
296 run_time_type = cp_lookup_rtti_type (class_name, NULL);
297 if (run_time_type == NULL)
298 return NULL;
299
300 /* Get the offset from VALUE to the top of the complete object.
301 NOTE: this is the reverse of the meaning of *TOP_P. */
302 offset_to_top
303 = value_as_long (value_field (vtable, vtable_field_offset_to_top));
304
305 if (full_p)
306 *full_p = (- offset_to_top == value_embedded_offset (value)
307 && (TYPE_LENGTH (value_enclosing_type (value))
308 >= TYPE_LENGTH (run_time_type)));
309 if (top_p)
310 *top_p = - offset_to_top;
311
312 return run_time_type;
313 }
314
315 /* Find the vtable for CONTAINER and return a value of the correct
316 vtable type for this architecture. */
317
318 static struct value *
319 gnuv3_get_vtable (struct gdbarch *gdbarch, struct value *container)
320 {
321 struct type *vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
322 struct type *vtable_pointer_type;
323 struct value *vtable_pointer;
324 CORE_ADDR vtable_pointer_address, vtable_address;
325
326 /* We do not consult the debug information to find the virtual table.
327 The ABI specifies that it is always at offset zero in any class,
328 and debug information may not represent it. We won't issue an
329 error if there's a class with virtual functions but no virtual table
330 pointer, but something's already gone seriously wrong if that
331 happens.
332
333 We avoid using value_contents on principle, because the object might
334 be large. */
335
336 /* Find the type "pointer to virtual table". */
337 vtable_pointer_type = lookup_pointer_type (vtable_type);
338
339 /* Load it from the start of the class. */
340 vtable_pointer_address = value_as_address (value_addr (container));
341 vtable_pointer = value_at (vtable_pointer_type, vtable_pointer_address);
342 vtable_address = value_as_address (vtable_pointer);
343
344 /* Correct it to point at the start of the virtual table, rather
345 than the address point. */
346 return value_at_lazy (vtable_type,
347 vtable_address - vtable_address_point_offset (gdbarch));
348 }
349
350 /* Return a function pointer for CONTAINER's VTABLE_INDEX'th virtual
351 function, of type FNTYPE. */
352
353 static struct value *
354 gnuv3_get_virtual_fn (struct gdbarch *gdbarch, struct value *container,
355 struct type *fntype, int vtable_index)
356 {
357 struct value *vtable = gnuv3_get_vtable (gdbarch, container);
358 struct value *vfn;
359
360 /* Fetch the appropriate function pointer from the vtable. */
361 vfn = value_subscript (value_field (vtable, vtable_field_virtual_functions),
362 vtable_index);
363
364 /* If this architecture uses function descriptors directly in the vtable,
365 then the address of the vtable entry is actually a "function pointer"
366 (i.e. points to the descriptor). We don't need to scale the index
367 by the size of a function descriptor; GCC does that before outputing
368 debug information. */
369 if (gdbarch_vtable_function_descriptors (gdbarch))
370 vfn = value_addr (vfn);
371
372 /* Cast the function pointer to the appropriate type. */
373 vfn = value_cast (lookup_pointer_type (fntype), vfn);
374
375 return vfn;
376 }
377
378 /* GNU v3 implementation of value_virtual_fn_field. See cp-abi.h
379 for a description of the arguments. */
380
381 static struct value *
382 gnuv3_virtual_fn_field (struct value **value_p,
383 struct fn_field *f, int j,
384 struct type *vfn_base, int offset)
385 {
386 struct type *values_type = check_typedef (value_type (*value_p));
387 struct gdbarch *gdbarch;
388
389 /* Some simple sanity checks. */
390 if (TYPE_CODE (values_type) != TYPE_CODE_CLASS)
391 error (_("Only classes can have virtual functions."));
392
393 /* Determine architecture. */
394 gdbarch = get_class_arch (values_type);
395
396 /* Cast our value to the base class which defines this virtual
397 function. This takes care of any necessary `this'
398 adjustments. */
399 if (vfn_base != values_type)
400 *value_p = value_cast (vfn_base, *value_p);
401
402 return gnuv3_get_virtual_fn (gdbarch, *value_p, TYPE_FN_FIELD_TYPE (f, j),
403 TYPE_FN_FIELD_VOFFSET (f, j));
404 }
405
406 /* Compute the offset of the baseclass which is
407 the INDEXth baseclass of class TYPE,
408 for value at VALADDR (in host) at ADDRESS (in target).
409 The result is the offset of the baseclass value relative
410 to (the address of)(ARG) + OFFSET.
411
412 -1 is returned on error. */
413 static int
414 gnuv3_baseclass_offset (struct type *type, int index, const bfd_byte *valaddr,
415 CORE_ADDR address)
416 {
417 struct gdbarch *gdbarch;
418 struct type *vtable_type;
419 struct type *ptr_type;
420 struct value *vtable;
421 struct type *vbasetype;
422 struct value *vbase_array;
423 CORE_ADDR vtable_address;
424 long int cur_base_offset, base_offset;
425 int vbasetype_vptr_fieldno;
426
427 /* Determine architecture. */
428 gdbarch = get_class_arch (type);
429 vtable_type = gdbarch_data (gdbarch, vtable_type_gdbarch_data);
430 ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
431
432 /* If it isn't a virtual base, this is easy. The offset is in the
433 type definition. */
434 if (!BASETYPE_VIA_VIRTUAL (type, index))
435 return TYPE_BASECLASS_BITPOS (type, index) / 8;
436
437 /* To access a virtual base, we need to use the vbase offset stored in
438 our vtable. Recent GCC versions provide this information. If it isn't
439 available, we could get what we needed from RTTI, or from drawing the
440 complete inheritance graph based on the debug info. Neither is
441 worthwhile. */
442 cur_base_offset = TYPE_BASECLASS_BITPOS (type, index) / 8;
443 if (cur_base_offset >= - vtable_address_point_offset (gdbarch))
444 error (_("Expected a negative vbase offset (old compiler?)"));
445
446 cur_base_offset = cur_base_offset + vtable_address_point_offset (gdbarch);
447 if ((- cur_base_offset) % TYPE_LENGTH (ptr_type) != 0)
448 error (_("Misaligned vbase offset."));
449 cur_base_offset = cur_base_offset / ((int) TYPE_LENGTH (ptr_type));
450
451 /* We're now looking for the cur_base_offset'th entry (negative index)
452 in the vcall_and_vbase_offsets array. We used to cast the object to
453 its TYPE_VPTR_BASETYPE, and reference the vtable as TYPE_VPTR_FIELDNO;
454 however, that cast can not be done without calling baseclass_offset again
455 if the TYPE_VPTR_BASETYPE is a virtual base class, as described in the
456 v3 C++ ABI Section 2.4.I.2.b. Fortunately the ABI guarantees that the
457 vtable pointer will be located at the beginning of the object, so we can
458 bypass the casting. Verify that the TYPE_VPTR_FIELDNO is in fact at the
459 start of whichever baseclass it resides in, as a sanity measure - iff
460 we have debugging information for that baseclass. */
461
462 vbasetype = check_typedef (TYPE_VPTR_BASETYPE (type));
463 vbasetype_vptr_fieldno = get_vptr_fieldno (vbasetype, NULL);
464
465 if (vbasetype_vptr_fieldno >= 0
466 && TYPE_FIELD_BITPOS (vbasetype, vbasetype_vptr_fieldno) != 0)
467 error (_("Illegal vptr offset in class %s"),
468 TYPE_NAME (vbasetype) ? TYPE_NAME (vbasetype) : "<unknown>");
469
470 vtable_address = value_as_address (value_at_lazy (ptr_type, address));
471 vtable
472 = value_at_lazy (vtable_type,
473 vtable_address - vtable_address_point_offset (gdbarch));
474 vbase_array = value_field (vtable, vtable_field_vcall_and_vbase_offsets);
475 base_offset = value_as_long (value_subscript (vbase_array, cur_base_offset));
476 return base_offset;
477 }
478
479 /* Locate a virtual method in DOMAIN or its non-virtual base classes
480 which has virtual table index VOFFSET. The method has an associated
481 "this" adjustment of ADJUSTMENT bytes. */
482
483 static const char *
484 gnuv3_find_method_in (struct type *domain, CORE_ADDR voffset,
485 LONGEST adjustment)
486 {
487 int i;
488 const char *physname;
489
490 /* Search this class first. */
491 physname = NULL;
492 if (adjustment == 0)
493 {
494 int len;
495
496 len = TYPE_NFN_FIELDS (domain);
497 for (i = 0; i < len; i++)
498 {
499 int len2, j;
500 struct fn_field *f;
501
502 f = TYPE_FN_FIELDLIST1 (domain, i);
503 len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i);
504
505 check_stub_method_group (domain, i);
506 for (j = 0; j < len2; j++)
507 if (TYPE_FN_FIELD_VOFFSET (f, j) == voffset)
508 return TYPE_FN_FIELD_PHYSNAME (f, j);
509 }
510 }
511
512 /* Next search non-virtual bases. If it's in a virtual base,
513 we're out of luck. */
514 for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
515 {
516 int pos;
517 struct type *basetype;
518
519 if (BASETYPE_VIA_VIRTUAL (domain, i))
520 continue;
521
522 pos = TYPE_BASECLASS_BITPOS (domain, i) / 8;
523 basetype = TYPE_FIELD_TYPE (domain, i);
524 /* Recurse with a modified adjustment. We don't need to adjust
525 voffset. */
526 if (adjustment >= pos && adjustment < pos + TYPE_LENGTH (basetype))
527 return gnuv3_find_method_in (basetype, voffset, adjustment - pos);
528 }
529
530 return NULL;
531 }
532
533 /* Decode GNU v3 method pointer. */
534
535 static int
536 gnuv3_decode_method_ptr (struct gdbarch *gdbarch,
537 const gdb_byte *contents,
538 CORE_ADDR *value_p,
539 LONGEST *adjustment_p)
540 {
541 struct type *funcptr_type = builtin_type (gdbarch)->builtin_func_ptr;
542 struct type *offset_type = vtable_ptrdiff_type (gdbarch);
543 CORE_ADDR ptr_value;
544 LONGEST voffset, adjustment;
545 int vbit;
546
547 /* Extract the pointer to member. The first element is either a pointer
548 or a vtable offset. For pointers, we need to use extract_typed_address
549 to allow the back-end to convert the pointer to a GDB address -- but
550 vtable offsets we must handle as integers. At this point, we do not
551 yet know which case we have, so we extract the value under both
552 interpretations and choose the right one later on. */
553 ptr_value = extract_typed_address (contents, funcptr_type);
554 voffset = extract_signed_integer (contents, TYPE_LENGTH (funcptr_type));
555 contents += TYPE_LENGTH (funcptr_type);
556 adjustment = extract_signed_integer (contents, TYPE_LENGTH (offset_type));
557
558 if (!gdbarch_vbit_in_delta (gdbarch))
559 {
560 vbit = voffset & 1;
561 voffset = voffset ^ vbit;
562 }
563 else
564 {
565 vbit = adjustment & 1;
566 adjustment = adjustment >> 1;
567 }
568
569 *value_p = vbit? voffset : ptr_value;
570 *adjustment_p = adjustment;
571 return vbit;
572 }
573
574 /* GNU v3 implementation of cplus_print_method_ptr. */
575
576 static void
577 gnuv3_print_method_ptr (const gdb_byte *contents,
578 struct type *type,
579 struct ui_file *stream)
580 {
581 struct type *domain = TYPE_DOMAIN_TYPE (type);
582 struct gdbarch *gdbarch = get_class_arch (domain);
583 CORE_ADDR ptr_value;
584 LONGEST adjustment;
585 int vbit;
586
587 /* Extract the pointer to member. */
588 vbit = gnuv3_decode_method_ptr (gdbarch, contents, &ptr_value, &adjustment);
589
590 /* Check for NULL. */
591 if (ptr_value == 0 && vbit == 0)
592 {
593 fprintf_filtered (stream, "NULL");
594 return;
595 }
596
597 /* Search for a virtual method. */
598 if (vbit)
599 {
600 CORE_ADDR voffset;
601 const char *physname;
602
603 /* It's a virtual table offset, maybe in this class. Search
604 for a field with the correct vtable offset. First convert it
605 to an index, as used in TYPE_FN_FIELD_VOFFSET. */
606 voffset = ptr_value / TYPE_LENGTH (vtable_ptrdiff_type (gdbarch));
607
608 physname = gnuv3_find_method_in (domain, voffset, adjustment);
609
610 /* If we found a method, print that. We don't bother to disambiguate
611 possible paths to the method based on the adjustment. */
612 if (physname)
613 {
614 char *demangled_name = cplus_demangle (physname,
615 DMGL_ANSI | DMGL_PARAMS);
616 if (demangled_name != NULL)
617 {
618 fprintf_filtered (stream, "&virtual ");
619 fputs_filtered (demangled_name, stream);
620 xfree (demangled_name);
621 return;
622 }
623 }
624 }
625
626 /* We didn't find it; print the raw data. */
627 if (vbit)
628 {
629 fprintf_filtered (stream, "&virtual table offset ");
630 print_longest (stream, 'd', 1, ptr_value);
631 }
632 else
633 print_address_demangle (ptr_value, stream, demangle);
634
635 if (adjustment)
636 {
637 fprintf_filtered (stream, ", this adjustment ");
638 print_longest (stream, 'd', 1, adjustment);
639 }
640 }
641
642 /* GNU v3 implementation of cplus_method_ptr_size. */
643
644 static int
645 gnuv3_method_ptr_size (struct type *type)
646 {
647 struct type *domain_type = check_typedef (TYPE_DOMAIN_TYPE (type));
648 struct gdbarch *gdbarch = get_class_arch (domain_type);
649 return 2 * TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr);
650 }
651
652 /* GNU v3 implementation of cplus_make_method_ptr. */
653
654 static void
655 gnuv3_make_method_ptr (struct type *type, gdb_byte *contents,
656 CORE_ADDR value, int is_virtual)
657 {
658 struct type *domain_type = check_typedef (TYPE_DOMAIN_TYPE (type));
659 struct gdbarch *gdbarch = get_class_arch (domain_type);
660 int size = TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr);
661
662 /* FIXME drow/2006-12-24: The adjustment of "this" is currently
663 always zero, since the method pointer is of the correct type.
664 But if the method pointer came from a base class, this is
665 incorrect - it should be the offset to the base. The best
666 fix might be to create the pointer to member pointing at the
667 base class and cast it to the derived class, but that requires
668 support for adjusting pointers to members when casting them -
669 not currently supported by GDB. */
670
671 if (!gdbarch_vbit_in_delta (gdbarch))
672 {
673 store_unsigned_integer (contents, size, value | is_virtual);
674 store_unsigned_integer (contents + size, size, 0);
675 }
676 else
677 {
678 store_unsigned_integer (contents, size, value);
679 store_unsigned_integer (contents + size, size, is_virtual);
680 }
681 }
682
683 /* GNU v3 implementation of cplus_method_ptr_to_value. */
684
685 static struct value *
686 gnuv3_method_ptr_to_value (struct value **this_p, struct value *method_ptr)
687 {
688 struct gdbarch *gdbarch;
689 const gdb_byte *contents = value_contents (method_ptr);
690 CORE_ADDR ptr_value;
691 struct type *domain_type, *final_type, *method_type;
692 LONGEST adjustment;
693 int vbit;
694
695 domain_type = TYPE_DOMAIN_TYPE (check_typedef (value_type (method_ptr)));
696 final_type = lookup_pointer_type (domain_type);
697
698 method_type = TYPE_TARGET_TYPE (check_typedef (value_type (method_ptr)));
699
700 /* Extract the pointer to member. */
701 gdbarch = get_class_arch (domain_type);
702 vbit = gnuv3_decode_method_ptr (gdbarch, contents, &ptr_value, &adjustment);
703
704 /* First convert THIS to match the containing type of the pointer to
705 member. This cast may adjust the value of THIS. */
706 *this_p = value_cast (final_type, *this_p);
707
708 /* Then apply whatever adjustment is necessary. This creates a somewhat
709 strange pointer: it claims to have type FINAL_TYPE, but in fact it
710 might not be a valid FINAL_TYPE. For instance, it might be a
711 base class of FINAL_TYPE. And if it's not the primary base class,
712 then printing it out as a FINAL_TYPE object would produce some pretty
713 garbage.
714
715 But we don't really know the type of the first argument in
716 METHOD_TYPE either, which is why this happens. We can't
717 dereference this later as a FINAL_TYPE, but once we arrive in the
718 called method we'll have debugging information for the type of
719 "this" - and that'll match the value we produce here.
720
721 You can provoke this case by casting a Base::* to a Derived::*, for
722 instance. */
723 *this_p = value_cast (builtin_type (gdbarch)->builtin_data_ptr, *this_p);
724 *this_p = value_ptradd (*this_p, adjustment);
725 *this_p = value_cast (final_type, *this_p);
726
727 if (vbit)
728 {
729 LONGEST voffset;
730 voffset = ptr_value / TYPE_LENGTH (vtable_ptrdiff_type (gdbarch));
731 return gnuv3_get_virtual_fn (gdbarch, value_ind (*this_p),
732 method_type, voffset);
733 }
734 else
735 return value_from_pointer (lookup_pointer_type (method_type), ptr_value);
736 }
737
738 /* Determine if we are currently in a C++ thunk. If so, get the address
739 of the routine we are thunking to and continue to there instead. */
740
741 static CORE_ADDR
742 gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
743 {
744 CORE_ADDR real_stop_pc, method_stop_pc;
745 struct gdbarch *gdbarch = get_frame_arch (frame);
746 struct minimal_symbol *thunk_sym, *fn_sym;
747 struct obj_section *section;
748 char *thunk_name, *fn_name;
749
750 real_stop_pc = gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc);
751 if (real_stop_pc == 0)
752 real_stop_pc = stop_pc;
753
754 /* Find the linker symbol for this potential thunk. */
755 thunk_sym = lookup_minimal_symbol_by_pc (real_stop_pc);
756 section = find_pc_section (real_stop_pc);
757 if (thunk_sym == NULL || section == NULL)
758 return 0;
759
760 /* The symbol's demangled name should be something like "virtual
761 thunk to FUNCTION", where FUNCTION is the name of the function
762 being thunked to. */
763 thunk_name = SYMBOL_DEMANGLED_NAME (thunk_sym);
764 if (thunk_name == NULL || strstr (thunk_name, " thunk to ") == NULL)
765 return 0;
766
767 fn_name = strstr (thunk_name, " thunk to ") + strlen (" thunk to ");
768 fn_sym = lookup_minimal_symbol (fn_name, NULL, section->objfile);
769 if (fn_sym == NULL)
770 return 0;
771
772 method_stop_pc = SYMBOL_VALUE_ADDRESS (fn_sym);
773 real_stop_pc = gdbarch_skip_trampoline_code
774 (gdbarch, frame, method_stop_pc);
775 if (real_stop_pc == 0)
776 real_stop_pc = method_stop_pc;
777
778 return real_stop_pc;
779 }
780
781 /* Return nonzero if a type should be passed by reference.
782
783 The rule in the v3 ABI document comes from section 3.1.1. If the
784 type has a non-trivial copy constructor or destructor, then the
785 caller must make a copy (by calling the copy constructor if there
786 is one or perform the copy itself otherwise), pass the address of
787 the copy, and then destroy the temporary (if necessary).
788
789 For return values with non-trivial copy constructors or
790 destructors, space will be allocated in the caller, and a pointer
791 will be passed as the first argument (preceding "this").
792
793 We don't have a bulletproof mechanism for determining whether a
794 constructor or destructor is trivial. For GCC and DWARF2 debug
795 information, we can check the artificial flag.
796
797 We don't do anything with the constructors or destructors,
798 but we have to get the argument passing right anyway. */
799 static int
800 gnuv3_pass_by_reference (struct type *type)
801 {
802 int fieldnum, fieldelem;
803
804 CHECK_TYPEDEF (type);
805
806 /* We're only interested in things that can have methods. */
807 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
808 && TYPE_CODE (type) != TYPE_CODE_CLASS
809 && TYPE_CODE (type) != TYPE_CODE_UNION)
810 return 0;
811
812 for (fieldnum = 0; fieldnum < TYPE_NFN_FIELDS (type); fieldnum++)
813 for (fieldelem = 0; fieldelem < TYPE_FN_FIELDLIST_LENGTH (type, fieldnum);
814 fieldelem++)
815 {
816 struct fn_field *fn = TYPE_FN_FIELDLIST1 (type, fieldnum);
817 char *name = TYPE_FN_FIELDLIST_NAME (type, fieldnum);
818 struct type *fieldtype = TYPE_FN_FIELD_TYPE (fn, fieldelem);
819
820 /* If this function is marked as artificial, it is compiler-generated,
821 and we assume it is trivial. */
822 if (TYPE_FN_FIELD_ARTIFICIAL (fn, fieldelem))
823 continue;
824
825 /* If we've found a destructor, we must pass this by reference. */
826 if (name[0] == '~')
827 return 1;
828
829 /* If the mangled name of this method doesn't indicate that it
830 is a constructor, we're not interested.
831
832 FIXME drow/2007-09-23: We could do this using the name of
833 the method and the name of the class instead of dealing
834 with the mangled name. We don't have a convenient function
835 to strip off both leading scope qualifiers and trailing
836 template arguments yet. */
837 if (!is_constructor_name (TYPE_FN_FIELD_PHYSNAME (fn, fieldelem)))
838 continue;
839
840 /* If this method takes two arguments, and the second argument is
841 a reference to this class, then it is a copy constructor. */
842 if (TYPE_NFIELDS (fieldtype) == 2
843 && TYPE_CODE (TYPE_FIELD_TYPE (fieldtype, 1)) == TYPE_CODE_REF
844 && check_typedef (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (fieldtype, 1))) == type)
845 return 1;
846 }
847
848 /* Even if all the constructors and destructors were artificial, one
849 of them may have invoked a non-artificial constructor or
850 destructor in a base class. If any base class needs to be passed
851 by reference, so does this class. Similarly for members, which
852 are constructed whenever this class is. We do not need to worry
853 about recursive loops here, since we are only looking at members
854 of complete class type. */
855 for (fieldnum = 0; fieldnum < TYPE_NFIELDS (type); fieldnum++)
856 if (gnuv3_pass_by_reference (TYPE_FIELD_TYPE (type, fieldnum)))
857 return 1;
858
859 return 0;
860 }
861
862 static void
863 init_gnuv3_ops (void)
864 {
865 vtable_type_gdbarch_data = gdbarch_data_register_post_init (build_gdb_vtable_type);
866
867 gnu_v3_abi_ops.shortname = "gnu-v3";
868 gnu_v3_abi_ops.longname = "GNU G++ Version 3 ABI";
869 gnu_v3_abi_ops.doc = "G++ Version 3 ABI";
870 gnu_v3_abi_ops.is_destructor_name =
871 (enum dtor_kinds (*) (const char *))is_gnu_v3_mangled_dtor;
872 gnu_v3_abi_ops.is_constructor_name =
873 (enum ctor_kinds (*) (const char *))is_gnu_v3_mangled_ctor;
874 gnu_v3_abi_ops.is_vtable_name = gnuv3_is_vtable_name;
875 gnu_v3_abi_ops.is_operator_name = gnuv3_is_operator_name;
876 gnu_v3_abi_ops.rtti_type = gnuv3_rtti_type;
877 gnu_v3_abi_ops.virtual_fn_field = gnuv3_virtual_fn_field;
878 gnu_v3_abi_ops.baseclass_offset = gnuv3_baseclass_offset;
879 gnu_v3_abi_ops.print_method_ptr = gnuv3_print_method_ptr;
880 gnu_v3_abi_ops.method_ptr_size = gnuv3_method_ptr_size;
881 gnu_v3_abi_ops.make_method_ptr = gnuv3_make_method_ptr;
882 gnu_v3_abi_ops.method_ptr_to_value = gnuv3_method_ptr_to_value;
883 gnu_v3_abi_ops.skip_trampoline = gnuv3_skip_trampoline;
884 gnu_v3_abi_ops.pass_by_reference = gnuv3_pass_by_reference;
885 }
886
887 extern initialize_file_ftype _initialize_gnu_v3_abi; /* -Wmissing-prototypes */
888
889 void
890 _initialize_gnu_v3_abi (void)
891 {
892 init_gnuv3_ops ();
893
894 register_cp_abi (&gnu_v3_abi_ops);
895 }