gdb: add declaration for _initialize_gdbarch in gdbarch.sh
[deliverable/binutils-gdb.git] / gdb / gnu-v2-abi.c
CommitLineData
015a42b4 1/* Abstraction of GNU v2 abi.
1bac305b 2
b811d2c2 3 Copyright (C) 2001-2020 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
32struct cp_abi_ops gnu_v2_abi_ops;
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. */
df407dfe
AC
135 if (TYPE_CODE (value_type (vtbl)) == TYPE_CODE_PTR
136 && TYPE_CODE (TYPE_TARGET_TYPE (value_type (vtbl))) == TYPE_CODE_ARRAY)
015a42b4
JB
137 {
138 /* Handle the case where the vtbl field points to an
0963b4bd 139 array of structures. */
015a42b4
JB
140 vtbl = value_ind (vtbl);
141
142 /* Index into the virtual function table. This is hard-coded because
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. */
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
JB
157
158 if (TYPE_CODE (entry_type) == TYPE_CODE_STRUCT)
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 }
172 else if (TYPE_CODE (entry_type) == TYPE_CODE_PTR)
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;
7d63ec12 192 char *demangled_name, *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. */
4753d33b 209 if (TYPE_CODE (known_type) != 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)
233 *using_enc=1;
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. */
d3448d85 251 demangled_name=gdb_demangle(linkage_name,DMGL_PARAMS|DMGL_ANSI);
7d63ec12
MS
252 p = strchr (demangled_name, ' ');
253 if (p)
254 *p = '\0';
015a42b4 255
0963b4bd
MS
256 /* Lookup the type for the name. */
257 /* FIXME: chastain/2003-11-26: block=NULL is bogus. See pr gdb/1465. */
362ff856
MC
258 rtti_type = cp_lookup_rtti_type (demangled_name, NULL);
259 if (rtti_type == NULL)
015a42b4
JB
260 return NULL;
261
262 if (TYPE_N_BASECLASSES(rtti_type) > 1 && full && (*full) != 1)
263 {
264 if (top)
0963b4bd
MS
265 *top = TYPE_BASECLASS_BITPOS (rtti_type,
266 TYPE_VPTR_FIELDNO(rtti_type)) / 8;
015a42b4
JB
267 if (top && ((*top) >0))
268 {
269 if (TYPE_LENGTH(rtti_type) > TYPE_LENGTH(known_type))
270 {
271 if (full)
272 *full=0;
273 }
274 else
275 {
276 if (full)
277 *full=1;
278 }
279 }
280 }
281 else
282 {
283 if (full)
284 *full=1;
285 }
015a42b4
JB
286
287 return rtti_type;
288}
289
1514d34e
DJ
290/* Return true if the INDEXth field of TYPE is a virtual baseclass
291 pointer which is for the base class whose type is BASECLASS. */
292
293static int
294vb_match (struct type *type, int index, struct type *basetype)
295{
296 struct type *fieldtype;
0d5cff50
DE
297 const char *name = TYPE_FIELD_NAME (type, index);
298 const char *field_class_name = NULL;
1514d34e
DJ
299
300 if (*name != '_')
301 return 0;
302 /* gcc 2.4 uses _vb$. */
303 if (name[1] == 'v' && name[2] == 'b' && is_cplus_marker (name[3]))
304 field_class_name = name + 4;
305 /* gcc 2.5 will use __vb_. */
306 if (name[1] == '_' && name[2] == 'v' && name[3] == 'b' && name[4] == '_')
307 field_class_name = name + 5;
308
309 if (field_class_name == NULL)
310 /* This field is not a virtual base class pointer. */
311 return 0;
312
313 /* It's a virtual baseclass pointer, now we just need to find out whether
314 it is for this baseclass. */
315 fieldtype = TYPE_FIELD_TYPE (type, index);
316 if (fieldtype == NULL
317 || TYPE_CODE (fieldtype) != TYPE_CODE_PTR)
318 /* "Can't happen". */
319 return 0;
320
321 /* What we check for is that either the types are equal (needed for
322 nameless types) or have the same name. This is ugly, and a more
323 elegant solution should be devised (which would probably just push
324 the ugliness into symbol reading unless we change the stabs format). */
325 if (TYPE_TARGET_TYPE (fieldtype) == basetype)
326 return 1;
327
328 if (TYPE_NAME (basetype) != NULL
329 && TYPE_NAME (TYPE_TARGET_TYPE (fieldtype)) != NULL
bde58177
AC
330 && strcmp (TYPE_NAME (basetype),
331 TYPE_NAME (TYPE_TARGET_TYPE (fieldtype))) == 0)
1514d34e
DJ
332 return 1;
333 return 0;
334}
335
8af8e3bc
PA
336/* Compute the offset of the baseclass which is the INDEXth baseclass
337 of class TYPE, for value at VALADDR (in host) at ADDRESS (in
338 target). The result is the offset of the baseclass value relative
339 to (the address of)(ARG) + OFFSET. */
1514d34e 340
f23f4c59 341static int
06c4d4dc 342gnuv2_baseclass_offset (struct type *type, int index,
6b850546 343 const bfd_byte *valaddr, LONGEST embedded_offset,
8af8e3bc 344 CORE_ADDR address, const struct value *val)
1514d34e
DJ
345{
346 struct type *basetype = TYPE_BASECLASS (type, index);
347
348 if (BASETYPE_VIA_VIRTUAL (type, index))
349 {
350 /* Must hunt for the pointer to this virtual baseclass. */
aa1ee363
AC
351 int i, len = TYPE_NFIELDS (type);
352 int n_baseclasses = TYPE_N_BASECLASSES (type);
1514d34e
DJ
353
354 /* First look for the virtual baseclass pointer
355 in the fields. */
356 for (i = n_baseclasses; i < len; i++)
357 {
358 if (vb_match (type, i, basetype))
359 {
8af8e3bc 360 struct type *field_type;
6b850546 361 LONGEST field_offset;
8af8e3bc
PA
362 int field_length;
363 CORE_ADDR addr;
364
365 field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
366 field_offset = TYPE_FIELD_BITPOS (type, i) / 8;
367 field_length = TYPE_LENGTH (field_type);
368
369 if (!value_bytes_available (val, embedded_offset + field_offset,
370 field_length))
371 throw_error (NOT_AVAILABLE_ERROR,
372 _("Virtual baseclass pointer is not available"));
1514d34e 373
8af8e3bc
PA
374 addr = unpack_pointer (field_type,
375 valaddr + embedded_offset + field_offset);
376
377 return addr - (LONGEST) address + embedded_offset;
1514d34e
DJ
378 }
379 }
380 /* Not in the fields, so try looking through the baseclasses. */
381 for (i = index + 1; i < n_baseclasses; i++)
382 {
8af8e3bc
PA
383 /* Don't go through baseclass_offset, as that wraps
384 exceptions, thus, inner exceptions would be wrapped more
385 than once. */
1514d34e 386 int boffset =
8af8e3bc
PA
387 gnuv2_baseclass_offset (type, i, valaddr,
388 embedded_offset, address, val);
d8734c88 389
1514d34e
DJ
390 if (boffset)
391 return boffset;
392 }
8af8e3bc
PA
393
394 error (_("Baseclass offset not found"));
1514d34e
DJ
395 }
396
397 /* Baseclass is easily computed. */
398 return TYPE_BASECLASS_BITPOS (type, index) / 8;
399}
015a42b4
JB
400
401static void
402init_gnuv2_ops (void)
403{
404 gnu_v2_abi_ops.shortname = "gnu-v2";
405 gnu_v2_abi_ops.longname = "GNU G++ Version 2 ABI";
406 gnu_v2_abi_ops.doc = "G++ Version 2 ABI";
407 gnu_v2_abi_ops.is_destructor_name = gnuv2_is_destructor_name;
408 gnu_v2_abi_ops.is_constructor_name = gnuv2_is_constructor_name;
409 gnu_v2_abi_ops.is_vtable_name = gnuv2_is_vtable_name;
410 gnu_v2_abi_ops.is_operator_name = gnuv2_is_operator_name;
411 gnu_v2_abi_ops.virtual_fn_field = gnuv2_virtual_fn_field;
412 gnu_v2_abi_ops.rtti_type = gnuv2_value_rtti_type;
1514d34e 413 gnu_v2_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
015a42b4
JB
414}
415
6c265988 416void _initialize_gnu_v2_abi ();
015a42b4 417void
6c265988 418_initialize_gnu_v2_abi ()
015a42b4
JB
419{
420 init_gnuv2_ops ();
fe1f4a5e 421 register_cp_abi (&gnu_v2_abi_ops);
015a42b4 422}
This page took 1.529823 seconds and 4 git commands to generate.