]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gnu-v2-abi.c
Automatic Copyright Year update after running gdb/copyright.py
[thirdparty/binutils-gdb.git] / gdb / gnu-v2-abi.c
CommitLineData
015a42b4 1/* Abstraction of GNU v2 abi.
1bac305b 2
4a94e368 3 Copyright (C) 2001-2022 Free Software Foundation, Inc.
1bac305b 4
015a42b4 5 Contributed by Daniel Berlin <dberlin@redhat.com>
015a42b4
JB
6
7 This file is part of GDB.
8
a9762ec7
JB
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
015a42b4
JB
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
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
015a42b4
JB
21
22#include "defs.h"
015a42b4
JB
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "value.h"
26#include "demangle.h"
50f182aa 27#include "gdb-demangle.h"
015a42b4 28#include "cp-abi.h"
362ff856 29#include "cp-support.h"
015a42b4
JB
30#include <ctype.h>
31
6bd434d6 32static cp_abi_ops gnu_v2_abi_ops;
015a42b4
JB
33
34static int vb_match (struct type *, int, struct type *);
35
36static enum dtor_kinds
37gnuv2_is_destructor_name (const char *name)
38{
39 if ((name[0] == '_' && is_cplus_marker (name[1]) && name[2] == '_')
61012eef 40 || startswith (name, "__dt__"))
015a42b4
JB
41 return complete_object_dtor;
42 else
ebf05345 43 return (enum dtor_kinds) 0;
015a42b4
JB
44}
45
46static enum ctor_kinds
47gnuv2_is_constructor_name (const char *name)
48{
49 if ((name[0] == '_' && name[1] == '_'
50 && (isdigit (name[2]) || strchr ("Qt", name[2])))
61012eef 51 || startswith (name, "__ct__"))
015a42b4
JB
52 return complete_object_ctor;
53 else
ebf05345 54 return (enum ctor_kinds) 0;
015a42b4
JB
55}
56
57static int
58gnuv2_is_vtable_name (const char *name)
59{
60 return (((name)[0] == '_'
61 && (((name)[1] == 'V' && (name)[2] == 'T')
62 || ((name)[1] == 'v' && (name)[2] == 't'))
63 && is_cplus_marker ((name)[3])) ||
64 ((name)[0] == '_' && (name)[1] == '_'
65 && (name)[2] == 'v' && (name)[3] == 't' && (name)[4] == '_'));
66}
67
68static int
69gnuv2_is_operator_name (const char *name)
70{
8090b426 71 return startswith (name, CP_OPERATOR_STR);
015a42b4
JB
72}
73
74\f
75/* Return a virtual function as a value.
76 ARG1 is the object which provides the virtual function
77 table pointer. *ARG1P is side-effected in calling this function.
78 F is the list of member functions which contains the desired virtual
79 function.
80 J is an index into F which provides the desired virtual function.
81
82 TYPE is the type in which F is located. */
e933e538
AC
83static struct value *
84gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
015a42b4
JB
85 struct type * type, int offset)
86{
e933e538 87 struct value *arg1 = *arg1p;
df407dfe 88 struct type *type1 = check_typedef (value_type (arg1));
015a42b4
JB
89 struct type *entry_type;
90 /* First, get the virtual function table pointer. That comes
91 with a strange type, so cast it to type `pointer to long' (which
92 should serve just fine as a function type). Then, index into
93 the table, and convert final value to appropriate function type. */
e933e538
AC
94 struct value *entry;
95 struct value *vfn;
96 struct value *vtbl;
2497b498 97 LONGEST vi = (LONGEST) TYPE_FN_FIELD_VOFFSET (f, j);
015a42b4
JB
98 struct type *fcontext = TYPE_FN_FIELD_FCONTEXT (f, j);
99 struct type *context;
81fe8080
DE
100 struct type *context_vptr_basetype;
101 int context_vptr_fieldno;
102
015a42b4
JB
103 if (fcontext == NULL)
104 /* We don't have an fcontext (e.g. the program was compiled with
105 g++ version 1). Try to get the vtbl from the TYPE_VPTR_BASETYPE.
106 This won't work right for multiple inheritance, but at least we
107 should do as well as GDB 3.x did. */
108 fcontext = TYPE_VPTR_BASETYPE (type);
109 context = lookup_pointer_type (fcontext);
110 /* Now context is a pointer to the basetype containing the vtbl. */
111 if (TYPE_TARGET_TYPE (context) != type1)
112 {
e933e538 113 struct value *tmp = value_cast (context, value_addr (arg1));
d8734c88 114
015a42b4 115 arg1 = value_ind (tmp);
df407dfe 116 type1 = check_typedef (value_type (arg1));
015a42b4
JB
117 }
118
119 context = type1;
120 /* Now context is the basetype containing the vtbl. */
121
122 /* This type may have been defined before its virtual function table
123 was. If so, fill in the virtual function table entry for the
124 type now. */
81fe8080
DE
125 context_vptr_fieldno = get_vptr_fieldno (context, &context_vptr_basetype);
126 /* FIXME: What to do if vptr_fieldno is still -1? */
015a42b4
JB
127
128 /* The virtual function table is now an array of structures
129 which have the form { int16 offset, delta; void *pfn; }. */
81fe8080
DE
130 vtbl = value_primitive_field (arg1, 0, context_vptr_fieldno,
131 context_vptr_basetype);
015a42b4
JB
132
133 /* With older versions of g++, the vtbl field pointed to an array
0963b4bd 134 of structures. Nowadays it points directly to the structure. */
78134374
SM
135 if (value_type (vtbl)->code () == TYPE_CODE_PTR
136 && TYPE_TARGET_TYPE (value_type (vtbl))->code () == TYPE_CODE_ARRAY)
015a42b4
JB
137 {
138 /* Handle the case where the vtbl field points to an
dda83cd7 139 array of structures. */
015a42b4
JB
140 vtbl = value_ind (vtbl);
141
142 /* Index into the virtual function table. This is hard-coded because
dda83cd7
SM
143 looking up a field is not cheap, and it may be important to save
144 time, e.g. if the user has set a conditional breakpoint calling
145 a virtual function. */
015a42b4
JB
146 entry = value_subscript (vtbl, vi);
147 }
148 else
149 {
0963b4bd
MS
150 /* Handle the case where the vtbl field points directly to a
151 structure. */
89eef114 152 vtbl = value_ptradd (vtbl, vi);
015a42b4
JB
153 entry = value_ind (vtbl);
154 }
155
df407dfe 156 entry_type = check_typedef (value_type (entry));
015a42b4 157
78134374 158 if (entry_type->code () == TYPE_CODE_STRUCT)
015a42b4 159 {
0963b4bd
MS
160 /* Move the `this' pointer according to the virtual function table. */
161 set_value_offset (arg1, value_offset (arg1)
162 + value_as_long (value_field (entry, 0)));
015a42b4 163
d69fe07e 164 if (!value_lazy (arg1))
015a42b4 165 {
dfa52d88 166 set_value_lazy (arg1, 1);
015a42b4
JB
167 value_fetch_lazy (arg1);
168 }
169
170 vfn = value_field (entry, 2);
171 }
78134374 172 else if (entry_type->code () == TYPE_CODE_PTR)
015a42b4
JB
173 vfn = entry;
174 else
8a3fe4f8 175 error (_("I'm confused: virtual function table has bad type"));
015a42b4 176 /* Reinstantiate the function pointer with the correct type. */
0963b4bd
MS
177 deprecated_set_value_type (vfn,
178 lookup_pointer_type (TYPE_FN_FIELD_TYPE (f, j)));
015a42b4
JB
179
180 *arg1p = arg1;
181 return vfn;
182}
183
184
b9362cc7 185static struct type *
6b850546 186gnuv2_value_rtti_type (struct value *v, int *full, LONGEST *top, int *using_enc)
015a42b4
JB
187{
188 struct type *known_type;
189 struct type *rtti_type;
015a42b4 190 CORE_ADDR vtbl;
7cbd4a93 191 struct bound_minimal_symbol minsym;
3456e70c 192 char *p;
0d5cff50 193 const char *linkage_name;
015a42b4 194 struct type *btype;
81fe8080
DE
195 struct type *known_type_vptr_basetype;
196 int known_type_vptr_fieldno;
015a42b4
JB
197
198 if (full)
199 *full = 0;
200 if (top)
201 *top = -1;
202 if (using_enc)
203 *using_enc = 0;
204
0963b4bd 205 /* Get declared type. */
df407dfe 206 known_type = value_type (v);
f168693b 207 known_type = check_typedef (known_type);
0963b4bd 208 /* RTTI works only or class objects. */
78134374 209 if (known_type->code () != TYPE_CODE_STRUCT)
015a42b4
JB
210 return NULL;
211
212 /* Plan on this changing in the future as i get around to setting
213 the vtables properly for G++ compiled stuff. Also, I'll be using
214 the type info functions, which are always right. Deal with it
215 until then. */
216
81fe8080
DE
217 /* Try to get the vptr basetype, fieldno. */
218 known_type_vptr_fieldno = get_vptr_fieldno (known_type,
219 &known_type_vptr_basetype);
015a42b4 220
81fe8080
DE
221 /* If we can't find it, give up. */
222 if (known_type_vptr_fieldno < 0)
015a42b4
JB
223 return NULL;
224
225 /* Make sure our basetype and known type match, otherwise, cast
0963b4bd 226 so we can get at the vtable properly. */
81fe8080 227 btype = known_type_vptr_basetype;
f168693b 228 btype = check_typedef (btype);
015a42b4
JB
229 if (btype != known_type )
230 {
231 v = value_cast (btype, v);
232 if (using_enc)
dda83cd7 233 *using_enc=1;
015a42b4 234 }
0963b4bd
MS
235 /* We can't use value_ind here, because it would want to use RTTI, and
236 we'd waste a bunch of time figuring out we already know the type.
237 Besides, we don't care about the type, just the actual pointer. */
42ae5230 238 if (value_address (value_field (v, known_type_vptr_fieldno)) == 0)
015a42b4
JB
239 return NULL;
240
81fe8080 241 vtbl = value_as_address (value_field (v, known_type_vptr_fieldno));
015a42b4 242
0963b4bd 243 /* Try to find a symbol that is the vtable. */
015a42b4 244 minsym=lookup_minimal_symbol_by_pc(vtbl);
7cbd4a93 245 if (minsym.minsym==NULL
c9d95fa3 246 || (linkage_name=minsym.minsym->linkage_name ())==NULL
0d5cff50 247 || !is_vtable_name (linkage_name))
015a42b4
JB
248 return NULL;
249
0963b4bd 250 /* If we just skip the prefix, we get screwed by namespaces. */
3456e70c
TT
251 gdb::unique_xmalloc_ptr<char> demangled_name
252 = gdb_demangle(linkage_name,DMGL_PARAMS|DMGL_ANSI);
253 p = strchr (demangled_name.get (), ' ');
7d63ec12
MS
254 if (p)
255 *p = '\0';
015a42b4 256
0963b4bd
MS
257 /* Lookup the type for the name. */
258 /* FIXME: chastain/2003-11-26: block=NULL is bogus. See pr gdb/1465. */
3456e70c 259 rtti_type = cp_lookup_rtti_type (demangled_name.get (), NULL);
362ff856 260 if (rtti_type == NULL)
015a42b4
JB
261 return NULL;
262
263 if (TYPE_N_BASECLASSES(rtti_type) > 1 && full && (*full) != 1)
264 {
265 if (top)
dda83cd7 266 *top = TYPE_BASECLASS_BITPOS (rtti_type,
0963b4bd 267 TYPE_VPTR_FIELDNO(rtti_type)) / 8;
015a42b4 268 if (top && ((*top) >0))
dda83cd7
SM
269 {
270 if (TYPE_LENGTH(rtti_type) > TYPE_LENGTH(known_type))
271 {
272 if (full)
273 *full=0;
274 }
275 else
276 {
277 if (full)
278 *full=1;
279 }
280 }
015a42b4
JB
281 }
282 else
283 {
284 if (full)
dda83cd7 285 *full=1;
015a42b4 286 }
015a42b4
JB
287
288 return rtti_type;
289}
290
1514d34e
DJ
291/* Return true if the INDEXth field of TYPE is a virtual baseclass
292 pointer which is for the base class whose type is BASECLASS. */
293
294static int
295vb_match (struct type *type, int index, struct type *basetype)
296{
297 struct type *fieldtype;
33d16dd9 298 const char *name = type->field (index).name ();
0d5cff50 299 const char *field_class_name = NULL;
1514d34e
DJ
300
301 if (*name != '_')
302 return 0;
303 /* gcc 2.4 uses _vb$. */
304 if (name[1] == 'v' && name[2] == 'b' && is_cplus_marker (name[3]))
305 field_class_name = name + 4;
306 /* gcc 2.5 will use __vb_. */
307 if (name[1] == '_' && name[2] == 'v' && name[3] == 'b' && name[4] == '_')
308 field_class_name = name + 5;
309
310 if (field_class_name == NULL)
311 /* This field is not a virtual base class pointer. */
312 return 0;
313
314 /* It's a virtual baseclass pointer, now we just need to find out whether
315 it is for this baseclass. */
940da03e 316 fieldtype = type->field (index).type ();
1514d34e 317 if (fieldtype == NULL
78134374 318 || fieldtype->code () != TYPE_CODE_PTR)
1514d34e
DJ
319 /* "Can't happen". */
320 return 0;
321
322 /* What we check for is that either the types are equal (needed for
323 nameless types) or have the same name. This is ugly, and a more
324 elegant solution should be devised (which would probably just push
325 the ugliness into symbol reading unless we change the stabs format). */
326 if (TYPE_TARGET_TYPE (fieldtype) == basetype)
327 return 1;
328
7d93a1e0
SM
329 if (basetype->name () != NULL
330 && TYPE_TARGET_TYPE (fieldtype)->name () != NULL
331 && strcmp (basetype->name (),
332 TYPE_TARGET_TYPE (fieldtype)->name ()) == 0)
1514d34e
DJ
333 return 1;
334 return 0;
335}
336
8af8e3bc
PA
337/* Compute the offset of the baseclass which is the INDEXth baseclass
338 of class TYPE, for value at VALADDR (in host) at ADDRESS (in
339 target). The result is the offset of the baseclass value relative
340 to (the address of)(ARG) + OFFSET. */
1514d34e 341
f23f4c59 342static int
06c4d4dc 343gnuv2_baseclass_offset (struct type *type, int index,
6b850546 344 const bfd_byte *valaddr, LONGEST embedded_offset,
8af8e3bc 345 CORE_ADDR address, const struct value *val)
1514d34e
DJ
346{
347 struct type *basetype = TYPE_BASECLASS (type, index);
348
349 if (BASETYPE_VIA_VIRTUAL (type, index))
350 {
351 /* Must hunt for the pointer to this virtual baseclass. */
1f704f76 352 int i, len = type->num_fields ();
aa1ee363 353 int n_baseclasses = TYPE_N_BASECLASSES (type);
1514d34e
DJ
354
355 /* First look for the virtual baseclass pointer
dda83cd7 356 in the fields. */
1514d34e
DJ
357 for (i = n_baseclasses; i < len; i++)
358 {
359 if (vb_match (type, i, basetype))
360 {
8af8e3bc 361 struct type *field_type;
6b850546 362 LONGEST field_offset;
8af8e3bc
PA
363 int field_length;
364 CORE_ADDR addr;
365
940da03e 366 field_type = check_typedef (type->field (i).type ());
b610c045 367 field_offset = type->field (i).loc_bitpos () / 8;
8af8e3bc
PA
368 field_length = TYPE_LENGTH (field_type);
369
370 if (!value_bytes_available (val, embedded_offset + field_offset,
371 field_length))
372 throw_error (NOT_AVAILABLE_ERROR,
373 _("Virtual baseclass pointer is not available"));
1514d34e 374
8af8e3bc
PA
375 addr = unpack_pointer (field_type,
376 valaddr + embedded_offset + field_offset);
377
378 return addr - (LONGEST) address + embedded_offset;
1514d34e
DJ
379 }
380 }
381 /* Not in the fields, so try looking through the baseclasses. */
382 for (i = index + 1; i < n_baseclasses; i++)
383 {
8af8e3bc
PA
384 /* Don't go through baseclass_offset, as that wraps
385 exceptions, thus, inner exceptions would be wrapped more
386 than once. */
1514d34e 387 int boffset =
8af8e3bc
PA
388 gnuv2_baseclass_offset (type, i, valaddr,
389 embedded_offset, address, val);
d8734c88 390
1514d34e
DJ
391 if (boffset)
392 return boffset;
393 }
8af8e3bc
PA
394
395 error (_("Baseclass offset not found"));
1514d34e
DJ
396 }
397
398 /* Baseclass is easily computed. */
399 return TYPE_BASECLASS_BITPOS (type, index) / 8;
400}
015a42b4
JB
401
402static void
403init_gnuv2_ops (void)
404{
405 gnu_v2_abi_ops.shortname = "gnu-v2";
406 gnu_v2_abi_ops.longname = "GNU G++ Version 2 ABI";
407 gnu_v2_abi_ops.doc = "G++ Version 2 ABI";
408 gnu_v2_abi_ops.is_destructor_name = gnuv2_is_destructor_name;
409 gnu_v2_abi_ops.is_constructor_name = gnuv2_is_constructor_name;
410 gnu_v2_abi_ops.is_vtable_name = gnuv2_is_vtable_name;
411 gnu_v2_abi_ops.is_operator_name = gnuv2_is_operator_name;
412 gnu_v2_abi_ops.virtual_fn_field = gnuv2_virtual_fn_field;
413 gnu_v2_abi_ops.rtti_type = gnuv2_value_rtti_type;
1514d34e 414 gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
015a42b4
JB
415}
416
6c265988 417void _initialize_gnu_v2_abi ();
015a42b4 418void
6c265988 419_initialize_gnu_v2_abi ()
015a42b4
JB
420{
421 init_gnuv2_ops ();
fe1f4a5e 422 register_cp_abi (&gnu_v2_abi_ops);
015a42b4 423}