]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Change value_val_atr to ada_val_atr
[thirdparty/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
3666a048 3 Copyright (C) 1992-2021 Free Software Foundation, Inc.
14f9c5c9 4
a9762ec7 5 This file is part of GDB.
14f9c5c9 6
a9762ec7
JB
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.
14f9c5c9 11
a9762ec7
JB
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.
14f9c5c9 16
a9762ec7
JB
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/>. */
14f9c5c9 19
96d887e8 20
4c4b4cd2 21#include "defs.h"
14f9c5c9 22#include <ctype.h>
d55e5aa6 23#include "gdb_regex.h"
4de283e4
TT
24#include "frame.h"
25#include "symtab.h"
26#include "gdbtypes.h"
14f9c5c9 27#include "gdbcmd.h"
4de283e4
TT
28#include "expression.h"
29#include "parser-defs.h"
30#include "language.h"
31#include "varobj.h"
4de283e4
TT
32#include "inferior.h"
33#include "symfile.h"
34#include "objfiles.h"
35#include "breakpoint.h"
14f9c5c9 36#include "gdbcore.h"
4c4b4cd2 37#include "hashtab.h"
4de283e4
TT
38#include "gdb_obstack.h"
39#include "ada-lang.h"
40#include "completer.h"
4de283e4
TT
41#include "ui-out.h"
42#include "block.h"
04714b91 43#include "infcall.h"
4de283e4
TT
44#include "annotate.h"
45#include "valprint.h"
d55e5aa6 46#include "source.h"
4de283e4 47#include "observable.h"
692465f1 48#include "stack.h"
79d43c61 49#include "typeprint.h"
4de283e4 50#include "namespace.h"
7f6aba03 51#include "cli/cli-style.h"
4de283e4 52
40bc484c 53#include "value.h"
4de283e4
TT
54#include "mi/mi-common.h"
55#include "arch-utils.h"
56#include "cli/cli-utils.h"
268a13a5
TT
57#include "gdbsupport/function-view.h"
58#include "gdbsupport/byte-vector.h"
4de283e4 59#include <algorithm>
ccefe4c4 60
4c4b4cd2 61/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 62 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
63 Copied from valarith.c. */
64
65#ifndef TRUNCATION_TOWARDS_ZERO
66#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
67#endif
68
d2e4a39e 69static struct type *desc_base_type (struct type *);
14f9c5c9 70
d2e4a39e 71static struct type *desc_bounds_type (struct type *);
14f9c5c9 72
d2e4a39e 73static struct value *desc_bounds (struct value *);
14f9c5c9 74
d2e4a39e 75static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 76
d2e4a39e 77static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 78
556bdfd4 79static struct type *desc_data_target_type (struct type *);
14f9c5c9 80
d2e4a39e 81static struct value *desc_data (struct value *);
14f9c5c9 82
d2e4a39e 83static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 84
d2e4a39e 85static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 86
d2e4a39e 87static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 88
d2e4a39e 89static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 90
d2e4a39e 91static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 92
d2e4a39e 93static struct type *desc_index_type (struct type *, int);
14f9c5c9 94
d2e4a39e 95static int desc_arity (struct type *);
14f9c5c9 96
d2e4a39e 97static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 98
d2e4a39e 99static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 100
40bc484c 101static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 102
d1183b06 103static void ada_add_block_symbols (std::vector<struct block_symbol> &,
b5ec771e
PA
104 const struct block *,
105 const lookup_name_info &lookup_name,
106 domain_enum, struct objfile *);
14f9c5c9 107
d1183b06
TT
108static void ada_add_all_symbols (std::vector<struct block_symbol> &,
109 const struct block *,
b5ec771e
PA
110 const lookup_name_info &lookup_name,
111 domain_enum, int, int *);
22cee43f 112
d1183b06 113static int is_nonfunction (const std::vector<struct block_symbol> &);
14f9c5c9 114
d1183b06
TT
115static void add_defn_to_vec (std::vector<struct block_symbol> &,
116 struct symbol *,
dda83cd7 117 const struct block *);
14f9c5c9 118
e9d9f57e 119static struct value *resolve_subexp (expression_up *, int *, int,
dda83cd7 120 struct type *, int,
699bd4cf 121 innermost_block_tracker *);
14f9c5c9 122
e9d9f57e 123static void replace_operator_with_call (expression_up *, int, int, int,
dda83cd7 124 struct symbol *, const struct block *);
14f9c5c9 125
d2e4a39e 126static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 127
4c4b4cd2 128static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 129
d2e4a39e 130static int numeric_type_p (struct type *);
14f9c5c9 131
d2e4a39e 132static int integer_type_p (struct type *);
14f9c5c9 133
d2e4a39e 134static int scalar_type_p (struct type *);
14f9c5c9 135
d2e4a39e 136static int discrete_type_p (struct type *);
14f9c5c9 137
a121b7c1 138static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
dda83cd7 139 int, int);
4c4b4cd2 140
d2e4a39e 141static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 142
b4ba55a1 143static struct type *ada_find_parallel_type_with_name (struct type *,
dda83cd7 144 const char *);
b4ba55a1 145
d2e4a39e 146static int is_dynamic_field (struct type *, int);
14f9c5c9 147
10a2c479 148static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 149 const gdb_byte *,
dda83cd7 150 CORE_ADDR, struct value *);
4c4b4cd2
PH
151
152static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 153
28c85d6c 154static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 155
d2e4a39e 156static struct type *to_static_fixed_type (struct type *);
f192137b 157static struct type *static_unwrap_type (struct type *type);
14f9c5c9 158
d2e4a39e 159static struct value *unwrap_value (struct value *);
14f9c5c9 160
ad82864c 161static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 162
ad82864c 163static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 164
ad82864c
JB
165static long decode_packed_array_bitsize (struct type *);
166
167static struct value *decode_constrained_packed_array (struct value *);
168
ad82864c 169static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 170
d2e4a39e 171static struct value *value_subscript_packed (struct value *, int,
dda83cd7 172 struct value **);
14f9c5c9 173
4c4b4cd2 174static struct value *coerce_unspec_val_to_type (struct value *,
dda83cd7 175 struct type *);
14f9c5c9 176
d2e4a39e 177static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 178
d2e4a39e 179static int equiv_types (struct type *, struct type *);
14f9c5c9 180
d2e4a39e 181static int is_name_suffix (const char *);
14f9c5c9 182
59c8a30b 183static int advance_wild_match (const char **, const char *, char);
73589123 184
b5ec771e 185static bool wild_match (const char *name, const char *patn);
14f9c5c9 186
d2e4a39e 187static struct value *ada_coerce_ref (struct value *);
14f9c5c9 188
4c4b4cd2
PH
189static LONGEST pos_atr (struct value *);
190
3cb382c9 191static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 192
53a47a3e
TT
193static struct value *val_atr (struct type *, LONGEST);
194
4c4b4cd2 195static struct symbol *standard_lookup (const char *, const struct block *,
dda83cd7 196 domain_enum);
14f9c5c9 197
108d56a4 198static struct value *ada_search_struct_field (const char *, struct value *, int,
dda83cd7 199 struct type *);
4c4b4cd2 200
0d5cff50 201static int find_struct_field (const char *, struct type *, int,
dda83cd7 202 struct type **, int *, int *, int *, int *);
4c4b4cd2 203
d1183b06 204static int ada_resolve_function (std::vector<struct block_symbol> &,
dda83cd7
SM
205 struct value **, int, const char *,
206 struct type *, int);
4c4b4cd2 207
4c4b4cd2
PH
208static int ada_is_direct_array_type (struct type *);
209
52ce6436
PH
210static struct value *ada_index_struct_field (int, struct value *, int,
211 struct type *);
212
213static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
214 struct expression *,
215 int *, enum noside);
52ce6436 216
cf608cc4 217static void aggregate_assign_from_choices (struct value *, struct value *,
52ce6436 218 struct expression *,
cf608cc4
TT
219 int *, std::vector<LONGEST> &,
220 LONGEST, LONGEST);
52ce6436
PH
221
222static void aggregate_assign_positional (struct value *, struct value *,
223 struct expression *,
cf608cc4 224 int *, std::vector<LONGEST> &,
52ce6436
PH
225 LONGEST, LONGEST);
226
227
228static void aggregate_assign_others (struct value *, struct value *,
229 struct expression *,
cf608cc4
TT
230 int *, std::vector<LONGEST> &,
231 LONGEST, LONGEST);
52ce6436
PH
232
233
cf608cc4 234static void add_component_interval (LONGEST, LONGEST, std::vector<LONGEST> &);
52ce6436
PH
235
236
237static struct value *ada_evaluate_subexp (struct type *, struct expression *,
238 int *, enum noside);
239
240static void ada_forward_operator_length (struct expression *, int, int *,
241 int *);
852dff6c
JB
242
243static struct type *ada_find_any_type (const char *name);
b5ec771e
PA
244
245static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
246 (const lookup_name_info &lookup_name);
247
4c4b4cd2
PH
248\f
249
ee01b665
JB
250/* The result of a symbol lookup to be stored in our symbol cache. */
251
252struct cache_entry
253{
254 /* The name used to perform the lookup. */
255 const char *name;
256 /* The namespace used during the lookup. */
fe978cb0 257 domain_enum domain;
ee01b665
JB
258 /* The symbol returned by the lookup, or NULL if no matching symbol
259 was found. */
260 struct symbol *sym;
261 /* The block where the symbol was found, or NULL if no matching
262 symbol was found. */
263 const struct block *block;
264 /* A pointer to the next entry with the same hash. */
265 struct cache_entry *next;
266};
267
268/* The Ada symbol cache, used to store the result of Ada-mode symbol
269 lookups in the course of executing the user's commands.
270
271 The cache is implemented using a simple, fixed-sized hash.
272 The size is fixed on the grounds that there are not likely to be
273 all that many symbols looked up during any given session, regardless
274 of the size of the symbol table. If we decide to go to a resizable
275 table, let's just use the stuff from libiberty instead. */
276
277#define HASH_SIZE 1009
278
279struct ada_symbol_cache
280{
281 /* An obstack used to store the entries in our cache. */
bdcccc56 282 struct auto_obstack cache_space;
ee01b665
JB
283
284 /* The root of the hash table used to implement our symbol cache. */
bdcccc56 285 struct cache_entry *root[HASH_SIZE] {};
ee01b665
JB
286};
287
4c4b4cd2 288/* Maximum-sized dynamic type. */
14f9c5c9
AS
289static unsigned int varsize_limit;
290
67cb5b2d 291static const char ada_completer_word_break_characters[] =
4c4b4cd2
PH
292#ifdef VMS
293 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
294#else
14f9c5c9 295 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 296#endif
14f9c5c9 297
4c4b4cd2 298/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 299static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 300 = "__gnat_ada_main_program_name";
14f9c5c9 301
4c4b4cd2
PH
302/* Limit on the number of warnings to raise per expression evaluation. */
303static int warning_limit = 2;
304
305/* Number of warning messages issued; reset to 0 by cleanups after
306 expression evaluation. */
307static int warnings_issued = 0;
308
27087b7f 309static const char * const known_runtime_file_name_patterns[] = {
4c4b4cd2
PH
310 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
311};
312
27087b7f 313static const char * const known_auxiliary_function_name_patterns[] = {
4c4b4cd2
PH
314 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
315};
316
c6044dd1
JB
317/* Maintenance-related settings for this module. */
318
319static struct cmd_list_element *maint_set_ada_cmdlist;
320static struct cmd_list_element *maint_show_ada_cmdlist;
321
c6044dd1
JB
322/* The "maintenance ada set/show ignore-descriptive-type" value. */
323
491144b5 324static bool ada_ignore_descriptive_types_p = false;
c6044dd1 325
e802dbe0
JB
326 /* Inferior-specific data. */
327
328/* Per-inferior data for this module. */
329
330struct ada_inferior_data
331{
332 /* The ada__tags__type_specific_data type, which is used when decoding
333 tagged types. With older versions of GNAT, this type was directly
334 accessible through a component ("tsd") in the object tag. But this
335 is no longer the case, so we cache it for each inferior. */
f37b313d 336 struct type *tsd_type = nullptr;
3eecfa55
JB
337
338 /* The exception_support_info data. This data is used to determine
339 how to implement support for Ada exception catchpoints in a given
340 inferior. */
f37b313d 341 const struct exception_support_info *exception_info = nullptr;
e802dbe0
JB
342};
343
344/* Our key to this module's inferior data. */
f37b313d 345static const struct inferior_key<ada_inferior_data> ada_inferior_data;
e802dbe0
JB
346
347/* Return our inferior data for the given inferior (INF).
348
349 This function always returns a valid pointer to an allocated
350 ada_inferior_data structure. If INF's inferior data has not
351 been previously set, this functions creates a new one with all
352 fields set to zero, sets INF's inferior to it, and then returns
353 a pointer to that newly allocated ada_inferior_data. */
354
355static struct ada_inferior_data *
356get_ada_inferior_data (struct inferior *inf)
357{
358 struct ada_inferior_data *data;
359
f37b313d 360 data = ada_inferior_data.get (inf);
e802dbe0 361 if (data == NULL)
f37b313d 362 data = ada_inferior_data.emplace (inf);
e802dbe0
JB
363
364 return data;
365}
366
367/* Perform all necessary cleanups regarding our module's inferior data
368 that is required after the inferior INF just exited. */
369
370static void
371ada_inferior_exit (struct inferior *inf)
372{
f37b313d 373 ada_inferior_data.clear (inf);
e802dbe0
JB
374}
375
ee01b665
JB
376
377 /* program-space-specific data. */
378
379/* This module's per-program-space data. */
380struct ada_pspace_data
381{
382 /* The Ada symbol cache. */
bdcccc56 383 std::unique_ptr<ada_symbol_cache> sym_cache;
ee01b665
JB
384};
385
386/* Key to our per-program-space data. */
f37b313d 387static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
ee01b665
JB
388
389/* Return this module's data for the given program space (PSPACE).
390 If not is found, add a zero'ed one now.
391
392 This function always returns a valid object. */
393
394static struct ada_pspace_data *
395get_ada_pspace_data (struct program_space *pspace)
396{
397 struct ada_pspace_data *data;
398
f37b313d 399 data = ada_pspace_data_handle.get (pspace);
ee01b665 400 if (data == NULL)
f37b313d 401 data = ada_pspace_data_handle.emplace (pspace);
ee01b665
JB
402
403 return data;
404}
405
dda83cd7 406 /* Utilities */
4c4b4cd2 407
720d1a40 408/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 409 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
410
411 Normally, we really expect a typedef type to only have 1 typedef layer.
412 In other words, we really expect the target type of a typedef type to be
413 a non-typedef type. This is particularly true for Ada units, because
414 the language does not have a typedef vs not-typedef distinction.
415 In that respect, the Ada compiler has been trying to eliminate as many
416 typedef definitions in the debugging information, since they generally
417 do not bring any extra information (we still use typedef under certain
418 circumstances related mostly to the GNAT encoding).
419
420 Unfortunately, we have seen situations where the debugging information
421 generated by the compiler leads to such multiple typedef layers. For
422 instance, consider the following example with stabs:
423
424 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
425 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
426
427 This is an error in the debugging information which causes type
428 pck__float_array___XUP to be defined twice, and the second time,
429 it is defined as a typedef of a typedef.
430
431 This is on the fringe of legality as far as debugging information is
432 concerned, and certainly unexpected. But it is easy to handle these
433 situations correctly, so we can afford to be lenient in this case. */
434
435static struct type *
436ada_typedef_target_type (struct type *type)
437{
78134374 438 while (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
439 type = TYPE_TARGET_TYPE (type);
440 return type;
441}
442
41d27058
JB
443/* Given DECODED_NAME a string holding a symbol name in its
444 decoded form (ie using the Ada dotted notation), returns
445 its unqualified name. */
446
447static const char *
448ada_unqualified_name (const char *decoded_name)
449{
2b0f535a
JB
450 const char *result;
451
452 /* If the decoded name starts with '<', it means that the encoded
453 name does not follow standard naming conventions, and thus that
454 it is not your typical Ada symbol name. Trying to unqualify it
455 is therefore pointless and possibly erroneous. */
456 if (decoded_name[0] == '<')
457 return decoded_name;
458
459 result = strrchr (decoded_name, '.');
41d27058
JB
460 if (result != NULL)
461 result++; /* Skip the dot... */
462 else
463 result = decoded_name;
464
465 return result;
466}
467
39e7af3e 468/* Return a string starting with '<', followed by STR, and '>'. */
41d27058 469
39e7af3e 470static std::string
41d27058
JB
471add_angle_brackets (const char *str)
472{
39e7af3e 473 return string_printf ("<%s>", str);
41d27058 474}
96d887e8 475
14f9c5c9 476/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 477 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
478
479static int
ebf56fd3 480field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
481{
482 int len = strlen (target);
5b4ee69b 483
d2e4a39e 484 return
4c4b4cd2
PH
485 (strncmp (field_name, target, len) == 0
486 && (field_name[len] == '\0'
dda83cd7
SM
487 || (startswith (field_name + len, "___")
488 && strcmp (field_name + strlen (field_name) - 6,
489 "___XVN") != 0)));
14f9c5c9
AS
490}
491
492
872c8b51
JB
493/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
494 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
495 and return its index. This function also handles fields whose name
496 have ___ suffixes because the compiler sometimes alters their name
497 by adding such a suffix to represent fields with certain constraints.
498 If the field could not be found, return a negative number if
499 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
500
501int
502ada_get_field_index (const struct type *type, const char *field_name,
dda83cd7 503 int maybe_missing)
4c4b4cd2
PH
504{
505 int fieldno;
872c8b51
JB
506 struct type *struct_type = check_typedef ((struct type *) type);
507
1f704f76 508 for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
872c8b51 509 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
510 return fieldno;
511
512 if (!maybe_missing)
323e0a4a 513 error (_("Unable to find field %s in struct %s. Aborting"),
dda83cd7 514 field_name, struct_type->name ());
4c4b4cd2
PH
515
516 return -1;
517}
518
519/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
520
521int
d2e4a39e 522ada_name_prefix_len (const char *name)
14f9c5c9
AS
523{
524 if (name == NULL)
525 return 0;
d2e4a39e 526 else
14f9c5c9 527 {
d2e4a39e 528 const char *p = strstr (name, "___");
5b4ee69b 529
14f9c5c9 530 if (p == NULL)
dda83cd7 531 return strlen (name);
14f9c5c9 532 else
dda83cd7 533 return p - name;
14f9c5c9
AS
534 }
535}
536
4c4b4cd2
PH
537/* Return non-zero if SUFFIX is a suffix of STR.
538 Return zero if STR is null. */
539
14f9c5c9 540static int
d2e4a39e 541is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
542{
543 int len1, len2;
5b4ee69b 544
14f9c5c9
AS
545 if (str == NULL)
546 return 0;
547 len1 = strlen (str);
548 len2 = strlen (suffix);
4c4b4cd2 549 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
550}
551
4c4b4cd2
PH
552/* The contents of value VAL, treated as a value of type TYPE. The
553 result is an lval in memory if VAL is. */
14f9c5c9 554
d2e4a39e 555static struct value *
4c4b4cd2 556coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 557{
61ee279c 558 type = ada_check_typedef (type);
df407dfe 559 if (value_type (val) == type)
4c4b4cd2 560 return val;
d2e4a39e 561 else
14f9c5c9 562 {
4c4b4cd2
PH
563 struct value *result;
564
565 /* Make sure that the object size is not unreasonable before
dda83cd7 566 trying to allocate some memory for it. */
c1b5a1a6 567 ada_ensure_varsize_limit (type);
4c4b4cd2 568
f73e424f
TT
569 if (value_optimized_out (val))
570 result = allocate_optimized_out_value (type);
571 else if (value_lazy (val)
572 /* Be careful not to make a lazy not_lval value. */
573 || (VALUE_LVAL (val) != not_lval
574 && TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))))
41e8491f
JK
575 result = allocate_value_lazy (type);
576 else
577 {
578 result = allocate_value (type);
f73e424f 579 value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 580 }
74bcbdf3 581 set_value_component_location (result, val);
9bbda503
AC
582 set_value_bitsize (result, value_bitsize (val));
583 set_value_bitpos (result, value_bitpos (val));
c408a94f
TT
584 if (VALUE_LVAL (result) == lval_memory)
585 set_value_address (result, value_address (val));
14f9c5c9
AS
586 return result;
587 }
588}
589
fc1a4b47
AC
590static const gdb_byte *
591cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
592{
593 if (valaddr == NULL)
594 return NULL;
595 else
596 return valaddr + offset;
597}
598
599static CORE_ADDR
ebf56fd3 600cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
601{
602 if (address == 0)
603 return 0;
d2e4a39e 604 else
14f9c5c9
AS
605 return address + offset;
606}
607
4c4b4cd2
PH
608/* Issue a warning (as for the definition of warning in utils.c, but
609 with exactly one argument rather than ...), unless the limit on the
610 number of warnings has passed during the evaluation of the current
611 expression. */
a2249542 612
77109804
AC
613/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
614 provided by "complaint". */
a0b31db1 615static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 616
14f9c5c9 617static void
a2249542 618lim_warning (const char *format, ...)
14f9c5c9 619{
a2249542 620 va_list args;
a2249542 621
5b4ee69b 622 va_start (args, format);
4c4b4cd2
PH
623 warnings_issued += 1;
624 if (warnings_issued <= warning_limit)
a2249542
MK
625 vwarning (format, args);
626
627 va_end (args);
4c4b4cd2
PH
628}
629
714e53ab
PH
630/* Issue an error if the size of an object of type T is unreasonable,
631 i.e. if it would be a bad idea to allocate a value of this type in
632 GDB. */
633
c1b5a1a6
JB
634void
635ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
636{
637 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 638 error (_("object size is larger than varsize-limit"));
714e53ab
PH
639}
640
0963b4bd 641/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 642static LONGEST
c3e5cd34 643max_of_size (int size)
4c4b4cd2 644{
76a01679 645 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 646
76a01679 647 return top_bit | (top_bit - 1);
4c4b4cd2
PH
648}
649
0963b4bd 650/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 651static LONGEST
c3e5cd34 652min_of_size (int size)
4c4b4cd2 653{
c3e5cd34 654 return -max_of_size (size) - 1;
4c4b4cd2
PH
655}
656
0963b4bd 657/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 658static ULONGEST
c3e5cd34 659umax_of_size (int size)
4c4b4cd2 660{
76a01679 661 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 662
76a01679 663 return top_bit | (top_bit - 1);
4c4b4cd2
PH
664}
665
0963b4bd 666/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
667static LONGEST
668max_of_type (struct type *t)
4c4b4cd2 669{
c6d940a9 670 if (t->is_unsigned ())
c3e5cd34
PH
671 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
672 else
673 return max_of_size (TYPE_LENGTH (t));
674}
675
0963b4bd 676/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
677static LONGEST
678min_of_type (struct type *t)
679{
c6d940a9 680 if (t->is_unsigned ())
c3e5cd34
PH
681 return 0;
682 else
683 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
684}
685
686/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
687LONGEST
688ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 689{
b249d2c2 690 type = resolve_dynamic_type (type, {}, 0);
78134374 691 switch (type->code ())
4c4b4cd2
PH
692 {
693 case TYPE_CODE_RANGE:
d1fd641e
SM
694 {
695 const dynamic_prop &high = type->bounds ()->high;
696
697 if (high.kind () == PROP_CONST)
698 return high.const_val ();
699 else
700 {
701 gdb_assert (high.kind () == PROP_UNDEFINED);
702
703 /* This happens when trying to evaluate a type's dynamic bound
704 without a live target. There is nothing relevant for us to
705 return here, so return 0. */
706 return 0;
707 }
708 }
4c4b4cd2 709 case TYPE_CODE_ENUM:
1f704f76 710 return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
690cc4eb
PH
711 case TYPE_CODE_BOOL:
712 return 1;
713 case TYPE_CODE_CHAR:
76a01679 714 case TYPE_CODE_INT:
690cc4eb 715 return max_of_type (type);
4c4b4cd2 716 default:
43bbcdc2 717 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
718 }
719}
720
14e75d8e 721/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
722LONGEST
723ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 724{
b249d2c2 725 type = resolve_dynamic_type (type, {}, 0);
78134374 726 switch (type->code ())
4c4b4cd2
PH
727 {
728 case TYPE_CODE_RANGE:
d1fd641e
SM
729 {
730 const dynamic_prop &low = type->bounds ()->low;
731
732 if (low.kind () == PROP_CONST)
733 return low.const_val ();
734 else
735 {
736 gdb_assert (low.kind () == PROP_UNDEFINED);
737
738 /* This happens when trying to evaluate a type's dynamic bound
739 without a live target. There is nothing relevant for us to
740 return here, so return 0. */
741 return 0;
742 }
743 }
4c4b4cd2 744 case TYPE_CODE_ENUM:
14e75d8e 745 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
746 case TYPE_CODE_BOOL:
747 return 0;
748 case TYPE_CODE_CHAR:
76a01679 749 case TYPE_CODE_INT:
690cc4eb 750 return min_of_type (type);
4c4b4cd2 751 default:
43bbcdc2 752 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
753 }
754}
755
756/* The identity on non-range types. For range types, the underlying
76a01679 757 non-range scalar type. */
4c4b4cd2
PH
758
759static struct type *
18af8284 760get_base_type (struct type *type)
4c4b4cd2 761{
78134374 762 while (type != NULL && type->code () == TYPE_CODE_RANGE)
4c4b4cd2 763 {
76a01679 764 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
dda83cd7 765 return type;
4c4b4cd2
PH
766 type = TYPE_TARGET_TYPE (type);
767 }
768 return type;
14f9c5c9 769}
41246937
JB
770
771/* Return a decoded version of the given VALUE. This means returning
772 a value whose type is obtained by applying all the GNAT-specific
85102364 773 encodings, making the resulting type a static but standard description
41246937
JB
774 of the initial type. */
775
776struct value *
777ada_get_decoded_value (struct value *value)
778{
779 struct type *type = ada_check_typedef (value_type (value));
780
781 if (ada_is_array_descriptor_type (type)
782 || (ada_is_constrained_packed_array_type (type)
dda83cd7 783 && type->code () != TYPE_CODE_PTR))
41246937 784 {
78134374 785 if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
dda83cd7 786 value = ada_coerce_to_simple_array_ptr (value);
41246937 787 else
dda83cd7 788 value = ada_coerce_to_simple_array (value);
41246937
JB
789 }
790 else
791 value = ada_to_fixed_value (value);
792
793 return value;
794}
795
796/* Same as ada_get_decoded_value, but with the given TYPE.
797 Because there is no associated actual value for this type,
798 the resulting type might be a best-effort approximation in
799 the case of dynamic types. */
800
801struct type *
802ada_get_decoded_type (struct type *type)
803{
804 type = to_static_fixed_type (type);
805 if (ada_is_constrained_packed_array_type (type))
806 type = ada_coerce_to_simple_array_type (type);
807 return type;
808}
809
4c4b4cd2 810\f
76a01679 811
dda83cd7 812 /* Language Selection */
14f9c5c9
AS
813
814/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 815 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 816
de93309a 817static enum language
ccefe4c4 818ada_update_initial_language (enum language lang)
14f9c5c9 819{
cafb3438 820 if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
4c4b4cd2 821 return language_ada;
14f9c5c9
AS
822
823 return lang;
824}
96d887e8
PH
825
826/* If the main procedure is written in Ada, then return its name.
827 The result is good until the next call. Return NULL if the main
828 procedure doesn't appear to be in Ada. */
829
830char *
831ada_main_name (void)
832{
3b7344d5 833 struct bound_minimal_symbol msym;
e83e4e24 834 static gdb::unique_xmalloc_ptr<char> main_program_name;
6c038f32 835
96d887e8
PH
836 /* For Ada, the name of the main procedure is stored in a specific
837 string constant, generated by the binder. Look for that symbol,
838 extract its address, and then read that string. If we didn't find
839 that string, then most probably the main procedure is not written
840 in Ada. */
841 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
842
3b7344d5 843 if (msym.minsym != NULL)
96d887e8 844 {
66920317 845 CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 846 if (main_program_name_addr == 0)
dda83cd7 847 error (_("Invalid address for Ada main program name."));
96d887e8 848
66920317 849 main_program_name = target_read_string (main_program_name_addr, 1024);
e83e4e24 850 return main_program_name.get ();
96d887e8
PH
851 }
852
853 /* The main procedure doesn't seem to be in Ada. */
854 return NULL;
855}
14f9c5c9 856\f
dda83cd7 857 /* Symbols */
d2e4a39e 858
4c4b4cd2
PH
859/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
860 of NULLs. */
14f9c5c9 861
d2e4a39e
AS
862const struct ada_opname_map ada_opname_table[] = {
863 {"Oadd", "\"+\"", BINOP_ADD},
864 {"Osubtract", "\"-\"", BINOP_SUB},
865 {"Omultiply", "\"*\"", BINOP_MUL},
866 {"Odivide", "\"/\"", BINOP_DIV},
867 {"Omod", "\"mod\"", BINOP_MOD},
868 {"Orem", "\"rem\"", BINOP_REM},
869 {"Oexpon", "\"**\"", BINOP_EXP},
870 {"Olt", "\"<\"", BINOP_LESS},
871 {"Ole", "\"<=\"", BINOP_LEQ},
872 {"Ogt", "\">\"", BINOP_GTR},
873 {"Oge", "\">=\"", BINOP_GEQ},
874 {"Oeq", "\"=\"", BINOP_EQUAL},
875 {"One", "\"/=\"", BINOP_NOTEQUAL},
876 {"Oand", "\"and\"", BINOP_BITWISE_AND},
877 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
878 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
879 {"Oconcat", "\"&\"", BINOP_CONCAT},
880 {"Oabs", "\"abs\"", UNOP_ABS},
881 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
882 {"Oadd", "\"+\"", UNOP_PLUS},
883 {"Osubtract", "\"-\"", UNOP_NEG},
884 {NULL, NULL}
14f9c5c9
AS
885};
886
5c4258f4 887/* The "encoded" form of DECODED, according to GNAT conventions. If
b5ec771e 888 THROW_ERRORS, throw an error if invalid operator name is found.
5c4258f4 889 Otherwise, return the empty string in that case. */
4c4b4cd2 890
5c4258f4 891static std::string
b5ec771e 892ada_encode_1 (const char *decoded, bool throw_errors)
14f9c5c9 893{
4c4b4cd2 894 if (decoded == NULL)
5c4258f4 895 return {};
14f9c5c9 896
5c4258f4
TT
897 std::string encoding_buffer;
898 for (const char *p = decoded; *p != '\0'; p += 1)
14f9c5c9 899 {
cdc7bb92 900 if (*p == '.')
5c4258f4 901 encoding_buffer.append ("__");
14f9c5c9 902 else if (*p == '"')
dda83cd7
SM
903 {
904 const struct ada_opname_map *mapping;
905
906 for (mapping = ada_opname_table;
907 mapping->encoded != NULL
908 && !startswith (p, mapping->decoded); mapping += 1)
909 ;
910 if (mapping->encoded == NULL)
b5ec771e
PA
911 {
912 if (throw_errors)
913 error (_("invalid Ada operator name: %s"), p);
914 else
5c4258f4 915 return {};
b5ec771e 916 }
5c4258f4 917 encoding_buffer.append (mapping->encoded);
dda83cd7
SM
918 break;
919 }
d2e4a39e 920 else
5c4258f4 921 encoding_buffer.push_back (*p);
14f9c5c9
AS
922 }
923
4c4b4cd2 924 return encoding_buffer;
14f9c5c9
AS
925}
926
5c4258f4 927/* The "encoded" form of DECODED, according to GNAT conventions. */
b5ec771e 928
5c4258f4 929std::string
b5ec771e
PA
930ada_encode (const char *decoded)
931{
932 return ada_encode_1 (decoded, true);
933}
934
14f9c5c9 935/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
936 quotes, unfolded, but with the quotes stripped away. Result good
937 to next call. */
938
5f9febe0 939static const char *
e0802d59 940ada_fold_name (gdb::string_view name)
14f9c5c9 941{
5f9febe0 942 static std::string fold_storage;
14f9c5c9 943
6a780b67 944 if (!name.empty () && name[0] == '\'')
01573d73 945 fold_storage = gdb::to_string (name.substr (1, name.size () - 2));
14f9c5c9
AS
946 else
947 {
01573d73 948 fold_storage = gdb::to_string (name);
5f9febe0
TT
949 for (int i = 0; i < name.size (); i += 1)
950 fold_storage[i] = tolower (fold_storage[i]);
14f9c5c9
AS
951 }
952
5f9febe0 953 return fold_storage.c_str ();
14f9c5c9
AS
954}
955
529cad9c
PH
956/* Return nonzero if C is either a digit or a lowercase alphabet character. */
957
958static int
959is_lower_alphanum (const char c)
960{
961 return (isdigit (c) || (isalpha (c) && islower (c)));
962}
963
c90092fe
JB
964/* ENCODED is the linkage name of a symbol and LEN contains its length.
965 This function saves in LEN the length of that same symbol name but
966 without either of these suffixes:
29480c32
JB
967 . .{DIGIT}+
968 . ${DIGIT}+
969 . ___{DIGIT}+
970 . __{DIGIT}+.
c90092fe 971
29480c32
JB
972 These are suffixes introduced by the compiler for entities such as
973 nested subprogram for instance, in order to avoid name clashes.
974 They do not serve any purpose for the debugger. */
975
976static void
977ada_remove_trailing_digits (const char *encoded, int *len)
978{
979 if (*len > 1 && isdigit (encoded[*len - 1]))
980 {
981 int i = *len - 2;
5b4ee69b 982
29480c32 983 while (i > 0 && isdigit (encoded[i]))
dda83cd7 984 i--;
29480c32 985 if (i >= 0 && encoded[i] == '.')
dda83cd7 986 *len = i;
29480c32 987 else if (i >= 0 && encoded[i] == '$')
dda83cd7 988 *len = i;
61012eef 989 else if (i >= 2 && startswith (encoded + i - 2, "___"))
dda83cd7 990 *len = i - 2;
61012eef 991 else if (i >= 1 && startswith (encoded + i - 1, "__"))
dda83cd7 992 *len = i - 1;
29480c32
JB
993 }
994}
995
996/* Remove the suffix introduced by the compiler for protected object
997 subprograms. */
998
999static void
1000ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1001{
1002 /* Remove trailing N. */
1003
1004 /* Protected entry subprograms are broken into two
1005 separate subprograms: The first one is unprotected, and has
1006 a 'N' suffix; the second is the protected version, and has
0963b4bd 1007 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1008 the protection. Since the P subprograms are internally generated,
1009 we leave these names undecoded, giving the user a clue that this
1010 entity is internal. */
1011
1012 if (*len > 1
1013 && encoded[*len - 1] == 'N'
1014 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1015 *len = *len - 1;
1016}
1017
1018/* If ENCODED follows the GNAT entity encoding conventions, then return
1019 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
f945dedf 1020 replaced by ENCODED. */
14f9c5c9 1021
f945dedf 1022std::string
4c4b4cd2 1023ada_decode (const char *encoded)
14f9c5c9
AS
1024{
1025 int i, j;
1026 int len0;
d2e4a39e 1027 const char *p;
14f9c5c9 1028 int at_start_name;
f945dedf 1029 std::string decoded;
d2e4a39e 1030
0d81f350
JG
1031 /* With function descriptors on PPC64, the value of a symbol named
1032 ".FN", if it exists, is the entry point of the function "FN". */
1033 if (encoded[0] == '.')
1034 encoded += 1;
1035
29480c32
JB
1036 /* The name of the Ada main procedure starts with "_ada_".
1037 This prefix is not part of the decoded name, so skip this part
1038 if we see this prefix. */
61012eef 1039 if (startswith (encoded, "_ada_"))
4c4b4cd2 1040 encoded += 5;
14f9c5c9 1041
29480c32
JB
1042 /* If the name starts with '_', then it is not a properly encoded
1043 name, so do not attempt to decode it. Similarly, if the name
1044 starts with '<', the name should not be decoded. */
4c4b4cd2 1045 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1046 goto Suppress;
1047
4c4b4cd2 1048 len0 = strlen (encoded);
4c4b4cd2 1049
29480c32
JB
1050 ada_remove_trailing_digits (encoded, &len0);
1051 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1052
4c4b4cd2
PH
1053 /* Remove the ___X.* suffix if present. Do not forget to verify that
1054 the suffix is located before the current "end" of ENCODED. We want
1055 to avoid re-matching parts of ENCODED that have previously been
1056 marked as discarded (by decrementing LEN0). */
1057 p = strstr (encoded, "___");
1058 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1059 {
1060 if (p[3] == 'X')
dda83cd7 1061 len0 = p - encoded;
14f9c5c9 1062 else
dda83cd7 1063 goto Suppress;
14f9c5c9 1064 }
4c4b4cd2 1065
29480c32
JB
1066 /* Remove any trailing TKB suffix. It tells us that this symbol
1067 is for the body of a task, but that information does not actually
1068 appear in the decoded name. */
1069
61012eef 1070 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1071 len0 -= 3;
76a01679 1072
a10967fa
JB
1073 /* Remove any trailing TB suffix. The TB suffix is slightly different
1074 from the TKB suffix because it is used for non-anonymous task
1075 bodies. */
1076
61012eef 1077 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1078 len0 -= 2;
1079
29480c32
JB
1080 /* Remove trailing "B" suffixes. */
1081 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1082
61012eef 1083 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1084 len0 -= 1;
1085
4c4b4cd2 1086 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1087
f945dedf 1088 decoded.resize (2 * len0 + 1, 'X');
14f9c5c9 1089
29480c32
JB
1090 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1091
4c4b4cd2 1092 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1093 {
4c4b4cd2
PH
1094 i = len0 - 2;
1095 while ((i >= 0 && isdigit (encoded[i]))
dda83cd7
SM
1096 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1097 i -= 1;
4c4b4cd2 1098 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
dda83cd7 1099 len0 = i - 1;
4c4b4cd2 1100 else if (encoded[i] == '$')
dda83cd7 1101 len0 = i;
d2e4a39e 1102 }
14f9c5c9 1103
29480c32
JB
1104 /* The first few characters that are not alphabetic are not part
1105 of any encoding we use, so we can copy them over verbatim. */
1106
4c4b4cd2
PH
1107 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1108 decoded[j] = encoded[i];
14f9c5c9
AS
1109
1110 at_start_name = 1;
1111 while (i < len0)
1112 {
29480c32 1113 /* Is this a symbol function? */
4c4b4cd2 1114 if (at_start_name && encoded[i] == 'O')
dda83cd7
SM
1115 {
1116 int k;
1117
1118 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1119 {
1120 int op_len = strlen (ada_opname_table[k].encoded);
1121 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1122 op_len - 1) == 0)
1123 && !isalnum (encoded[i + op_len]))
1124 {
1125 strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
1126 at_start_name = 0;
1127 i += op_len;
1128 j += strlen (ada_opname_table[k].decoded);
1129 break;
1130 }
1131 }
1132 if (ada_opname_table[k].encoded != NULL)
1133 continue;
1134 }
14f9c5c9
AS
1135 at_start_name = 0;
1136
529cad9c 1137 /* Replace "TK__" with "__", which will eventually be translated
dda83cd7 1138 into "." (just below). */
529cad9c 1139
61012eef 1140 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
dda83cd7 1141 i += 2;
529cad9c 1142
29480c32 1143 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
dda83cd7
SM
1144 be translated into "." (just below). These are internal names
1145 generated for anonymous blocks inside which our symbol is nested. */
29480c32
JB
1146
1147 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
dda83cd7
SM
1148 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1149 && isdigit (encoded [i+4]))
1150 {
1151 int k = i + 5;
1152
1153 while (k < len0 && isdigit (encoded[k]))
1154 k++; /* Skip any extra digit. */
1155
1156 /* Double-check that the "__B_{DIGITS}+" sequence we found
1157 is indeed followed by "__". */
1158 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1159 i = k;
1160 }
29480c32 1161
529cad9c
PH
1162 /* Remove _E{DIGITS}+[sb] */
1163
1164 /* Just as for protected object subprograms, there are 2 categories
dda83cd7
SM
1165 of subprograms created by the compiler for each entry. The first
1166 one implements the actual entry code, and has a suffix following
1167 the convention above; the second one implements the barrier and
1168 uses the same convention as above, except that the 'E' is replaced
1169 by a 'B'.
529cad9c 1170
dda83cd7
SM
1171 Just as above, we do not decode the name of barrier functions
1172 to give the user a clue that the code he is debugging has been
1173 internally generated. */
529cad9c
PH
1174
1175 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
dda83cd7
SM
1176 && isdigit (encoded[i+2]))
1177 {
1178 int k = i + 3;
1179
1180 while (k < len0 && isdigit (encoded[k]))
1181 k++;
1182
1183 if (k < len0
1184 && (encoded[k] == 'b' || encoded[k] == 's'))
1185 {
1186 k++;
1187 /* Just as an extra precaution, make sure that if this
1188 suffix is followed by anything else, it is a '_'.
1189 Otherwise, we matched this sequence by accident. */
1190 if (k == len0
1191 || (k < len0 && encoded[k] == '_'))
1192 i = k;
1193 }
1194 }
529cad9c
PH
1195
1196 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
dda83cd7 1197 the GNAT front-end in protected object subprograms. */
529cad9c
PH
1198
1199 if (i < len0 + 3
dda83cd7
SM
1200 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1201 {
1202 /* Backtrack a bit up until we reach either the begining of
1203 the encoded name, or "__". Make sure that we only find
1204 digits or lowercase characters. */
1205 const char *ptr = encoded + i - 1;
1206
1207 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1208 ptr--;
1209 if (ptr < encoded
1210 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1211 i++;
1212 }
529cad9c 1213
4c4b4cd2 1214 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
dda83cd7
SM
1215 {
1216 /* This is a X[bn]* sequence not separated from the previous
1217 part of the name with a non-alpha-numeric character (in other
1218 words, immediately following an alpha-numeric character), then
1219 verify that it is placed at the end of the encoded name. If
1220 not, then the encoding is not valid and we should abort the
1221 decoding. Otherwise, just skip it, it is used in body-nested
1222 package names. */
1223 do
1224 i += 1;
1225 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1226 if (i < len0)
1227 goto Suppress;
1228 }
cdc7bb92 1229 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
dda83cd7
SM
1230 {
1231 /* Replace '__' by '.'. */
1232 decoded[j] = '.';
1233 at_start_name = 1;
1234 i += 2;
1235 j += 1;
1236 }
14f9c5c9 1237 else
dda83cd7
SM
1238 {
1239 /* It's a character part of the decoded name, so just copy it
1240 over. */
1241 decoded[j] = encoded[i];
1242 i += 1;
1243 j += 1;
1244 }
14f9c5c9 1245 }
f945dedf 1246 decoded.resize (j);
14f9c5c9 1247
29480c32
JB
1248 /* Decoded names should never contain any uppercase character.
1249 Double-check this, and abort the decoding if we find one. */
1250
f945dedf 1251 for (i = 0; i < decoded.length(); ++i)
4c4b4cd2 1252 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1253 goto Suppress;
1254
f945dedf 1255 return decoded;
14f9c5c9
AS
1256
1257Suppress:
4c4b4cd2 1258 if (encoded[0] == '<')
f945dedf 1259 decoded = encoded;
14f9c5c9 1260 else
f945dedf 1261 decoded = '<' + std::string(encoded) + '>';
4c4b4cd2
PH
1262 return decoded;
1263
1264}
1265
1266/* Table for keeping permanent unique copies of decoded names. Once
1267 allocated, names in this table are never released. While this is a
1268 storage leak, it should not be significant unless there are massive
1269 changes in the set of decoded names in successive versions of a
1270 symbol table loaded during a single session. */
1271static struct htab *decoded_names_store;
1272
1273/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1274 in the language-specific part of GSYMBOL, if it has not been
1275 previously computed. Tries to save the decoded name in the same
1276 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1277 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1278 GSYMBOL).
4c4b4cd2
PH
1279 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1280 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1281 when a decoded name is cached in it. */
4c4b4cd2 1282
45e6c716 1283const char *
f85f34ed 1284ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1285{
f85f34ed
TT
1286 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1287 const char **resultp =
615b3f62 1288 &gsymbol->language_specific.demangled_name;
5b4ee69b 1289
f85f34ed 1290 if (!gsymbol->ada_mangled)
4c4b4cd2 1291 {
4d4eaa30 1292 std::string decoded = ada_decode (gsymbol->linkage_name ());
f85f34ed 1293 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1294
f85f34ed 1295 gsymbol->ada_mangled = 1;
5b4ee69b 1296
f85f34ed 1297 if (obstack != NULL)
f945dedf 1298 *resultp = obstack_strdup (obstack, decoded.c_str ());
f85f34ed 1299 else
dda83cd7 1300 {
f85f34ed
TT
1301 /* Sometimes, we can't find a corresponding objfile, in
1302 which case, we put the result on the heap. Since we only
1303 decode when needed, we hope this usually does not cause a
1304 significant memory leak (FIXME). */
1305
dda83cd7
SM
1306 char **slot = (char **) htab_find_slot (decoded_names_store,
1307 decoded.c_str (), INSERT);
5b4ee69b 1308
dda83cd7
SM
1309 if (*slot == NULL)
1310 *slot = xstrdup (decoded.c_str ());
1311 *resultp = *slot;
1312 }
4c4b4cd2 1313 }
14f9c5c9 1314
4c4b4cd2
PH
1315 return *resultp;
1316}
76a01679 1317
2c0b251b 1318static char *
76a01679 1319ada_la_decode (const char *encoded, int options)
4c4b4cd2 1320{
f945dedf 1321 return xstrdup (ada_decode (encoded).c_str ());
14f9c5c9
AS
1322}
1323
14f9c5c9 1324\f
d2e4a39e 1325
dda83cd7 1326 /* Arrays */
14f9c5c9 1327
28c85d6c
JB
1328/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1329 generated by the GNAT compiler to describe the index type used
1330 for each dimension of an array, check whether it follows the latest
1331 known encoding. If not, fix it up to conform to the latest encoding.
1332 Otherwise, do nothing. This function also does nothing if
1333 INDEX_DESC_TYPE is NULL.
1334
85102364 1335 The GNAT encoding used to describe the array index type evolved a bit.
28c85d6c
JB
1336 Initially, the information would be provided through the name of each
1337 field of the structure type only, while the type of these fields was
1338 described as unspecified and irrelevant. The debugger was then expected
1339 to perform a global type lookup using the name of that field in order
1340 to get access to the full index type description. Because these global
1341 lookups can be very expensive, the encoding was later enhanced to make
1342 the global lookup unnecessary by defining the field type as being
1343 the full index type description.
1344
1345 The purpose of this routine is to allow us to support older versions
1346 of the compiler by detecting the use of the older encoding, and by
1347 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1348 we essentially replace each field's meaningless type by the associated
1349 index subtype). */
1350
1351void
1352ada_fixup_array_indexes_type (struct type *index_desc_type)
1353{
1354 int i;
1355
1356 if (index_desc_type == NULL)
1357 return;
1f704f76 1358 gdb_assert (index_desc_type->num_fields () > 0);
28c85d6c
JB
1359
1360 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1361 to check one field only, no need to check them all). If not, return
1362 now.
1363
1364 If our INDEX_DESC_TYPE was generated using the older encoding,
1365 the field type should be a meaningless integer type whose name
1366 is not equal to the field name. */
940da03e
SM
1367 if (index_desc_type->field (0).type ()->name () != NULL
1368 && strcmp (index_desc_type->field (0).type ()->name (),
dda83cd7 1369 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
28c85d6c
JB
1370 return;
1371
1372 /* Fixup each field of INDEX_DESC_TYPE. */
1f704f76 1373 for (i = 0; i < index_desc_type->num_fields (); i++)
28c85d6c 1374 {
0d5cff50 1375 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1376 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1377
1378 if (raw_type)
5d14b6e5 1379 index_desc_type->field (i).set_type (raw_type);
28c85d6c
JB
1380 }
1381}
1382
4c4b4cd2
PH
1383/* The desc_* routines return primitive portions of array descriptors
1384 (fat pointers). */
14f9c5c9
AS
1385
1386/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1387 level of indirection, if needed. */
1388
d2e4a39e
AS
1389static struct type *
1390desc_base_type (struct type *type)
14f9c5c9
AS
1391{
1392 if (type == NULL)
1393 return NULL;
61ee279c 1394 type = ada_check_typedef (type);
78134374 1395 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
1396 type = ada_typedef_target_type (type);
1397
1265e4aa 1398 if (type != NULL
78134374 1399 && (type->code () == TYPE_CODE_PTR
dda83cd7 1400 || type->code () == TYPE_CODE_REF))
61ee279c 1401 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1402 else
1403 return type;
1404}
1405
4c4b4cd2
PH
1406/* True iff TYPE indicates a "thin" array pointer type. */
1407
14f9c5c9 1408static int
d2e4a39e 1409is_thin_pntr (struct type *type)
14f9c5c9 1410{
d2e4a39e 1411 return
14f9c5c9
AS
1412 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1413 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1414}
1415
4c4b4cd2
PH
1416/* The descriptor type for thin pointer type TYPE. */
1417
d2e4a39e
AS
1418static struct type *
1419thin_descriptor_type (struct type *type)
14f9c5c9 1420{
d2e4a39e 1421 struct type *base_type = desc_base_type (type);
5b4ee69b 1422
14f9c5c9
AS
1423 if (base_type == NULL)
1424 return NULL;
1425 if (is_suffix (ada_type_name (base_type), "___XVE"))
1426 return base_type;
d2e4a39e 1427 else
14f9c5c9 1428 {
d2e4a39e 1429 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1430
14f9c5c9 1431 if (alt_type == NULL)
dda83cd7 1432 return base_type;
14f9c5c9 1433 else
dda83cd7 1434 return alt_type;
14f9c5c9
AS
1435 }
1436}
1437
4c4b4cd2
PH
1438/* A pointer to the array data for thin-pointer value VAL. */
1439
d2e4a39e
AS
1440static struct value *
1441thin_data_pntr (struct value *val)
14f9c5c9 1442{
828292f2 1443 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1444 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1445
556bdfd4
UW
1446 data_type = lookup_pointer_type (data_type);
1447
78134374 1448 if (type->code () == TYPE_CODE_PTR)
556bdfd4 1449 return value_cast (data_type, value_copy (val));
d2e4a39e 1450 else
42ae5230 1451 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1452}
1453
4c4b4cd2
PH
1454/* True iff TYPE indicates a "thick" array pointer type. */
1455
14f9c5c9 1456static int
d2e4a39e 1457is_thick_pntr (struct type *type)
14f9c5c9
AS
1458{
1459 type = desc_base_type (type);
78134374 1460 return (type != NULL && type->code () == TYPE_CODE_STRUCT
dda83cd7 1461 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1462}
1463
4c4b4cd2
PH
1464/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1465 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1466
d2e4a39e
AS
1467static struct type *
1468desc_bounds_type (struct type *type)
14f9c5c9 1469{
d2e4a39e 1470 struct type *r;
14f9c5c9
AS
1471
1472 type = desc_base_type (type);
1473
1474 if (type == NULL)
1475 return NULL;
1476 else if (is_thin_pntr (type))
1477 {
1478 type = thin_descriptor_type (type);
1479 if (type == NULL)
dda83cd7 1480 return NULL;
14f9c5c9
AS
1481 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1482 if (r != NULL)
dda83cd7 1483 return ada_check_typedef (r);
14f9c5c9 1484 }
78134374 1485 else if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
1486 {
1487 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1488 if (r != NULL)
dda83cd7 1489 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1490 }
1491 return NULL;
1492}
1493
1494/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1495 one, a pointer to its bounds data. Otherwise NULL. */
1496
d2e4a39e
AS
1497static struct value *
1498desc_bounds (struct value *arr)
14f9c5c9 1499{
df407dfe 1500 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1501
d2e4a39e 1502 if (is_thin_pntr (type))
14f9c5c9 1503 {
d2e4a39e 1504 struct type *bounds_type =
dda83cd7 1505 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1506 LONGEST addr;
1507
4cdfadb1 1508 if (bounds_type == NULL)
dda83cd7 1509 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1510
1511 /* NOTE: The following calculation is not really kosher, but
dda83cd7
SM
1512 since desc_type is an XVE-encoded type (and shouldn't be),
1513 the correct calculation is a real pain. FIXME (and fix GCC). */
78134374 1514 if (type->code () == TYPE_CODE_PTR)
dda83cd7 1515 addr = value_as_long (arr);
d2e4a39e 1516 else
dda83cd7 1517 addr = value_address (arr);
14f9c5c9 1518
d2e4a39e 1519 return
dda83cd7
SM
1520 value_from_longest (lookup_pointer_type (bounds_type),
1521 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1522 }
1523
1524 else if (is_thick_pntr (type))
05e522ef
JB
1525 {
1526 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1527 _("Bad GNAT array descriptor"));
1528 struct type *p_bounds_type = value_type (p_bounds);
1529
1530 if (p_bounds_type
78134374 1531 && p_bounds_type->code () == TYPE_CODE_PTR)
05e522ef
JB
1532 {
1533 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1534
e46d3488 1535 if (target_type->is_stub ())
05e522ef
JB
1536 p_bounds = value_cast (lookup_pointer_type
1537 (ada_check_typedef (target_type)),
1538 p_bounds);
1539 }
1540 else
1541 error (_("Bad GNAT array descriptor"));
1542
1543 return p_bounds;
1544 }
14f9c5c9
AS
1545 else
1546 return NULL;
1547}
1548
4c4b4cd2
PH
1549/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1550 position of the field containing the address of the bounds data. */
1551
14f9c5c9 1552static int
d2e4a39e 1553fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1554{
1555 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1556}
1557
1558/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1559 size of the field containing the address of the bounds data. */
1560
14f9c5c9 1561static int
d2e4a39e 1562fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1563{
1564 type = desc_base_type (type);
1565
d2e4a39e 1566 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1567 return TYPE_FIELD_BITSIZE (type, 1);
1568 else
940da03e 1569 return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
14f9c5c9
AS
1570}
1571
4c4b4cd2 1572/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1573 pointer to one, the type of its array data (a array-with-no-bounds type);
1574 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1575 data. */
4c4b4cd2 1576
d2e4a39e 1577static struct type *
556bdfd4 1578desc_data_target_type (struct type *type)
14f9c5c9
AS
1579{
1580 type = desc_base_type (type);
1581
4c4b4cd2 1582 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1583 if (is_thin_pntr (type))
940da03e 1584 return desc_base_type (thin_descriptor_type (type)->field (1).type ());
14f9c5c9 1585 else if (is_thick_pntr (type))
556bdfd4
UW
1586 {
1587 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1588
1589 if (data_type
78134374 1590 && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
05e522ef 1591 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1592 }
1593
1594 return NULL;
14f9c5c9
AS
1595}
1596
1597/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1598 its array data. */
4c4b4cd2 1599
d2e4a39e
AS
1600static struct value *
1601desc_data (struct value *arr)
14f9c5c9 1602{
df407dfe 1603 struct type *type = value_type (arr);
5b4ee69b 1604
14f9c5c9
AS
1605 if (is_thin_pntr (type))
1606 return thin_data_pntr (arr);
1607 else if (is_thick_pntr (type))
d2e4a39e 1608 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
dda83cd7 1609 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1610 else
1611 return NULL;
1612}
1613
1614
1615/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1616 position of the field containing the address of the data. */
1617
14f9c5c9 1618static int
d2e4a39e 1619fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1620{
1621 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1622}
1623
1624/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1625 size of the field containing the address of the data. */
1626
14f9c5c9 1627static int
d2e4a39e 1628fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1629{
1630 type = desc_base_type (type);
1631
1632 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1633 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1634 else
940da03e 1635 return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
14f9c5c9
AS
1636}
1637
4c4b4cd2 1638/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1639 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1640 bound, if WHICH is 1. The first bound is I=1. */
1641
d2e4a39e
AS
1642static struct value *
1643desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1644{
250106a7
TT
1645 char bound_name[20];
1646 xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1647 which ? 'U' : 'L', i - 1);
1648 return value_struct_elt (&bounds, NULL, bound_name, NULL,
dda83cd7 1649 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1650}
1651
1652/* If BOUNDS is an array-bounds structure type, return the bit position
1653 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1654 bound, if WHICH is 1. The first bound is I=1. */
1655
14f9c5c9 1656static int
d2e4a39e 1657desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1658{
d2e4a39e 1659 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1660}
1661
1662/* If BOUNDS is an array-bounds structure type, return the bit field size
1663 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1664 bound, if WHICH is 1. The first bound is I=1. */
1665
76a01679 1666static int
d2e4a39e 1667desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1668{
1669 type = desc_base_type (type);
1670
d2e4a39e
AS
1671 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1672 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1673 else
940da03e 1674 return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
14f9c5c9
AS
1675}
1676
1677/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1678 Ith bound (numbering from 1). Otherwise, NULL. */
1679
d2e4a39e
AS
1680static struct type *
1681desc_index_type (struct type *type, int i)
14f9c5c9
AS
1682{
1683 type = desc_base_type (type);
1684
78134374 1685 if (type->code () == TYPE_CODE_STRUCT)
250106a7
TT
1686 {
1687 char bound_name[20];
1688 xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1689 return lookup_struct_elt_type (type, bound_name, 1);
1690 }
d2e4a39e 1691 else
14f9c5c9
AS
1692 return NULL;
1693}
1694
4c4b4cd2
PH
1695/* The number of index positions in the array-bounds type TYPE.
1696 Return 0 if TYPE is NULL. */
1697
14f9c5c9 1698static int
d2e4a39e 1699desc_arity (struct type *type)
14f9c5c9
AS
1700{
1701 type = desc_base_type (type);
1702
1703 if (type != NULL)
1f704f76 1704 return type->num_fields () / 2;
14f9c5c9
AS
1705 return 0;
1706}
1707
4c4b4cd2
PH
1708/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1709 an array descriptor type (representing an unconstrained array
1710 type). */
1711
76a01679
JB
1712static int
1713ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1714{
1715 if (type == NULL)
1716 return 0;
61ee279c 1717 type = ada_check_typedef (type);
78134374 1718 return (type->code () == TYPE_CODE_ARRAY
dda83cd7 1719 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1720}
1721
52ce6436 1722/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1723 * to one. */
52ce6436 1724
2c0b251b 1725static int
52ce6436
PH
1726ada_is_array_type (struct type *type)
1727{
78134374
SM
1728 while (type != NULL
1729 && (type->code () == TYPE_CODE_PTR
1730 || type->code () == TYPE_CODE_REF))
52ce6436
PH
1731 type = TYPE_TARGET_TYPE (type);
1732 return ada_is_direct_array_type (type);
1733}
1734
4c4b4cd2 1735/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1736
14f9c5c9 1737int
4c4b4cd2 1738ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1739{
1740 if (type == NULL)
1741 return 0;
61ee279c 1742 type = ada_check_typedef (type);
78134374
SM
1743 return (type->code () == TYPE_CODE_ARRAY
1744 || (type->code () == TYPE_CODE_PTR
1745 && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1746 == TYPE_CODE_ARRAY)));
14f9c5c9
AS
1747}
1748
4c4b4cd2
PH
1749/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1750
14f9c5c9 1751int
4c4b4cd2 1752ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1753{
556bdfd4 1754 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1755
1756 if (type == NULL)
1757 return 0;
61ee279c 1758 type = ada_check_typedef (type);
556bdfd4 1759 return (data_type != NULL
78134374 1760 && data_type->code () == TYPE_CODE_ARRAY
556bdfd4 1761 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1762}
1763
1764/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1765 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1766 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1767 is still needed. */
1768
14f9c5c9 1769int
ebf56fd3 1770ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1771{
d2e4a39e 1772 return
14f9c5c9 1773 type != NULL
78134374 1774 && type->code () == TYPE_CODE_STRUCT
14f9c5c9 1775 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
dda83cd7 1776 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
4c4b4cd2 1777 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1778}
1779
1780
4c4b4cd2 1781/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1782 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1783 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1784 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1785 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1786 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1787 a descriptor. */
de93309a
SM
1788
1789static struct type *
d2e4a39e 1790ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1791{
ad82864c
JB
1792 if (ada_is_constrained_packed_array_type (value_type (arr)))
1793 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1794
df407dfe
AC
1795 if (!ada_is_array_descriptor_type (value_type (arr)))
1796 return value_type (arr);
d2e4a39e
AS
1797
1798 if (!bounds)
ad82864c
JB
1799 {
1800 struct type *array_type =
1801 ada_check_typedef (desc_data_target_type (value_type (arr)));
1802
1803 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1804 TYPE_FIELD_BITSIZE (array_type, 0) =
1805 decode_packed_array_bitsize (value_type (arr));
1806
1807 return array_type;
1808 }
14f9c5c9
AS
1809 else
1810 {
d2e4a39e 1811 struct type *elt_type;
14f9c5c9 1812 int arity;
d2e4a39e 1813 struct value *descriptor;
14f9c5c9 1814
df407dfe
AC
1815 elt_type = ada_array_element_type (value_type (arr), -1);
1816 arity = ada_array_arity (value_type (arr));
14f9c5c9 1817
d2e4a39e 1818 if (elt_type == NULL || arity == 0)
dda83cd7 1819 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1820
1821 descriptor = desc_bounds (arr);
d2e4a39e 1822 if (value_as_long (descriptor) == 0)
dda83cd7 1823 return NULL;
d2e4a39e 1824 while (arity > 0)
dda83cd7
SM
1825 {
1826 struct type *range_type = alloc_type_copy (value_type (arr));
1827 struct type *array_type = alloc_type_copy (value_type (arr));
1828 struct value *low = desc_one_bound (descriptor, arity, 0);
1829 struct value *high = desc_one_bound (descriptor, arity, 1);
1830
1831 arity -= 1;
1832 create_static_range_type (range_type, value_type (low),
0c9c3474
SA
1833 longest_to_int (value_as_long (low)),
1834 longest_to_int (value_as_long (high)));
dda83cd7 1835 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1836
1837 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1838 {
1839 /* We need to store the element packed bitsize, as well as
dda83cd7 1840 recompute the array size, because it was previously
e67ad678
JB
1841 computed based on the unpacked element size. */
1842 LONGEST lo = value_as_long (low);
1843 LONGEST hi = value_as_long (high);
1844
1845 TYPE_FIELD_BITSIZE (elt_type, 0) =
1846 decode_packed_array_bitsize (value_type (arr));
1847 /* If the array has no element, then the size is already
dda83cd7 1848 zero, and does not need to be recomputed. */
e67ad678
JB
1849 if (lo < hi)
1850 {
1851 int array_bitsize =
dda83cd7 1852 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
e67ad678
JB
1853
1854 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1855 }
1856 }
dda83cd7 1857 }
14f9c5c9
AS
1858
1859 return lookup_pointer_type (elt_type);
1860 }
1861}
1862
1863/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1864 Otherwise, returns either a standard GDB array with bounds set
1865 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1866 GDB array. Returns NULL if ARR is a null fat pointer. */
1867
d2e4a39e
AS
1868struct value *
1869ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1870{
df407dfe 1871 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1872 {
d2e4a39e 1873 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1874
14f9c5c9 1875 if (arrType == NULL)
dda83cd7 1876 return NULL;
14f9c5c9
AS
1877 return value_cast (arrType, value_copy (desc_data (arr)));
1878 }
ad82864c
JB
1879 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1880 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1881 else
1882 return arr;
1883}
1884
1885/* If ARR does not represent an array, returns ARR unchanged.
1886 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1887 be ARR itself if it already is in the proper form). */
1888
720d1a40 1889struct value *
d2e4a39e 1890ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1891{
df407dfe 1892 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1893 {
d2e4a39e 1894 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1895
14f9c5c9 1896 if (arrVal == NULL)
dda83cd7 1897 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 1898 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1899 return value_ind (arrVal);
1900 }
ad82864c
JB
1901 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1902 return decode_constrained_packed_array (arr);
d2e4a39e 1903 else
14f9c5c9
AS
1904 return arr;
1905}
1906
1907/* If TYPE represents a GNAT array type, return it translated to an
1908 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1909 packing). For other types, is the identity. */
1910
d2e4a39e
AS
1911struct type *
1912ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1913{
ad82864c
JB
1914 if (ada_is_constrained_packed_array_type (type))
1915 return decode_constrained_packed_array_type (type);
17280b9f
UW
1916
1917 if (ada_is_array_descriptor_type (type))
556bdfd4 1918 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1919
1920 return type;
14f9c5c9
AS
1921}
1922
4c4b4cd2
PH
1923/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1924
ad82864c 1925static int
57567375 1926ada_is_gnat_encoded_packed_array_type (struct type *type)
14f9c5c9
AS
1927{
1928 if (type == NULL)
1929 return 0;
4c4b4cd2 1930 type = desc_base_type (type);
61ee279c 1931 type = ada_check_typedef (type);
d2e4a39e 1932 return
14f9c5c9
AS
1933 ada_type_name (type) != NULL
1934 && strstr (ada_type_name (type), "___XP") != NULL;
1935}
1936
ad82864c
JB
1937/* Non-zero iff TYPE represents a standard GNAT constrained
1938 packed-array type. */
1939
1940int
1941ada_is_constrained_packed_array_type (struct type *type)
1942{
57567375 1943 return ada_is_gnat_encoded_packed_array_type (type)
ad82864c
JB
1944 && !ada_is_array_descriptor_type (type);
1945}
1946
1947/* Non-zero iff TYPE represents an array descriptor for a
1948 unconstrained packed-array type. */
1949
1950static int
1951ada_is_unconstrained_packed_array_type (struct type *type)
1952{
57567375
TT
1953 if (!ada_is_array_descriptor_type (type))
1954 return 0;
1955
1956 if (ada_is_gnat_encoded_packed_array_type (type))
1957 return 1;
1958
1959 /* If we saw GNAT encodings, then the above code is sufficient.
1960 However, with minimal encodings, we will just have a thick
1961 pointer instead. */
1962 if (is_thick_pntr (type))
1963 {
1964 type = desc_base_type (type);
1965 /* The structure's first field is a pointer to an array, so this
1966 fetches the array type. */
1967 type = TYPE_TARGET_TYPE (type->field (0).type ());
1968 /* Now we can see if the array elements are packed. */
1969 return TYPE_FIELD_BITSIZE (type, 0) > 0;
1970 }
1971
1972 return 0;
ad82864c
JB
1973}
1974
c9a28cbe
TT
1975/* Return true if TYPE is a (Gnat-encoded) constrained packed array
1976 type, or if it is an ordinary (non-Gnat-encoded) packed array. */
1977
1978static bool
1979ada_is_any_packed_array_type (struct type *type)
1980{
1981 return (ada_is_constrained_packed_array_type (type)
1982 || (type->code () == TYPE_CODE_ARRAY
1983 && TYPE_FIELD_BITSIZE (type, 0) % 8 != 0));
1984}
1985
ad82864c
JB
1986/* Given that TYPE encodes a packed array type (constrained or unconstrained),
1987 return the size of its elements in bits. */
1988
1989static long
1990decode_packed_array_bitsize (struct type *type)
1991{
0d5cff50
DE
1992 const char *raw_name;
1993 const char *tail;
ad82864c
JB
1994 long bits;
1995
720d1a40
JB
1996 /* Access to arrays implemented as fat pointers are encoded as a typedef
1997 of the fat pointer type. We need the name of the fat pointer type
1998 to do the decoding, so strip the typedef layer. */
78134374 1999 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
2000 type = ada_typedef_target_type (type);
2001
2002 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2003 if (!raw_name)
2004 raw_name = ada_type_name (desc_base_type (type));
2005
2006 if (!raw_name)
2007 return 0;
2008
2009 tail = strstr (raw_name, "___XP");
57567375
TT
2010 if (tail == nullptr)
2011 {
2012 gdb_assert (is_thick_pntr (type));
2013 /* The structure's first field is a pointer to an array, so this
2014 fetches the array type. */
2015 type = TYPE_TARGET_TYPE (type->field (0).type ());
2016 /* Now we can see if the array elements are packed. */
2017 return TYPE_FIELD_BITSIZE (type, 0);
2018 }
ad82864c
JB
2019
2020 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2021 {
2022 lim_warning
2023 (_("could not understand bit size information on packed array"));
2024 return 0;
2025 }
2026
2027 return bits;
2028}
2029
14f9c5c9
AS
2030/* Given that TYPE is a standard GDB array type with all bounds filled
2031 in, and that the element size of its ultimate scalar constituents
2032 (that is, either its elements, or, if it is an array of arrays, its
2033 elements' elements, etc.) is *ELT_BITS, return an identical type,
2034 but with the bit sizes of its elements (and those of any
2035 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2036 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2037 in bits.
2038
2039 Note that, for arrays whose index type has an XA encoding where
2040 a bound references a record discriminant, getting that discriminant,
2041 and therefore the actual value of that bound, is not possible
2042 because none of the given parameters gives us access to the record.
2043 This function assumes that it is OK in the context where it is being
2044 used to return an array whose bounds are still dynamic and where
2045 the length is arbitrary. */
4c4b4cd2 2046
d2e4a39e 2047static struct type *
ad82864c 2048constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2049{
d2e4a39e
AS
2050 struct type *new_elt_type;
2051 struct type *new_type;
99b1c762
JB
2052 struct type *index_type_desc;
2053 struct type *index_type;
14f9c5c9
AS
2054 LONGEST low_bound, high_bound;
2055
61ee279c 2056 type = ada_check_typedef (type);
78134374 2057 if (type->code () != TYPE_CODE_ARRAY)
14f9c5c9
AS
2058 return type;
2059
99b1c762
JB
2060 index_type_desc = ada_find_parallel_type (type, "___XA");
2061 if (index_type_desc)
940da03e 2062 index_type = to_fixed_range_type (index_type_desc->field (0).type (),
99b1c762
JB
2063 NULL);
2064 else
3d967001 2065 index_type = type->index_type ();
99b1c762 2066
e9bb382b 2067 new_type = alloc_type_copy (type);
ad82864c
JB
2068 new_elt_type =
2069 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2070 elt_bits);
99b1c762 2071 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9 2072 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
d0e39ea2 2073 new_type->set_name (ada_type_name (type));
14f9c5c9 2074
78134374 2075 if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
4a46959e 2076 && is_dynamic_type (check_typedef (index_type)))
1f8d2881 2077 || !get_discrete_bounds (index_type, &low_bound, &high_bound))
14f9c5c9
AS
2078 low_bound = high_bound = 0;
2079 if (high_bound < low_bound)
2080 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2081 else
14f9c5c9
AS
2082 {
2083 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2084 TYPE_LENGTH (new_type) =
dda83cd7 2085 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2086 }
2087
9cdd0d12 2088 new_type->set_is_fixed_instance (true);
14f9c5c9
AS
2089 return new_type;
2090}
2091
ad82864c
JB
2092/* The array type encoded by TYPE, where
2093 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2094
d2e4a39e 2095static struct type *
ad82864c 2096decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2097{
0d5cff50 2098 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2099 char *name;
0d5cff50 2100 const char *tail;
d2e4a39e 2101 struct type *shadow_type;
14f9c5c9 2102 long bits;
14f9c5c9 2103
727e3d2e
JB
2104 if (!raw_name)
2105 raw_name = ada_type_name (desc_base_type (type));
2106
2107 if (!raw_name)
2108 return NULL;
2109
2110 name = (char *) alloca (strlen (raw_name) + 1);
2111 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2112 type = desc_base_type (type);
2113
14f9c5c9
AS
2114 memcpy (name, raw_name, tail - raw_name);
2115 name[tail - raw_name] = '\000';
2116
b4ba55a1
JB
2117 shadow_type = ada_find_parallel_type_with_name (type, name);
2118
2119 if (shadow_type == NULL)
14f9c5c9 2120 {
323e0a4a 2121 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2122 return NULL;
2123 }
f168693b 2124 shadow_type = check_typedef (shadow_type);
14f9c5c9 2125
78134374 2126 if (shadow_type->code () != TYPE_CODE_ARRAY)
14f9c5c9 2127 {
0963b4bd
MS
2128 lim_warning (_("could not understand bounds "
2129 "information on packed array"));
14f9c5c9
AS
2130 return NULL;
2131 }
d2e4a39e 2132
ad82864c
JB
2133 bits = decode_packed_array_bitsize (type);
2134 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2135}
2136
a7400e44
TT
2137/* Helper function for decode_constrained_packed_array. Set the field
2138 bitsize on a series of packed arrays. Returns the number of
2139 elements in TYPE. */
2140
2141static LONGEST
2142recursively_update_array_bitsize (struct type *type)
2143{
2144 gdb_assert (type->code () == TYPE_CODE_ARRAY);
2145
2146 LONGEST low, high;
1f8d2881 2147 if (!get_discrete_bounds (type->index_type (), &low, &high)
a7400e44
TT
2148 || low > high)
2149 return 0;
2150 LONGEST our_len = high - low + 1;
2151
2152 struct type *elt_type = TYPE_TARGET_TYPE (type);
2153 if (elt_type->code () == TYPE_CODE_ARRAY)
2154 {
2155 LONGEST elt_len = recursively_update_array_bitsize (elt_type);
2156 LONGEST elt_bitsize = elt_len * TYPE_FIELD_BITSIZE (elt_type, 0);
2157 TYPE_FIELD_BITSIZE (type, 0) = elt_bitsize;
2158
2159 TYPE_LENGTH (type) = ((our_len * elt_bitsize + HOST_CHAR_BIT - 1)
2160 / HOST_CHAR_BIT);
2161 }
2162
2163 return our_len;
2164}
2165
ad82864c
JB
2166/* Given that ARR is a struct value *indicating a GNAT constrained packed
2167 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2168 standard GDB array type except that the BITSIZEs of the array
2169 target types are set to the number of bits in each element, and the
4c4b4cd2 2170 type length is set appropriately. */
14f9c5c9 2171
d2e4a39e 2172static struct value *
ad82864c 2173decode_constrained_packed_array (struct value *arr)
14f9c5c9 2174{
4c4b4cd2 2175 struct type *type;
14f9c5c9 2176
11aa919a
PMR
2177 /* If our value is a pointer, then dereference it. Likewise if
2178 the value is a reference. Make sure that this operation does not
2179 cause the target type to be fixed, as this would indirectly cause
2180 this array to be decoded. The rest of the routine assumes that
2181 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2182 and "value_ind" routines to perform the dereferencing, as opposed
2183 to using "ada_coerce_ref" or "ada_value_ind". */
2184 arr = coerce_ref (arr);
78134374 2185 if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
284614f0 2186 arr = value_ind (arr);
4c4b4cd2 2187
ad82864c 2188 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2189 if (type == NULL)
2190 {
323e0a4a 2191 error (_("can't unpack array"));
14f9c5c9
AS
2192 return NULL;
2193 }
61ee279c 2194
a7400e44
TT
2195 /* Decoding the packed array type could not correctly set the field
2196 bitsizes for any dimension except the innermost, because the
2197 bounds may be variable and were not passed to that function. So,
2198 we further resolve the array bounds here and then update the
2199 sizes. */
2200 const gdb_byte *valaddr = value_contents_for_printing (arr);
2201 CORE_ADDR address = value_address (arr);
2202 gdb::array_view<const gdb_byte> view
2203 = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
2204 type = resolve_dynamic_type (type, view, address);
2205 recursively_update_array_bitsize (type);
2206
d5a22e77 2207 if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
32c9a795 2208 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2209 {
2210 /* This is a (right-justified) modular type representing a packed
2211 array with no wrapper. In order to interpret the value through
2212 the (left-justified) packed array type we just built, we must
2213 first left-justify it. */
2214 int bit_size, bit_pos;
2215 ULONGEST mod;
2216
df407dfe 2217 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2218 bit_size = 0;
2219 while (mod > 0)
2220 {
2221 bit_size += 1;
2222 mod >>= 1;
2223 }
df407dfe 2224 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2225 arr = ada_value_primitive_packed_val (arr, NULL,
2226 bit_pos / HOST_CHAR_BIT,
2227 bit_pos % HOST_CHAR_BIT,
2228 bit_size,
2229 type);
2230 }
2231
4c4b4cd2 2232 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2233}
2234
2235
2236/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2237 given in IND. ARR must be a simple array. */
14f9c5c9 2238
d2e4a39e
AS
2239static struct value *
2240value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2241{
2242 int i;
2243 int bits, elt_off, bit_off;
2244 long elt_total_bit_offset;
d2e4a39e
AS
2245 struct type *elt_type;
2246 struct value *v;
14f9c5c9
AS
2247
2248 bits = 0;
2249 elt_total_bit_offset = 0;
df407dfe 2250 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2251 for (i = 0; i < arity; i += 1)
14f9c5c9 2252 {
78134374 2253 if (elt_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
2254 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2255 error
2256 (_("attempt to do packed indexing of "
0963b4bd 2257 "something other than a packed array"));
14f9c5c9 2258 else
dda83cd7
SM
2259 {
2260 struct type *range_type = elt_type->index_type ();
2261 LONGEST lowerbound, upperbound;
2262 LONGEST idx;
2263
1f8d2881 2264 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
dda83cd7
SM
2265 {
2266 lim_warning (_("don't know bounds of array"));
2267 lowerbound = upperbound = 0;
2268 }
2269
2270 idx = pos_atr (ind[i]);
2271 if (idx < lowerbound || idx > upperbound)
2272 lim_warning (_("packed array index %ld out of bounds"),
0963b4bd 2273 (long) idx);
dda83cd7
SM
2274 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2275 elt_total_bit_offset += (idx - lowerbound) * bits;
2276 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2277 }
14f9c5c9
AS
2278 }
2279 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2280 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2281
2282 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
dda83cd7 2283 bits, elt_type);
14f9c5c9
AS
2284 return v;
2285}
2286
4c4b4cd2 2287/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2288
2289static int
d2e4a39e 2290has_negatives (struct type *type)
14f9c5c9 2291{
78134374 2292 switch (type->code ())
d2e4a39e
AS
2293 {
2294 default:
2295 return 0;
2296 case TYPE_CODE_INT:
c6d940a9 2297 return !type->is_unsigned ();
d2e4a39e 2298 case TYPE_CODE_RANGE:
5537ddd0 2299 return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
d2e4a39e 2300 }
14f9c5c9 2301}
d2e4a39e 2302
f93fca70 2303/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
5b639dea 2304 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
f93fca70 2305 the unpacked buffer.
14f9c5c9 2306
5b639dea
JB
2307 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2308 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2309
f93fca70
JB
2310 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2311 zero otherwise.
14f9c5c9 2312
f93fca70 2313 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2314
f93fca70
JB
2315 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2316
2317static void
2318ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2319 gdb_byte *unpacked, int unpacked_len,
2320 int is_big_endian, int is_signed_type,
2321 int is_scalar)
2322{
a1c95e6b
JB
2323 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2324 int src_idx; /* Index into the source area */
2325 int src_bytes_left; /* Number of source bytes left to process. */
2326 int srcBitsLeft; /* Number of source bits left to move */
2327 int unusedLS; /* Number of bits in next significant
dda83cd7 2328 byte of source that are unused */
a1c95e6b 2329
a1c95e6b
JB
2330 int unpacked_idx; /* Index into the unpacked buffer */
2331 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2332
4c4b4cd2 2333 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2334 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2335 unsigned char sign;
a1c95e6b 2336
4c4b4cd2
PH
2337 /* Transmit bytes from least to most significant; delta is the direction
2338 the indices move. */
f93fca70 2339 int delta = is_big_endian ? -1 : 1;
14f9c5c9 2340
5b639dea
JB
2341 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2342 bits from SRC. .*/
2343 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2344 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2345 bit_size, unpacked_len);
2346
14f9c5c9 2347 srcBitsLeft = bit_size;
086ca51f 2348 src_bytes_left = src_len;
f93fca70 2349 unpacked_bytes_left = unpacked_len;
14f9c5c9 2350 sign = 0;
f93fca70
JB
2351
2352 if (is_big_endian)
14f9c5c9 2353 {
086ca51f 2354 src_idx = src_len - 1;
f93fca70
JB
2355 if (is_signed_type
2356 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
dda83cd7 2357 sign = ~0;
d2e4a39e
AS
2358
2359 unusedLS =
dda83cd7
SM
2360 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2361 % HOST_CHAR_BIT;
14f9c5c9 2362
f93fca70
JB
2363 if (is_scalar)
2364 {
dda83cd7
SM
2365 accumSize = 0;
2366 unpacked_idx = unpacked_len - 1;
f93fca70
JB
2367 }
2368 else
2369 {
dda83cd7
SM
2370 /* Non-scalar values must be aligned at a byte boundary... */
2371 accumSize =
2372 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2373 /* ... And are placed at the beginning (most-significant) bytes
2374 of the target. */
2375 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2376 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2377 }
14f9c5c9 2378 }
d2e4a39e 2379 else
14f9c5c9
AS
2380 {
2381 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2382
086ca51f 2383 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2384 unusedLS = bit_offset;
2385 accumSize = 0;
2386
f93fca70 2387 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
dda83cd7 2388 sign = ~0;
14f9c5c9 2389 }
d2e4a39e 2390
14f9c5c9 2391 accum = 0;
086ca51f 2392 while (src_bytes_left > 0)
14f9c5c9
AS
2393 {
2394 /* Mask for removing bits of the next source byte that are not
dda83cd7 2395 part of the value. */
d2e4a39e 2396 unsigned int unusedMSMask =
dda83cd7
SM
2397 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2398 1;
4c4b4cd2 2399 /* Sign-extend bits for this byte. */
14f9c5c9 2400 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2401
d2e4a39e 2402 accum |=
dda83cd7 2403 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2404 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2405 if (accumSize >= HOST_CHAR_BIT)
dda83cd7
SM
2406 {
2407 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2408 accumSize -= HOST_CHAR_BIT;
2409 accum >>= HOST_CHAR_BIT;
2410 unpacked_bytes_left -= 1;
2411 unpacked_idx += delta;
2412 }
14f9c5c9
AS
2413 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2414 unusedLS = 0;
086ca51f
JB
2415 src_bytes_left -= 1;
2416 src_idx += delta;
14f9c5c9 2417 }
086ca51f 2418 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2419 {
2420 accum |= sign << accumSize;
db297a65 2421 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
14f9c5c9 2422 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2423 if (accumSize < 0)
2424 accumSize = 0;
14f9c5c9 2425 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2426 unpacked_bytes_left -= 1;
2427 unpacked_idx += delta;
14f9c5c9 2428 }
f93fca70
JB
2429}
2430
2431/* Create a new value of type TYPE from the contents of OBJ starting
2432 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2433 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2434 assigning through the result will set the field fetched from.
2435 VALADDR is ignored unless OBJ is NULL, in which case,
2436 VALADDR+OFFSET must address the start of storage containing the
2437 packed value. The value returned in this case is never an lval.
2438 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2439
2440struct value *
2441ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2442 long offset, int bit_offset, int bit_size,
dda83cd7 2443 struct type *type)
f93fca70
JB
2444{
2445 struct value *v;
bfb1c796 2446 const gdb_byte *src; /* First byte containing data to unpack */
f93fca70 2447 gdb_byte *unpacked;
220475ed 2448 const int is_scalar = is_scalar_type (type);
d5a22e77 2449 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d5722aa2 2450 gdb::byte_vector staging;
f93fca70
JB
2451
2452 type = ada_check_typedef (type);
2453
d0a9e810 2454 if (obj == NULL)
bfb1c796 2455 src = valaddr + offset;
d0a9e810 2456 else
bfb1c796 2457 src = value_contents (obj) + offset;
d0a9e810
JB
2458
2459 if (is_dynamic_type (type))
2460 {
2461 /* The length of TYPE might by dynamic, so we need to resolve
2462 TYPE in order to know its actual size, which we then use
2463 to create the contents buffer of the value we return.
2464 The difficulty is that the data containing our object is
2465 packed, and therefore maybe not at a byte boundary. So, what
2466 we do, is unpack the data into a byte-aligned buffer, and then
2467 use that buffer as our object's value for resolving the type. */
d5722aa2
PA
2468 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2469 staging.resize (staging_len);
d0a9e810
JB
2470
2471 ada_unpack_from_contents (src, bit_offset, bit_size,
dda83cd7 2472 staging.data (), staging.size (),
d0a9e810
JB
2473 is_big_endian, has_negatives (type),
2474 is_scalar);
b249d2c2 2475 type = resolve_dynamic_type (type, staging, 0);
0cafa88c
JB
2476 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2477 {
2478 /* This happens when the length of the object is dynamic,
2479 and is actually smaller than the space reserved for it.
2480 For instance, in an array of variant records, the bit_size
2481 we're given is the array stride, which is constant and
2482 normally equal to the maximum size of its element.
2483 But, in reality, each element only actually spans a portion
2484 of that stride. */
2485 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2486 }
d0a9e810
JB
2487 }
2488
f93fca70
JB
2489 if (obj == NULL)
2490 {
2491 v = allocate_value (type);
bfb1c796 2492 src = valaddr + offset;
f93fca70
JB
2493 }
2494 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2495 {
0cafa88c 2496 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
bfb1c796 2497 gdb_byte *buf;
0cafa88c 2498
f93fca70 2499 v = value_at (type, value_address (obj) + offset);
bfb1c796
PA
2500 buf = (gdb_byte *) alloca (src_len);
2501 read_memory (value_address (v), buf, src_len);
2502 src = buf;
f93fca70
JB
2503 }
2504 else
2505 {
2506 v = allocate_value (type);
bfb1c796 2507 src = value_contents (obj) + offset;
f93fca70
JB
2508 }
2509
2510 if (obj != NULL)
2511 {
2512 long new_offset = offset;
2513
2514 set_value_component_location (v, obj);
2515 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2516 set_value_bitsize (v, bit_size);
2517 if (value_bitpos (v) >= HOST_CHAR_BIT)
dda83cd7 2518 {
f93fca70 2519 ++new_offset;
dda83cd7
SM
2520 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2521 }
f93fca70
JB
2522 set_value_offset (v, new_offset);
2523
2524 /* Also set the parent value. This is needed when trying to
2525 assign a new value (in inferior memory). */
2526 set_value_parent (v, obj);
2527 }
2528 else
2529 set_value_bitsize (v, bit_size);
bfb1c796 2530 unpacked = value_contents_writeable (v);
f93fca70
JB
2531
2532 if (bit_size == 0)
2533 {
2534 memset (unpacked, 0, TYPE_LENGTH (type));
2535 return v;
2536 }
2537
d5722aa2 2538 if (staging.size () == TYPE_LENGTH (type))
f93fca70 2539 {
d0a9e810
JB
2540 /* Small short-cut: If we've unpacked the data into a buffer
2541 of the same size as TYPE's length, then we can reuse that,
2542 instead of doing the unpacking again. */
d5722aa2 2543 memcpy (unpacked, staging.data (), staging.size ());
f93fca70 2544 }
d0a9e810
JB
2545 else
2546 ada_unpack_from_contents (src, bit_offset, bit_size,
2547 unpacked, TYPE_LENGTH (type),
2548 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2549
14f9c5c9
AS
2550 return v;
2551}
d2e4a39e 2552
14f9c5c9
AS
2553/* Store the contents of FROMVAL into the location of TOVAL.
2554 Return a new value with the location of TOVAL and contents of
2555 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2556 floating-point or non-scalar types. */
14f9c5c9 2557
d2e4a39e
AS
2558static struct value *
2559ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2560{
df407dfe
AC
2561 struct type *type = value_type (toval);
2562 int bits = value_bitsize (toval);
14f9c5c9 2563
52ce6436
PH
2564 toval = ada_coerce_ref (toval);
2565 fromval = ada_coerce_ref (fromval);
2566
2567 if (ada_is_direct_array_type (value_type (toval)))
2568 toval = ada_coerce_to_simple_array (toval);
2569 if (ada_is_direct_array_type (value_type (fromval)))
2570 fromval = ada_coerce_to_simple_array (fromval);
2571
88e3b34b 2572 if (!deprecated_value_modifiable (toval))
323e0a4a 2573 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2574
d2e4a39e 2575 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2576 && bits > 0
78134374 2577 && (type->code () == TYPE_CODE_FLT
dda83cd7 2578 || type->code () == TYPE_CODE_STRUCT))
14f9c5c9 2579 {
df407dfe
AC
2580 int len = (value_bitpos (toval)
2581 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2582 int from_size;
224c3ddb 2583 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2584 struct value *val;
42ae5230 2585 CORE_ADDR to_addr = value_address (toval);
14f9c5c9 2586
78134374 2587 if (type->code () == TYPE_CODE_FLT)
dda83cd7 2588 fromval = value_cast (type, fromval);
14f9c5c9 2589
52ce6436 2590 read_memory (to_addr, buffer, len);
aced2898
PH
2591 from_size = value_bitsize (fromval);
2592 if (from_size == 0)
2593 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
d48e62f4 2594
d5a22e77 2595 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d48e62f4
TT
2596 ULONGEST from_offset = 0;
2597 if (is_big_endian && is_scalar_type (value_type (fromval)))
2598 from_offset = from_size - bits;
2599 copy_bitwise (buffer, value_bitpos (toval),
2600 value_contents (fromval), from_offset,
2601 bits, is_big_endian);
972daa01 2602 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2603
14f9c5c9 2604 val = value_copy (toval);
0fd88904 2605 memcpy (value_contents_raw (val), value_contents (fromval),
dda83cd7 2606 TYPE_LENGTH (type));
04624583 2607 deprecated_set_value_type (val, type);
d2e4a39e 2608
14f9c5c9
AS
2609 return val;
2610 }
2611
2612 return value_assign (toval, fromval);
2613}
2614
2615
7c512744
JB
2616/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2617 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2618 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2619 COMPONENT, and not the inferior's memory. The current contents
2620 of COMPONENT are ignored.
2621
2622 Although not part of the initial design, this function also works
2623 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2624 had a null address, and COMPONENT had an address which is equal to
2625 its offset inside CONTAINER. */
2626
52ce6436
PH
2627static void
2628value_assign_to_component (struct value *container, struct value *component,
2629 struct value *val)
2630{
2631 LONGEST offset_in_container =
42ae5230 2632 (LONGEST) (value_address (component) - value_address (container));
7c512744 2633 int bit_offset_in_container =
52ce6436
PH
2634 value_bitpos (component) - value_bitpos (container);
2635 int bits;
7c512744 2636
52ce6436
PH
2637 val = value_cast (value_type (component), val);
2638
2639 if (value_bitsize (component) == 0)
2640 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2641 else
2642 bits = value_bitsize (component);
2643
d5a22e77 2644 if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2a62dfa9
JB
2645 {
2646 int src_offset;
2647
2648 if (is_scalar_type (check_typedef (value_type (component))))
dda83cd7 2649 src_offset
2a62dfa9
JB
2650 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2651 else
2652 src_offset = 0;
a99bc3d2
JB
2653 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2654 value_bitpos (container) + bit_offset_in_container,
2655 value_contents (val), src_offset, bits, 1);
2a62dfa9 2656 }
52ce6436 2657 else
a99bc3d2
JB
2658 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2659 value_bitpos (container) + bit_offset_in_container,
2660 value_contents (val), 0, bits, 0);
7c512744
JB
2661}
2662
736ade86
XR
2663/* Determine if TYPE is an access to an unconstrained array. */
2664
d91e9ea8 2665bool
736ade86
XR
2666ada_is_access_to_unconstrained_array (struct type *type)
2667{
78134374 2668 return (type->code () == TYPE_CODE_TYPEDEF
736ade86
XR
2669 && is_thick_pntr (ada_typedef_target_type (type)));
2670}
2671
4c4b4cd2
PH
2672/* The value of the element of array ARR at the ARITY indices given in IND.
2673 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2674 thereto. */
2675
d2e4a39e
AS
2676struct value *
2677ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2678{
2679 int k;
d2e4a39e
AS
2680 struct value *elt;
2681 struct type *elt_type;
14f9c5c9
AS
2682
2683 elt = ada_coerce_to_simple_array (arr);
2684
df407dfe 2685 elt_type = ada_check_typedef (value_type (elt));
78134374 2686 if (elt_type->code () == TYPE_CODE_ARRAY
14f9c5c9
AS
2687 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2688 return value_subscript_packed (elt, arity, ind);
2689
2690 for (k = 0; k < arity; k += 1)
2691 {
b9c50e9a
XR
2692 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2693
78134374 2694 if (elt_type->code () != TYPE_CODE_ARRAY)
dda83cd7 2695 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2696
2497b498 2697 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2698
2699 if (ada_is_access_to_unconstrained_array (saved_elt_type)
78134374 2700 && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
b9c50e9a
XR
2701 {
2702 /* The element is a typedef to an unconstrained array,
2703 except that the value_subscript call stripped the
2704 typedef layer. The typedef layer is GNAT's way to
2705 specify that the element is, at the source level, an
2706 access to the unconstrained array, rather than the
2707 unconstrained array. So, we need to restore that
2708 typedef layer, which we can do by forcing the element's
2709 type back to its original type. Otherwise, the returned
2710 value is going to be printed as the array, rather
2711 than as an access. Another symptom of the same issue
2712 would be that an expression trying to dereference the
2713 element would also be improperly rejected. */
2714 deprecated_set_value_type (elt, saved_elt_type);
2715 }
2716
2717 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2718 }
b9c50e9a 2719
14f9c5c9
AS
2720 return elt;
2721}
2722
deede10c
JB
2723/* Assuming ARR is a pointer to a GDB array, the value of the element
2724 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2725 Does not read the entire array into memory.
2726
2727 Note: Unlike what one would expect, this function is used instead of
2728 ada_value_subscript for basically all non-packed array types. The reason
2729 for this is that a side effect of doing our own pointer arithmetics instead
2730 of relying on value_subscript is that there is no implicit typedef peeling.
2731 This is important for arrays of array accesses, where it allows us to
2732 preserve the fact that the array's element is an array access, where the
2733 access part os encoded in a typedef layer. */
14f9c5c9 2734
2c0b251b 2735static struct value *
deede10c 2736ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2737{
2738 int k;
919e6dbe 2739 struct value *array_ind = ada_value_ind (arr);
deede10c 2740 struct type *type
919e6dbe
PMR
2741 = check_typedef (value_enclosing_type (array_ind));
2742
78134374 2743 if (type->code () == TYPE_CODE_ARRAY
919e6dbe
PMR
2744 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2745 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2746
2747 for (k = 0; k < arity; k += 1)
2748 {
2749 LONGEST lwb, upb;
14f9c5c9 2750
78134374 2751 if (type->code () != TYPE_CODE_ARRAY)
dda83cd7 2752 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2753 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
dda83cd7 2754 value_copy (arr));
3d967001 2755 get_discrete_bounds (type->index_type (), &lwb, &upb);
53a47a3e 2756 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2757 type = TYPE_TARGET_TYPE (type);
2758 }
2759
2760 return value_ind (arr);
2761}
2762
0b5d8877 2763/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2764 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2765 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2766 this array is LOW, as per Ada rules. */
0b5d8877 2767static struct value *
f5938064 2768ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
dda83cd7 2769 int low, int high)
0b5d8877 2770{
b0dd7688 2771 struct type *type0 = ada_check_typedef (type);
3d967001 2772 struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ());
0c9c3474 2773 struct type *index_type
aa715135 2774 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2775 struct type *slice_type = create_array_type_with_stride
2776 (NULL, TYPE_TARGET_TYPE (type0), index_type,
24e99c6c 2777 type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2778 TYPE_FIELD_BITSIZE (type0, 0));
3d967001 2779 int base_low = ada_discrete_type_low_bound (type0->index_type ());
6244c119 2780 gdb::optional<LONGEST> base_low_pos, low_pos;
aa715135
JG
2781 CORE_ADDR base;
2782
6244c119
SM
2783 low_pos = discrete_position (base_index_type, low);
2784 base_low_pos = discrete_position (base_index_type, base_low);
2785
2786 if (!low_pos.has_value () || !base_low_pos.has_value ())
aa715135
JG
2787 {
2788 warning (_("unable to get positions in slice, use bounds instead"));
2789 low_pos = low;
2790 base_low_pos = base_low;
2791 }
5b4ee69b 2792
7ff5b937
TT
2793 ULONGEST stride = TYPE_FIELD_BITSIZE (slice_type, 0) / 8;
2794 if (stride == 0)
2795 stride = TYPE_LENGTH (TYPE_TARGET_TYPE (type0));
2796
6244c119 2797 base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
f5938064 2798 return value_at_lazy (slice_type, base);
0b5d8877
PH
2799}
2800
2801
2802static struct value *
2803ada_value_slice (struct value *array, int low, int high)
2804{
b0dd7688 2805 struct type *type = ada_check_typedef (value_type (array));
3d967001 2806 struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
0c9c3474 2807 struct type *index_type
3d967001 2808 = create_static_range_type (NULL, type->index_type (), low, high);
9fe561ab
JB
2809 struct type *slice_type = create_array_type_with_stride
2810 (NULL, TYPE_TARGET_TYPE (type), index_type,
24e99c6c 2811 type->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2812 TYPE_FIELD_BITSIZE (type, 0));
6244c119
SM
2813 gdb::optional<LONGEST> low_pos, high_pos;
2814
5b4ee69b 2815
6244c119
SM
2816 low_pos = discrete_position (base_index_type, low);
2817 high_pos = discrete_position (base_index_type, high);
2818
2819 if (!low_pos.has_value () || !high_pos.has_value ())
aa715135
JG
2820 {
2821 warning (_("unable to get positions in slice, use bounds instead"));
2822 low_pos = low;
2823 high_pos = high;
2824 }
2825
2826 return value_cast (slice_type,
6244c119 2827 value_slice (array, low, *high_pos - *low_pos + 1));
0b5d8877
PH
2828}
2829
14f9c5c9
AS
2830/* If type is a record type in the form of a standard GNAT array
2831 descriptor, returns the number of dimensions for type. If arr is a
2832 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2833 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2834
2835int
d2e4a39e 2836ada_array_arity (struct type *type)
14f9c5c9
AS
2837{
2838 int arity;
2839
2840 if (type == NULL)
2841 return 0;
2842
2843 type = desc_base_type (type);
2844
2845 arity = 0;
78134374 2846 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9 2847 return desc_arity (desc_bounds_type (type));
d2e4a39e 2848 else
78134374 2849 while (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2850 {
dda83cd7
SM
2851 arity += 1;
2852 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2853 }
d2e4a39e 2854
14f9c5c9
AS
2855 return arity;
2856}
2857
2858/* If TYPE is a record type in the form of a standard GNAT array
2859 descriptor or a simple array type, returns the element type for
2860 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2861 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2862
d2e4a39e
AS
2863struct type *
2864ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2865{
2866 type = desc_base_type (type);
2867
78134374 2868 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
2869 {
2870 int k;
d2e4a39e 2871 struct type *p_array_type;
14f9c5c9 2872
556bdfd4 2873 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2874
2875 k = ada_array_arity (type);
2876 if (k == 0)
dda83cd7 2877 return NULL;
d2e4a39e 2878
4c4b4cd2 2879 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2880 if (nindices >= 0 && k > nindices)
dda83cd7 2881 k = nindices;
d2e4a39e 2882 while (k > 0 && p_array_type != NULL)
dda83cd7
SM
2883 {
2884 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2885 k -= 1;
2886 }
14f9c5c9
AS
2887 return p_array_type;
2888 }
78134374 2889 else if (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2890 {
78134374 2891 while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
dda83cd7
SM
2892 {
2893 type = TYPE_TARGET_TYPE (type);
2894 nindices -= 1;
2895 }
14f9c5c9
AS
2896 return type;
2897 }
2898
2899 return NULL;
2900}
2901
4c4b4cd2 2902/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2903 Does not examine memory. Throws an error if N is invalid or TYPE
2904 is not an array type. NAME is the name of the Ada attribute being
2905 evaluated ('range, 'first, 'last, or 'length); it is used in building
2906 the error message. */
14f9c5c9 2907
1eea4ebd
UW
2908static struct type *
2909ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2910{
4c4b4cd2
PH
2911 struct type *result_type;
2912
14f9c5c9
AS
2913 type = desc_base_type (type);
2914
1eea4ebd
UW
2915 if (n < 0 || n > ada_array_arity (type))
2916 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2917
4c4b4cd2 2918 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2919 {
2920 int i;
2921
2922 for (i = 1; i < n; i += 1)
dda83cd7 2923 type = TYPE_TARGET_TYPE (type);
3d967001 2924 result_type = TYPE_TARGET_TYPE (type->index_type ());
4c4b4cd2 2925 /* FIXME: The stabs type r(0,0);bound;bound in an array type
dda83cd7
SM
2926 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2927 perhaps stabsread.c would make more sense. */
78134374 2928 if (result_type && result_type->code () == TYPE_CODE_UNDEF)
dda83cd7 2929 result_type = NULL;
14f9c5c9 2930 }
d2e4a39e 2931 else
1eea4ebd
UW
2932 {
2933 result_type = desc_index_type (desc_bounds_type (type), n);
2934 if (result_type == NULL)
2935 error (_("attempt to take bound of something that is not an array"));
2936 }
2937
2938 return result_type;
14f9c5c9
AS
2939}
2940
2941/* Given that arr is an array type, returns the lower bound of the
2942 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2943 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2944 array-descriptor type. It works for other arrays with bounds supplied
2945 by run-time quantities other than discriminants. */
14f9c5c9 2946
abb68b3e 2947static LONGEST
fb5e3d5c 2948ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2949{
8a48ac95 2950 struct type *type, *index_type_desc, *index_type;
1ce677a4 2951 int i;
262452ec
JK
2952
2953 gdb_assert (which == 0 || which == 1);
14f9c5c9 2954
ad82864c
JB
2955 if (ada_is_constrained_packed_array_type (arr_type))
2956 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2957
4c4b4cd2 2958 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2959 return (LONGEST) - which;
14f9c5c9 2960
78134374 2961 if (arr_type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
2962 type = TYPE_TARGET_TYPE (arr_type);
2963 else
2964 type = arr_type;
2965
22c4c60c 2966 if (type->is_fixed_instance ())
bafffb51
JB
2967 {
2968 /* The array has already been fixed, so we do not need to
2969 check the parallel ___XA type again. That encoding has
2970 already been applied, so ignore it now. */
2971 index_type_desc = NULL;
2972 }
2973 else
2974 {
2975 index_type_desc = ada_find_parallel_type (type, "___XA");
2976 ada_fixup_array_indexes_type (index_type_desc);
2977 }
2978
262452ec 2979 if (index_type_desc != NULL)
940da03e 2980 index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
28c85d6c 2981 NULL);
262452ec 2982 else
8a48ac95
JB
2983 {
2984 struct type *elt_type = check_typedef (type);
2985
2986 for (i = 1; i < n; i++)
2987 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2988
3d967001 2989 index_type = elt_type->index_type ();
8a48ac95 2990 }
262452ec 2991
43bbcdc2
PH
2992 return
2993 (LONGEST) (which == 0
dda83cd7
SM
2994 ? ada_discrete_type_low_bound (index_type)
2995 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2996}
2997
2998/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
2999 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3000 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3001 supplied by run-time quantities other than discriminants. */
14f9c5c9 3002
1eea4ebd 3003static LONGEST
4dc81987 3004ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3005{
eb479039
JB
3006 struct type *arr_type;
3007
78134374 3008 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3009 arr = value_ind (arr);
3010 arr_type = value_enclosing_type (arr);
14f9c5c9 3011
ad82864c
JB
3012 if (ada_is_constrained_packed_array_type (arr_type))
3013 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3014 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3015 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3016 else
1eea4ebd 3017 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3018}
3019
3020/* Given that arr is an array value, returns the length of the
3021 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3022 supplied by run-time quantities other than discriminants.
3023 Does not work for arrays indexed by enumeration types with representation
3024 clauses at the moment. */
14f9c5c9 3025
1eea4ebd 3026static LONGEST
d2e4a39e 3027ada_array_length (struct value *arr, int n)
14f9c5c9 3028{
aa715135
JG
3029 struct type *arr_type, *index_type;
3030 int low, high;
eb479039 3031
78134374 3032 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3033 arr = value_ind (arr);
3034 arr_type = value_enclosing_type (arr);
14f9c5c9 3035
ad82864c
JB
3036 if (ada_is_constrained_packed_array_type (arr_type))
3037 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3038
4c4b4cd2 3039 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3040 {
3041 low = ada_array_bound_from_type (arr_type, n, 0);
3042 high = ada_array_bound_from_type (arr_type, n, 1);
3043 }
14f9c5c9 3044 else
aa715135
JG
3045 {
3046 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3047 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3048 }
3049
f168693b 3050 arr_type = check_typedef (arr_type);
7150d33c 3051 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3052 if (index_type != NULL)
3053 {
3054 struct type *base_type;
78134374 3055 if (index_type->code () == TYPE_CODE_RANGE)
aa715135
JG
3056 base_type = TYPE_TARGET_TYPE (index_type);
3057 else
3058 base_type = index_type;
3059
3060 low = pos_atr (value_from_longest (base_type, low));
3061 high = pos_atr (value_from_longest (base_type, high));
3062 }
3063 return high - low + 1;
4c4b4cd2
PH
3064}
3065
bff8c71f
TT
3066/* An array whose type is that of ARR_TYPE (an array type), with
3067 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3068 less than LOW, then LOW-1 is used. */
4c4b4cd2
PH
3069
3070static struct value *
bff8c71f 3071empty_array (struct type *arr_type, int low, int high)
4c4b4cd2 3072{
b0dd7688 3073 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3074 struct type *index_type
3075 = create_static_range_type
dda83cd7 3076 (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
bff8c71f 3077 high < low ? low - 1 : high);
b0dd7688 3078 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3079
0b5d8877 3080 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3081}
14f9c5c9 3082\f
d2e4a39e 3083
dda83cd7 3084 /* Name resolution */
14f9c5c9 3085
4c4b4cd2
PH
3086/* The "decoded" name for the user-definable Ada operator corresponding
3087 to OP. */
14f9c5c9 3088
d2e4a39e 3089static const char *
4c4b4cd2 3090ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3091{
3092 int i;
3093
4c4b4cd2 3094 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3095 {
3096 if (ada_opname_table[i].op == op)
dda83cd7 3097 return ada_opname_table[i].decoded;
14f9c5c9 3098 }
323e0a4a 3099 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3100}
3101
de93309a
SM
3102/* Returns true (non-zero) iff decoded name N0 should appear before N1
3103 in a listing of choices during disambiguation (see sort_choices, below).
3104 The idea is that overloadings of a subprogram name from the
3105 same package should sort in their source order. We settle for ordering
3106 such symbols by their trailing number (__N or $N). */
14f9c5c9 3107
de93309a
SM
3108static int
3109encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9 3110{
de93309a
SM
3111 if (N1 == NULL)
3112 return 0;
3113 else if (N0 == NULL)
3114 return 1;
3115 else
3116 {
3117 int k0, k1;
30b15541 3118
de93309a 3119 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
dda83cd7 3120 ;
de93309a 3121 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
dda83cd7 3122 ;
de93309a 3123 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
dda83cd7
SM
3124 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3125 {
3126 int n0, n1;
3127
3128 n0 = k0;
3129 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3130 n0 -= 1;
3131 n1 = k1;
3132 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3133 n1 -= 1;
3134 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3135 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3136 }
de93309a
SM
3137 return (strcmp (N0, N1) < 0);
3138 }
14f9c5c9
AS
3139}
3140
de93309a
SM
3141/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3142 encoded names. */
14f9c5c9 3143
de93309a
SM
3144static void
3145sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3146{
14f9c5c9 3147 int i;
14f9c5c9 3148
de93309a 3149 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3150 {
de93309a
SM
3151 struct block_symbol sym = syms[i];
3152 int j;
3153
3154 for (j = i - 1; j >= 0; j -= 1)
dda83cd7
SM
3155 {
3156 if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3157 sym.symbol->linkage_name ()))
3158 break;
3159 syms[j + 1] = syms[j];
3160 }
de93309a
SM
3161 syms[j + 1] = sym;
3162 }
3163}
14f9c5c9 3164
de93309a
SM
3165/* Whether GDB should display formals and return types for functions in the
3166 overloads selection menu. */
3167static bool print_signatures = true;
4c4b4cd2 3168
de93309a
SM
3169/* Print the signature for SYM on STREAM according to the FLAGS options. For
3170 all but functions, the signature is just the name of the symbol. For
3171 functions, this is the name of the function, the list of types for formals
3172 and the return type (if any). */
4c4b4cd2 3173
de93309a
SM
3174static void
3175ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3176 const struct type_print_options *flags)
3177{
3178 struct type *type = SYMBOL_TYPE (sym);
14f9c5c9 3179
987012b8 3180 fprintf_filtered (stream, "%s", sym->print_name ());
de93309a
SM
3181 if (!print_signatures
3182 || type == NULL
78134374 3183 || type->code () != TYPE_CODE_FUNC)
de93309a 3184 return;
4c4b4cd2 3185
1f704f76 3186 if (type->num_fields () > 0)
de93309a
SM
3187 {
3188 int i;
14f9c5c9 3189
de93309a 3190 fprintf_filtered (stream, " (");
1f704f76 3191 for (i = 0; i < type->num_fields (); ++i)
de93309a
SM
3192 {
3193 if (i > 0)
3194 fprintf_filtered (stream, "; ");
940da03e 3195 ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
de93309a
SM
3196 flags);
3197 }
3198 fprintf_filtered (stream, ")");
3199 }
3200 if (TYPE_TARGET_TYPE (type) != NULL
78134374 3201 && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
de93309a
SM
3202 {
3203 fprintf_filtered (stream, " return ");
3204 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3205 }
3206}
14f9c5c9 3207
de93309a
SM
3208/* Read and validate a set of numeric choices from the user in the
3209 range 0 .. N_CHOICES-1. Place the results in increasing
3210 order in CHOICES[0 .. N-1], and return N.
14f9c5c9 3211
de93309a
SM
3212 The user types choices as a sequence of numbers on one line
3213 separated by blanks, encoding them as follows:
14f9c5c9 3214
de93309a
SM
3215 + A choice of 0 means to cancel the selection, throwing an error.
3216 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3217 + The user chooses k by typing k+IS_ALL_CHOICE+1.
14f9c5c9 3218
de93309a 3219 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9 3220
de93309a
SM
3221 ANNOTATION_SUFFIX, if present, is used to annotate the input
3222 prompts (for use with the -f switch). */
14f9c5c9 3223
de93309a
SM
3224static int
3225get_selections (int *choices, int n_choices, int max_results,
dda83cd7 3226 int is_all_choice, const char *annotation_suffix)
de93309a 3227{
992a7040 3228 const char *args;
de93309a
SM
3229 const char *prompt;
3230 int n_chosen;
3231 int first_choice = is_all_choice ? 2 : 1;
14f9c5c9 3232
de93309a
SM
3233 prompt = getenv ("PS2");
3234 if (prompt == NULL)
3235 prompt = "> ";
4c4b4cd2 3236
de93309a 3237 args = command_line_input (prompt, annotation_suffix);
4c4b4cd2 3238
de93309a
SM
3239 if (args == NULL)
3240 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3241
de93309a 3242 n_chosen = 0;
4c4b4cd2 3243
de93309a
SM
3244 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3245 order, as given in args. Choices are validated. */
3246 while (1)
14f9c5c9 3247 {
de93309a
SM
3248 char *args2;
3249 int choice, j;
76a01679 3250
de93309a
SM
3251 args = skip_spaces (args);
3252 if (*args == '\0' && n_chosen == 0)
dda83cd7 3253 error_no_arg (_("one or more choice numbers"));
de93309a 3254 else if (*args == '\0')
dda83cd7 3255 break;
76a01679 3256
de93309a
SM
3257 choice = strtol (args, &args2, 10);
3258 if (args == args2 || choice < 0
dda83cd7
SM
3259 || choice > n_choices + first_choice - 1)
3260 error (_("Argument must be choice number"));
de93309a 3261 args = args2;
76a01679 3262
de93309a 3263 if (choice == 0)
dda83cd7 3264 error (_("cancelled"));
76a01679 3265
de93309a 3266 if (choice < first_choice)
dda83cd7
SM
3267 {
3268 n_chosen = n_choices;
3269 for (j = 0; j < n_choices; j += 1)
3270 choices[j] = j;
3271 break;
3272 }
de93309a 3273 choice -= first_choice;
76a01679 3274
de93309a 3275 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
dda83cd7
SM
3276 {
3277 }
4c4b4cd2 3278
de93309a 3279 if (j < 0 || choice != choices[j])
dda83cd7
SM
3280 {
3281 int k;
4c4b4cd2 3282
dda83cd7
SM
3283 for (k = n_chosen - 1; k > j; k -= 1)
3284 choices[k + 1] = choices[k];
3285 choices[j + 1] = choice;
3286 n_chosen += 1;
3287 }
14f9c5c9
AS
3288 }
3289
de93309a
SM
3290 if (n_chosen > max_results)
3291 error (_("Select no more than %d of the above"), max_results);
3292
3293 return n_chosen;
14f9c5c9
AS
3294}
3295
de93309a
SM
3296/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3297 by asking the user (if necessary), returning the number selected,
3298 and setting the first elements of SYMS items. Error if no symbols
3299 selected. */
3300
3301/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3302 to be re-integrated one of these days. */
14f9c5c9
AS
3303
3304static int
de93309a 3305user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9 3306{
de93309a
SM
3307 int i;
3308 int *chosen = XALLOCAVEC (int , nsyms);
3309 int n_chosen;
3310 int first_choice = (max_results == 1) ? 1 : 2;
3311 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9 3312
de93309a
SM
3313 if (max_results < 1)
3314 error (_("Request to select 0 symbols!"));
3315 if (nsyms <= 1)
3316 return nsyms;
14f9c5c9 3317
de93309a
SM
3318 if (select_mode == multiple_symbols_cancel)
3319 error (_("\
3320canceled because the command is ambiguous\n\
3321See set/show multiple-symbol."));
14f9c5c9 3322
de93309a
SM
3323 /* If select_mode is "all", then return all possible symbols.
3324 Only do that if more than one symbol can be selected, of course.
3325 Otherwise, display the menu as usual. */
3326 if (select_mode == multiple_symbols_all && max_results > 1)
3327 return nsyms;
14f9c5c9 3328
de93309a
SM
3329 printf_filtered (_("[0] cancel\n"));
3330 if (max_results > 1)
3331 printf_filtered (_("[1] all\n"));
14f9c5c9 3332
de93309a 3333 sort_choices (syms, nsyms);
14f9c5c9 3334
de93309a
SM
3335 for (i = 0; i < nsyms; i += 1)
3336 {
3337 if (syms[i].symbol == NULL)
dda83cd7 3338 continue;
14f9c5c9 3339
de93309a 3340 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
dda83cd7
SM
3341 {
3342 struct symtab_and_line sal =
3343 find_function_start_sal (syms[i].symbol, 1);
14f9c5c9 3344
de93309a
SM
3345 printf_filtered ("[%d] ", i + first_choice);
3346 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3347 &type_print_raw_options);
3348 if (sal.symtab == NULL)
3349 printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3350 metadata_style.style ().ptr (), nullptr, sal.line);
3351 else
3352 printf_filtered
3353 (_(" at %ps:%d\n"),
3354 styled_string (file_name_style.style (),
3355 symtab_to_filename_for_display (sal.symtab)),
3356 sal.line);
dda83cd7
SM
3357 continue;
3358 }
76a01679 3359 else
dda83cd7
SM
3360 {
3361 int is_enumeral =
3362 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3363 && SYMBOL_TYPE (syms[i].symbol) != NULL
3364 && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
de93309a 3365 struct symtab *symtab = NULL;
4c4b4cd2 3366
de93309a
SM
3367 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3368 symtab = symbol_symtab (syms[i].symbol);
3369
dda83cd7 3370 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
de93309a
SM
3371 {
3372 printf_filtered ("[%d] ", i + first_choice);
3373 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3374 &type_print_raw_options);
3375 printf_filtered (_(" at %s:%d\n"),
3376 symtab_to_filename_for_display (symtab),
3377 SYMBOL_LINE (syms[i].symbol));
3378 }
dda83cd7
SM
3379 else if (is_enumeral
3380 && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
3381 {
3382 printf_filtered (("[%d] "), i + first_choice);
3383 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3384 gdb_stdout, -1, 0, &type_print_raw_options);
3385 printf_filtered (_("'(%s) (enumeral)\n"),
987012b8 3386 syms[i].symbol->print_name ());
dda83cd7 3387 }
de93309a
SM
3388 else
3389 {
3390 printf_filtered ("[%d] ", i + first_choice);
3391 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3392 &type_print_raw_options);
3393
3394 if (symtab != NULL)
3395 printf_filtered (is_enumeral
3396 ? _(" in %s (enumeral)\n")
3397 : _(" at %s:?\n"),
3398 symtab_to_filename_for_display (symtab));
3399 else
3400 printf_filtered (is_enumeral
3401 ? _(" (enumeral)\n")
3402 : _(" at ?\n"));
3403 }
dda83cd7 3404 }
14f9c5c9 3405 }
14f9c5c9 3406
de93309a 3407 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
dda83cd7 3408 "overload-choice");
14f9c5c9 3409
de93309a
SM
3410 for (i = 0; i < n_chosen; i += 1)
3411 syms[i] = syms[chosen[i]];
14f9c5c9 3412
de93309a
SM
3413 return n_chosen;
3414}
14f9c5c9 3415
de93309a
SM
3416/* Resolve the operator of the subexpression beginning at
3417 position *POS of *EXPP. "Resolving" consists of replacing
3418 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3419 with their resolutions, replacing built-in operators with
3420 function calls to user-defined operators, where appropriate, and,
3421 when DEPROCEDURE_P is non-zero, converting function-valued variables
3422 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3423 are as in ada_resolve, above. */
14f9c5c9 3424
de93309a
SM
3425static struct value *
3426resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
dda83cd7 3427 struct type *context_type, int parse_completion,
de93309a 3428 innermost_block_tracker *tracker)
14f9c5c9 3429{
de93309a
SM
3430 int pc = *pos;
3431 int i;
3432 struct expression *exp; /* Convenience: == *expp. */
3433 enum exp_opcode op = (*expp)->elts[pc].opcode;
3434 struct value **argvec; /* Vector of operand types (alloca'ed). */
3435 int nargs; /* Number of operands. */
3436 int oplen;
19184910
TT
3437 /* If we're resolving an expression like ARRAY(ARG...), then we set
3438 this to the type of the array, so we can use the index types as
3439 the expected types for resolution. */
3440 struct type *array_type = nullptr;
3441 /* The arity of ARRAY_TYPE. */
3442 int array_arity = 0;
14f9c5c9 3443
de93309a
SM
3444 argvec = NULL;
3445 nargs = 0;
3446 exp = expp->get ();
4c4b4cd2 3447
de93309a
SM
3448 /* Pass one: resolve operands, saving their types and updating *pos,
3449 if needed. */
3450 switch (op)
3451 {
3452 case OP_FUNCALL:
3453 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
dda83cd7
SM
3454 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3455 *pos += 7;
de93309a 3456 else
dda83cd7
SM
3457 {
3458 *pos += 3;
19184910
TT
3459 struct value *lhs = resolve_subexp (expp, pos, 0, NULL,
3460 parse_completion, tracker);
3461 struct type *lhstype = ada_check_typedef (value_type (lhs));
3462 array_arity = ada_array_arity (lhstype);
3463 if (array_arity > 0)
3464 array_type = lhstype;
dda83cd7 3465 }
de93309a
SM
3466 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3467 break;
14f9c5c9 3468
de93309a
SM
3469 case UNOP_ADDR:
3470 *pos += 1;
3471 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3472 break;
3473
3474 case UNOP_QUAL:
3475 *pos += 3;
3476 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3477 parse_completion, tracker);
3478 break;
3479
3480 case OP_ATR_MODULUS:
3481 case OP_ATR_SIZE:
3482 case OP_ATR_TAG:
3483 case OP_ATR_FIRST:
3484 case OP_ATR_LAST:
3485 case OP_ATR_LENGTH:
3486 case OP_ATR_POS:
3487 case OP_ATR_VAL:
3488 case OP_ATR_MIN:
3489 case OP_ATR_MAX:
3490 case TERNOP_IN_RANGE:
3491 case BINOP_IN_BOUNDS:
3492 case UNOP_IN_RANGE:
3493 case OP_AGGREGATE:
3494 case OP_OTHERS:
3495 case OP_CHOICES:
3496 case OP_POSITIONAL:
3497 case OP_DISCRETE_RANGE:
3498 case OP_NAME:
3499 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3500 *pos += oplen;
3501 break;
3502
3503 case BINOP_ASSIGN:
3504 {
dda83cd7
SM
3505 struct value *arg1;
3506
3507 *pos += 1;
3508 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3509 if (arg1 == NULL)
3510 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3511 else
3512 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
de93309a 3513 tracker);
dda83cd7 3514 break;
de93309a
SM
3515 }
3516
3517 case UNOP_CAST:
3518 *pos += 3;
3519 nargs = 1;
3520 break;
3521
3522 case BINOP_ADD:
3523 case BINOP_SUB:
3524 case BINOP_MUL:
3525 case BINOP_DIV:
3526 case BINOP_REM:
3527 case BINOP_MOD:
3528 case BINOP_EXP:
3529 case BINOP_CONCAT:
3530 case BINOP_LOGICAL_AND:
3531 case BINOP_LOGICAL_OR:
3532 case BINOP_BITWISE_AND:
3533 case BINOP_BITWISE_IOR:
3534 case BINOP_BITWISE_XOR:
3535
3536 case BINOP_EQUAL:
3537 case BINOP_NOTEQUAL:
3538 case BINOP_LESS:
3539 case BINOP_GTR:
3540 case BINOP_LEQ:
3541 case BINOP_GEQ:
3542
3543 case BINOP_REPEAT:
3544 case BINOP_SUBSCRIPT:
3545 case BINOP_COMMA:
3546 *pos += 1;
3547 nargs = 2;
3548 break;
3549
3550 case UNOP_NEG:
3551 case UNOP_PLUS:
3552 case UNOP_LOGICAL_NOT:
3553 case UNOP_ABS:
3554 case UNOP_IND:
3555 *pos += 1;
3556 nargs = 1;
3557 break;
3558
3559 case OP_LONG:
3560 case OP_FLOAT:
3561 case OP_VAR_VALUE:
3562 case OP_VAR_MSYM_VALUE:
3563 *pos += 4;
3564 break;
3565
3566 case OP_TYPE:
3567 case OP_BOOL:
3568 case OP_LAST:
3569 case OP_INTERNALVAR:
3570 *pos += 3;
3571 break;
3572
3573 case UNOP_MEMVAL:
3574 *pos += 3;
3575 nargs = 1;
3576 break;
3577
3578 case OP_REGISTER:
3579 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3580 break;
3581
3582 case STRUCTOP_STRUCT:
3583 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3584 nargs = 1;
3585 break;
3586
3587 case TERNOP_SLICE:
3588 *pos += 1;
3589 nargs = 3;
3590 break;
3591
3592 case OP_STRING:
3593 break;
3594
3595 default:
3596 error (_("Unexpected operator during name resolution"));
14f9c5c9 3597 }
14f9c5c9 3598
de93309a
SM
3599 argvec = XALLOCAVEC (struct value *, nargs + 1);
3600 for (i = 0; i < nargs; i += 1)
19184910
TT
3601 {
3602 struct type *subtype = nullptr;
3603 if (i < array_arity)
3604 subtype = ada_index_type (array_type, i + 1, "array type");
3605 argvec[i] = resolve_subexp (expp, pos, 1, subtype, parse_completion,
3606 tracker);
3607 }
de93309a
SM
3608 argvec[i] = NULL;
3609 exp = expp->get ();
4c4b4cd2 3610
de93309a
SM
3611 /* Pass two: perform any resolution on principal operator. */
3612 switch (op)
14f9c5c9 3613 {
de93309a
SM
3614 default:
3615 break;
5b4ee69b 3616
de93309a
SM
3617 case OP_VAR_VALUE:
3618 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7 3619 {
d1183b06
TT
3620 std::vector<struct block_symbol> candidates
3621 = ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
3622 exp->elts[pc + 1].block, VAR_DOMAIN);
886d459f
TT
3623
3624 if (std::any_of (candidates.begin (),
3625 candidates.end (),
3626 [] (block_symbol &sym)
3627 {
3628 switch (SYMBOL_CLASS (sym.symbol))
3629 {
3630 case LOC_REGISTER:
3631 case LOC_ARG:
3632 case LOC_REF_ARG:
3633 case LOC_REGPARM_ADDR:
3634 case LOC_LOCAL:
3635 case LOC_COMPUTED:
3636 return true;
3637 default:
3638 return false;
3639 }
3640 }))
dda83cd7
SM
3641 {
3642 /* Types tend to get re-introduced locally, so if there
3643 are any local symbols that are not types, first filter
3644 out all types. */
886d459f
TT
3645 candidates.erase
3646 (std::remove_if
3647 (candidates.begin (),
3648 candidates.end (),
3649 [] (block_symbol &sym)
dda83cd7 3650 {
886d459f
TT
3651 return SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF;
3652 }),
3653 candidates.end ());
dda83cd7
SM
3654 }
3655
d1183b06 3656 if (candidates.empty ())
dda83cd7
SM
3657 error (_("No definition found for %s"),
3658 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3659 else if (candidates.size () == 1)
dda83cd7 3660 i = 0;
d1183b06 3661 else if (deprocedure_p && !is_nonfunction (candidates))
dda83cd7
SM
3662 {
3663 i = ada_resolve_function
d1183b06 3664 (candidates, NULL, 0,
dda83cd7
SM
3665 exp->elts[pc + 2].symbol->linkage_name (),
3666 context_type, parse_completion);
3667 if (i < 0)
3668 error (_("Could not find a match for %s"),
3669 exp->elts[pc + 2].symbol->print_name ());
3670 }
3671 else
3672 {
3673 printf_filtered (_("Multiple matches for %s\n"),
3674 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3675 user_select_syms (candidates.data (), candidates.size (), 1);
dda83cd7
SM
3676 i = 0;
3677 }
3678
3679 exp->elts[pc + 1].block = candidates[i].block;
3680 exp->elts[pc + 2].symbol = candidates[i].symbol;
de93309a 3681 tracker->update (candidates[i]);
dda83cd7 3682 }
14f9c5c9 3683
de93309a 3684 if (deprocedure_p
dda83cd7
SM
3685 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3686 == TYPE_CODE_FUNC))
3687 {
3688 replace_operator_with_call (expp, pc, 0, 4,
3689 exp->elts[pc + 2].symbol,
3690 exp->elts[pc + 1].block);
3691 exp = expp->get ();
3692 }
de93309a
SM
3693 break;
3694
3695 case OP_FUNCALL:
3696 {
dda83cd7
SM
3697 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3698 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3699 {
d1183b06
TT
3700 std::vector<struct block_symbol> candidates
3701 = ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
3702 exp->elts[pc + 4].block, VAR_DOMAIN);
dda83cd7 3703
d1183b06 3704 if (candidates.size () == 1)
dda83cd7
SM
3705 i = 0;
3706 else
3707 {
3708 i = ada_resolve_function
d1183b06 3709 (candidates,
dda83cd7
SM
3710 argvec, nargs,
3711 exp->elts[pc + 5].symbol->linkage_name (),
3712 context_type, parse_completion);
3713 if (i < 0)
3714 error (_("Could not find a match for %s"),
3715 exp->elts[pc + 5].symbol->print_name ());
3716 }
3717
3718 exp->elts[pc + 4].block = candidates[i].block;
3719 exp->elts[pc + 5].symbol = candidates[i].symbol;
de93309a 3720 tracker->update (candidates[i]);
dda83cd7 3721 }
de93309a
SM
3722 }
3723 break;
3724 case BINOP_ADD:
3725 case BINOP_SUB:
3726 case BINOP_MUL:
3727 case BINOP_DIV:
3728 case BINOP_REM:
3729 case BINOP_MOD:
3730 case BINOP_CONCAT:
3731 case BINOP_BITWISE_AND:
3732 case BINOP_BITWISE_IOR:
3733 case BINOP_BITWISE_XOR:
3734 case BINOP_EQUAL:
3735 case BINOP_NOTEQUAL:
3736 case BINOP_LESS:
3737 case BINOP_GTR:
3738 case BINOP_LEQ:
3739 case BINOP_GEQ:
3740 case BINOP_EXP:
3741 case UNOP_NEG:
3742 case UNOP_PLUS:
3743 case UNOP_LOGICAL_NOT:
3744 case UNOP_ABS:
3745 if (possible_user_operator_p (op, argvec))
dda83cd7 3746 {
d1183b06
TT
3747 std::vector<struct block_symbol> candidates
3748 = ada_lookup_symbol_list (ada_decoded_op_name (op),
3749 NULL, VAR_DOMAIN);
d72413e6 3750
d1183b06 3751 i = ada_resolve_function (candidates, argvec,
de93309a
SM
3752 nargs, ada_decoded_op_name (op), NULL,
3753 parse_completion);
dda83cd7
SM
3754 if (i < 0)
3755 break;
d72413e6 3756
de93309a
SM
3757 replace_operator_with_call (expp, pc, nargs, 1,
3758 candidates[i].symbol,
3759 candidates[i].block);
dda83cd7
SM
3760 exp = expp->get ();
3761 }
de93309a 3762 break;
d72413e6 3763
de93309a
SM
3764 case OP_TYPE:
3765 case OP_REGISTER:
3766 return NULL;
d72413e6 3767 }
d72413e6 3768
de93309a
SM
3769 *pos = pc;
3770 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3771 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3772 exp->elts[pc + 1].objfile,
3773 exp->elts[pc + 2].msymbol);
3774 else
3775 return evaluate_subexp_type (exp, pos);
3776}
14f9c5c9 3777
de93309a
SM
3778/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3779 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3780 a non-pointer. */
3781/* The term "match" here is rather loose. The match is heuristic and
3782 liberal. */
14f9c5c9 3783
de93309a
SM
3784static int
3785ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3786{
de93309a
SM
3787 ftype = ada_check_typedef (ftype);
3788 atype = ada_check_typedef (atype);
14f9c5c9 3789
78134374 3790 if (ftype->code () == TYPE_CODE_REF)
de93309a 3791 ftype = TYPE_TARGET_TYPE (ftype);
78134374 3792 if (atype->code () == TYPE_CODE_REF)
de93309a 3793 atype = TYPE_TARGET_TYPE (atype);
14f9c5c9 3794
78134374 3795 switch (ftype->code ())
14f9c5c9 3796 {
de93309a 3797 default:
78134374 3798 return ftype->code () == atype->code ();
de93309a 3799 case TYPE_CODE_PTR:
78134374 3800 if (atype->code () == TYPE_CODE_PTR)
dda83cd7
SM
3801 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3802 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3803 else
dda83cd7
SM
3804 return (may_deref
3805 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
de93309a
SM
3806 case TYPE_CODE_INT:
3807 case TYPE_CODE_ENUM:
3808 case TYPE_CODE_RANGE:
78134374 3809 switch (atype->code ())
dda83cd7
SM
3810 {
3811 case TYPE_CODE_INT:
3812 case TYPE_CODE_ENUM:
3813 case TYPE_CODE_RANGE:
3814 return 1;
3815 default:
3816 return 0;
3817 }
d2e4a39e 3818
de93309a 3819 case TYPE_CODE_ARRAY:
78134374 3820 return (atype->code () == TYPE_CODE_ARRAY
dda83cd7 3821 || ada_is_array_descriptor_type (atype));
14f9c5c9 3822
de93309a
SM
3823 case TYPE_CODE_STRUCT:
3824 if (ada_is_array_descriptor_type (ftype))
dda83cd7
SM
3825 return (atype->code () == TYPE_CODE_ARRAY
3826 || ada_is_array_descriptor_type (atype));
de93309a 3827 else
dda83cd7
SM
3828 return (atype->code () == TYPE_CODE_STRUCT
3829 && !ada_is_array_descriptor_type (atype));
14f9c5c9 3830
de93309a
SM
3831 case TYPE_CODE_UNION:
3832 case TYPE_CODE_FLT:
78134374 3833 return (atype->code () == ftype->code ());
de93309a 3834 }
14f9c5c9
AS
3835}
3836
de93309a
SM
3837/* Return non-zero if the formals of FUNC "sufficiently match" the
3838 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3839 may also be an enumeral, in which case it is treated as a 0-
3840 argument function. */
14f9c5c9 3841
de93309a
SM
3842static int
3843ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3844{
3845 int i;
3846 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3847
de93309a 3848 if (SYMBOL_CLASS (func) == LOC_CONST
78134374 3849 && func_type->code () == TYPE_CODE_ENUM)
de93309a 3850 return (n_actuals == 0);
78134374 3851 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
de93309a 3852 return 0;
14f9c5c9 3853
1f704f76 3854 if (func_type->num_fields () != n_actuals)
de93309a 3855 return 0;
14f9c5c9 3856
de93309a
SM
3857 for (i = 0; i < n_actuals; i += 1)
3858 {
3859 if (actuals[i] == NULL)
dda83cd7 3860 return 0;
de93309a 3861 else
dda83cd7
SM
3862 {
3863 struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3864 struct type *atype = ada_check_typedef (value_type (actuals[i]));
14f9c5c9 3865
dda83cd7
SM
3866 if (!ada_type_match (ftype, atype, 1))
3867 return 0;
3868 }
de93309a
SM
3869 }
3870 return 1;
3871}
d2e4a39e 3872
de93309a
SM
3873/* False iff function type FUNC_TYPE definitely does not produce a value
3874 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3875 FUNC_TYPE is not a valid function type with a non-null return type
3876 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
14f9c5c9 3877
de93309a
SM
3878static int
3879return_match (struct type *func_type, struct type *context_type)
3880{
3881 struct type *return_type;
d2e4a39e 3882
de93309a
SM
3883 if (func_type == NULL)
3884 return 1;
14f9c5c9 3885
78134374 3886 if (func_type->code () == TYPE_CODE_FUNC)
de93309a
SM
3887 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3888 else
3889 return_type = get_base_type (func_type);
3890 if (return_type == NULL)
3891 return 1;
76a01679 3892
de93309a 3893 context_type = get_base_type (context_type);
14f9c5c9 3894
78134374 3895 if (return_type->code () == TYPE_CODE_ENUM)
de93309a
SM
3896 return context_type == NULL || return_type == context_type;
3897 else if (context_type == NULL)
78134374 3898 return return_type->code () != TYPE_CODE_VOID;
de93309a 3899 else
78134374 3900 return return_type->code () == context_type->code ();
de93309a 3901}
14f9c5c9 3902
14f9c5c9 3903
1bfa81ac 3904/* Returns the index in SYMS that contains the symbol for the
de93309a
SM
3905 function (if any) that matches the types of the NARGS arguments in
3906 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3907 that returns that type, then eliminate matches that don't. If
3908 CONTEXT_TYPE is void and there is at least one match that does not
3909 return void, eliminate all matches that do.
14f9c5c9 3910
de93309a
SM
3911 Asks the user if there is more than one match remaining. Returns -1
3912 if there is no such symbol or none is selected. NAME is used
3913 solely for messages. May re-arrange and modify SYMS in
3914 the process; the index returned is for the modified vector. */
14f9c5c9 3915
de93309a 3916static int
d1183b06
TT
3917ada_resolve_function (std::vector<struct block_symbol> &syms,
3918 struct value **args, int nargs,
dda83cd7 3919 const char *name, struct type *context_type,
de93309a
SM
3920 int parse_completion)
3921{
3922 int fallback;
3923 int k;
3924 int m; /* Number of hits */
14f9c5c9 3925
de93309a
SM
3926 m = 0;
3927 /* In the first pass of the loop, we only accept functions matching
3928 context_type. If none are found, we add a second pass of the loop
3929 where every function is accepted. */
3930 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3931 {
d1183b06 3932 for (k = 0; k < syms.size (); k += 1)
dda83cd7
SM
3933 {
3934 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
5b4ee69b 3935
dda83cd7
SM
3936 if (ada_args_match (syms[k].symbol, args, nargs)
3937 && (fallback || return_match (type, context_type)))
3938 {
3939 syms[m] = syms[k];
3940 m += 1;
3941 }
3942 }
14f9c5c9
AS
3943 }
3944
de93309a
SM
3945 /* If we got multiple matches, ask the user which one to use. Don't do this
3946 interactive thing during completion, though, as the purpose of the
3947 completion is providing a list of all possible matches. Prompting the
3948 user to filter it down would be completely unexpected in this case. */
3949 if (m == 0)
3950 return -1;
3951 else if (m > 1 && !parse_completion)
3952 {
3953 printf_filtered (_("Multiple matches for %s\n"), name);
d1183b06 3954 user_select_syms (syms.data (), m, 1);
de93309a
SM
3955 return 0;
3956 }
3957 return 0;
14f9c5c9
AS
3958}
3959
4c4b4cd2
PH
3960/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3961 on the function identified by SYM and BLOCK, and taking NARGS
3962 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3963
3964static void
e9d9f57e 3965replace_operator_with_call (expression_up *expp, int pc, int nargs,
dda83cd7
SM
3966 int oplen, struct symbol *sym,
3967 const struct block *block)
14f9c5c9 3968{
00158a68
TT
3969 /* We want to add 6 more elements (3 for funcall, 4 for function
3970 symbol, -OPLEN for operator being replaced) to the
3971 expression. */
e9d9f57e 3972 struct expression *exp = expp->get ();
00158a68 3973 int save_nelts = exp->nelts;
f51f9f1d
TV
3974 int extra_elts = 7 - oplen;
3975 exp->nelts += extra_elts;
14f9c5c9 3976
f51f9f1d
TV
3977 if (extra_elts > 0)
3978 exp->resize (exp->nelts);
00158a68
TT
3979 memmove (exp->elts + pc + 7, exp->elts + pc + oplen,
3980 EXP_ELEM_TO_BYTES (save_nelts - pc - oplen));
f51f9f1d
TV
3981 if (extra_elts < 0)
3982 exp->resize (exp->nelts);
14f9c5c9 3983
00158a68
TT
3984 exp->elts[pc].opcode = exp->elts[pc + 2].opcode = OP_FUNCALL;
3985 exp->elts[pc + 1].longconst = (LONGEST) nargs;
14f9c5c9 3986
00158a68
TT
3987 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
3988 exp->elts[pc + 4].block = block;
3989 exp->elts[pc + 5].symbol = sym;
d2e4a39e 3990}
14f9c5c9
AS
3991
3992/* Type-class predicates */
3993
4c4b4cd2
PH
3994/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3995 or FLOAT). */
14f9c5c9
AS
3996
3997static int
d2e4a39e 3998numeric_type_p (struct type *type)
14f9c5c9
AS
3999{
4000 if (type == NULL)
4001 return 0;
d2e4a39e
AS
4002 else
4003 {
78134374 4004 switch (type->code ())
dda83cd7
SM
4005 {
4006 case TYPE_CODE_INT:
4007 case TYPE_CODE_FLT:
4008 return 1;
4009 case TYPE_CODE_RANGE:
4010 return (type == TYPE_TARGET_TYPE (type)
4011 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4012 default:
4013 return 0;
4014 }
d2e4a39e 4015 }
14f9c5c9
AS
4016}
4017
4c4b4cd2 4018/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4019
4020static int
d2e4a39e 4021integer_type_p (struct type *type)
14f9c5c9
AS
4022{
4023 if (type == NULL)
4024 return 0;
d2e4a39e
AS
4025 else
4026 {
78134374 4027 switch (type->code ())
dda83cd7
SM
4028 {
4029 case TYPE_CODE_INT:
4030 return 1;
4031 case TYPE_CODE_RANGE:
4032 return (type == TYPE_TARGET_TYPE (type)
4033 || integer_type_p (TYPE_TARGET_TYPE (type)));
4034 default:
4035 return 0;
4036 }
d2e4a39e 4037 }
14f9c5c9
AS
4038}
4039
4c4b4cd2 4040/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4041
4042static int
d2e4a39e 4043scalar_type_p (struct type *type)
14f9c5c9
AS
4044{
4045 if (type == NULL)
4046 return 0;
d2e4a39e
AS
4047 else
4048 {
78134374 4049 switch (type->code ())
dda83cd7
SM
4050 {
4051 case TYPE_CODE_INT:
4052 case TYPE_CODE_RANGE:
4053 case TYPE_CODE_ENUM:
4054 case TYPE_CODE_FLT:
4055 return 1;
4056 default:
4057 return 0;
4058 }
d2e4a39e 4059 }
14f9c5c9
AS
4060}
4061
4c4b4cd2 4062/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4063
4064static int
d2e4a39e 4065discrete_type_p (struct type *type)
14f9c5c9
AS
4066{
4067 if (type == NULL)
4068 return 0;
d2e4a39e
AS
4069 else
4070 {
78134374 4071 switch (type->code ())
dda83cd7
SM
4072 {
4073 case TYPE_CODE_INT:
4074 case TYPE_CODE_RANGE:
4075 case TYPE_CODE_ENUM:
4076 case TYPE_CODE_BOOL:
4077 return 1;
4078 default:
4079 return 0;
4080 }
d2e4a39e 4081 }
14f9c5c9
AS
4082}
4083
4c4b4cd2
PH
4084/* Returns non-zero if OP with operands in the vector ARGS could be
4085 a user-defined function. Errs on the side of pre-defined operators
4086 (i.e., result 0). */
14f9c5c9
AS
4087
4088static int
d2e4a39e 4089possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4090{
76a01679 4091 struct type *type0 =
df407dfe 4092 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4093 struct type *type1 =
df407dfe 4094 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4095
4c4b4cd2
PH
4096 if (type0 == NULL)
4097 return 0;
4098
14f9c5c9
AS
4099 switch (op)
4100 {
4101 default:
4102 return 0;
4103
4104 case BINOP_ADD:
4105 case BINOP_SUB:
4106 case BINOP_MUL:
4107 case BINOP_DIV:
d2e4a39e 4108 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4109
4110 case BINOP_REM:
4111 case BINOP_MOD:
4112 case BINOP_BITWISE_AND:
4113 case BINOP_BITWISE_IOR:
4114 case BINOP_BITWISE_XOR:
d2e4a39e 4115 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4116
4117 case BINOP_EQUAL:
4118 case BINOP_NOTEQUAL:
4119 case BINOP_LESS:
4120 case BINOP_GTR:
4121 case BINOP_LEQ:
4122 case BINOP_GEQ:
d2e4a39e 4123 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4124
4125 case BINOP_CONCAT:
ee90b9ab 4126 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4127
4128 case BINOP_EXP:
d2e4a39e 4129 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4130
4131 case UNOP_NEG:
4132 case UNOP_PLUS:
4133 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4134 case UNOP_ABS:
4135 return (!numeric_type_p (type0));
14f9c5c9
AS
4136
4137 }
4138}
4139\f
dda83cd7 4140 /* Renaming */
14f9c5c9 4141
aeb5907d
JB
4142/* NOTES:
4143
4144 1. In the following, we assume that a renaming type's name may
4145 have an ___XD suffix. It would be nice if this went away at some
4146 point.
4147 2. We handle both the (old) purely type-based representation of
4148 renamings and the (new) variable-based encoding. At some point,
4149 it is devoutly to be hoped that the former goes away
4150 (FIXME: hilfinger-2007-07-09).
4151 3. Subprogram renamings are not implemented, although the XRS
4152 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4153
4154/* If SYM encodes a renaming,
4155
4156 <renaming> renames <renamed entity>,
4157
4158 sets *LEN to the length of the renamed entity's name,
4159 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4160 the string describing the subcomponent selected from the renamed
0963b4bd 4161 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4162 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4163 are undefined). Otherwise, returns a value indicating the category
4164 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4165 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4166 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4167 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4168 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4169 may be NULL, in which case they are not assigned.
4170
4171 [Currently, however, GCC does not generate subprogram renamings.] */
4172
4173enum ada_renaming_category
4174ada_parse_renaming (struct symbol *sym,
4175 const char **renamed_entity, int *len,
4176 const char **renaming_expr)
4177{
4178 enum ada_renaming_category kind;
4179 const char *info;
4180 const char *suffix;
4181
4182 if (sym == NULL)
4183 return ADA_NOT_RENAMING;
4184 switch (SYMBOL_CLASS (sym))
14f9c5c9 4185 {
aeb5907d
JB
4186 default:
4187 return ADA_NOT_RENAMING;
aeb5907d
JB
4188 case LOC_LOCAL:
4189 case LOC_STATIC:
4190 case LOC_COMPUTED:
4191 case LOC_OPTIMIZED_OUT:
987012b8 4192 info = strstr (sym->linkage_name (), "___XR");
aeb5907d
JB
4193 if (info == NULL)
4194 return ADA_NOT_RENAMING;
4195 switch (info[5])
4196 {
4197 case '_':
4198 kind = ADA_OBJECT_RENAMING;
4199 info += 6;
4200 break;
4201 case 'E':
4202 kind = ADA_EXCEPTION_RENAMING;
4203 info += 7;
4204 break;
4205 case 'P':
4206 kind = ADA_PACKAGE_RENAMING;
4207 info += 7;
4208 break;
4209 case 'S':
4210 kind = ADA_SUBPROGRAM_RENAMING;
4211 info += 7;
4212 break;
4213 default:
4214 return ADA_NOT_RENAMING;
4215 }
14f9c5c9 4216 }
4c4b4cd2 4217
de93309a
SM
4218 if (renamed_entity != NULL)
4219 *renamed_entity = info;
4220 suffix = strstr (info, "___XE");
4221 if (suffix == NULL || suffix == info)
4222 return ADA_NOT_RENAMING;
4223 if (len != NULL)
4224 *len = strlen (info) - strlen (suffix);
4225 suffix += 5;
4226 if (renaming_expr != NULL)
4227 *renaming_expr = suffix;
4228 return kind;
4229}
4230
4231/* Compute the value of the given RENAMING_SYM, which is expected to
4232 be a symbol encoding a renaming expression. BLOCK is the block
4233 used to evaluate the renaming. */
4234
4235static struct value *
4236ada_read_renaming_var_value (struct symbol *renaming_sym,
4237 const struct block *block)
4238{
4239 const char *sym_name;
4240
987012b8 4241 sym_name = renaming_sym->linkage_name ();
de93309a
SM
4242 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4243 return evaluate_expression (expr.get ());
4244}
4245\f
4246
dda83cd7 4247 /* Evaluation: Function Calls */
de93309a
SM
4248
4249/* Return an lvalue containing the value VAL. This is the identity on
4250 lvalues, and otherwise has the side-effect of allocating memory
4251 in the inferior where a copy of the value contents is copied. */
4252
4253static struct value *
4254ensure_lval (struct value *val)
4255{
4256 if (VALUE_LVAL (val) == not_lval
4257 || VALUE_LVAL (val) == lval_internalvar)
4258 {
4259 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4260 const CORE_ADDR addr =
dda83cd7 4261 value_as_long (value_allocate_space_in_inferior (len));
de93309a
SM
4262
4263 VALUE_LVAL (val) = lval_memory;
4264 set_value_address (val, addr);
4265 write_memory (addr, value_contents (val), len);
4266 }
4267
4268 return val;
4269}
4270
4271/* Given ARG, a value of type (pointer or reference to a)*
4272 structure/union, extract the component named NAME from the ultimate
4273 target structure/union and return it as a value with its
4274 appropriate type.
4275
4276 The routine searches for NAME among all members of the structure itself
4277 and (recursively) among all members of any wrapper members
4278 (e.g., '_parent').
4279
4280 If NO_ERR, then simply return NULL in case of error, rather than
4281 calling error. */
4282
4283static struct value *
4284ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4285{
4286 struct type *t, *t1;
4287 struct value *v;
4288 int check_tag;
4289
4290 v = NULL;
4291 t1 = t = ada_check_typedef (value_type (arg));
78134374 4292 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4293 {
4294 t1 = TYPE_TARGET_TYPE (t);
4295 if (t1 == NULL)
4296 goto BadValue;
4297 t1 = ada_check_typedef (t1);
78134374 4298 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4299 {
4300 arg = coerce_ref (arg);
4301 t = t1;
4302 }
de93309a
SM
4303 }
4304
78134374 4305 while (t->code () == TYPE_CODE_PTR)
de93309a
SM
4306 {
4307 t1 = TYPE_TARGET_TYPE (t);
4308 if (t1 == NULL)
4309 goto BadValue;
4310 t1 = ada_check_typedef (t1);
78134374 4311 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4312 {
4313 arg = value_ind (arg);
4314 t = t1;
4315 }
de93309a 4316 else
dda83cd7 4317 break;
de93309a 4318 }
aeb5907d 4319
78134374 4320 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
de93309a 4321 goto BadValue;
52ce6436 4322
de93309a
SM
4323 if (t1 == t)
4324 v = ada_search_struct_field (name, arg, 0, t);
4325 else
4326 {
4327 int bit_offset, bit_size, byte_offset;
4328 struct type *field_type;
4329 CORE_ADDR address;
a5ee536b 4330
78134374 4331 if (t->code () == TYPE_CODE_PTR)
de93309a
SM
4332 address = value_address (ada_value_ind (arg));
4333 else
4334 address = value_address (ada_coerce_ref (arg));
d2e4a39e 4335
de93309a 4336 /* Check to see if this is a tagged type. We also need to handle
dda83cd7
SM
4337 the case where the type is a reference to a tagged type, but
4338 we have to be careful to exclude pointers to tagged types.
4339 The latter should be shown as usual (as a pointer), whereas
4340 a reference should mostly be transparent to the user. */
14f9c5c9 4341
de93309a 4342 if (ada_is_tagged_type (t1, 0)
dda83cd7
SM
4343 || (t1->code () == TYPE_CODE_REF
4344 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4345 {
4346 /* We first try to find the searched field in the current type.
de93309a 4347 If not found then let's look in the fixed type. */
14f9c5c9 4348
dda83cd7
SM
4349 if (!find_struct_field (name, t1, 0,
4350 &field_type, &byte_offset, &bit_offset,
4351 &bit_size, NULL))
de93309a
SM
4352 check_tag = 1;
4353 else
4354 check_tag = 0;
dda83cd7 4355 }
de93309a
SM
4356 else
4357 check_tag = 0;
c3e5cd34 4358
de93309a
SM
4359 /* Convert to fixed type in all cases, so that we have proper
4360 offsets to each field in unconstrained record types. */
4361 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4362 address, NULL, check_tag);
4363
24aa1b02
TT
4364 /* Resolve the dynamic type as well. */
4365 arg = value_from_contents_and_address (t1, nullptr, address);
4366 t1 = value_type (arg);
4367
de93309a 4368 if (find_struct_field (name, t1, 0,
dda83cd7
SM
4369 &field_type, &byte_offset, &bit_offset,
4370 &bit_size, NULL))
4371 {
4372 if (bit_size != 0)
4373 {
4374 if (t->code () == TYPE_CODE_REF)
4375 arg = ada_coerce_ref (arg);
4376 else
4377 arg = ada_value_ind (arg);
4378 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4379 bit_offset, bit_size,
4380 field_type);
4381 }
4382 else
4383 v = value_at_lazy (field_type, address + byte_offset);
4384 }
c3e5cd34 4385 }
14f9c5c9 4386
de93309a
SM
4387 if (v != NULL || no_err)
4388 return v;
4389 else
4390 error (_("There is no member named %s."), name);
4391
4392 BadValue:
4393 if (no_err)
4394 return NULL;
4395 else
4396 error (_("Attempt to extract a component of "
4397 "a value that is not a record."));
14f9c5c9
AS
4398}
4399
4400/* Return the value ACTUAL, converted to be an appropriate value for a
4401 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4402 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4403 values not residing in memory, updating it as needed. */
14f9c5c9 4404
a93c0eb6 4405struct value *
40bc484c 4406ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4407{
df407dfe 4408 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4409 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e 4410 struct type *formal_target =
78134374 4411 formal_type->code () == TYPE_CODE_PTR
61ee279c 4412 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e 4413 struct type *actual_target =
78134374 4414 actual_type->code () == TYPE_CODE_PTR
61ee279c 4415 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4416
4c4b4cd2 4417 if (ada_is_array_descriptor_type (formal_target)
78134374 4418 && actual_target->code () == TYPE_CODE_ARRAY)
40bc484c 4419 return make_array_descriptor (formal_type, actual);
78134374
SM
4420 else if (formal_type->code () == TYPE_CODE_PTR
4421 || formal_type->code () == TYPE_CODE_REF)
14f9c5c9 4422 {
a84a8a0d 4423 struct value *result;
5b4ee69b 4424
78134374 4425 if (formal_target->code () == TYPE_CODE_ARRAY
dda83cd7 4426 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4427 result = desc_data (actual);
78134374 4428 else if (formal_type->code () != TYPE_CODE_PTR)
dda83cd7
SM
4429 {
4430 if (VALUE_LVAL (actual) != lval_memory)
4431 {
4432 struct value *val;
4433
4434 actual_type = ada_check_typedef (value_type (actual));
4435 val = allocate_value (actual_type);
4436 memcpy ((char *) value_contents_raw (val),
4437 (char *) value_contents (actual),
4438 TYPE_LENGTH (actual_type));
4439 actual = ensure_lval (val);
4440 }
4441 result = value_addr (actual);
4442 }
a84a8a0d
JB
4443 else
4444 return actual;
b1af9e97 4445 return value_cast_pointers (formal_type, result, 0);
14f9c5c9 4446 }
78134374 4447 else if (actual_type->code () == TYPE_CODE_PTR)
14f9c5c9 4448 return ada_value_ind (actual);
8344af1e
JB
4449 else if (ada_is_aligner_type (formal_type))
4450 {
4451 /* We need to turn this parameter into an aligner type
4452 as well. */
4453 struct value *aligner = allocate_value (formal_type);
4454 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4455
4456 value_assign_to_component (aligner, component, actual);
4457 return aligner;
4458 }
14f9c5c9
AS
4459
4460 return actual;
4461}
4462
438c98a1
JB
4463/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4464 type TYPE. This is usually an inefficient no-op except on some targets
4465 (such as AVR) where the representation of a pointer and an address
4466 differs. */
4467
4468static CORE_ADDR
4469value_pointer (struct value *value, struct type *type)
4470{
438c98a1 4471 unsigned len = TYPE_LENGTH (type);
224c3ddb 4472 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4473 CORE_ADDR addr;
4474
4475 addr = value_address (value);
8ee511af 4476 gdbarch_address_to_pointer (type->arch (), type, buf, addr);
34877895 4477 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
438c98a1
JB
4478 return addr;
4479}
4480
14f9c5c9 4481
4c4b4cd2
PH
4482/* Push a descriptor of type TYPE for array value ARR on the stack at
4483 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4484 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4485 to-descriptor type rather than a descriptor type), a struct value *
4486 representing a pointer to this descriptor. */
14f9c5c9 4487
d2e4a39e 4488static struct value *
40bc484c 4489make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4490{
d2e4a39e
AS
4491 struct type *bounds_type = desc_bounds_type (type);
4492 struct type *desc_type = desc_base_type (type);
4493 struct value *descriptor = allocate_value (desc_type);
4494 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4495 int i;
d2e4a39e 4496
0963b4bd
MS
4497 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4498 i > 0; i -= 1)
14f9c5c9 4499 {
19f220c3
JK
4500 modify_field (value_type (bounds), value_contents_writeable (bounds),
4501 ada_array_bound (arr, i, 0),
4502 desc_bound_bitpos (bounds_type, i, 0),
4503 desc_bound_bitsize (bounds_type, i, 0));
4504 modify_field (value_type (bounds), value_contents_writeable (bounds),
4505 ada_array_bound (arr, i, 1),
4506 desc_bound_bitpos (bounds_type, i, 1),
4507 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4508 }
d2e4a39e 4509
40bc484c 4510 bounds = ensure_lval (bounds);
d2e4a39e 4511
19f220c3
JK
4512 modify_field (value_type (descriptor),
4513 value_contents_writeable (descriptor),
4514 value_pointer (ensure_lval (arr),
940da03e 4515 desc_type->field (0).type ()),
19f220c3
JK
4516 fat_pntr_data_bitpos (desc_type),
4517 fat_pntr_data_bitsize (desc_type));
4518
4519 modify_field (value_type (descriptor),
4520 value_contents_writeable (descriptor),
4521 value_pointer (bounds,
940da03e 4522 desc_type->field (1).type ()),
19f220c3
JK
4523 fat_pntr_bounds_bitpos (desc_type),
4524 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4525
40bc484c 4526 descriptor = ensure_lval (descriptor);
14f9c5c9 4527
78134374 4528 if (type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
4529 return value_addr (descriptor);
4530 else
4531 return descriptor;
4532}
14f9c5c9 4533\f
dda83cd7 4534 /* Symbol Cache Module */
3d9434b5 4535
3d9434b5 4536/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4537 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4538 on the type of entity being printed, the cache can make it as much
4539 as an order of magnitude faster than without it.
4540
4541 The descriptive type DWARF extension has significantly reduced
4542 the need for this cache, at least when DWARF is being used. However,
4543 even in this case, some expensive name-based symbol searches are still
4544 sometimes necessary - to find an XVZ variable, mostly. */
4545
ee01b665
JB
4546/* Return the symbol cache associated to the given program space PSPACE.
4547 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4548
ee01b665
JB
4549static struct ada_symbol_cache *
4550ada_get_symbol_cache (struct program_space *pspace)
4551{
4552 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4553
bdcccc56
TT
4554 if (pspace_data->sym_cache == nullptr)
4555 pspace_data->sym_cache.reset (new ada_symbol_cache);
ee01b665 4556
bdcccc56 4557 return pspace_data->sym_cache.get ();
ee01b665 4558}
3d9434b5
JB
4559
4560/* Clear all entries from the symbol cache. */
4561
4562static void
bdcccc56 4563ada_clear_symbol_cache ()
3d9434b5 4564{
bdcccc56
TT
4565 struct ada_pspace_data *pspace_data
4566 = get_ada_pspace_data (current_program_space);
ee01b665 4567
bdcccc56
TT
4568 if (pspace_data->sym_cache != nullptr)
4569 pspace_data->sym_cache.reset ();
3d9434b5
JB
4570}
4571
fe978cb0 4572/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4573 Return it if found, or NULL otherwise. */
4574
4575static struct cache_entry **
fe978cb0 4576find_entry (const char *name, domain_enum domain)
3d9434b5 4577{
ee01b665
JB
4578 struct ada_symbol_cache *sym_cache
4579 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4580 int h = msymbol_hash (name) % HASH_SIZE;
4581 struct cache_entry **e;
4582
ee01b665 4583 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4584 {
fe978cb0 4585 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
dda83cd7 4586 return e;
3d9434b5
JB
4587 }
4588 return NULL;
4589}
4590
fe978cb0 4591/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4592 Return 1 if found, 0 otherwise.
4593
4594 If an entry was found and SYM is not NULL, set *SYM to the entry's
4595 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4596
96d887e8 4597static int
fe978cb0 4598lookup_cached_symbol (const char *name, domain_enum domain,
dda83cd7 4599 struct symbol **sym, const struct block **block)
96d887e8 4600{
fe978cb0 4601 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4602
4603 if (e == NULL)
4604 return 0;
4605 if (sym != NULL)
4606 *sym = (*e)->sym;
4607 if (block != NULL)
4608 *block = (*e)->block;
4609 return 1;
96d887e8
PH
4610}
4611
3d9434b5 4612/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4613 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4614
96d887e8 4615static void
fe978cb0 4616cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
dda83cd7 4617 const struct block *block)
96d887e8 4618{
ee01b665
JB
4619 struct ada_symbol_cache *sym_cache
4620 = ada_get_symbol_cache (current_program_space);
3d9434b5 4621 int h;
3d9434b5
JB
4622 struct cache_entry *e;
4623
1994afbf
DE
4624 /* Symbols for builtin types don't have a block.
4625 For now don't cache such symbols. */
4626 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4627 return;
4628
3d9434b5
JB
4629 /* If the symbol is a local symbol, then do not cache it, as a search
4630 for that symbol depends on the context. To determine whether
4631 the symbol is local or not, we check the block where we found it
4632 against the global and static blocks of its associated symtab. */
4633 if (sym
08be3fe3 4634 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4635 GLOBAL_BLOCK) != block
08be3fe3 4636 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4637 STATIC_BLOCK) != block)
3d9434b5
JB
4638 return;
4639
4640 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4641 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4642 e->next = sym_cache->root[h];
4643 sym_cache->root[h] = e;
2ef5453b 4644 e->name = obstack_strdup (&sym_cache->cache_space, name);
3d9434b5 4645 e->sym = sym;
fe978cb0 4646 e->domain = domain;
3d9434b5 4647 e->block = block;
96d887e8 4648}
4c4b4cd2 4649\f
dda83cd7 4650 /* Symbol Lookup */
4c4b4cd2 4651
b5ec771e
PA
4652/* Return the symbol name match type that should be used used when
4653 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4654
4655 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4656 for Ada lookups. */
c0431670 4657
b5ec771e
PA
4658static symbol_name_match_type
4659name_match_type_from_name (const char *lookup_name)
c0431670 4660{
b5ec771e
PA
4661 return (strstr (lookup_name, "__") == NULL
4662 ? symbol_name_match_type::WILD
4663 : symbol_name_match_type::FULL);
c0431670
JB
4664}
4665
4c4b4cd2
PH
4666/* Return the result of a standard (literal, C-like) lookup of NAME in
4667 given DOMAIN, visible from lexical block BLOCK. */
4668
4669static struct symbol *
4670standard_lookup (const char *name, const struct block *block,
dda83cd7 4671 domain_enum domain)
4c4b4cd2 4672{
acbd605d 4673 /* Initialize it just to avoid a GCC false warning. */
6640a367 4674 struct block_symbol sym = {};
4c4b4cd2 4675
d12307c1
PMR
4676 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4677 return sym.symbol;
a2cd4f14 4678 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4679 cache_symbol (name, domain, sym.symbol, sym.block);
4680 return sym.symbol;
4c4b4cd2
PH
4681}
4682
4683
4684/* Non-zero iff there is at least one non-function/non-enumeral symbol
1bfa81ac 4685 in the symbol fields of SYMS. We treat enumerals as functions,
4c4b4cd2
PH
4686 since they contend in overloading in the same way. */
4687static int
d1183b06 4688is_nonfunction (const std::vector<struct block_symbol> &syms)
4c4b4cd2 4689{
d1183b06
TT
4690 for (const block_symbol &sym : syms)
4691 if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
4692 && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
4693 || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
14f9c5c9
AS
4694 return 1;
4695
4696 return 0;
4697}
4698
4699/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4700 struct types. Otherwise, they may not. */
14f9c5c9
AS
4701
4702static int
d2e4a39e 4703equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4704{
d2e4a39e 4705 if (type0 == type1)
14f9c5c9 4706 return 1;
d2e4a39e 4707 if (type0 == NULL || type1 == NULL
78134374 4708 || type0->code () != type1->code ())
14f9c5c9 4709 return 0;
78134374
SM
4710 if ((type0->code () == TYPE_CODE_STRUCT
4711 || type0->code () == TYPE_CODE_ENUM)
14f9c5c9 4712 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4713 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4714 return 1;
d2e4a39e 4715
14f9c5c9
AS
4716 return 0;
4717}
4718
4719/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4720 no more defined than that of SYM1. */
14f9c5c9
AS
4721
4722static int
d2e4a39e 4723lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4724{
4725 if (sym0 == sym1)
4726 return 1;
176620f1 4727 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4728 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4729 return 0;
4730
d2e4a39e 4731 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4732 {
4733 case LOC_UNDEF:
4734 return 1;
4735 case LOC_TYPEDEF:
4736 {
dda83cd7
SM
4737 struct type *type0 = SYMBOL_TYPE (sym0);
4738 struct type *type1 = SYMBOL_TYPE (sym1);
4739 const char *name0 = sym0->linkage_name ();
4740 const char *name1 = sym1->linkage_name ();
4741 int len0 = strlen (name0);
4742
4743 return
4744 type0->code () == type1->code ()
4745 && (equiv_types (type0, type1)
4746 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4747 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4748 }
4749 case LOC_CONST:
4750 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
dda83cd7 4751 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4b610737
TT
4752
4753 case LOC_STATIC:
4754 {
dda83cd7
SM
4755 const char *name0 = sym0->linkage_name ();
4756 const char *name1 = sym1->linkage_name ();
4757 return (strcmp (name0, name1) == 0
4758 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4b610737
TT
4759 }
4760
d2e4a39e
AS
4761 default:
4762 return 0;
14f9c5c9
AS
4763 }
4764}
4765
d1183b06
TT
4766/* Append (SYM,BLOCK) to the end of the array of struct block_symbol
4767 records in RESULT. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4768
4769static void
d1183b06 4770add_defn_to_vec (std::vector<struct block_symbol> &result,
dda83cd7
SM
4771 struct symbol *sym,
4772 const struct block *block)
14f9c5c9 4773{
529cad9c
PH
4774 /* Do not try to complete stub types, as the debugger is probably
4775 already scanning all symbols matching a certain name at the
4776 time when this function is called. Trying to replace the stub
4777 type by its associated full type will cause us to restart a scan
4778 which may lead to an infinite recursion. Instead, the client
4779 collecting the matching symbols will end up collecting several
4780 matches, with at least one of them complete. It can then filter
4781 out the stub ones if needed. */
4782
d1183b06 4783 for (int i = result.size () - 1; i >= 0; i -= 1)
4c4b4cd2 4784 {
d1183b06 4785 if (lesseq_defined_than (sym, result[i].symbol))
dda83cd7 4786 return;
d1183b06 4787 else if (lesseq_defined_than (result[i].symbol, sym))
dda83cd7 4788 {
d1183b06
TT
4789 result[i].symbol = sym;
4790 result[i].block = block;
dda83cd7
SM
4791 return;
4792 }
4c4b4cd2
PH
4793 }
4794
d1183b06
TT
4795 struct block_symbol info;
4796 info.symbol = sym;
4797 info.block = block;
4798 result.push_back (info);
4c4b4cd2
PH
4799}
4800
7c7b6655
TT
4801/* Return a bound minimal symbol matching NAME according to Ada
4802 decoding rules. Returns an invalid symbol if there is no such
4803 minimal symbol. Names prefixed with "standard__" are handled
4804 specially: "standard__" is first stripped off, and only static and
4805 global symbols are searched. */
4c4b4cd2 4806
7c7b6655 4807struct bound_minimal_symbol
96d887e8 4808ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4809{
7c7b6655 4810 struct bound_minimal_symbol result;
4c4b4cd2 4811
7c7b6655
TT
4812 memset (&result, 0, sizeof (result));
4813
b5ec771e
PA
4814 symbol_name_match_type match_type = name_match_type_from_name (name);
4815 lookup_name_info lookup_name (name, match_type);
4816
4817 symbol_name_matcher_ftype *match_name
4818 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4819
2030c079 4820 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4821 {
7932255d 4822 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf 4823 {
c9d95fa3 4824 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
5325b9bf
TT
4825 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4826 {
4827 result.minsym = msymbol;
4828 result.objfile = objfile;
4829 break;
4830 }
4831 }
4832 }
4c4b4cd2 4833
7c7b6655 4834 return result;
96d887e8 4835}
4c4b4cd2 4836
96d887e8
PH
4837/* For all subprograms that statically enclose the subprogram of the
4838 selected frame, add symbols matching identifier NAME in DOMAIN
1bfa81ac 4839 and their blocks to the list of data in RESULT, as for
48b78332
JB
4840 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4841 with a wildcard prefix. */
4c4b4cd2 4842
96d887e8 4843static void
d1183b06 4844add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
b5ec771e
PA
4845 const lookup_name_info &lookup_name,
4846 domain_enum domain)
96d887e8 4847{
96d887e8 4848}
14f9c5c9 4849
96d887e8
PH
4850/* True if TYPE is definitely an artificial type supplied to a symbol
4851 for which no debugging information was given in the symbol file. */
14f9c5c9 4852
96d887e8
PH
4853static int
4854is_nondebugging_type (struct type *type)
4855{
0d5cff50 4856 const char *name = ada_type_name (type);
5b4ee69b 4857
96d887e8
PH
4858 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4859}
4c4b4cd2 4860
8f17729f
JB
4861/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4862 that are deemed "identical" for practical purposes.
4863
4864 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4865 types and that their number of enumerals is identical (in other
1f704f76 4866 words, type1->num_fields () == type2->num_fields ()). */
8f17729f
JB
4867
4868static int
4869ada_identical_enum_types_p (struct type *type1, struct type *type2)
4870{
4871 int i;
4872
4873 /* The heuristic we use here is fairly conservative. We consider
4874 that 2 enumerate types are identical if they have the same
4875 number of enumerals and that all enumerals have the same
4876 underlying value and name. */
4877
4878 /* All enums in the type should have an identical underlying value. */
1f704f76 4879 for (i = 0; i < type1->num_fields (); i++)
14e75d8e 4880 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4881 return 0;
4882
4883 /* All enumerals should also have the same name (modulo any numerical
4884 suffix). */
1f704f76 4885 for (i = 0; i < type1->num_fields (); i++)
8f17729f 4886 {
0d5cff50
DE
4887 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4888 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4889 int len_1 = strlen (name_1);
4890 int len_2 = strlen (name_2);
4891
4892 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4893 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4894 if (len_1 != len_2
dda83cd7 4895 || strncmp (TYPE_FIELD_NAME (type1, i),
8f17729f
JB
4896 TYPE_FIELD_NAME (type2, i),
4897 len_1) != 0)
4898 return 0;
4899 }
4900
4901 return 1;
4902}
4903
4904/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4905 that are deemed "identical" for practical purposes. Sometimes,
4906 enumerals are not strictly identical, but their types are so similar
4907 that they can be considered identical.
4908
4909 For instance, consider the following code:
4910
4911 type Color is (Black, Red, Green, Blue, White);
4912 type RGB_Color is new Color range Red .. Blue;
4913
4914 Type RGB_Color is a subrange of an implicit type which is a copy
4915 of type Color. If we call that implicit type RGB_ColorB ("B" is
4916 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4917 As a result, when an expression references any of the enumeral
4918 by name (Eg. "print green"), the expression is technically
4919 ambiguous and the user should be asked to disambiguate. But
4920 doing so would only hinder the user, since it wouldn't matter
4921 what choice he makes, the outcome would always be the same.
4922 So, for practical purposes, we consider them as the same. */
4923
4924static int
54d343a2 4925symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
4926{
4927 int i;
4928
4929 /* Before performing a thorough comparison check of each type,
4930 we perform a series of inexpensive checks. We expect that these
4931 checks will quickly fail in the vast majority of cases, and thus
4932 help prevent the unnecessary use of a more expensive comparison.
4933 Said comparison also expects us to make some of these checks
4934 (see ada_identical_enum_types_p). */
4935
4936 /* Quick check: All symbols should have an enum type. */
54d343a2 4937 for (i = 0; i < syms.size (); i++)
78134374 4938 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
8f17729f
JB
4939 return 0;
4940
4941 /* Quick check: They should all have the same value. */
54d343a2 4942 for (i = 1; i < syms.size (); i++)
d12307c1 4943 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
4944 return 0;
4945
4946 /* Quick check: They should all have the same number of enumerals. */
54d343a2 4947 for (i = 1; i < syms.size (); i++)
1f704f76 4948 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
dda83cd7 4949 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
8f17729f
JB
4950 return 0;
4951
4952 /* All the sanity checks passed, so we might have a set of
4953 identical enumeration types. Perform a more complete
4954 comparison of the type of each symbol. */
54d343a2 4955 for (i = 1; i < syms.size (); i++)
d12307c1 4956 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
dda83cd7 4957 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
4958 return 0;
4959
4960 return 1;
4961}
4962
54d343a2 4963/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
4964 duplicate other symbols in the list (The only case I know of where
4965 this happens is when object files containing stabs-in-ecoff are
4966 linked with files containing ordinary ecoff debugging symbols (or no
1bfa81ac 4967 debugging symbols)). Modifies SYMS to squeeze out deleted entries. */
4c4b4cd2 4968
d1183b06 4969static void
54d343a2 4970remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
4971{
4972 int i, j;
4c4b4cd2 4973
8f17729f
JB
4974 /* We should never be called with less than 2 symbols, as there
4975 cannot be any extra symbol in that case. But it's easy to
4976 handle, since we have nothing to do in that case. */
54d343a2 4977 if (syms->size () < 2)
d1183b06 4978 return;
8f17729f 4979
96d887e8 4980 i = 0;
54d343a2 4981 while (i < syms->size ())
96d887e8 4982 {
a35ddb44 4983 int remove_p = 0;
339c13b6
JB
4984
4985 /* If two symbols have the same name and one of them is a stub type,
dda83cd7 4986 the get rid of the stub. */
339c13b6 4987
e46d3488 4988 if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
dda83cd7
SM
4989 && (*syms)[i].symbol->linkage_name () != NULL)
4990 {
4991 for (j = 0; j < syms->size (); j++)
4992 {
4993 if (j != i
4994 && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
4995 && (*syms)[j].symbol->linkage_name () != NULL
4996 && strcmp ((*syms)[i].symbol->linkage_name (),
4997 (*syms)[j].symbol->linkage_name ()) == 0)
4998 remove_p = 1;
4999 }
5000 }
339c13b6
JB
5001
5002 /* Two symbols with the same name, same class and same address
dda83cd7 5003 should be identical. */
339c13b6 5004
987012b8 5005 else if ((*syms)[i].symbol->linkage_name () != NULL
dda83cd7
SM
5006 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5007 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5008 {
5009 for (j = 0; j < syms->size (); j += 1)
5010 {
5011 if (i != j
5012 && (*syms)[j].symbol->linkage_name () != NULL
5013 && strcmp ((*syms)[i].symbol->linkage_name (),
5014 (*syms)[j].symbol->linkage_name ()) == 0
5015 && SYMBOL_CLASS ((*syms)[i].symbol)
54d343a2 5016 == SYMBOL_CLASS ((*syms)[j].symbol)
dda83cd7
SM
5017 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5018 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5019 remove_p = 1;
5020 }
5021 }
339c13b6 5022
a35ddb44 5023 if (remove_p)
54d343a2 5024 syms->erase (syms->begin () + i);
1b788fb6
TT
5025 else
5026 i += 1;
14f9c5c9 5027 }
8f17729f
JB
5028
5029 /* If all the remaining symbols are identical enumerals, then
5030 just keep the first one and discard the rest.
5031
5032 Unlike what we did previously, we do not discard any entry
5033 unless they are ALL identical. This is because the symbol
5034 comparison is not a strict comparison, but rather a practical
5035 comparison. If all symbols are considered identical, then
5036 we can just go ahead and use the first one and discard the rest.
5037 But if we cannot reduce the list to a single element, we have
5038 to ask the user to disambiguate anyways. And if we have to
5039 present a multiple-choice menu, it's less confusing if the list
5040 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5041 if (symbols_are_identical_enums (*syms))
5042 syms->resize (1);
14f9c5c9
AS
5043}
5044
96d887e8
PH
5045/* Given a type that corresponds to a renaming entity, use the type name
5046 to extract the scope (package name or function name, fully qualified,
5047 and following the GNAT encoding convention) where this renaming has been
49d83361 5048 defined. */
4c4b4cd2 5049
49d83361 5050static std::string
96d887e8 5051xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5052{
96d887e8 5053 /* The renaming types adhere to the following convention:
0963b4bd 5054 <scope>__<rename>___<XR extension>.
96d887e8
PH
5055 So, to extract the scope, we search for the "___XR" extension,
5056 and then backtrack until we find the first "__". */
76a01679 5057
7d93a1e0 5058 const char *name = renaming_type->name ();
108d56a4
SM
5059 const char *suffix = strstr (name, "___XR");
5060 const char *last;
14f9c5c9 5061
96d887e8
PH
5062 /* Now, backtrack a bit until we find the first "__". Start looking
5063 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5064
96d887e8
PH
5065 for (last = suffix - 3; last > name; last--)
5066 if (last[0] == '_' && last[1] == '_')
5067 break;
76a01679 5068
96d887e8 5069 /* Make a copy of scope and return it. */
49d83361 5070 return std::string (name, last);
4c4b4cd2
PH
5071}
5072
96d887e8 5073/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5074
96d887e8
PH
5075static int
5076is_package_name (const char *name)
4c4b4cd2 5077{
96d887e8
PH
5078 /* Here, We take advantage of the fact that no symbols are generated
5079 for packages, while symbols are generated for each function.
5080 So the condition for NAME represent a package becomes equivalent
5081 to NAME not existing in our list of symbols. There is only one
5082 small complication with library-level functions (see below). */
4c4b4cd2 5083
96d887e8
PH
5084 /* If it is a function that has not been defined at library level,
5085 then we should be able to look it up in the symbols. */
5086 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5087 return 0;
14f9c5c9 5088
96d887e8
PH
5089 /* Library-level function names start with "_ada_". See if function
5090 "_ada_" followed by NAME can be found. */
14f9c5c9 5091
96d887e8 5092 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5093 functions names cannot contain "__" in them. */
96d887e8
PH
5094 if (strstr (name, "__") != NULL)
5095 return 0;
4c4b4cd2 5096
528e1572 5097 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5098
528e1572 5099 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5100}
14f9c5c9 5101
96d887e8 5102/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5103 not visible from FUNCTION_NAME. */
14f9c5c9 5104
96d887e8 5105static int
0d5cff50 5106old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5107{
aeb5907d
JB
5108 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5109 return 0;
5110
49d83361 5111 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5112
96d887e8 5113 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5114 if (is_package_name (scope.c_str ()))
5115 return 0;
14f9c5c9 5116
96d887e8
PH
5117 /* Check that the rename is in the current function scope by checking
5118 that its name starts with SCOPE. */
76a01679 5119
96d887e8
PH
5120 /* If the function name starts with "_ada_", it means that it is
5121 a library-level function. Strip this prefix before doing the
5122 comparison, as the encoding for the renaming does not contain
5123 this prefix. */
61012eef 5124 if (startswith (function_name, "_ada_"))
96d887e8 5125 function_name += 5;
f26caa11 5126
49d83361 5127 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5128}
5129
aeb5907d
JB
5130/* Remove entries from SYMS that corresponds to a renaming entity that
5131 is not visible from the function associated with CURRENT_BLOCK or
5132 that is superfluous due to the presence of more specific renaming
5133 information. Places surviving symbols in the initial entries of
d1183b06
TT
5134 SYMS.
5135
96d887e8 5136 Rationale:
aeb5907d
JB
5137 First, in cases where an object renaming is implemented as a
5138 reference variable, GNAT may produce both the actual reference
5139 variable and the renaming encoding. In this case, we discard the
5140 latter.
5141
5142 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5143 entity. Unfortunately, STABS currently does not support the definition
5144 of types that are local to a given lexical block, so all renamings types
5145 are emitted at library level. As a consequence, if an application
5146 contains two renaming entities using the same name, and a user tries to
5147 print the value of one of these entities, the result of the ada symbol
5148 lookup will also contain the wrong renaming type.
f26caa11 5149
96d887e8
PH
5150 This function partially covers for this limitation by attempting to
5151 remove from the SYMS list renaming symbols that should be visible
5152 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5153 method with the current information available. The implementation
5154 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5155
5156 - When the user tries to print a rename in a function while there
dda83cd7
SM
5157 is another rename entity defined in a package: Normally, the
5158 rename in the function has precedence over the rename in the
5159 package, so the latter should be removed from the list. This is
5160 currently not the case.
5161
96d887e8 5162 - This function will incorrectly remove valid renames if
dda83cd7
SM
5163 the CURRENT_BLOCK corresponds to a function which symbol name
5164 has been changed by an "Export" pragma. As a consequence,
5165 the user will be unable to print such rename entities. */
4c4b4cd2 5166
d1183b06 5167static void
54d343a2
TT
5168remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5169 const struct block *current_block)
4c4b4cd2
PH
5170{
5171 struct symbol *current_function;
0d5cff50 5172 const char *current_function_name;
4c4b4cd2 5173 int i;
aeb5907d
JB
5174 int is_new_style_renaming;
5175
5176 /* If there is both a renaming foo___XR... encoded as a variable and
5177 a simple variable foo in the same block, discard the latter.
0963b4bd 5178 First, zero out such symbols, then compress. */
aeb5907d 5179 is_new_style_renaming = 0;
54d343a2 5180 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5181 {
54d343a2
TT
5182 struct symbol *sym = (*syms)[i].symbol;
5183 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5184 const char *name;
5185 const char *suffix;
5186
5187 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5188 continue;
987012b8 5189 name = sym->linkage_name ();
aeb5907d
JB
5190 suffix = strstr (name, "___XR");
5191
5192 if (suffix != NULL)
5193 {
5194 int name_len = suffix - name;
5195 int j;
5b4ee69b 5196
aeb5907d 5197 is_new_style_renaming = 1;
54d343a2
TT
5198 for (j = 0; j < syms->size (); j += 1)
5199 if (i != j && (*syms)[j].symbol != NULL
987012b8 5200 && strncmp (name, (*syms)[j].symbol->linkage_name (),
aeb5907d 5201 name_len) == 0
54d343a2
TT
5202 && block == (*syms)[j].block)
5203 (*syms)[j].symbol = NULL;
aeb5907d
JB
5204 }
5205 }
5206 if (is_new_style_renaming)
5207 {
5208 int j, k;
5209
54d343a2
TT
5210 for (j = k = 0; j < syms->size (); j += 1)
5211 if ((*syms)[j].symbol != NULL)
aeb5907d 5212 {
54d343a2 5213 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5214 k += 1;
5215 }
d1183b06
TT
5216 syms->resize (k);
5217 return;
aeb5907d 5218 }
4c4b4cd2
PH
5219
5220 /* Extract the function name associated to CURRENT_BLOCK.
5221 Abort if unable to do so. */
76a01679 5222
4c4b4cd2 5223 if (current_block == NULL)
d1183b06 5224 return;
76a01679 5225
7f0df278 5226 current_function = block_linkage_function (current_block);
4c4b4cd2 5227 if (current_function == NULL)
d1183b06 5228 return;
4c4b4cd2 5229
987012b8 5230 current_function_name = current_function->linkage_name ();
4c4b4cd2 5231 if (current_function_name == NULL)
d1183b06 5232 return;
4c4b4cd2
PH
5233
5234 /* Check each of the symbols, and remove it from the list if it is
5235 a type corresponding to a renaming that is out of the scope of
5236 the current block. */
5237
5238 i = 0;
54d343a2 5239 while (i < syms->size ())
4c4b4cd2 5240 {
54d343a2 5241 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
dda83cd7
SM
5242 == ADA_OBJECT_RENAMING
5243 && old_renaming_is_invisible ((*syms)[i].symbol,
54d343a2
TT
5244 current_function_name))
5245 syms->erase (syms->begin () + i);
4c4b4cd2 5246 else
dda83cd7 5247 i += 1;
4c4b4cd2 5248 }
4c4b4cd2
PH
5249}
5250
d1183b06 5251/* Add to RESULT all symbols from BLOCK (and its super-blocks)
339c13b6
JB
5252 whose name and domain match NAME and DOMAIN respectively.
5253 If no match was found, then extend the search to "enclosing"
5254 routines (in other words, if we're inside a nested function,
5255 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5256 If WILD_MATCH_P is nonzero, perform the naming matching in
5257 "wild" mode (see function "wild_match" for more info).
339c13b6 5258
d1183b06 5259 Note: This function assumes that RESULT has 0 (zero) element in it. */
339c13b6
JB
5260
5261static void
d1183b06 5262ada_add_local_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5263 const lookup_name_info &lookup_name,
5264 const struct block *block, domain_enum domain)
339c13b6
JB
5265{
5266 int block_depth = 0;
5267
5268 while (block != NULL)
5269 {
5270 block_depth += 1;
d1183b06 5271 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
339c13b6
JB
5272
5273 /* If we found a non-function match, assume that's the one. */
d1183b06 5274 if (is_nonfunction (result))
dda83cd7 5275 return;
339c13b6
JB
5276
5277 block = BLOCK_SUPERBLOCK (block);
5278 }
5279
5280 /* If no luck so far, try to find NAME as a local symbol in some lexically
5281 enclosing subprogram. */
d1183b06
TT
5282 if (result.empty () && block_depth > 2)
5283 add_symbols_from_enclosing_procs (result, lookup_name, domain);
339c13b6
JB
5284}
5285
ccefe4c4 5286/* An object of this type is used as the user_data argument when
40658b94 5287 calling the map_matching_symbols method. */
ccefe4c4 5288
40658b94 5289struct match_data
ccefe4c4 5290{
1bfa81ac
TT
5291 explicit match_data (std::vector<struct block_symbol> *rp)
5292 : resultp (rp)
5293 {
5294 }
5295 DISABLE_COPY_AND_ASSIGN (match_data);
5296
5297 struct objfile *objfile = nullptr;
d1183b06 5298 std::vector<struct block_symbol> *resultp;
1bfa81ac 5299 struct symbol *arg_sym = nullptr;
1178743e 5300 bool found_sym = false;
ccefe4c4
TT
5301};
5302
199b4314
TT
5303/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5304 to a list of symbols. DATA is a pointer to a struct match_data *
1bfa81ac 5305 containing the vector that collects the symbol list, the file that SYM
40658b94
PH
5306 must come from, a flag indicating whether a non-argument symbol has
5307 been found in the current block, and the last argument symbol
5308 passed in SYM within the current block (if any). When SYM is null,
5309 marking the end of a block, the argument symbol is added if no
5310 other has been found. */
ccefe4c4 5311
199b4314
TT
5312static bool
5313aux_add_nonlocal_symbols (struct block_symbol *bsym,
5314 struct match_data *data)
ccefe4c4 5315{
199b4314
TT
5316 const struct block *block = bsym->block;
5317 struct symbol *sym = bsym->symbol;
5318
40658b94
PH
5319 if (sym == NULL)
5320 {
5321 if (!data->found_sym && data->arg_sym != NULL)
d1183b06 5322 add_defn_to_vec (*data->resultp,
40658b94
PH
5323 fixup_symbol_section (data->arg_sym, data->objfile),
5324 block);
1178743e 5325 data->found_sym = false;
40658b94
PH
5326 data->arg_sym = NULL;
5327 }
5328 else
5329 {
5330 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
199b4314 5331 return true;
40658b94
PH
5332 else if (SYMBOL_IS_ARGUMENT (sym))
5333 data->arg_sym = sym;
5334 else
5335 {
1178743e 5336 data->found_sym = true;
d1183b06 5337 add_defn_to_vec (*data->resultp,
40658b94
PH
5338 fixup_symbol_section (sym, data->objfile),
5339 block);
5340 }
5341 }
199b4314 5342 return true;
40658b94
PH
5343}
5344
b5ec771e
PA
5345/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5346 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
1bfa81ac 5347 symbols to RESULT. Return whether we found such symbols. */
22cee43f
PMR
5348
5349static int
d1183b06 5350ada_add_block_renamings (std::vector<struct block_symbol> &result,
22cee43f 5351 const struct block *block,
b5ec771e
PA
5352 const lookup_name_info &lookup_name,
5353 domain_enum domain)
22cee43f
PMR
5354{
5355 struct using_direct *renaming;
d1183b06 5356 int defns_mark = result.size ();
22cee43f 5357
b5ec771e
PA
5358 symbol_name_matcher_ftype *name_match
5359 = ada_get_symbol_name_matcher (lookup_name);
5360
22cee43f
PMR
5361 for (renaming = block_using (block);
5362 renaming != NULL;
5363 renaming = renaming->next)
5364 {
5365 const char *r_name;
22cee43f
PMR
5366
5367 /* Avoid infinite recursions: skip this renaming if we are actually
5368 already traversing it.
5369
5370 Currently, symbol lookup in Ada don't use the namespace machinery from
5371 C++/Fortran support: skip namespace imports that use them. */
5372 if (renaming->searched
5373 || (renaming->import_src != NULL
5374 && renaming->import_src[0] != '\0')
5375 || (renaming->import_dest != NULL
5376 && renaming->import_dest[0] != '\0'))
5377 continue;
5378 renaming->searched = 1;
5379
5380 /* TODO: here, we perform another name-based symbol lookup, which can
5381 pull its own multiple overloads. In theory, we should be able to do
5382 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5383 not a simple name. But in order to do this, we would need to enhance
5384 the DWARF reader to associate a symbol to this renaming, instead of a
5385 name. So, for now, we do something simpler: re-use the C++/Fortran
5386 namespace machinery. */
5387 r_name = (renaming->alias != NULL
5388 ? renaming->alias
5389 : renaming->declaration);
b5ec771e
PA
5390 if (name_match (r_name, lookup_name, NULL))
5391 {
5392 lookup_name_info decl_lookup_name (renaming->declaration,
5393 lookup_name.match_type ());
d1183b06 5394 ada_add_all_symbols (result, block, decl_lookup_name, domain,
b5ec771e
PA
5395 1, NULL);
5396 }
22cee43f
PMR
5397 renaming->searched = 0;
5398 }
d1183b06 5399 return result.size () != defns_mark;
22cee43f
PMR
5400}
5401
db230ce3
JB
5402/* Implements compare_names, but only applying the comparision using
5403 the given CASING. */
5b4ee69b 5404
40658b94 5405static int
db230ce3
JB
5406compare_names_with_case (const char *string1, const char *string2,
5407 enum case_sensitivity casing)
40658b94
PH
5408{
5409 while (*string1 != '\0' && *string2 != '\0')
5410 {
db230ce3
JB
5411 char c1, c2;
5412
40658b94
PH
5413 if (isspace (*string1) || isspace (*string2))
5414 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5415
5416 if (casing == case_sensitive_off)
5417 {
5418 c1 = tolower (*string1);
5419 c2 = tolower (*string2);
5420 }
5421 else
5422 {
5423 c1 = *string1;
5424 c2 = *string2;
5425 }
5426 if (c1 != c2)
40658b94 5427 break;
db230ce3 5428
40658b94
PH
5429 string1 += 1;
5430 string2 += 1;
5431 }
db230ce3 5432
40658b94
PH
5433 switch (*string1)
5434 {
5435 case '(':
5436 return strcmp_iw_ordered (string1, string2);
5437 case '_':
5438 if (*string2 == '\0')
5439 {
052874e8 5440 if (is_name_suffix (string1))
40658b94
PH
5441 return 0;
5442 else
1a1d5513 5443 return 1;
40658b94 5444 }
dbb8534f 5445 /* FALLTHROUGH */
40658b94
PH
5446 default:
5447 if (*string2 == '(')
5448 return strcmp_iw_ordered (string1, string2);
5449 else
db230ce3
JB
5450 {
5451 if (casing == case_sensitive_off)
5452 return tolower (*string1) - tolower (*string2);
5453 else
5454 return *string1 - *string2;
5455 }
40658b94 5456 }
ccefe4c4
TT
5457}
5458
db230ce3
JB
5459/* Compare STRING1 to STRING2, with results as for strcmp.
5460 Compatible with strcmp_iw_ordered in that...
5461
5462 strcmp_iw_ordered (STRING1, STRING2) <= 0
5463
5464 ... implies...
5465
5466 compare_names (STRING1, STRING2) <= 0
5467
5468 (they may differ as to what symbols compare equal). */
5469
5470static int
5471compare_names (const char *string1, const char *string2)
5472{
5473 int result;
5474
5475 /* Similar to what strcmp_iw_ordered does, we need to perform
5476 a case-insensitive comparison first, and only resort to
5477 a second, case-sensitive, comparison if the first one was
5478 not sufficient to differentiate the two strings. */
5479
5480 result = compare_names_with_case (string1, string2, case_sensitive_off);
5481 if (result == 0)
5482 result = compare_names_with_case (string1, string2, case_sensitive_on);
5483
5484 return result;
5485}
5486
b5ec771e
PA
5487/* Convenience function to get at the Ada encoded lookup name for
5488 LOOKUP_NAME, as a C string. */
5489
5490static const char *
5491ada_lookup_name (const lookup_name_info &lookup_name)
5492{
5493 return lookup_name.ada ().lookup_name ().c_str ();
5494}
5495
1bfa81ac 5496/* Add to RESULT all non-local symbols whose name and domain match
b5ec771e
PA
5497 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5498 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5499 symbols otherwise. */
339c13b6
JB
5500
5501static void
d1183b06 5502add_nonlocal_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5503 const lookup_name_info &lookup_name,
5504 domain_enum domain, int global)
339c13b6 5505{
1bfa81ac 5506 struct match_data data (&result);
339c13b6 5507
b5ec771e
PA
5508 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5509
199b4314
TT
5510 auto callback = [&] (struct block_symbol *bsym)
5511 {
5512 return aux_add_nonlocal_symbols (bsym, &data);
5513 };
5514
2030c079 5515 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5516 {
5517 data.objfile = objfile;
5518
1228719f
TT
5519 if (objfile->sf != nullptr)
5520 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5521 domain, global, callback,
5522 (is_wild_match
5523 ? NULL : compare_names));
22cee43f 5524
b669c953 5525 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5526 {
5527 const struct block *global_block
5528 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5529
d1183b06 5530 if (ada_add_block_renamings (result, global_block, lookup_name,
b5ec771e 5531 domain))
1178743e 5532 data.found_sym = true;
22cee43f 5533 }
40658b94
PH
5534 }
5535
d1183b06 5536 if (result.empty () && global && !is_wild_match)
40658b94 5537 {
b5ec771e 5538 const char *name = ada_lookup_name (lookup_name);
e0802d59
TT
5539 std::string bracket_name = std::string ("<_ada_") + name + '>';
5540 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
b5ec771e 5541
2030c079 5542 for (objfile *objfile : current_program_space->objfiles ())
dda83cd7 5543 {
40658b94 5544 data.objfile = objfile;
1228719f
TT
5545 if (objfile->sf != nullptr)
5546 objfile->sf->qf->map_matching_symbols (objfile, name1,
5547 domain, global, callback,
5548 compare_names);
40658b94
PH
5549 }
5550 }
339c13b6
JB
5551}
5552
b5ec771e
PA
5553/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5554 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
1bfa81ac 5555 returning the number of matches. Add these to RESULT.
4eeaa230 5556
22cee43f
PMR
5557 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5558 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5559 is the one match returned (no other matches in that or
d9680e73 5560 enclosing blocks is returned). If there are any matches in or
22cee43f 5561 surrounding BLOCK, then these alone are returned.
4eeaa230 5562
b5ec771e
PA
5563 Names prefixed with "standard__" are handled specially:
5564 "standard__" is first stripped off (by the lookup_name
5565 constructor), and only static and global symbols are searched.
14f9c5c9 5566
22cee43f
PMR
5567 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5568 to lookup global symbols. */
5569
5570static void
d1183b06 5571ada_add_all_symbols (std::vector<struct block_symbol> &result,
22cee43f 5572 const struct block *block,
b5ec771e 5573 const lookup_name_info &lookup_name,
22cee43f
PMR
5574 domain_enum domain,
5575 int full_search,
5576 int *made_global_lookup_p)
14f9c5c9
AS
5577{
5578 struct symbol *sym;
14f9c5c9 5579
22cee43f
PMR
5580 if (made_global_lookup_p)
5581 *made_global_lookup_p = 0;
339c13b6
JB
5582
5583 /* Special case: If the user specifies a symbol name inside package
5584 Standard, do a non-wild matching of the symbol name without
5585 the "standard__" prefix. This was primarily introduced in order
5586 to allow the user to specifically access the standard exceptions
5587 using, for instance, Standard.Constraint_Error when Constraint_Error
5588 is ambiguous (due to the user defining its own Constraint_Error
5589 entity inside its program). */
b5ec771e
PA
5590 if (lookup_name.ada ().standard_p ())
5591 block = NULL;
4c4b4cd2 5592
339c13b6 5593 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5594
4eeaa230
DE
5595 if (block != NULL)
5596 {
5597 if (full_search)
d1183b06 5598 ada_add_local_symbols (result, lookup_name, block, domain);
4eeaa230
DE
5599 else
5600 {
5601 /* In the !full_search case we're are being called by
4009ee92 5602 iterate_over_symbols, and we don't want to search
4eeaa230 5603 superblocks. */
d1183b06 5604 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
4eeaa230 5605 }
d1183b06 5606 if (!result.empty () || !full_search)
22cee43f 5607 return;
4eeaa230 5608 }
d2e4a39e 5609
339c13b6
JB
5610 /* No non-global symbols found. Check our cache to see if we have
5611 already performed this search before. If we have, then return
5612 the same result. */
5613
b5ec771e
PA
5614 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5615 domain, &sym, &block))
4c4b4cd2
PH
5616 {
5617 if (sym != NULL)
d1183b06 5618 add_defn_to_vec (result, sym, block);
22cee43f 5619 return;
4c4b4cd2 5620 }
14f9c5c9 5621
22cee43f
PMR
5622 if (made_global_lookup_p)
5623 *made_global_lookup_p = 1;
b1eedac9 5624
339c13b6
JB
5625 /* Search symbols from all global blocks. */
5626
d1183b06 5627 add_nonlocal_symbols (result, lookup_name, domain, 1);
d2e4a39e 5628
4c4b4cd2 5629 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5630 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5631
d1183b06
TT
5632 if (result.empty ())
5633 add_nonlocal_symbols (result, lookup_name, domain, 0);
22cee43f
PMR
5634}
5635
b5ec771e 5636/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
d1183b06
TT
5637 is non-zero, enclosing scope and in global scopes.
5638
5639 Returns (SYM,BLOCK) tuples, indicating the symbols found and the
5640 blocks and symbol tables (if any) in which they were found.
22cee43f
PMR
5641
5642 When full_search is non-zero, any non-function/non-enumeral
5643 symbol match within the nest of blocks whose innermost member is BLOCK,
5644 is the one match returned (no other matches in that or
5645 enclosing blocks is returned). If there are any matches in or
5646 surrounding BLOCK, then these alone are returned.
5647
5648 Names prefixed with "standard__" are handled specially: "standard__"
5649 is first stripped off, and only static and global symbols are searched. */
5650
d1183b06 5651static std::vector<struct block_symbol>
b5ec771e
PA
5652ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5653 const struct block *block,
22cee43f 5654 domain_enum domain,
22cee43f
PMR
5655 int full_search)
5656{
22cee43f 5657 int syms_from_global_search;
d1183b06 5658 std::vector<struct block_symbol> results;
22cee43f 5659
d1183b06 5660 ada_add_all_symbols (results, block, lookup_name,
b5ec771e 5661 domain, full_search, &syms_from_global_search);
14f9c5c9 5662
d1183b06 5663 remove_extra_symbols (&results);
4c4b4cd2 5664
d1183b06 5665 if (results.empty () && full_search && syms_from_global_search)
b5ec771e 5666 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5667
d1183b06 5668 if (results.size () == 1 && full_search && syms_from_global_search)
b5ec771e 5669 cache_symbol (ada_lookup_name (lookup_name), domain,
d1183b06 5670 results[0].symbol, results[0].block);
ec6a20c2 5671
d1183b06
TT
5672 remove_irrelevant_renamings (&results, block);
5673 return results;
14f9c5c9
AS
5674}
5675
b5ec771e 5676/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
d1183b06 5677 in global scopes, returning (SYM,BLOCK) tuples.
ec6a20c2 5678
4eeaa230
DE
5679 See ada_lookup_symbol_list_worker for further details. */
5680
d1183b06 5681std::vector<struct block_symbol>
b5ec771e 5682ada_lookup_symbol_list (const char *name, const struct block *block,
d1183b06 5683 domain_enum domain)
4eeaa230 5684{
b5ec771e
PA
5685 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5686 lookup_name_info lookup_name (name, name_match_type);
5687
d1183b06 5688 return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
4eeaa230
DE
5689}
5690
4e5c77fe
JB
5691/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5692 to 1, but choosing the first symbol found if there are multiple
5693 choices.
5694
5e2336be
JB
5695 The result is stored in *INFO, which must be non-NULL.
5696 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5697
5698void
5699ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5700 domain_enum domain,
d12307c1 5701 struct block_symbol *info)
14f9c5c9 5702{
b5ec771e
PA
5703 /* Since we already have an encoded name, wrap it in '<>' to force a
5704 verbatim match. Otherwise, if the name happens to not look like
5705 an encoded name (because it doesn't include a "__"),
5706 ada_lookup_name_info would re-encode/fold it again, and that
5707 would e.g., incorrectly lowercase object renaming names like
5708 "R28b" -> "r28b". */
12932e2c 5709 std::string verbatim = add_angle_brackets (name);
b5ec771e 5710
5e2336be 5711 gdb_assert (info != NULL);
65392b3e 5712 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
4e5c77fe 5713}
aeb5907d
JB
5714
5715/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5716 scope and in global scopes, or NULL if none. NAME is folded and
5717 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
65392b3e 5718 choosing the first symbol if there are multiple choices. */
4e5c77fe 5719
d12307c1 5720struct block_symbol
aeb5907d 5721ada_lookup_symbol (const char *name, const struct block *block0,
dda83cd7 5722 domain_enum domain)
aeb5907d 5723{
d1183b06
TT
5724 std::vector<struct block_symbol> candidates
5725 = ada_lookup_symbol_list (name, block0, domain);
f98fc17b 5726
d1183b06 5727 if (candidates.empty ())
54d343a2 5728 return {};
f98fc17b
PA
5729
5730 block_symbol info = candidates[0];
5731 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5732 return info;
4c4b4cd2 5733}
14f9c5c9 5734
14f9c5c9 5735
4c4b4cd2
PH
5736/* True iff STR is a possible encoded suffix of a normal Ada name
5737 that is to be ignored for matching purposes. Suffixes of parallel
5738 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5739 are given by any of the regular expressions:
4c4b4cd2 5740
babe1480
JB
5741 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5742 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5743 TKB [subprogram suffix for task bodies]
babe1480 5744 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5745 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5746
5747 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5748 match is performed. This sequence is used to differentiate homonyms,
5749 is an optional part of a valid name suffix. */
4c4b4cd2 5750
14f9c5c9 5751static int
d2e4a39e 5752is_name_suffix (const char *str)
14f9c5c9
AS
5753{
5754 int k;
4c4b4cd2
PH
5755 const char *matching;
5756 const int len = strlen (str);
5757
babe1480
JB
5758 /* Skip optional leading __[0-9]+. */
5759
4c4b4cd2
PH
5760 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5761 {
babe1480
JB
5762 str += 3;
5763 while (isdigit (str[0]))
dda83cd7 5764 str += 1;
4c4b4cd2 5765 }
babe1480
JB
5766
5767 /* [.$][0-9]+ */
4c4b4cd2 5768
babe1480 5769 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5770 {
babe1480 5771 matching = str + 1;
4c4b4cd2 5772 while (isdigit (matching[0]))
dda83cd7 5773 matching += 1;
4c4b4cd2 5774 if (matching[0] == '\0')
dda83cd7 5775 return 1;
4c4b4cd2
PH
5776 }
5777
5778 /* ___[0-9]+ */
babe1480 5779
4c4b4cd2
PH
5780 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5781 {
5782 matching = str + 3;
5783 while (isdigit (matching[0]))
dda83cd7 5784 matching += 1;
4c4b4cd2 5785 if (matching[0] == '\0')
dda83cd7 5786 return 1;
4c4b4cd2
PH
5787 }
5788
9ac7f98e
JB
5789 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5790
5791 if (strcmp (str, "TKB") == 0)
5792 return 1;
5793
529cad9c
PH
5794#if 0
5795 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5796 with a N at the end. Unfortunately, the compiler uses the same
5797 convention for other internal types it creates. So treating
529cad9c 5798 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5799 some regressions. For instance, consider the case of an enumerated
5800 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5801 name ends with N.
5802 Having a single character like this as a suffix carrying some
0963b4bd 5803 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5804 to be something like "_N" instead. In the meantime, do not do
5805 the following check. */
5806 /* Protected Object Subprograms */
5807 if (len == 1 && str [0] == 'N')
5808 return 1;
5809#endif
5810
5811 /* _E[0-9]+[bs]$ */
5812 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5813 {
5814 matching = str + 3;
5815 while (isdigit (matching[0]))
dda83cd7 5816 matching += 1;
529cad9c 5817 if ((matching[0] == 'b' || matching[0] == 's')
dda83cd7
SM
5818 && matching [1] == '\0')
5819 return 1;
529cad9c
PH
5820 }
5821
4c4b4cd2
PH
5822 /* ??? We should not modify STR directly, as we are doing below. This
5823 is fine in this case, but may become problematic later if we find
5824 that this alternative did not work, and want to try matching
5825 another one from the begining of STR. Since we modified it, we
5826 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5827 if (str[0] == 'X')
5828 {
5829 str += 1;
d2e4a39e 5830 while (str[0] != '_' && str[0] != '\0')
dda83cd7
SM
5831 {
5832 if (str[0] != 'n' && str[0] != 'b')
5833 return 0;
5834 str += 1;
5835 }
14f9c5c9 5836 }
babe1480 5837
14f9c5c9
AS
5838 if (str[0] == '\000')
5839 return 1;
babe1480 5840
d2e4a39e 5841 if (str[0] == '_')
14f9c5c9
AS
5842 {
5843 if (str[1] != '_' || str[2] == '\000')
dda83cd7 5844 return 0;
d2e4a39e 5845 if (str[2] == '_')
dda83cd7
SM
5846 {
5847 if (strcmp (str + 3, "JM") == 0)
5848 return 1;
5849 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5850 the LJM suffix in favor of the JM one. But we will
5851 still accept LJM as a valid suffix for a reasonable
5852 amount of time, just to allow ourselves to debug programs
5853 compiled using an older version of GNAT. */
5854 if (strcmp (str + 3, "LJM") == 0)
5855 return 1;
5856 if (str[3] != 'X')
5857 return 0;
5858 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5859 || str[4] == 'U' || str[4] == 'P')
5860 return 1;
5861 if (str[4] == 'R' && str[5] != 'T')
5862 return 1;
5863 return 0;
5864 }
4c4b4cd2 5865 if (!isdigit (str[2]))
dda83cd7 5866 return 0;
4c4b4cd2 5867 for (k = 3; str[k] != '\0'; k += 1)
dda83cd7
SM
5868 if (!isdigit (str[k]) && str[k] != '_')
5869 return 0;
14f9c5c9
AS
5870 return 1;
5871 }
4c4b4cd2 5872 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5873 {
4c4b4cd2 5874 for (k = 2; str[k] != '\0'; k += 1)
dda83cd7
SM
5875 if (!isdigit (str[k]) && str[k] != '_')
5876 return 0;
14f9c5c9
AS
5877 return 1;
5878 }
5879 return 0;
5880}
d2e4a39e 5881
aeb5907d
JB
5882/* Return non-zero if the string starting at NAME and ending before
5883 NAME_END contains no capital letters. */
529cad9c
PH
5884
5885static int
5886is_valid_name_for_wild_match (const char *name0)
5887{
f945dedf 5888 std::string decoded_name = ada_decode (name0);
529cad9c
PH
5889 int i;
5890
5823c3ef
JB
5891 /* If the decoded name starts with an angle bracket, it means that
5892 NAME0 does not follow the GNAT encoding format. It should then
5893 not be allowed as a possible wild match. */
5894 if (decoded_name[0] == '<')
5895 return 0;
5896
529cad9c
PH
5897 for (i=0; decoded_name[i] != '\0'; i++)
5898 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5899 return 0;
5900
5901 return 1;
5902}
5903
59c8a30b
JB
5904/* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
5905 character which could start a simple name. Assumes that *NAMEP points
5906 somewhere inside the string beginning at NAME0. */
4c4b4cd2 5907
14f9c5c9 5908static int
59c8a30b 5909advance_wild_match (const char **namep, const char *name0, char target0)
14f9c5c9 5910{
73589123 5911 const char *name = *namep;
5b4ee69b 5912
5823c3ef 5913 while (1)
14f9c5c9 5914 {
59c8a30b 5915 char t0, t1;
73589123
PH
5916
5917 t0 = *name;
5918 if (t0 == '_')
5919 {
5920 t1 = name[1];
5921 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5922 {
5923 name += 1;
61012eef 5924 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
5925 break;
5926 else
5927 name += 1;
5928 }
aa27d0b3
JB
5929 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5930 || name[2] == target0))
73589123
PH
5931 {
5932 name += 2;
5933 break;
5934 }
86b44259
TT
5935 else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
5936 {
5937 /* Names like "pkg__B_N__name", where N is a number, are
5938 block-local. We can handle these by simply skipping
5939 the "B_" here. */
5940 name += 4;
5941 }
73589123
PH
5942 else
5943 return 0;
5944 }
5945 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5946 name += 1;
5947 else
5823c3ef 5948 return 0;
73589123
PH
5949 }
5950
5951 *namep = name;
5952 return 1;
5953}
5954
b5ec771e
PA
5955/* Return true iff NAME encodes a name of the form prefix.PATN.
5956 Ignores any informational suffixes of NAME (i.e., for which
5957 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
5958 simple name. */
73589123 5959
b5ec771e 5960static bool
73589123
PH
5961wild_match (const char *name, const char *patn)
5962{
22e048c9 5963 const char *p;
73589123
PH
5964 const char *name0 = name;
5965
5966 while (1)
5967 {
5968 const char *match = name;
5969
5970 if (*name == *patn)
5971 {
5972 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5973 if (*p != *name)
5974 break;
5975 if (*p == '\0' && is_name_suffix (name))
b5ec771e 5976 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
5977
5978 if (name[-1] == '_')
5979 name -= 1;
5980 }
5981 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 5982 return false;
96d887e8 5983 }
96d887e8
PH
5984}
5985
d1183b06 5986/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
b5ec771e 5987 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
5988
5989static void
d1183b06 5990ada_add_block_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5991 const struct block *block,
5992 const lookup_name_info &lookup_name,
5993 domain_enum domain, struct objfile *objfile)
96d887e8 5994{
8157b174 5995 struct block_iterator iter;
96d887e8
PH
5996 /* A matching argument symbol, if any. */
5997 struct symbol *arg_sym;
5998 /* Set true when we find a matching non-argument symbol. */
1178743e 5999 bool found_sym;
96d887e8
PH
6000 struct symbol *sym;
6001
6002 arg_sym = NULL;
1178743e 6003 found_sym = false;
b5ec771e
PA
6004 for (sym = block_iter_match_first (block, lookup_name, &iter);
6005 sym != NULL;
6006 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6007 {
c1b5c1eb 6008 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
b5ec771e
PA
6009 {
6010 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6011 {
6012 if (SYMBOL_IS_ARGUMENT (sym))
6013 arg_sym = sym;
6014 else
6015 {
1178743e 6016 found_sym = true;
d1183b06 6017 add_defn_to_vec (result,
b5ec771e
PA
6018 fixup_symbol_section (sym, objfile),
6019 block);
6020 }
6021 }
6022 }
96d887e8
PH
6023 }
6024
22cee43f
PMR
6025 /* Handle renamings. */
6026
d1183b06 6027 if (ada_add_block_renamings (result, block, lookup_name, domain))
1178743e 6028 found_sym = true;
22cee43f 6029
96d887e8
PH
6030 if (!found_sym && arg_sym != NULL)
6031 {
d1183b06 6032 add_defn_to_vec (result,
dda83cd7
SM
6033 fixup_symbol_section (arg_sym, objfile),
6034 block);
96d887e8
PH
6035 }
6036
b5ec771e 6037 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6038 {
6039 arg_sym = NULL;
1178743e 6040 found_sym = false;
b5ec771e
PA
6041 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6042 const char *name = ada_lookup_name.c_str ();
6043 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6044
6045 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6046 {
dda83cd7
SM
6047 if (symbol_matches_domain (sym->language (),
6048 SYMBOL_DOMAIN (sym), domain))
6049 {
6050 int cmp;
6051
6052 cmp = (int) '_' - (int) sym->linkage_name ()[0];
6053 if (cmp == 0)
6054 {
6055 cmp = !startswith (sym->linkage_name (), "_ada_");
6056 if (cmp == 0)
6057 cmp = strncmp (name, sym->linkage_name () + 5,
6058 name_len);
6059 }
6060
6061 if (cmp == 0
6062 && is_name_suffix (sym->linkage_name () + name_len + 5))
6063 {
2a2d4dc3
AS
6064 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6065 {
6066 if (SYMBOL_IS_ARGUMENT (sym))
6067 arg_sym = sym;
6068 else
6069 {
1178743e 6070 found_sym = true;
d1183b06 6071 add_defn_to_vec (result,
2a2d4dc3
AS
6072 fixup_symbol_section (sym, objfile),
6073 block);
6074 }
6075 }
dda83cd7
SM
6076 }
6077 }
76a01679 6078 }
96d887e8
PH
6079
6080 /* NOTE: This really shouldn't be needed for _ada_ symbols.
dda83cd7 6081 They aren't parameters, right? */
96d887e8 6082 if (!found_sym && arg_sym != NULL)
dda83cd7 6083 {
d1183b06 6084 add_defn_to_vec (result,
dda83cd7
SM
6085 fixup_symbol_section (arg_sym, objfile),
6086 block);
6087 }
96d887e8
PH
6088 }
6089}
6090\f
41d27058 6091
dda83cd7 6092 /* Symbol Completion */
41d27058 6093
b5ec771e 6094/* See symtab.h. */
41d27058 6095
b5ec771e
PA
6096bool
6097ada_lookup_name_info::matches
6098 (const char *sym_name,
6099 symbol_name_match_type match_type,
a207cff2 6100 completion_match_result *comp_match_res) const
41d27058 6101{
b5ec771e
PA
6102 bool match = false;
6103 const char *text = m_encoded_name.c_str ();
6104 size_t text_len = m_encoded_name.size ();
41d27058
JB
6105
6106 /* First, test against the fully qualified name of the symbol. */
6107
6108 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6109 match = true;
41d27058 6110
f945dedf 6111 std::string decoded_name = ada_decode (sym_name);
b5ec771e 6112 if (match && !m_encoded_p)
41d27058
JB
6113 {
6114 /* One needed check before declaring a positive match is to verify
dda83cd7
SM
6115 that iff we are doing a verbatim match, the decoded version
6116 of the symbol name starts with '<'. Otherwise, this symbol name
6117 is not a suitable completion. */
41d27058 6118
f945dedf 6119 bool has_angle_bracket = (decoded_name[0] == '<');
b5ec771e 6120 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6121 }
6122
b5ec771e 6123 if (match && !m_verbatim_p)
41d27058
JB
6124 {
6125 /* When doing non-verbatim match, another check that needs to
dda83cd7
SM
6126 be done is to verify that the potentially matching symbol name
6127 does not include capital letters, because the ada-mode would
6128 not be able to understand these symbol names without the
6129 angle bracket notation. */
41d27058
JB
6130 const char *tmp;
6131
6132 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6133 if (*tmp != '\0')
b5ec771e 6134 match = false;
41d27058
JB
6135 }
6136
6137 /* Second: Try wild matching... */
6138
b5ec771e 6139 if (!match && m_wild_match_p)
41d27058
JB
6140 {
6141 /* Since we are doing wild matching, this means that TEXT
dda83cd7
SM
6142 may represent an unqualified symbol name. We therefore must
6143 also compare TEXT against the unqualified name of the symbol. */
f945dedf 6144 sym_name = ada_unqualified_name (decoded_name.c_str ());
41d27058
JB
6145
6146 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6147 match = true;
41d27058
JB
6148 }
6149
b5ec771e 6150 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6151
6152 if (!match)
b5ec771e 6153 return false;
41d27058 6154
a207cff2 6155 if (comp_match_res != NULL)
b5ec771e 6156 {
a207cff2 6157 std::string &match_str = comp_match_res->match.storage ();
41d27058 6158
b5ec771e 6159 if (!m_encoded_p)
a207cff2 6160 match_str = ada_decode (sym_name);
b5ec771e
PA
6161 else
6162 {
6163 if (m_verbatim_p)
6164 match_str = add_angle_brackets (sym_name);
6165 else
6166 match_str = sym_name;
41d27058 6167
b5ec771e 6168 }
a207cff2
PA
6169
6170 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6171 }
6172
b5ec771e 6173 return true;
41d27058
JB
6174}
6175
dda83cd7 6176 /* Field Access */
96d887e8 6177
73fb9985
JB
6178/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6179 for tagged types. */
6180
6181static int
6182ada_is_dispatch_table_ptr_type (struct type *type)
6183{
0d5cff50 6184 const char *name;
73fb9985 6185
78134374 6186 if (type->code () != TYPE_CODE_PTR)
73fb9985
JB
6187 return 0;
6188
7d93a1e0 6189 name = TYPE_TARGET_TYPE (type)->name ();
73fb9985
JB
6190 if (name == NULL)
6191 return 0;
6192
6193 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6194}
6195
ac4a2da4
JG
6196/* Return non-zero if TYPE is an interface tag. */
6197
6198static int
6199ada_is_interface_tag (struct type *type)
6200{
7d93a1e0 6201 const char *name = type->name ();
ac4a2da4
JG
6202
6203 if (name == NULL)
6204 return 0;
6205
6206 return (strcmp (name, "ada__tags__interface_tag") == 0);
6207}
6208
963a6417
PH
6209/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6210 to be invisible to users. */
96d887e8 6211
963a6417
PH
6212int
6213ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6214{
1f704f76 6215 if (field_num < 0 || field_num > type->num_fields ())
963a6417 6216 return 1;
ffde82bf 6217
73fb9985
JB
6218 /* Check the name of that field. */
6219 {
6220 const char *name = TYPE_FIELD_NAME (type, field_num);
6221
6222 /* Anonymous field names should not be printed.
6223 brobecker/2007-02-20: I don't think this can actually happen
30baf67b 6224 but we don't want to print the value of anonymous fields anyway. */
73fb9985
JB
6225 if (name == NULL)
6226 return 1;
6227
ffde82bf
JB
6228 /* Normally, fields whose name start with an underscore ("_")
6229 are fields that have been internally generated by the compiler,
6230 and thus should not be printed. The "_parent" field is special,
6231 however: This is a field internally generated by the compiler
6232 for tagged types, and it contains the components inherited from
6233 the parent type. This field should not be printed as is, but
6234 should not be ignored either. */
61012eef 6235 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6236 return 1;
6237 }
6238
ac4a2da4
JG
6239 /* If this is the dispatch table of a tagged type or an interface tag,
6240 then ignore. */
73fb9985 6241 if (ada_is_tagged_type (type, 1)
940da03e
SM
6242 && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6243 || ada_is_interface_tag (type->field (field_num).type ())))
73fb9985
JB
6244 return 1;
6245
6246 /* Not a special field, so it should not be ignored. */
6247 return 0;
963a6417 6248}
96d887e8 6249
963a6417 6250/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6251 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6252
963a6417
PH
6253int
6254ada_is_tagged_type (struct type *type, int refok)
6255{
988f6b3d 6256 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6257}
96d887e8 6258
963a6417 6259/* True iff TYPE represents the type of X'Tag */
96d887e8 6260
963a6417
PH
6261int
6262ada_is_tag_type (struct type *type)
6263{
460efde1
JB
6264 type = ada_check_typedef (type);
6265
78134374 6266 if (type == NULL || type->code () != TYPE_CODE_PTR)
963a6417
PH
6267 return 0;
6268 else
96d887e8 6269 {
963a6417 6270 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6271
963a6417 6272 return (name != NULL
dda83cd7 6273 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6274 }
96d887e8
PH
6275}
6276
963a6417 6277/* The type of the tag on VAL. */
76a01679 6278
de93309a 6279static struct type *
963a6417 6280ada_tag_type (struct value *val)
96d887e8 6281{
988f6b3d 6282 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6283}
96d887e8 6284
b50d69b5
JG
6285/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6286 retired at Ada 05). */
6287
6288static int
6289is_ada95_tag (struct value *tag)
6290{
6291 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6292}
6293
963a6417 6294/* The value of the tag on VAL. */
96d887e8 6295
de93309a 6296static struct value *
963a6417
PH
6297ada_value_tag (struct value *val)
6298{
03ee6b2e 6299 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6300}
6301
963a6417
PH
6302/* The value of the tag on the object of type TYPE whose contents are
6303 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6304 ADDRESS. */
96d887e8 6305
963a6417 6306static struct value *
10a2c479 6307value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6308 const gdb_byte *valaddr,
dda83cd7 6309 CORE_ADDR address)
96d887e8 6310{
b5385fc0 6311 int tag_byte_offset;
963a6417 6312 struct type *tag_type;
5b4ee69b 6313
963a6417 6314 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
dda83cd7 6315 NULL, NULL, NULL))
96d887e8 6316 {
fc1a4b47 6317 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6318 ? NULL
6319 : valaddr + tag_byte_offset);
963a6417 6320 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6321
963a6417 6322 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6323 }
963a6417
PH
6324 return NULL;
6325}
96d887e8 6326
963a6417
PH
6327static struct type *
6328type_from_tag (struct value *tag)
6329{
f5272a3b 6330 gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
5b4ee69b 6331
963a6417 6332 if (type_name != NULL)
5c4258f4 6333 return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
963a6417
PH
6334 return NULL;
6335}
96d887e8 6336
b50d69b5
JG
6337/* Given a value OBJ of a tagged type, return a value of this
6338 type at the base address of the object. The base address, as
6339 defined in Ada.Tags, it is the address of the primary tag of
6340 the object, and therefore where the field values of its full
6341 view can be fetched. */
6342
6343struct value *
6344ada_tag_value_at_base_address (struct value *obj)
6345{
b50d69b5
JG
6346 struct value *val;
6347 LONGEST offset_to_top = 0;
6348 struct type *ptr_type, *obj_type;
6349 struct value *tag;
6350 CORE_ADDR base_address;
6351
6352 obj_type = value_type (obj);
6353
6354 /* It is the responsability of the caller to deref pointers. */
6355
78134374 6356 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
b50d69b5
JG
6357 return obj;
6358
6359 tag = ada_value_tag (obj);
6360 if (!tag)
6361 return obj;
6362
6363 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6364
6365 if (is_ada95_tag (tag))
6366 return obj;
6367
08f49010
XR
6368 ptr_type = language_lookup_primitive_type
6369 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6370 ptr_type = lookup_pointer_type (ptr_type);
6371 val = value_cast (ptr_type, tag);
6372 if (!val)
6373 return obj;
6374
6375 /* It is perfectly possible that an exception be raised while
6376 trying to determine the base address, just like for the tag;
6377 see ada_tag_name for more details. We do not print the error
6378 message for the same reason. */
6379
a70b8144 6380 try
b50d69b5
JG
6381 {
6382 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6383 }
6384
230d2906 6385 catch (const gdb_exception_error &e)
492d29ea
PA
6386 {
6387 return obj;
6388 }
b50d69b5
JG
6389
6390 /* If offset is null, nothing to do. */
6391
6392 if (offset_to_top == 0)
6393 return obj;
6394
6395 /* -1 is a special case in Ada.Tags; however, what should be done
6396 is not quite clear from the documentation. So do nothing for
6397 now. */
6398
6399 if (offset_to_top == -1)
6400 return obj;
6401
08f49010
XR
6402 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6403 from the base address. This was however incompatible with
6404 C++ dispatch table: C++ uses a *negative* value to *add*
6405 to the base address. Ada's convention has therefore been
6406 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6407 use the same convention. Here, we support both cases by
6408 checking the sign of OFFSET_TO_TOP. */
6409
6410 if (offset_to_top > 0)
6411 offset_to_top = -offset_to_top;
6412
6413 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6414 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6415
6416 /* Make sure that we have a proper tag at the new address.
6417 Otherwise, offset_to_top is bogus (which can happen when
6418 the object is not initialized yet). */
6419
6420 if (!tag)
6421 return obj;
6422
6423 obj_type = type_from_tag (tag);
6424
6425 if (!obj_type)
6426 return obj;
6427
6428 return value_from_contents_and_address (obj_type, NULL, base_address);
6429}
6430
1b611343
JB
6431/* Return the "ada__tags__type_specific_data" type. */
6432
6433static struct type *
6434ada_get_tsd_type (struct inferior *inf)
963a6417 6435{
1b611343 6436 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6437
1b611343
JB
6438 if (data->tsd_type == 0)
6439 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6440 return data->tsd_type;
6441}
529cad9c 6442
1b611343
JB
6443/* Return the TSD (type-specific data) associated to the given TAG.
6444 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6445
1b611343 6446 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6447
1b611343
JB
6448static struct value *
6449ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6450{
4c4b4cd2 6451 struct value *val;
1b611343 6452 struct type *type;
5b4ee69b 6453
1b611343
JB
6454 /* First option: The TSD is simply stored as a field of our TAG.
6455 Only older versions of GNAT would use this format, but we have
6456 to test it first, because there are no visible markers for
6457 the current approach except the absence of that field. */
529cad9c 6458
1b611343
JB
6459 val = ada_value_struct_elt (tag, "tsd", 1);
6460 if (val)
6461 return val;
e802dbe0 6462
1b611343
JB
6463 /* Try the second representation for the dispatch table (in which
6464 there is no explicit 'tsd' field in the referent of the tag pointer,
6465 and instead the tsd pointer is stored just before the dispatch
6466 table. */
e802dbe0 6467
1b611343
JB
6468 type = ada_get_tsd_type (current_inferior());
6469 if (type == NULL)
6470 return NULL;
6471 type = lookup_pointer_type (lookup_pointer_type (type));
6472 val = value_cast (type, tag);
6473 if (val == NULL)
6474 return NULL;
6475 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6476}
6477
1b611343
JB
6478/* Given the TSD of a tag (type-specific data), return a string
6479 containing the name of the associated type.
6480
f5272a3b 6481 May return NULL if we are unable to determine the tag name. */
1b611343 6482
f5272a3b 6483static gdb::unique_xmalloc_ptr<char>
1b611343 6484ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6485{
529cad9c 6486 char *p;
1b611343 6487 struct value *val;
529cad9c 6488
1b611343 6489 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6490 if (val == NULL)
1b611343 6491 return NULL;
66920317
TT
6492 gdb::unique_xmalloc_ptr<char> buffer
6493 = target_read_string (value_as_address (val), INT_MAX);
6494 if (buffer == nullptr)
f5272a3b
TT
6495 return nullptr;
6496
6497 for (p = buffer.get (); *p != '\0'; ++p)
6498 {
6499 if (isalpha (*p))
6500 *p = tolower (*p);
6501 }
6502
6503 return buffer;
4c4b4cd2
PH
6504}
6505
6506/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6507 a C string.
6508
6509 Return NULL if the TAG is not an Ada tag, or if we were unable to
f5272a3b 6510 determine the name of that tag. */
4c4b4cd2 6511
f5272a3b 6512gdb::unique_xmalloc_ptr<char>
4c4b4cd2
PH
6513ada_tag_name (struct value *tag)
6514{
f5272a3b 6515 gdb::unique_xmalloc_ptr<char> name;
5b4ee69b 6516
df407dfe 6517 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6518 return NULL;
1b611343
JB
6519
6520 /* It is perfectly possible that an exception be raised while trying
6521 to determine the TAG's name, even under normal circumstances:
6522 The associated variable may be uninitialized or corrupted, for
6523 instance. We do not let any exception propagate past this point.
6524 instead we return NULL.
6525
6526 We also do not print the error message either (which often is very
6527 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6528 the caller print a more meaningful message if necessary. */
a70b8144 6529 try
1b611343
JB
6530 {
6531 struct value *tsd = ada_get_tsd_from_tag (tag);
6532
6533 if (tsd != NULL)
6534 name = ada_tag_name_from_tsd (tsd);
6535 }
230d2906 6536 catch (const gdb_exception_error &e)
492d29ea
PA
6537 {
6538 }
1b611343
JB
6539
6540 return name;
4c4b4cd2
PH
6541}
6542
6543/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6544
d2e4a39e 6545struct type *
ebf56fd3 6546ada_parent_type (struct type *type)
14f9c5c9
AS
6547{
6548 int i;
6549
61ee279c 6550 type = ada_check_typedef (type);
14f9c5c9 6551
78134374 6552 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
6553 return NULL;
6554
1f704f76 6555 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 6556 if (ada_is_parent_field (type, i))
0c1f74cf 6557 {
dda83cd7 6558 struct type *parent_type = type->field (i).type ();
0c1f74cf 6559
dda83cd7
SM
6560 /* If the _parent field is a pointer, then dereference it. */
6561 if (parent_type->code () == TYPE_CODE_PTR)
6562 parent_type = TYPE_TARGET_TYPE (parent_type);
6563 /* If there is a parallel XVS type, get the actual base type. */
6564 parent_type = ada_get_base_type (parent_type);
0c1f74cf 6565
dda83cd7 6566 return ada_check_typedef (parent_type);
0c1f74cf 6567 }
14f9c5c9
AS
6568
6569 return NULL;
6570}
6571
4c4b4cd2
PH
6572/* True iff field number FIELD_NUM of structure type TYPE contains the
6573 parent-type (inherited) fields of a derived type. Assumes TYPE is
6574 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6575
6576int
ebf56fd3 6577ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6578{
61ee279c 6579 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6580
4c4b4cd2 6581 return (name != NULL
dda83cd7
SM
6582 && (startswith (name, "PARENT")
6583 || startswith (name, "_parent")));
14f9c5c9
AS
6584}
6585
4c4b4cd2 6586/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6587 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6588 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6589 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6590 structures. */
14f9c5c9
AS
6591
6592int
ebf56fd3 6593ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6594{
d2e4a39e 6595 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6596
dddc0e16
JB
6597 if (name != NULL && strcmp (name, "RETVAL") == 0)
6598 {
6599 /* This happens in functions with "out" or "in out" parameters
6600 which are passed by copy. For such functions, GNAT describes
6601 the function's return type as being a struct where the return
6602 value is in a field called RETVAL, and where the other "out"
6603 or "in out" parameters are fields of that struct. This is not
6604 a wrapper. */
6605 return 0;
6606 }
6607
d2e4a39e 6608 return (name != NULL
dda83cd7
SM
6609 && (startswith (name, "PARENT")
6610 || strcmp (name, "REP") == 0
6611 || startswith (name, "_parent")
6612 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6613}
6614
4c4b4cd2
PH
6615/* True iff field number FIELD_NUM of structure or union type TYPE
6616 is a variant wrapper. Assumes TYPE is a structure type with at least
6617 FIELD_NUM+1 fields. */
14f9c5c9
AS
6618
6619int
ebf56fd3 6620ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6621{
8ecb59f8
TT
6622 /* Only Ada types are eligible. */
6623 if (!ADA_TYPE_P (type))
6624 return 0;
6625
940da03e 6626 struct type *field_type = type->field (field_num).type ();
5b4ee69b 6627
78134374
SM
6628 return (field_type->code () == TYPE_CODE_UNION
6629 || (is_dynamic_field (type, field_num)
6630 && (TYPE_TARGET_TYPE (field_type)->code ()
c3e5cd34 6631 == TYPE_CODE_UNION)));
14f9c5c9
AS
6632}
6633
6634/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6635 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6636 returns the type of the controlling discriminant for the variant.
6637 May return NULL if the type could not be found. */
14f9c5c9 6638
d2e4a39e 6639struct type *
ebf56fd3 6640ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6641{
a121b7c1 6642 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6643
988f6b3d 6644 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
6645}
6646
4c4b4cd2 6647/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6648 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6649 represents a 'when others' clause; otherwise 0. */
14f9c5c9 6650
de93309a 6651static int
ebf56fd3 6652ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6653{
d2e4a39e 6654 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6655
14f9c5c9
AS
6656 return (name != NULL && name[0] == 'O');
6657}
6658
6659/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6660 returns the name of the discriminant controlling the variant.
6661 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6662
a121b7c1 6663const char *
ebf56fd3 6664ada_variant_discrim_name (struct type *type0)
14f9c5c9 6665{
5f9febe0 6666 static std::string result;
d2e4a39e
AS
6667 struct type *type;
6668 const char *name;
6669 const char *discrim_end;
6670 const char *discrim_start;
14f9c5c9 6671
78134374 6672 if (type0->code () == TYPE_CODE_PTR)
14f9c5c9
AS
6673 type = TYPE_TARGET_TYPE (type0);
6674 else
6675 type = type0;
6676
6677 name = ada_type_name (type);
6678
6679 if (name == NULL || name[0] == '\000')
6680 return "";
6681
6682 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6683 discrim_end -= 1)
6684 {
61012eef 6685 if (startswith (discrim_end, "___XVN"))
dda83cd7 6686 break;
14f9c5c9
AS
6687 }
6688 if (discrim_end == name)
6689 return "";
6690
d2e4a39e 6691 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6692 discrim_start -= 1)
6693 {
d2e4a39e 6694 if (discrim_start == name + 1)
dda83cd7 6695 return "";
76a01679 6696 if ((discrim_start > name + 3
dda83cd7
SM
6697 && startswith (discrim_start - 3, "___"))
6698 || discrim_start[-1] == '.')
6699 break;
14f9c5c9
AS
6700 }
6701
5f9febe0
TT
6702 result = std::string (discrim_start, discrim_end - discrim_start);
6703 return result.c_str ();
14f9c5c9
AS
6704}
6705
4c4b4cd2
PH
6706/* Scan STR for a subtype-encoded number, beginning at position K.
6707 Put the position of the character just past the number scanned in
6708 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6709 Return 1 if there was a valid number at the given position, and 0
6710 otherwise. A "subtype-encoded" number consists of the absolute value
6711 in decimal, followed by the letter 'm' to indicate a negative number.
6712 Assumes 0m does not occur. */
14f9c5c9
AS
6713
6714int
d2e4a39e 6715ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6716{
6717 ULONGEST RU;
6718
d2e4a39e 6719 if (!isdigit (str[k]))
14f9c5c9
AS
6720 return 0;
6721
4c4b4cd2 6722 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6723 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6724 LONGEST. */
14f9c5c9
AS
6725 RU = 0;
6726 while (isdigit (str[k]))
6727 {
d2e4a39e 6728 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6729 k += 1;
6730 }
6731
d2e4a39e 6732 if (str[k] == 'm')
14f9c5c9
AS
6733 {
6734 if (R != NULL)
dda83cd7 6735 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6736 k += 1;
6737 }
6738 else if (R != NULL)
6739 *R = (LONGEST) RU;
6740
4c4b4cd2 6741 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6742 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6743 number representable as a LONGEST (although either would probably work
6744 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6745 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6746
6747 if (new_k != NULL)
6748 *new_k = k;
6749 return 1;
6750}
6751
4c4b4cd2
PH
6752/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6753 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6754 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6755
de93309a 6756static int
ebf56fd3 6757ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6758{
d2e4a39e 6759 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6760 int p;
6761
6762 p = 0;
6763 while (1)
6764 {
d2e4a39e 6765 switch (name[p])
dda83cd7
SM
6766 {
6767 case '\0':
6768 return 0;
6769 case 'S':
6770 {
6771 LONGEST W;
6772
6773 if (!ada_scan_number (name, p + 1, &W, &p))
6774 return 0;
6775 if (val == W)
6776 return 1;
6777 break;
6778 }
6779 case 'R':
6780 {
6781 LONGEST L, U;
6782
6783 if (!ada_scan_number (name, p + 1, &L, &p)
6784 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6785 return 0;
6786 if (val >= L && val <= U)
6787 return 1;
6788 break;
6789 }
6790 case 'O':
6791 return 1;
6792 default:
6793 return 0;
6794 }
4c4b4cd2
PH
6795 }
6796}
6797
0963b4bd 6798/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6799
6800/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6801 ARG_TYPE, extract and return the value of one of its (non-static)
6802 fields. FIELDNO says which field. Differs from value_primitive_field
6803 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6804
5eb68a39 6805struct value *
d2e4a39e 6806ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
dda83cd7 6807 struct type *arg_type)
14f9c5c9 6808{
14f9c5c9
AS
6809 struct type *type;
6810
61ee279c 6811 arg_type = ada_check_typedef (arg_type);
940da03e 6812 type = arg_type->field (fieldno).type ();
14f9c5c9 6813
4504bbde
TT
6814 /* Handle packed fields. It might be that the field is not packed
6815 relative to its containing structure, but the structure itself is
6816 packed; in this case we must take the bit-field path. */
6817 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
14f9c5c9
AS
6818 {
6819 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6820 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6821
0fd88904 6822 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
dda83cd7
SM
6823 offset + bit_pos / 8,
6824 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6825 }
6826 else
6827 return value_primitive_field (arg1, offset, fieldno, arg_type);
6828}
6829
52ce6436
PH
6830/* Find field with name NAME in object of type TYPE. If found,
6831 set the following for each argument that is non-null:
6832 - *FIELD_TYPE_P to the field's type;
6833 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6834 an object of that type;
6835 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6836 - *BIT_SIZE_P to its size in bits if the field is packed, and
6837 0 otherwise;
6838 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6839 fields up to but not including the desired field, or by the total
6840 number of fields if not found. A NULL value of NAME never
6841 matches; the function just counts visible fields in this case.
6842
828d5846
XR
6843 Notice that we need to handle when a tagged record hierarchy
6844 has some components with the same name, like in this scenario:
6845
6846 type Top_T is tagged record
dda83cd7
SM
6847 N : Integer := 1;
6848 U : Integer := 974;
6849 A : Integer := 48;
828d5846
XR
6850 end record;
6851
6852 type Middle_T is new Top.Top_T with record
dda83cd7
SM
6853 N : Character := 'a';
6854 C : Integer := 3;
828d5846
XR
6855 end record;
6856
6857 type Bottom_T is new Middle.Middle_T with record
dda83cd7
SM
6858 N : Float := 4.0;
6859 C : Character := '5';
6860 X : Integer := 6;
6861 A : Character := 'J';
828d5846
XR
6862 end record;
6863
6864 Let's say we now have a variable declared and initialized as follow:
6865
6866 TC : Top_A := new Bottom_T;
6867
6868 And then we use this variable to call this function
6869
6870 procedure Assign (Obj: in out Top_T; TV : Integer);
6871
6872 as follow:
6873
6874 Assign (Top_T (B), 12);
6875
6876 Now, we're in the debugger, and we're inside that procedure
6877 then and we want to print the value of obj.c:
6878
6879 Usually, the tagged record or one of the parent type owns the
6880 component to print and there's no issue but in this particular
6881 case, what does it mean to ask for Obj.C? Since the actual
6882 type for object is type Bottom_T, it could mean two things: type
6883 component C from the Middle_T view, but also component C from
6884 Bottom_T. So in that "undefined" case, when the component is
6885 not found in the non-resolved type (which includes all the
6886 components of the parent type), then resolve it and see if we
6887 get better luck once expanded.
6888
6889 In the case of homonyms in the derived tagged type, we don't
6890 guaranty anything, and pick the one that's easiest for us
6891 to program.
6892
0963b4bd 6893 Returns 1 if found, 0 otherwise. */
52ce6436 6894
4c4b4cd2 6895static int
0d5cff50 6896find_struct_field (const char *name, struct type *type, int offset,
dda83cd7
SM
6897 struct type **field_type_p,
6898 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
52ce6436 6899 int *index_p)
4c4b4cd2
PH
6900{
6901 int i;
828d5846 6902 int parent_offset = -1;
4c4b4cd2 6903
61ee279c 6904 type = ada_check_typedef (type);
76a01679 6905
52ce6436
PH
6906 if (field_type_p != NULL)
6907 *field_type_p = NULL;
6908 if (byte_offset_p != NULL)
d5d6fca5 6909 *byte_offset_p = 0;
52ce6436
PH
6910 if (bit_offset_p != NULL)
6911 *bit_offset_p = 0;
6912 if (bit_size_p != NULL)
6913 *bit_size_p = 0;
6914
1f704f76 6915 for (i = 0; i < type->num_fields (); i += 1)
4c4b4cd2
PH
6916 {
6917 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6918 int fld_offset = offset + bit_pos / 8;
0d5cff50 6919 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6920
4c4b4cd2 6921 if (t_field_name == NULL)
dda83cd7 6922 continue;
4c4b4cd2 6923
828d5846 6924 else if (ada_is_parent_field (type, i))
dda83cd7 6925 {
828d5846
XR
6926 /* This is a field pointing us to the parent type of a tagged
6927 type. As hinted in this function's documentation, we give
6928 preference to fields in the current record first, so what
6929 we do here is just record the index of this field before
6930 we skip it. If it turns out we couldn't find our field
6931 in the current record, then we'll get back to it and search
6932 inside it whether the field might exist in the parent. */
6933
dda83cd7
SM
6934 parent_offset = i;
6935 continue;
6936 }
828d5846 6937
52ce6436 6938 else if (name != NULL && field_name_match (t_field_name, name))
dda83cd7
SM
6939 {
6940 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6941
52ce6436 6942 if (field_type_p != NULL)
940da03e 6943 *field_type_p = type->field (i).type ();
52ce6436
PH
6944 if (byte_offset_p != NULL)
6945 *byte_offset_p = fld_offset;
6946 if (bit_offset_p != NULL)
6947 *bit_offset_p = bit_pos % 8;
6948 if (bit_size_p != NULL)
6949 *bit_size_p = bit_size;
dda83cd7
SM
6950 return 1;
6951 }
4c4b4cd2 6952 else if (ada_is_wrapper_field (type, i))
dda83cd7 6953 {
940da03e 6954 if (find_struct_field (name, type->field (i).type (), fld_offset,
52ce6436
PH
6955 field_type_p, byte_offset_p, bit_offset_p,
6956 bit_size_p, index_p))
dda83cd7
SM
6957 return 1;
6958 }
4c4b4cd2 6959 else if (ada_is_variant_part (type, i))
dda83cd7 6960 {
52ce6436
PH
6961 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6962 fixed type?? */
dda83cd7
SM
6963 int j;
6964 struct type *field_type
940da03e 6965 = ada_check_typedef (type->field (i).type ());
4c4b4cd2 6966
dda83cd7
SM
6967 for (j = 0; j < field_type->num_fields (); j += 1)
6968 {
6969 if (find_struct_field (name, field_type->field (j).type (),
6970 fld_offset
6971 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6972 field_type_p, byte_offset_p,
6973 bit_offset_p, bit_size_p, index_p))
6974 return 1;
6975 }
6976 }
52ce6436
PH
6977 else if (index_p != NULL)
6978 *index_p += 1;
4c4b4cd2 6979 }
828d5846
XR
6980
6981 /* Field not found so far. If this is a tagged type which
6982 has a parent, try finding that field in the parent now. */
6983
6984 if (parent_offset != -1)
6985 {
6986 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
6987 int fld_offset = offset + bit_pos / 8;
6988
940da03e 6989 if (find_struct_field (name, type->field (parent_offset).type (),
dda83cd7
SM
6990 fld_offset, field_type_p, byte_offset_p,
6991 bit_offset_p, bit_size_p, index_p))
6992 return 1;
828d5846
XR
6993 }
6994
4c4b4cd2
PH
6995 return 0;
6996}
6997
0963b4bd 6998/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 6999
52ce6436
PH
7000static int
7001num_visible_fields (struct type *type)
7002{
7003 int n;
5b4ee69b 7004
52ce6436
PH
7005 n = 0;
7006 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7007 return n;
7008}
14f9c5c9 7009
4c4b4cd2 7010/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7011 and search in it assuming it has (class) type TYPE.
7012 If found, return value, else return NULL.
7013
828d5846
XR
7014 Searches recursively through wrapper fields (e.g., '_parent').
7015
7016 In the case of homonyms in the tagged types, please refer to the
7017 long explanation in find_struct_field's function documentation. */
14f9c5c9 7018
4c4b4cd2 7019static struct value *
108d56a4 7020ada_search_struct_field (const char *name, struct value *arg, int offset,
dda83cd7 7021 struct type *type)
14f9c5c9
AS
7022{
7023 int i;
828d5846 7024 int parent_offset = -1;
14f9c5c9 7025
5b4ee69b 7026 type = ada_check_typedef (type);
1f704f76 7027 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7028 {
0d5cff50 7029 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7030
7031 if (t_field_name == NULL)
dda83cd7 7032 continue;
14f9c5c9 7033
828d5846 7034 else if (ada_is_parent_field (type, i))
dda83cd7 7035 {
828d5846
XR
7036 /* This is a field pointing us to the parent type of a tagged
7037 type. As hinted in this function's documentation, we give
7038 preference to fields in the current record first, so what
7039 we do here is just record the index of this field before
7040 we skip it. If it turns out we couldn't find our field
7041 in the current record, then we'll get back to it and search
7042 inside it whether the field might exist in the parent. */
7043
dda83cd7
SM
7044 parent_offset = i;
7045 continue;
7046 }
828d5846 7047
14f9c5c9 7048 else if (field_name_match (t_field_name, name))
dda83cd7 7049 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7050
7051 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7052 {
7053 struct value *v = /* Do not let indent join lines here. */
7054 ada_search_struct_field (name, arg,
7055 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7056 type->field (i).type ());
5b4ee69b 7057
dda83cd7
SM
7058 if (v != NULL)
7059 return v;
7060 }
14f9c5c9
AS
7061
7062 else if (ada_is_variant_part (type, i))
dda83cd7 7063 {
0963b4bd 7064 /* PNH: Do we ever get here? See find_struct_field. */
dda83cd7
SM
7065 int j;
7066 struct type *field_type = ada_check_typedef (type->field (i).type ());
7067 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
4c4b4cd2 7068
dda83cd7
SM
7069 for (j = 0; j < field_type->num_fields (); j += 1)
7070 {
7071 struct value *v = ada_search_struct_field /* Force line
0963b4bd 7072 break. */
dda83cd7
SM
7073 (name, arg,
7074 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7075 field_type->field (j).type ());
5b4ee69b 7076
dda83cd7
SM
7077 if (v != NULL)
7078 return v;
7079 }
7080 }
14f9c5c9 7081 }
828d5846
XR
7082
7083 /* Field not found so far. If this is a tagged type which
7084 has a parent, try finding that field in the parent now. */
7085
7086 if (parent_offset != -1)
7087 {
7088 struct value *v = ada_search_struct_field (
7089 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
940da03e 7090 type->field (parent_offset).type ());
828d5846
XR
7091
7092 if (v != NULL)
dda83cd7 7093 return v;
828d5846
XR
7094 }
7095
14f9c5c9
AS
7096 return NULL;
7097}
d2e4a39e 7098
52ce6436
PH
7099static struct value *ada_index_struct_field_1 (int *, struct value *,
7100 int, struct type *);
7101
7102
7103/* Return field #INDEX in ARG, where the index is that returned by
7104 * find_struct_field through its INDEX_P argument. Adjust the address
7105 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7106 * If found, return value, else return NULL. */
52ce6436
PH
7107
7108static struct value *
7109ada_index_struct_field (int index, struct value *arg, int offset,
7110 struct type *type)
7111{
7112 return ada_index_struct_field_1 (&index, arg, offset, type);
7113}
7114
7115
7116/* Auxiliary function for ada_index_struct_field. Like
7117 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7118 * *INDEX_P. */
52ce6436
PH
7119
7120static struct value *
7121ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7122 struct type *type)
7123{
7124 int i;
7125 type = ada_check_typedef (type);
7126
1f704f76 7127 for (i = 0; i < type->num_fields (); i += 1)
52ce6436
PH
7128 {
7129 if (TYPE_FIELD_NAME (type, i) == NULL)
dda83cd7 7130 continue;
52ce6436 7131 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7132 {
7133 struct value *v = /* Do not let indent join lines here. */
7134 ada_index_struct_field_1 (index_p, arg,
52ce6436 7135 offset + TYPE_FIELD_BITPOS (type, i) / 8,
940da03e 7136 type->field (i).type ());
5b4ee69b 7137
dda83cd7
SM
7138 if (v != NULL)
7139 return v;
7140 }
52ce6436
PH
7141
7142 else if (ada_is_variant_part (type, i))
dda83cd7 7143 {
52ce6436 7144 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7145 find_struct_field. */
52ce6436 7146 error (_("Cannot assign this kind of variant record"));
dda83cd7 7147 }
52ce6436 7148 else if (*index_p == 0)
dda83cd7 7149 return ada_value_primitive_field (arg, offset, i, type);
52ce6436
PH
7150 else
7151 *index_p -= 1;
7152 }
7153 return NULL;
7154}
7155
3b4de39c 7156/* Return a string representation of type TYPE. */
99bbb428 7157
3b4de39c 7158static std::string
99bbb428
PA
7159type_as_string (struct type *type)
7160{
d7e74731 7161 string_file tmp_stream;
99bbb428 7162
d7e74731 7163 type_print (type, "", &tmp_stream, -1);
99bbb428 7164
d7e74731 7165 return std::move (tmp_stream.string ());
99bbb428
PA
7166}
7167
14f9c5c9 7168/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7169 If DISPP is non-null, add its byte displacement from the beginning of a
7170 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7171 work for packed fields).
7172
7173 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7174 followed by "___".
14f9c5c9 7175
0963b4bd 7176 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7177 be a (pointer or reference)+ to a struct or union, and the
7178 ultimate target type will be searched.
14f9c5c9
AS
7179
7180 Looks recursively into variant clauses and parent types.
7181
828d5846
XR
7182 In the case of homonyms in the tagged types, please refer to the
7183 long explanation in find_struct_field's function documentation.
7184
4c4b4cd2
PH
7185 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7186 TYPE is not a type of the right kind. */
14f9c5c9 7187
4c4b4cd2 7188static struct type *
a121b7c1 7189ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
dda83cd7 7190 int noerr)
14f9c5c9
AS
7191{
7192 int i;
828d5846 7193 int parent_offset = -1;
14f9c5c9
AS
7194
7195 if (name == NULL)
7196 goto BadName;
7197
76a01679 7198 if (refok && type != NULL)
4c4b4cd2
PH
7199 while (1)
7200 {
dda83cd7
SM
7201 type = ada_check_typedef (type);
7202 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7203 break;
7204 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7205 }
14f9c5c9 7206
76a01679 7207 if (type == NULL
78134374
SM
7208 || (type->code () != TYPE_CODE_STRUCT
7209 && type->code () != TYPE_CODE_UNION))
14f9c5c9 7210 {
4c4b4cd2 7211 if (noerr)
dda83cd7 7212 return NULL;
99bbb428 7213
3b4de39c
PA
7214 error (_("Type %s is not a structure or union type"),
7215 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7216 }
7217
7218 type = to_static_fixed_type (type);
7219
1f704f76 7220 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7221 {
0d5cff50 7222 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7223 struct type *t;
d2e4a39e 7224
14f9c5c9 7225 if (t_field_name == NULL)
dda83cd7 7226 continue;
14f9c5c9 7227
828d5846 7228 else if (ada_is_parent_field (type, i))
dda83cd7 7229 {
828d5846
XR
7230 /* This is a field pointing us to the parent type of a tagged
7231 type. As hinted in this function's documentation, we give
7232 preference to fields in the current record first, so what
7233 we do here is just record the index of this field before
7234 we skip it. If it turns out we couldn't find our field
7235 in the current record, then we'll get back to it and search
7236 inside it whether the field might exist in the parent. */
7237
dda83cd7
SM
7238 parent_offset = i;
7239 continue;
7240 }
828d5846 7241
14f9c5c9 7242 else if (field_name_match (t_field_name, name))
940da03e 7243 return type->field (i).type ();
14f9c5c9
AS
7244
7245 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7246 {
7247 t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7248 0, 1);
7249 if (t != NULL)
988f6b3d 7250 return t;
dda83cd7 7251 }
14f9c5c9
AS
7252
7253 else if (ada_is_variant_part (type, i))
dda83cd7
SM
7254 {
7255 int j;
7256 struct type *field_type = ada_check_typedef (type->field (i).type ());
4c4b4cd2 7257
dda83cd7
SM
7258 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7259 {
b1f33ddd 7260 /* FIXME pnh 2008/01/26: We check for a field that is
dda83cd7 7261 NOT wrapped in a struct, since the compiler sometimes
b1f33ddd 7262 generates these for unchecked variant types. Revisit
dda83cd7 7263 if the compiler changes this practice. */
0d5cff50 7264 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7265
b1f33ddd
JB
7266 if (v_field_name != NULL
7267 && field_name_match (v_field_name, name))
940da03e 7268 t = field_type->field (j).type ();
b1f33ddd 7269 else
940da03e 7270 t = ada_lookup_struct_elt_type (field_type->field (j).type (),
988f6b3d 7271 name, 0, 1);
b1f33ddd 7272
dda83cd7 7273 if (t != NULL)
988f6b3d 7274 return t;
dda83cd7
SM
7275 }
7276 }
14f9c5c9
AS
7277
7278 }
7279
828d5846
XR
7280 /* Field not found so far. If this is a tagged type which
7281 has a parent, try finding that field in the parent now. */
7282
7283 if (parent_offset != -1)
7284 {
dda83cd7 7285 struct type *t;
828d5846 7286
dda83cd7
SM
7287 t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7288 name, 0, 1);
7289 if (t != NULL)
828d5846
XR
7290 return t;
7291 }
7292
14f9c5c9 7293BadName:
d2e4a39e 7294 if (!noerr)
14f9c5c9 7295 {
2b2798cc 7296 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7297
7298 error (_("Type %s has no component named %s"),
3b4de39c 7299 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7300 }
7301
7302 return NULL;
7303}
7304
b1f33ddd
JB
7305/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7306 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7307 represents an unchecked union (that is, the variant part of a
0963b4bd 7308 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7309
7310static int
7311is_unchecked_variant (struct type *var_type, struct type *outer_type)
7312{
a121b7c1 7313 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7314
988f6b3d 7315 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7316}
7317
7318
14f9c5c9 7319/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
d8af9068 7320 within OUTER, determine which variant clause (field number in VAR_TYPE,
4c4b4cd2 7321 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7322
d2e4a39e 7323int
d8af9068 7324ada_which_variant_applies (struct type *var_type, struct value *outer)
14f9c5c9
AS
7325{
7326 int others_clause;
7327 int i;
a121b7c1 7328 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816 7329 struct value *discrim;
14f9c5c9
AS
7330 LONGEST discrim_val;
7331
012370f6
TT
7332 /* Using plain value_from_contents_and_address here causes problems
7333 because we will end up trying to resolve a type that is currently
7334 being constructed. */
0c281816
JB
7335 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7336 if (discrim == NULL)
14f9c5c9 7337 return -1;
0c281816 7338 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7339
7340 others_clause = -1;
1f704f76 7341 for (i = 0; i < var_type->num_fields (); i += 1)
14f9c5c9
AS
7342 {
7343 if (ada_is_others_clause (var_type, i))
dda83cd7 7344 others_clause = i;
14f9c5c9 7345 else if (ada_in_variant (discrim_val, var_type, i))
dda83cd7 7346 return i;
14f9c5c9
AS
7347 }
7348
7349 return others_clause;
7350}
d2e4a39e 7351\f
14f9c5c9
AS
7352
7353
dda83cd7 7354 /* Dynamic-Sized Records */
14f9c5c9
AS
7355
7356/* Strategy: The type ostensibly attached to a value with dynamic size
7357 (i.e., a size that is not statically recorded in the debugging
7358 data) does not accurately reflect the size or layout of the value.
7359 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7360 conventional types that are constructed on the fly. */
14f9c5c9
AS
7361
7362/* There is a subtle and tricky problem here. In general, we cannot
7363 determine the size of dynamic records without its data. However,
7364 the 'struct value' data structure, which GDB uses to represent
7365 quantities in the inferior process (the target), requires the size
7366 of the type at the time of its allocation in order to reserve space
7367 for GDB's internal copy of the data. That's why the
7368 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7369 rather than struct value*s.
14f9c5c9
AS
7370
7371 However, GDB's internal history variables ($1, $2, etc.) are
7372 struct value*s containing internal copies of the data that are not, in
7373 general, the same as the data at their corresponding addresses in
7374 the target. Fortunately, the types we give to these values are all
7375 conventional, fixed-size types (as per the strategy described
7376 above), so that we don't usually have to perform the
7377 'to_fixed_xxx_type' conversions to look at their values.
7378 Unfortunately, there is one exception: if one of the internal
7379 history variables is an array whose elements are unconstrained
7380 records, then we will need to create distinct fixed types for each
7381 element selected. */
7382
7383/* The upshot of all of this is that many routines take a (type, host
7384 address, target address) triple as arguments to represent a value.
7385 The host address, if non-null, is supposed to contain an internal
7386 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7387 target at the target address. */
14f9c5c9
AS
7388
7389/* Assuming that VAL0 represents a pointer value, the result of
7390 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7391 dynamic-sized types. */
14f9c5c9 7392
d2e4a39e
AS
7393struct value *
7394ada_value_ind (struct value *val0)
14f9c5c9 7395{
c48db5ca 7396 struct value *val = value_ind (val0);
5b4ee69b 7397
b50d69b5
JG
7398 if (ada_is_tagged_type (value_type (val), 0))
7399 val = ada_tag_value_at_base_address (val);
7400
4c4b4cd2 7401 return ada_to_fixed_value (val);
14f9c5c9
AS
7402}
7403
7404/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7405 qualifiers on VAL0. */
7406
d2e4a39e
AS
7407static struct value *
7408ada_coerce_ref (struct value *val0)
7409{
78134374 7410 if (value_type (val0)->code () == TYPE_CODE_REF)
d2e4a39e
AS
7411 {
7412 struct value *val = val0;
5b4ee69b 7413
994b9211 7414 val = coerce_ref (val);
b50d69b5
JG
7415
7416 if (ada_is_tagged_type (value_type (val), 0))
7417 val = ada_tag_value_at_base_address (val);
7418
4c4b4cd2 7419 return ada_to_fixed_value (val);
d2e4a39e
AS
7420 }
7421 else
14f9c5c9
AS
7422 return val0;
7423}
7424
4c4b4cd2 7425/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7426
7427static unsigned int
ebf56fd3 7428field_alignment (struct type *type, int f)
14f9c5c9 7429{
d2e4a39e 7430 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7431 int len;
14f9c5c9
AS
7432 int align_offset;
7433
64a1bf19
JB
7434 /* The field name should never be null, unless the debugging information
7435 is somehow malformed. In this case, we assume the field does not
7436 require any alignment. */
7437 if (name == NULL)
7438 return 1;
7439
7440 len = strlen (name);
7441
4c4b4cd2
PH
7442 if (!isdigit (name[len - 1]))
7443 return 1;
14f9c5c9 7444
d2e4a39e 7445 if (isdigit (name[len - 2]))
14f9c5c9
AS
7446 align_offset = len - 2;
7447 else
7448 align_offset = len - 1;
7449
61012eef 7450 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7451 return TARGET_CHAR_BIT;
7452
4c4b4cd2
PH
7453 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7454}
7455
852dff6c 7456/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7457
852dff6c
JB
7458static struct symbol *
7459ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7460{
7461 struct symbol *sym;
7462
7463 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7464 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7465 return sym;
7466
4186eb54
KS
7467 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7468 return sym;
14f9c5c9
AS
7469}
7470
dddfab26
UW
7471/* Find a type named NAME. Ignores ambiguity. This routine will look
7472 solely for types defined by debug info, it will not search the GDB
7473 primitive types. */
4c4b4cd2 7474
852dff6c 7475static struct type *
ebf56fd3 7476ada_find_any_type (const char *name)
14f9c5c9 7477{
852dff6c 7478 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7479
14f9c5c9 7480 if (sym != NULL)
dddfab26 7481 return SYMBOL_TYPE (sym);
14f9c5c9 7482
dddfab26 7483 return NULL;
14f9c5c9
AS
7484}
7485
739593e0
JB
7486/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7487 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7488 symbol, in which case it is returned. Otherwise, this looks for
7489 symbols whose name is that of NAME_SYM suffixed with "___XR".
7490 Return symbol if found, and NULL otherwise. */
4c4b4cd2 7491
c0e70c62
TT
7492static bool
7493ada_is_renaming_symbol (struct symbol *name_sym)
aeb5907d 7494{
987012b8 7495 const char *name = name_sym->linkage_name ();
c0e70c62 7496 return strstr (name, "___XR") != NULL;
4c4b4cd2
PH
7497}
7498
14f9c5c9 7499/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7500 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7501 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7502 otherwise return 0. */
7503
14f9c5c9 7504int
d2e4a39e 7505ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7506{
7507 if (type1 == NULL)
7508 return 1;
7509 else if (type0 == NULL)
7510 return 0;
78134374 7511 else if (type1->code () == TYPE_CODE_VOID)
14f9c5c9 7512 return 1;
78134374 7513 else if (type0->code () == TYPE_CODE_VOID)
14f9c5c9 7514 return 0;
7d93a1e0 7515 else if (type1->name () == NULL && type0->name () != NULL)
4c4b4cd2 7516 return 1;
ad82864c 7517 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7518 return 1;
4c4b4cd2 7519 else if (ada_is_array_descriptor_type (type0)
dda83cd7 7520 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7521 return 1;
aeb5907d
JB
7522 else
7523 {
7d93a1e0
SM
7524 const char *type0_name = type0->name ();
7525 const char *type1_name = type1->name ();
aeb5907d
JB
7526
7527 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7528 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7529 return 1;
7530 }
14f9c5c9
AS
7531 return 0;
7532}
7533
e86ca25f
TT
7534/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7535 null. */
4c4b4cd2 7536
0d5cff50 7537const char *
d2e4a39e 7538ada_type_name (struct type *type)
14f9c5c9 7539{
d2e4a39e 7540 if (type == NULL)
14f9c5c9 7541 return NULL;
7d93a1e0 7542 return type->name ();
14f9c5c9
AS
7543}
7544
b4ba55a1
JB
7545/* Search the list of "descriptive" types associated to TYPE for a type
7546 whose name is NAME. */
7547
7548static struct type *
7549find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7550{
931e5bc3 7551 struct type *result, *tmp;
b4ba55a1 7552
c6044dd1
JB
7553 if (ada_ignore_descriptive_types_p)
7554 return NULL;
7555
b4ba55a1
JB
7556 /* If there no descriptive-type info, then there is no parallel type
7557 to be found. */
7558 if (!HAVE_GNAT_AUX_INFO (type))
7559 return NULL;
7560
7561 result = TYPE_DESCRIPTIVE_TYPE (type);
7562 while (result != NULL)
7563 {
0d5cff50 7564 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7565
7566 if (result_name == NULL)
dda83cd7
SM
7567 {
7568 warning (_("unexpected null name on descriptive type"));
7569 return NULL;
7570 }
b4ba55a1
JB
7571
7572 /* If the names match, stop. */
7573 if (strcmp (result_name, name) == 0)
7574 break;
7575
7576 /* Otherwise, look at the next item on the list, if any. */
7577 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7578 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7579 else
7580 tmp = NULL;
7581
7582 /* If not found either, try after having resolved the typedef. */
7583 if (tmp != NULL)
7584 result = tmp;
b4ba55a1 7585 else
931e5bc3 7586 {
f168693b 7587 result = check_typedef (result);
931e5bc3
JG
7588 if (HAVE_GNAT_AUX_INFO (result))
7589 result = TYPE_DESCRIPTIVE_TYPE (result);
7590 else
7591 result = NULL;
7592 }
b4ba55a1
JB
7593 }
7594
7595 /* If we didn't find a match, see whether this is a packed array. With
7596 older compilers, the descriptive type information is either absent or
7597 irrelevant when it comes to packed arrays so the above lookup fails.
7598 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7599 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7600 return ada_find_any_type (name);
7601
7602 return result;
7603}
7604
7605/* Find a parallel type to TYPE with the specified NAME, using the
7606 descriptive type taken from the debugging information, if available,
7607 and otherwise using the (slower) name-based method. */
7608
7609static struct type *
7610ada_find_parallel_type_with_name (struct type *type, const char *name)
7611{
7612 struct type *result = NULL;
7613
7614 if (HAVE_GNAT_AUX_INFO (type))
7615 result = find_parallel_type_by_descriptive_type (type, name);
7616 else
7617 result = ada_find_any_type (name);
7618
7619 return result;
7620}
7621
7622/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7623 SUFFIX to the name of TYPE. */
14f9c5c9 7624
d2e4a39e 7625struct type *
ebf56fd3 7626ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7627{
0d5cff50 7628 char *name;
fe978cb0 7629 const char *type_name = ada_type_name (type);
14f9c5c9 7630 int len;
d2e4a39e 7631
fe978cb0 7632 if (type_name == NULL)
14f9c5c9
AS
7633 return NULL;
7634
fe978cb0 7635 len = strlen (type_name);
14f9c5c9 7636
b4ba55a1 7637 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7638
fe978cb0 7639 strcpy (name, type_name);
14f9c5c9
AS
7640 strcpy (name + len, suffix);
7641
b4ba55a1 7642 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7643}
7644
14f9c5c9 7645/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7646 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7647
d2e4a39e
AS
7648static struct type *
7649dynamic_template_type (struct type *type)
14f9c5c9 7650{
61ee279c 7651 type = ada_check_typedef (type);
14f9c5c9 7652
78134374 7653 if (type == NULL || type->code () != TYPE_CODE_STRUCT
d2e4a39e 7654 || ada_type_name (type) == NULL)
14f9c5c9 7655 return NULL;
d2e4a39e 7656 else
14f9c5c9
AS
7657 {
7658 int len = strlen (ada_type_name (type));
5b4ee69b 7659
4c4b4cd2 7660 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
dda83cd7 7661 return type;
14f9c5c9 7662 else
dda83cd7 7663 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7664 }
7665}
7666
7667/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7668 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7669
d2e4a39e
AS
7670static int
7671is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7672{
7673 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7674
d2e4a39e 7675 return name != NULL
940da03e 7676 && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
14f9c5c9
AS
7677 && strstr (name, "___XVL") != NULL;
7678}
7679
4c4b4cd2
PH
7680/* The index of the variant field of TYPE, or -1 if TYPE does not
7681 represent a variant record type. */
14f9c5c9 7682
d2e4a39e 7683static int
4c4b4cd2 7684variant_field_index (struct type *type)
14f9c5c9
AS
7685{
7686 int f;
7687
78134374 7688 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
4c4b4cd2
PH
7689 return -1;
7690
1f704f76 7691 for (f = 0; f < type->num_fields (); f += 1)
4c4b4cd2
PH
7692 {
7693 if (ada_is_variant_part (type, f))
dda83cd7 7694 return f;
4c4b4cd2
PH
7695 }
7696 return -1;
14f9c5c9
AS
7697}
7698
4c4b4cd2
PH
7699/* A record type with no fields. */
7700
d2e4a39e 7701static struct type *
fe978cb0 7702empty_record (struct type *templ)
14f9c5c9 7703{
fe978cb0 7704 struct type *type = alloc_type_copy (templ);
5b4ee69b 7705
67607e24 7706 type->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7707 INIT_NONE_SPECIFIC (type);
d0e39ea2 7708 type->set_name ("<empty>");
14f9c5c9
AS
7709 TYPE_LENGTH (type) = 0;
7710 return type;
7711}
7712
7713/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7714 the value of type TYPE at VALADDR or ADDRESS (see comments at
7715 the beginning of this section) VAL according to GNAT conventions.
7716 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7717 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7718 an outer-level type (i.e., as opposed to a branch of a variant.) A
7719 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7720 of the variant.
14f9c5c9 7721
4c4b4cd2
PH
7722 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7723 length are not statically known are discarded. As a consequence,
7724 VALADDR, ADDRESS and DVAL0 are ignored.
7725
7726 NOTE: Limitations: For now, we assume that dynamic fields and
7727 variants occupy whole numbers of bytes. However, they need not be
7728 byte-aligned. */
7729
7730struct type *
10a2c479 7731ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7732 const gdb_byte *valaddr,
dda83cd7
SM
7733 CORE_ADDR address, struct value *dval0,
7734 int keep_dynamic_fields)
14f9c5c9 7735{
d2e4a39e
AS
7736 struct value *mark = value_mark ();
7737 struct value *dval;
7738 struct type *rtype;
14f9c5c9 7739 int nfields, bit_len;
4c4b4cd2 7740 int variant_field;
14f9c5c9 7741 long off;
d94e4f4f 7742 int fld_bit_len;
14f9c5c9
AS
7743 int f;
7744
4c4b4cd2
PH
7745 /* Compute the number of fields in this record type that are going
7746 to be processed: unless keep_dynamic_fields, this includes only
7747 fields whose position and length are static will be processed. */
7748 if (keep_dynamic_fields)
1f704f76 7749 nfields = type->num_fields ();
4c4b4cd2
PH
7750 else
7751 {
7752 nfields = 0;
1f704f76 7753 while (nfields < type->num_fields ()
dda83cd7
SM
7754 && !ada_is_variant_part (type, nfields)
7755 && !is_dynamic_field (type, nfields))
7756 nfields++;
4c4b4cd2
PH
7757 }
7758
e9bb382b 7759 rtype = alloc_type_copy (type);
67607e24 7760 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7761 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 7762 rtype->set_num_fields (nfields);
3cabb6b0
SM
7763 rtype->set_fields
7764 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
d0e39ea2 7765 rtype->set_name (ada_type_name (type));
9cdd0d12 7766 rtype->set_is_fixed_instance (true);
14f9c5c9 7767
d2e4a39e
AS
7768 off = 0;
7769 bit_len = 0;
4c4b4cd2
PH
7770 variant_field = -1;
7771
14f9c5c9
AS
7772 for (f = 0; f < nfields; f += 1)
7773 {
a89febbd 7774 off = align_up (off, field_alignment (type, f))
6c038f32 7775 + TYPE_FIELD_BITPOS (type, f);
ceacbf6e 7776 SET_FIELD_BITPOS (rtype->field (f), off);
d2e4a39e 7777 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7778
d2e4a39e 7779 if (ada_is_variant_part (type, f))
dda83cd7
SM
7780 {
7781 variant_field = f;
7782 fld_bit_len = 0;
7783 }
14f9c5c9 7784 else if (is_dynamic_field (type, f))
dda83cd7 7785 {
284614f0
JB
7786 const gdb_byte *field_valaddr = valaddr;
7787 CORE_ADDR field_address = address;
7788 struct type *field_type =
940da03e 7789 TYPE_TARGET_TYPE (type->field (f).type ());
284614f0 7790
dda83cd7 7791 if (dval0 == NULL)
b5304971
JG
7792 {
7793 /* rtype's length is computed based on the run-time
7794 value of discriminants. If the discriminants are not
7795 initialized, the type size may be completely bogus and
0963b4bd 7796 GDB may fail to allocate a value for it. So check the
b5304971 7797 size first before creating the value. */
c1b5a1a6 7798 ada_ensure_varsize_limit (rtype);
012370f6
TT
7799 /* Using plain value_from_contents_and_address here
7800 causes problems because we will end up trying to
7801 resolve a type that is currently being
7802 constructed. */
7803 dval = value_from_contents_and_address_unresolved (rtype,
7804 valaddr,
7805 address);
9f1f738a 7806 rtype = value_type (dval);
b5304971 7807 }
dda83cd7
SM
7808 else
7809 dval = dval0;
4c4b4cd2 7810
284614f0
JB
7811 /* If the type referenced by this field is an aligner type, we need
7812 to unwrap that aligner type, because its size might not be set.
7813 Keeping the aligner type would cause us to compute the wrong
7814 size for this field, impacting the offset of the all the fields
7815 that follow this one. */
7816 if (ada_is_aligner_type (field_type))
7817 {
7818 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7819
7820 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7821 field_address = cond_offset_target (field_address, field_offset);
7822 field_type = ada_aligned_type (field_type);
7823 }
7824
7825 field_valaddr = cond_offset_host (field_valaddr,
7826 off / TARGET_CHAR_BIT);
7827 field_address = cond_offset_target (field_address,
7828 off / TARGET_CHAR_BIT);
7829
7830 /* Get the fixed type of the field. Note that, in this case,
7831 we do not want to get the real type out of the tag: if
7832 the current field is the parent part of a tagged record,
7833 we will get the tag of the object. Clearly wrong: the real
7834 type of the parent is not the real type of the child. We
7835 would end up in an infinite loop. */
7836 field_type = ada_get_base_type (field_type);
7837 field_type = ada_to_fixed_type (field_type, field_valaddr,
7838 field_address, dval, 0);
27f2a97b
JB
7839 /* If the field size is already larger than the maximum
7840 object size, then the record itself will necessarily
7841 be larger than the maximum object size. We need to make
7842 this check now, because the size might be so ridiculously
7843 large (due to an uninitialized variable in the inferior)
7844 that it would cause an overflow when adding it to the
7845 record size. */
c1b5a1a6 7846 ada_ensure_varsize_limit (field_type);
284614f0 7847
5d14b6e5 7848 rtype->field (f).set_type (field_type);
dda83cd7 7849 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7850 /* The multiplication can potentially overflow. But because
7851 the field length has been size-checked just above, and
7852 assuming that the maximum size is a reasonable value,
7853 an overflow should not happen in practice. So rather than
7854 adding overflow recovery code to this already complex code,
7855 we just assume that it's not going to happen. */
dda83cd7
SM
7856 fld_bit_len =
7857 TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7858 }
14f9c5c9 7859 else
dda83cd7 7860 {
5ded5331
JB
7861 /* Note: If this field's type is a typedef, it is important
7862 to preserve the typedef layer.
7863
7864 Otherwise, we might be transforming a typedef to a fat
7865 pointer (encoding a pointer to an unconstrained array),
7866 into a basic fat pointer (encoding an unconstrained
7867 array). As both types are implemented using the same
7868 structure, the typedef is the only clue which allows us
7869 to distinguish between the two options. Stripping it
7870 would prevent us from printing this field appropriately. */
dda83cd7
SM
7871 rtype->field (f).set_type (type->field (f).type ());
7872 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7873 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7874 fld_bit_len =
7875 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7876 else
5ded5331 7877 {
940da03e 7878 struct type *field_type = type->field (f).type ();
5ded5331
JB
7879
7880 /* We need to be careful of typedefs when computing
7881 the length of our field. If this is a typedef,
7882 get the length of the target type, not the length
7883 of the typedef. */
78134374 7884 if (field_type->code () == TYPE_CODE_TYPEDEF)
5ded5331
JB
7885 field_type = ada_typedef_target_type (field_type);
7886
dda83cd7
SM
7887 fld_bit_len =
7888 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
5ded5331 7889 }
dda83cd7 7890 }
14f9c5c9 7891 if (off + fld_bit_len > bit_len)
dda83cd7 7892 bit_len = off + fld_bit_len;
d94e4f4f 7893 off += fld_bit_len;
4c4b4cd2 7894 TYPE_LENGTH (rtype) =
dda83cd7 7895 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7896 }
4c4b4cd2
PH
7897
7898 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7899 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7900 the record. This can happen in the presence of representation
7901 clauses. */
7902 if (variant_field >= 0)
7903 {
7904 struct type *branch_type;
7905
7906 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7907
7908 if (dval0 == NULL)
9f1f738a 7909 {
012370f6
TT
7910 /* Using plain value_from_contents_and_address here causes
7911 problems because we will end up trying to resolve a type
7912 that is currently being constructed. */
7913 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7914 address);
9f1f738a
SA
7915 rtype = value_type (dval);
7916 }
4c4b4cd2 7917 else
dda83cd7 7918 dval = dval0;
4c4b4cd2
PH
7919
7920 branch_type =
dda83cd7
SM
7921 to_fixed_variant_branch_type
7922 (type->field (variant_field).type (),
7923 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7924 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
4c4b4cd2 7925 if (branch_type == NULL)
dda83cd7
SM
7926 {
7927 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7928 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 7929 rtype->set_num_fields (rtype->num_fields () - 1);
dda83cd7 7930 }
4c4b4cd2 7931 else
dda83cd7
SM
7932 {
7933 rtype->field (variant_field).set_type (branch_type);
7934 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7935 fld_bit_len =
7936 TYPE_LENGTH (rtype->field (variant_field).type ()) *
7937 TARGET_CHAR_BIT;
7938 if (off + fld_bit_len > bit_len)
7939 bit_len = off + fld_bit_len;
7940 TYPE_LENGTH (rtype) =
7941 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7942 }
4c4b4cd2
PH
7943 }
7944
714e53ab
PH
7945 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7946 should contain the alignment of that record, which should be a strictly
7947 positive value. If null or negative, then something is wrong, most
7948 probably in the debug info. In that case, we don't round up the size
0963b4bd 7949 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7950 the current RTYPE length might be good enough for our purposes. */
7951 if (TYPE_LENGTH (type) <= 0)
7952 {
7d93a1e0 7953 if (rtype->name ())
cc1defb1 7954 warning (_("Invalid type size for `%s' detected: %s."),
7d93a1e0 7955 rtype->name (), pulongest (TYPE_LENGTH (type)));
323e0a4a 7956 else
cc1defb1
KS
7957 warning (_("Invalid type size for <unnamed> detected: %s."),
7958 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
7959 }
7960 else
7961 {
a89febbd
TT
7962 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
7963 TYPE_LENGTH (type));
714e53ab 7964 }
14f9c5c9
AS
7965
7966 value_free_to_mark (mark);
d2e4a39e 7967 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7968 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7969 return rtype;
7970}
7971
4c4b4cd2
PH
7972/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7973 of 1. */
14f9c5c9 7974
d2e4a39e 7975static struct type *
fc1a4b47 7976template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 7977 CORE_ADDR address, struct value *dval0)
4c4b4cd2
PH
7978{
7979 return ada_template_to_fixed_record_type_1 (type, valaddr,
dda83cd7 7980 address, dval0, 1);
4c4b4cd2
PH
7981}
7982
7983/* An ordinary record type in which ___XVL-convention fields and
7984 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7985 static approximations, containing all possible fields. Uses
7986 no runtime values. Useless for use in values, but that's OK,
7987 since the results are used only for type determinations. Works on both
7988 structs and unions. Representation note: to save space, we memorize
7989 the result of this function in the TYPE_TARGET_TYPE of the
7990 template type. */
7991
7992static struct type *
7993template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7994{
7995 struct type *type;
7996 int nfields;
7997 int f;
7998
9e195661 7999 /* No need no do anything if the input type is already fixed. */
22c4c60c 8000 if (type0->is_fixed_instance ())
9e195661
PMR
8001 return type0;
8002
8003 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8004 if (TYPE_TARGET_TYPE (type0) != NULL)
8005 return TYPE_TARGET_TYPE (type0);
8006
9e195661 8007 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8008 type = type0;
1f704f76 8009 nfields = type0->num_fields ();
9e195661
PMR
8010
8011 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8012 recompute all over next time. */
8013 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8014
8015 for (f = 0; f < nfields; f += 1)
8016 {
940da03e 8017 struct type *field_type = type0->field (f).type ();
4c4b4cd2 8018 struct type *new_type;
14f9c5c9 8019
4c4b4cd2 8020 if (is_dynamic_field (type0, f))
460efde1
JB
8021 {
8022 field_type = ada_check_typedef (field_type);
dda83cd7 8023 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
460efde1 8024 }
14f9c5c9 8025 else
dda83cd7 8026 new_type = static_unwrap_type (field_type);
9e195661
PMR
8027
8028 if (new_type != field_type)
8029 {
8030 /* Clone TYPE0 only the first time we get a new field type. */
8031 if (type == type0)
8032 {
8033 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
78134374 8034 type->set_code (type0->code ());
8ecb59f8 8035 INIT_NONE_SPECIFIC (type);
5e33d5f4 8036 type->set_num_fields (nfields);
3cabb6b0
SM
8037
8038 field *fields =
8039 ((struct field *)
8040 TYPE_ALLOC (type, nfields * sizeof (struct field)));
80fc5e77 8041 memcpy (fields, type0->fields (),
9e195661 8042 sizeof (struct field) * nfields);
3cabb6b0
SM
8043 type->set_fields (fields);
8044
d0e39ea2 8045 type->set_name (ada_type_name (type0));
9cdd0d12 8046 type->set_is_fixed_instance (true);
9e195661
PMR
8047 TYPE_LENGTH (type) = 0;
8048 }
5d14b6e5 8049 type->field (f).set_type (new_type);
9e195661
PMR
8050 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8051 }
14f9c5c9 8052 }
9e195661 8053
14f9c5c9
AS
8054 return type;
8055}
8056
4c4b4cd2 8057/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8058 whose address in memory is ADDRESS, returns a revision of TYPE,
8059 which should be a non-dynamic-sized record, in which the variant
8060 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8061 for discriminant values in DVAL0, which can be NULL if the record
8062 contains the necessary discriminant values. */
8063
d2e4a39e 8064static struct type *
fc1a4b47 8065to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
dda83cd7 8066 CORE_ADDR address, struct value *dval0)
14f9c5c9 8067{
d2e4a39e 8068 struct value *mark = value_mark ();
4c4b4cd2 8069 struct value *dval;
d2e4a39e 8070 struct type *rtype;
14f9c5c9 8071 struct type *branch_type;
1f704f76 8072 int nfields = type->num_fields ();
4c4b4cd2 8073 int variant_field = variant_field_index (type);
14f9c5c9 8074
4c4b4cd2 8075 if (variant_field == -1)
14f9c5c9
AS
8076 return type;
8077
4c4b4cd2 8078 if (dval0 == NULL)
9f1f738a
SA
8079 {
8080 dval = value_from_contents_and_address (type, valaddr, address);
8081 type = value_type (dval);
8082 }
4c4b4cd2
PH
8083 else
8084 dval = dval0;
8085
e9bb382b 8086 rtype = alloc_type_copy (type);
67607e24 8087 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8088 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8089 rtype->set_num_fields (nfields);
3cabb6b0
SM
8090
8091 field *fields =
d2e4a39e 8092 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
80fc5e77 8093 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
3cabb6b0
SM
8094 rtype->set_fields (fields);
8095
d0e39ea2 8096 rtype->set_name (ada_type_name (type));
9cdd0d12 8097 rtype->set_is_fixed_instance (true);
14f9c5c9
AS
8098 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8099
4c4b4cd2 8100 branch_type = to_fixed_variant_branch_type
940da03e 8101 (type->field (variant_field).type (),
d2e4a39e 8102 cond_offset_host (valaddr,
dda83cd7
SM
8103 TYPE_FIELD_BITPOS (type, variant_field)
8104 / TARGET_CHAR_BIT),
d2e4a39e 8105 cond_offset_target (address,
dda83cd7
SM
8106 TYPE_FIELD_BITPOS (type, variant_field)
8107 / TARGET_CHAR_BIT), dval);
d2e4a39e 8108 if (branch_type == NULL)
14f9c5c9 8109 {
4c4b4cd2 8110 int f;
5b4ee69b 8111
4c4b4cd2 8112 for (f = variant_field + 1; f < nfields; f += 1)
dda83cd7 8113 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8114 rtype->set_num_fields (rtype->num_fields () - 1);
14f9c5c9
AS
8115 }
8116 else
8117 {
5d14b6e5 8118 rtype->field (variant_field).set_type (branch_type);
4c4b4cd2
PH
8119 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8120 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8121 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8122 }
940da03e 8123 TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
d2e4a39e 8124
4c4b4cd2 8125 value_free_to_mark (mark);
14f9c5c9
AS
8126 return rtype;
8127}
8128
8129/* An ordinary record type (with fixed-length fields) that describes
8130 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8131 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8132 should be in DVAL, a record value; it may be NULL if the object
8133 at ADDR itself contains any necessary discriminant values.
8134 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8135 values from the record are needed. Except in the case that DVAL,
8136 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8137 unchecked) is replaced by a particular branch of the variant.
8138
8139 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8140 is questionable and may be removed. It can arise during the
8141 processing of an unconstrained-array-of-record type where all the
8142 variant branches have exactly the same size. This is because in
8143 such cases, the compiler does not bother to use the XVS convention
8144 when encoding the record. I am currently dubious of this
8145 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8146
d2e4a39e 8147static struct type *
fc1a4b47 8148to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
dda83cd7 8149 CORE_ADDR address, struct value *dval)
14f9c5c9 8150{
d2e4a39e 8151 struct type *templ_type;
14f9c5c9 8152
22c4c60c 8153 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8154 return type0;
8155
d2e4a39e 8156 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8157
8158 if (templ_type != NULL)
8159 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8160 else if (variant_field_index (type0) >= 0)
8161 {
8162 if (dval == NULL && valaddr == NULL && address == 0)
dda83cd7 8163 return type0;
4c4b4cd2 8164 return to_record_with_fixed_variant_part (type0, valaddr, address,
dda83cd7 8165 dval);
4c4b4cd2 8166 }
14f9c5c9
AS
8167 else
8168 {
9cdd0d12 8169 type0->set_is_fixed_instance (true);
14f9c5c9
AS
8170 return type0;
8171 }
8172
8173}
8174
8175/* An ordinary record type (with fixed-length fields) that describes
8176 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8177 union type. Any necessary discriminants' values should be in DVAL,
8178 a record value. That is, this routine selects the appropriate
8179 branch of the union at ADDR according to the discriminant value
b1f33ddd 8180 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8181 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8182
d2e4a39e 8183static struct type *
fc1a4b47 8184to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
dda83cd7 8185 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8186{
8187 int which;
d2e4a39e
AS
8188 struct type *templ_type;
8189 struct type *var_type;
14f9c5c9 8190
78134374 8191 if (var_type0->code () == TYPE_CODE_PTR)
14f9c5c9 8192 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8193 else
14f9c5c9
AS
8194 var_type = var_type0;
8195
8196 templ_type = ada_find_parallel_type (var_type, "___XVU");
8197
8198 if (templ_type != NULL)
8199 var_type = templ_type;
8200
b1f33ddd
JB
8201 if (is_unchecked_variant (var_type, value_type (dval)))
8202 return var_type0;
d8af9068 8203 which = ada_which_variant_applies (var_type, dval);
14f9c5c9
AS
8204
8205 if (which < 0)
e9bb382b 8206 return empty_record (var_type);
14f9c5c9 8207 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8208 return to_fixed_record_type
940da03e 8209 (TYPE_TARGET_TYPE (var_type->field (which).type ()),
d2e4a39e 8210 valaddr, address, dval);
940da03e 8211 else if (variant_field_index (var_type->field (which).type ()) >= 0)
d2e4a39e
AS
8212 return
8213 to_fixed_record_type
940da03e 8214 (var_type->field (which).type (), valaddr, address, dval);
14f9c5c9 8215 else
940da03e 8216 return var_type->field (which).type ();
14f9c5c9
AS
8217}
8218
8908fca5
JB
8219/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8220 ENCODING_TYPE, a type following the GNAT conventions for discrete
8221 type encodings, only carries redundant information. */
8222
8223static int
8224ada_is_redundant_range_encoding (struct type *range_type,
8225 struct type *encoding_type)
8226{
108d56a4 8227 const char *bounds_str;
8908fca5
JB
8228 int n;
8229 LONGEST lo, hi;
8230
78134374 8231 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8908fca5 8232
78134374
SM
8233 if (get_base_type (range_type)->code ()
8234 != get_base_type (encoding_type)->code ())
005e2509
JB
8235 {
8236 /* The compiler probably used a simple base type to describe
8237 the range type instead of the range's actual base type,
8238 expecting us to get the real base type from the encoding
8239 anyway. In this situation, the encoding cannot be ignored
8240 as redundant. */
8241 return 0;
8242 }
8243
8908fca5
JB
8244 if (is_dynamic_type (range_type))
8245 return 0;
8246
7d93a1e0 8247 if (encoding_type->name () == NULL)
8908fca5
JB
8248 return 0;
8249
7d93a1e0 8250 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8908fca5
JB
8251 if (bounds_str == NULL)
8252 return 0;
8253
8254 n = 8; /* Skip "___XDLU_". */
8255 if (!ada_scan_number (bounds_str, n, &lo, &n))
8256 return 0;
5537ddd0 8257 if (range_type->bounds ()->low.const_val () != lo)
8908fca5
JB
8258 return 0;
8259
8260 n += 2; /* Skip the "__" separator between the two bounds. */
8261 if (!ada_scan_number (bounds_str, n, &hi, &n))
8262 return 0;
5537ddd0 8263 if (range_type->bounds ()->high.const_val () != hi)
8908fca5
JB
8264 return 0;
8265
8266 return 1;
8267}
8268
8269/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8270 a type following the GNAT encoding for describing array type
8271 indices, only carries redundant information. */
8272
8273static int
8274ada_is_redundant_index_type_desc (struct type *array_type,
8275 struct type *desc_type)
8276{
8277 struct type *this_layer = check_typedef (array_type);
8278 int i;
8279
1f704f76 8280 for (i = 0; i < desc_type->num_fields (); i++)
8908fca5 8281 {
3d967001 8282 if (!ada_is_redundant_range_encoding (this_layer->index_type (),
940da03e 8283 desc_type->field (i).type ()))
8908fca5
JB
8284 return 0;
8285 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8286 }
8287
8288 return 1;
8289}
8290
14f9c5c9
AS
8291/* Assuming that TYPE0 is an array type describing the type of a value
8292 at ADDR, and that DVAL describes a record containing any
8293 discriminants used in TYPE0, returns a type for the value that
8294 contains no dynamic components (that is, no components whose sizes
8295 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8296 true, gives an error message if the resulting type's size is over
4c4b4cd2 8297 varsize_limit. */
14f9c5c9 8298
d2e4a39e
AS
8299static struct type *
8300to_fixed_array_type (struct type *type0, struct value *dval,
dda83cd7 8301 int ignore_too_big)
14f9c5c9 8302{
d2e4a39e
AS
8303 struct type *index_type_desc;
8304 struct type *result;
ad82864c 8305 int constrained_packed_array_p;
931e5bc3 8306 static const char *xa_suffix = "___XA";
14f9c5c9 8307
b0dd7688 8308 type0 = ada_check_typedef (type0);
22c4c60c 8309 if (type0->is_fixed_instance ())
4c4b4cd2 8310 return type0;
14f9c5c9 8311
ad82864c
JB
8312 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8313 if (constrained_packed_array_p)
75fd6a26
TT
8314 {
8315 type0 = decode_constrained_packed_array_type (type0);
8316 if (type0 == nullptr)
8317 error (_("could not decode constrained packed array type"));
8318 }
284614f0 8319
931e5bc3
JG
8320 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8321
8322 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8323 encoding suffixed with 'P' may still be generated. If so,
8324 it should be used to find the XA type. */
8325
8326 if (index_type_desc == NULL)
8327 {
1da0522e 8328 const char *type_name = ada_type_name (type0);
931e5bc3 8329
1da0522e 8330 if (type_name != NULL)
931e5bc3 8331 {
1da0522e 8332 const int len = strlen (type_name);
931e5bc3
JG
8333 char *name = (char *) alloca (len + strlen (xa_suffix));
8334
1da0522e 8335 if (type_name[len - 1] == 'P')
931e5bc3 8336 {
1da0522e 8337 strcpy (name, type_name);
931e5bc3
JG
8338 strcpy (name + len - 1, xa_suffix);
8339 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8340 }
8341 }
8342 }
8343
28c85d6c 8344 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8345 if (index_type_desc != NULL
8346 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8347 {
8348 /* Ignore this ___XA parallel type, as it does not bring any
8349 useful information. This allows us to avoid creating fixed
8350 versions of the array's index types, which would be identical
8351 to the original ones. This, in turn, can also help avoid
8352 the creation of fixed versions of the array itself. */
8353 index_type_desc = NULL;
8354 }
8355
14f9c5c9
AS
8356 if (index_type_desc == NULL)
8357 {
61ee279c 8358 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8359
14f9c5c9 8360 /* NOTE: elt_type---the fixed version of elt_type0---should never
dda83cd7
SM
8361 depend on the contents of the array in properly constructed
8362 debugging data. */
529cad9c 8363 /* Create a fixed version of the array element type.
dda83cd7
SM
8364 We're not providing the address of an element here,
8365 and thus the actual object value cannot be inspected to do
8366 the conversion. This should not be a problem, since arrays of
8367 unconstrained objects are not allowed. In particular, all
8368 the elements of an array of a tagged type should all be of
8369 the same type specified in the debugging info. No need to
8370 consult the object tag. */
1ed6ede0 8371 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8372
284614f0
JB
8373 /* Make sure we always create a new array type when dealing with
8374 packed array types, since we're going to fix-up the array
8375 type length and element bitsize a little further down. */
ad82864c 8376 if (elt_type0 == elt_type && !constrained_packed_array_p)
dda83cd7 8377 result = type0;
14f9c5c9 8378 else
dda83cd7
SM
8379 result = create_array_type (alloc_type_copy (type0),
8380 elt_type, type0->index_type ());
14f9c5c9
AS
8381 }
8382 else
8383 {
8384 int i;
8385 struct type *elt_type0;
8386
8387 elt_type0 = type0;
1f704f76 8388 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
dda83cd7 8389 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8390
8391 /* NOTE: result---the fixed version of elt_type0---should never
dda83cd7
SM
8392 depend on the contents of the array in properly constructed
8393 debugging data. */
529cad9c 8394 /* Create a fixed version of the array element type.
dda83cd7
SM
8395 We're not providing the address of an element here,
8396 and thus the actual object value cannot be inspected to do
8397 the conversion. This should not be a problem, since arrays of
8398 unconstrained objects are not allowed. In particular, all
8399 the elements of an array of a tagged type should all be of
8400 the same type specified in the debugging info. No need to
8401 consult the object tag. */
1ed6ede0 8402 result =
dda83cd7 8403 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8404
8405 elt_type0 = type0;
1f704f76 8406 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
dda83cd7
SM
8407 {
8408 struct type *range_type =
8409 to_fixed_range_type (index_type_desc->field (i).type (), dval);
5b4ee69b 8410
dda83cd7
SM
8411 result = create_array_type (alloc_type_copy (elt_type0),
8412 result, range_type);
1ce677a4 8413 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
dda83cd7 8414 }
d2e4a39e 8415 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
dda83cd7 8416 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8417 }
8418
2e6fda7d
JB
8419 /* We want to preserve the type name. This can be useful when
8420 trying to get the type name of a value that has already been
8421 printed (for instance, if the user did "print VAR; whatis $". */
7d93a1e0 8422 result->set_name (type0->name ());
2e6fda7d 8423
ad82864c 8424 if (constrained_packed_array_p)
284614f0
JB
8425 {
8426 /* So far, the resulting type has been created as if the original
8427 type was a regular (non-packed) array type. As a result, the
8428 bitsize of the array elements needs to be set again, and the array
8429 length needs to be recomputed based on that bitsize. */
8430 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8431 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8432
8433 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8434 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8435 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
dda83cd7 8436 TYPE_LENGTH (result)++;
284614f0
JB
8437 }
8438
9cdd0d12 8439 result->set_is_fixed_instance (true);
14f9c5c9 8440 return result;
d2e4a39e 8441}
14f9c5c9
AS
8442
8443
8444/* A standard type (containing no dynamically sized components)
8445 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8446 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8447 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8448 ADDRESS or in VALADDR contains these discriminants.
8449
1ed6ede0
JB
8450 If CHECK_TAG is not null, in the case of tagged types, this function
8451 attempts to locate the object's tag and use it to compute the actual
8452 type. However, when ADDRESS is null, we cannot use it to determine the
8453 location of the tag, and therefore compute the tagged type's actual type.
8454 So we return the tagged type without consulting the tag. */
529cad9c 8455
f192137b
JB
8456static struct type *
8457ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
dda83cd7 8458 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8459{
61ee279c 8460 type = ada_check_typedef (type);
8ecb59f8
TT
8461
8462 /* Only un-fixed types need to be handled here. */
8463 if (!HAVE_GNAT_AUX_INFO (type))
8464 return type;
8465
78134374 8466 switch (type->code ())
d2e4a39e
AS
8467 {
8468 default:
14f9c5c9 8469 return type;
d2e4a39e 8470 case TYPE_CODE_STRUCT:
4c4b4cd2 8471 {
dda83cd7
SM
8472 struct type *static_type = to_static_fixed_type (type);
8473 struct type *fixed_record_type =
8474 to_fixed_record_type (type, valaddr, address, NULL);
8475
8476 /* If STATIC_TYPE is a tagged type and we know the object's address,
8477 then we can determine its tag, and compute the object's actual
8478 type from there. Note that we have to use the fixed record
8479 type (the parent part of the record may have dynamic fields
8480 and the way the location of _tag is expressed may depend on
8481 them). */
8482
8483 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8484 {
b50d69b5
JG
8485 struct value *tag =
8486 value_tag_from_contents_and_address
8487 (fixed_record_type,
8488 valaddr,
8489 address);
8490 struct type *real_type = type_from_tag (tag);
8491 struct value *obj =
8492 value_from_contents_and_address (fixed_record_type,
8493 valaddr,
8494 address);
dda83cd7
SM
8495 fixed_record_type = value_type (obj);
8496 if (real_type != NULL)
8497 return to_fixed_record_type
b50d69b5
JG
8498 (real_type, NULL,
8499 value_address (ada_tag_value_at_base_address (obj)), NULL);
dda83cd7
SM
8500 }
8501
8502 /* Check to see if there is a parallel ___XVZ variable.
8503 If there is, then it provides the actual size of our type. */
8504 else if (ada_type_name (fixed_record_type) != NULL)
8505 {
8506 const char *name = ada_type_name (fixed_record_type);
8507 char *xvz_name
224c3ddb 8508 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 8509 bool xvz_found = false;
dda83cd7 8510 LONGEST size;
4af88198 8511
dda83cd7 8512 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 8513 try
eccab96d
JB
8514 {
8515 xvz_found = get_int_var_value (xvz_name, size);
8516 }
230d2906 8517 catch (const gdb_exception_error &except)
eccab96d
JB
8518 {
8519 /* We found the variable, but somehow failed to read
8520 its value. Rethrow the same error, but with a little
8521 bit more information, to help the user understand
8522 what went wrong (Eg: the variable might have been
8523 optimized out). */
8524 throw_error (except.error,
8525 _("unable to read value of %s (%s)"),
3d6e9d23 8526 xvz_name, except.what ());
eccab96d 8527 }
eccab96d 8528
dda83cd7
SM
8529 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8530 {
8531 fixed_record_type = copy_type (fixed_record_type);
8532 TYPE_LENGTH (fixed_record_type) = size;
8533
8534 /* The FIXED_RECORD_TYPE may have be a stub. We have
8535 observed this when the debugging info is STABS, and
8536 apparently it is something that is hard to fix.
8537
8538 In practice, we don't need the actual type definition
8539 at all, because the presence of the XVZ variable allows us
8540 to assume that there must be a XVS type as well, which we
8541 should be able to use later, when we need the actual type
8542 definition.
8543
8544 In the meantime, pretend that the "fixed" type we are
8545 returning is NOT a stub, because this can cause trouble
8546 when using this type to create new types targeting it.
8547 Indeed, the associated creation routines often check
8548 whether the target type is a stub and will try to replace
8549 it, thus using a type with the wrong size. This, in turn,
8550 might cause the new type to have the wrong size too.
8551 Consider the case of an array, for instance, where the size
8552 of the array is computed from the number of elements in
8553 our array multiplied by the size of its element. */
b4b73759 8554 fixed_record_type->set_is_stub (false);
dda83cd7
SM
8555 }
8556 }
8557 return fixed_record_type;
4c4b4cd2 8558 }
d2e4a39e 8559 case TYPE_CODE_ARRAY:
4c4b4cd2 8560 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8561 case TYPE_CODE_UNION:
8562 if (dval == NULL)
dda83cd7 8563 return type;
d2e4a39e 8564 else
dda83cd7 8565 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8566 }
14f9c5c9
AS
8567}
8568
f192137b
JB
8569/* The same as ada_to_fixed_type_1, except that it preserves the type
8570 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8571
8572 The typedef layer needs be preserved in order to differentiate between
8573 arrays and array pointers when both types are implemented using the same
8574 fat pointer. In the array pointer case, the pointer is encoded as
8575 a typedef of the pointer type. For instance, considering:
8576
8577 type String_Access is access String;
8578 S1 : String_Access := null;
8579
8580 To the debugger, S1 is defined as a typedef of type String. But
8581 to the user, it is a pointer. So if the user tries to print S1,
8582 we should not dereference the array, but print the array address
8583 instead.
8584
8585 If we didn't preserve the typedef layer, we would lose the fact that
8586 the type is to be presented as a pointer (needs de-reference before
8587 being printed). And we would also use the source-level type name. */
f192137b
JB
8588
8589struct type *
8590ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 8591 CORE_ADDR address, struct value *dval, int check_tag)
f192137b
JB
8592
8593{
8594 struct type *fixed_type =
8595 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8596
96dbd2c1
JB
8597 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8598 then preserve the typedef layer.
8599
8600 Implementation note: We can only check the main-type portion of
8601 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8602 from TYPE now returns a type that has the same instance flags
8603 as TYPE. For instance, if TYPE is a "typedef const", and its
8604 target type is a "struct", then the typedef elimination will return
8605 a "const" version of the target type. See check_typedef for more
8606 details about how the typedef layer elimination is done.
8607
8608 brobecker/2010-11-19: It seems to me that the only case where it is
8609 useful to preserve the typedef layer is when dealing with fat pointers.
8610 Perhaps, we could add a check for that and preserve the typedef layer
85102364 8611 only in that situation. But this seems unnecessary so far, probably
96dbd2c1
JB
8612 because we call check_typedef/ada_check_typedef pretty much everywhere.
8613 */
78134374 8614 if (type->code () == TYPE_CODE_TYPEDEF
720d1a40 8615 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8616 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8617 return type;
8618
8619 return fixed_type;
8620}
8621
14f9c5c9 8622/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8623 TYPE0, but based on no runtime data. */
14f9c5c9 8624
d2e4a39e
AS
8625static struct type *
8626to_static_fixed_type (struct type *type0)
14f9c5c9 8627{
d2e4a39e 8628 struct type *type;
14f9c5c9
AS
8629
8630 if (type0 == NULL)
8631 return NULL;
8632
22c4c60c 8633 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8634 return type0;
8635
61ee279c 8636 type0 = ada_check_typedef (type0);
d2e4a39e 8637
78134374 8638 switch (type0->code ())
14f9c5c9
AS
8639 {
8640 default:
8641 return type0;
8642 case TYPE_CODE_STRUCT:
8643 type = dynamic_template_type (type0);
d2e4a39e 8644 if (type != NULL)
dda83cd7 8645 return template_to_static_fixed_type (type);
4c4b4cd2 8646 else
dda83cd7 8647 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8648 case TYPE_CODE_UNION:
8649 type = ada_find_parallel_type (type0, "___XVU");
8650 if (type != NULL)
dda83cd7 8651 return template_to_static_fixed_type (type);
4c4b4cd2 8652 else
dda83cd7 8653 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8654 }
8655}
8656
4c4b4cd2
PH
8657/* A static approximation of TYPE with all type wrappers removed. */
8658
d2e4a39e
AS
8659static struct type *
8660static_unwrap_type (struct type *type)
14f9c5c9
AS
8661{
8662 if (ada_is_aligner_type (type))
8663 {
940da03e 8664 struct type *type1 = ada_check_typedef (type)->field (0).type ();
14f9c5c9 8665 if (ada_type_name (type1) == NULL)
d0e39ea2 8666 type1->set_name (ada_type_name (type));
14f9c5c9
AS
8667
8668 return static_unwrap_type (type1);
8669 }
d2e4a39e 8670 else
14f9c5c9 8671 {
d2e4a39e 8672 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8673
d2e4a39e 8674 if (raw_real_type == type)
dda83cd7 8675 return type;
14f9c5c9 8676 else
dda83cd7 8677 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8678 }
8679}
8680
8681/* In some cases, incomplete and private types require
4c4b4cd2 8682 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8683 type Foo;
8684 type FooP is access Foo;
8685 V: FooP;
8686 type Foo is array ...;
4c4b4cd2 8687 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8688 cross-references to such types, we instead substitute for FooP a
8689 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8690 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8691
8692/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8693 exists, otherwise TYPE. */
8694
d2e4a39e 8695struct type *
61ee279c 8696ada_check_typedef (struct type *type)
14f9c5c9 8697{
727e3d2e
JB
8698 if (type == NULL)
8699 return NULL;
8700
736ade86
XR
8701 /* If our type is an access to an unconstrained array, which is encoded
8702 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
8703 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8704 what allows us to distinguish between fat pointers that represent
8705 array types, and fat pointers that represent array access types
8706 (in both cases, the compiler implements them as fat pointers). */
736ade86 8707 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
8708 return type;
8709
f168693b 8710 type = check_typedef (type);
78134374 8711 if (type == NULL || type->code () != TYPE_CODE_ENUM
e46d3488 8712 || !type->is_stub ()
7d93a1e0 8713 || type->name () == NULL)
14f9c5c9 8714 return type;
d2e4a39e 8715 else
14f9c5c9 8716 {
7d93a1e0 8717 const char *name = type->name ();
d2e4a39e 8718 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8719
05e522ef 8720 if (type1 == NULL)
dda83cd7 8721 return type;
05e522ef
JB
8722
8723 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8724 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8725 types, only for the typedef-to-array types). If that's the case,
8726 strip the typedef layer. */
78134374 8727 if (type1->code () == TYPE_CODE_TYPEDEF)
3a867c22
JB
8728 type1 = ada_check_typedef (type1);
8729
8730 return type1;
14f9c5c9
AS
8731 }
8732}
8733
8734/* A value representing the data at VALADDR/ADDRESS as described by
8735 type TYPE0, but with a standard (static-sized) type that correctly
8736 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8737 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8738 creation of struct values]. */
14f9c5c9 8739
4c4b4cd2
PH
8740static struct value *
8741ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
dda83cd7 8742 struct value *val0)
14f9c5c9 8743{
1ed6ede0 8744 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8745
14f9c5c9
AS
8746 if (type == type0 && val0 != NULL)
8747 return val0;
cc0e770c
JB
8748
8749 if (VALUE_LVAL (val0) != lval_memory)
8750 {
8751 /* Our value does not live in memory; it could be a convenience
8752 variable, for instance. Create a not_lval value using val0's
8753 contents. */
8754 return value_from_contents (type, value_contents (val0));
8755 }
8756
8757 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
8758}
8759
8760/* A value representing VAL, but with a standard (static-sized) type
8761 that correctly describes it. Does not necessarily create a new
8762 value. */
8763
0c3acc09 8764struct value *
4c4b4cd2
PH
8765ada_to_fixed_value (struct value *val)
8766{
c48db5ca 8767 val = unwrap_value (val);
d8ce9127 8768 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 8769 return val;
14f9c5c9 8770}
d2e4a39e 8771\f
14f9c5c9 8772
14f9c5c9
AS
8773/* Attributes */
8774
4c4b4cd2
PH
8775/* Table mapping attribute numbers to names.
8776 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8777
27087b7f 8778static const char * const attribute_names[] = {
14f9c5c9
AS
8779 "<?>",
8780
d2e4a39e 8781 "first",
14f9c5c9
AS
8782 "last",
8783 "length",
8784 "image",
14f9c5c9
AS
8785 "max",
8786 "min",
4c4b4cd2
PH
8787 "modulus",
8788 "pos",
8789 "size",
8790 "tag",
14f9c5c9 8791 "val",
14f9c5c9
AS
8792 0
8793};
8794
de93309a 8795static const char *
4c4b4cd2 8796ada_attribute_name (enum exp_opcode n)
14f9c5c9 8797{
4c4b4cd2
PH
8798 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8799 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8800 else
8801 return attribute_names[0];
8802}
8803
4c4b4cd2 8804/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8805
4c4b4cd2
PH
8806static LONGEST
8807pos_atr (struct value *arg)
14f9c5c9 8808{
24209737
PH
8809 struct value *val = coerce_ref (arg);
8810 struct type *type = value_type (val);
14f9c5c9 8811
d2e4a39e 8812 if (!discrete_type_p (type))
323e0a4a 8813 error (_("'POS only defined on discrete types"));
14f9c5c9 8814
6244c119
SM
8815 gdb::optional<LONGEST> result = discrete_position (type, value_as_long (val));
8816 if (!result.has_value ())
aa715135 8817 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 8818
6244c119 8819 return *result;
4c4b4cd2
PH
8820}
8821
8822static struct value *
3cb382c9 8823value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8824{
3cb382c9 8825 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8826}
8827
4c4b4cd2 8828/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8829
d2e4a39e 8830static struct value *
53a47a3e 8831val_atr (struct type *type, LONGEST val)
14f9c5c9 8832{
53a47a3e 8833 gdb_assert (discrete_type_p (type));
0bc2354b
TT
8834 if (type->code () == TYPE_CODE_RANGE)
8835 type = TYPE_TARGET_TYPE (type);
78134374 8836 if (type->code () == TYPE_CODE_ENUM)
14f9c5c9 8837 {
53a47a3e 8838 if (val < 0 || val >= type->num_fields ())
dda83cd7 8839 error (_("argument to 'VAL out of range"));
53a47a3e 8840 val = TYPE_FIELD_ENUMVAL (type, val);
14f9c5c9 8841 }
53a47a3e
TT
8842 return value_from_longest (type, val);
8843}
8844
8845static struct value *
3848abd6 8846ada_val_atr (enum noside noside, struct type *type, struct value *arg)
53a47a3e 8847{
3848abd6
TT
8848 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8849 return value_zero (type, not_lval);
8850
53a47a3e
TT
8851 if (!discrete_type_p (type))
8852 error (_("'VAL only defined on discrete types"));
8853 if (!integer_type_p (value_type (arg)))
8854 error (_("'VAL requires integral argument"));
8855
8856 return val_atr (type, value_as_long (arg));
14f9c5c9 8857}
14f9c5c9 8858\f
d2e4a39e 8859
dda83cd7 8860 /* Evaluation */
14f9c5c9 8861
4c4b4cd2
PH
8862/* True if TYPE appears to be an Ada character type.
8863 [At the moment, this is true only for Character and Wide_Character;
8864 It is a heuristic test that could stand improvement]. */
14f9c5c9 8865
fc913e53 8866bool
d2e4a39e 8867ada_is_character_type (struct type *type)
14f9c5c9 8868{
7b9f71f2
JB
8869 const char *name;
8870
8871 /* If the type code says it's a character, then assume it really is,
8872 and don't check any further. */
78134374 8873 if (type->code () == TYPE_CODE_CHAR)
fc913e53 8874 return true;
7b9f71f2
JB
8875
8876 /* Otherwise, assume it's a character type iff it is a discrete type
8877 with a known character type name. */
8878 name = ada_type_name (type);
8879 return (name != NULL
dda83cd7
SM
8880 && (type->code () == TYPE_CODE_INT
8881 || type->code () == TYPE_CODE_RANGE)
8882 && (strcmp (name, "character") == 0
8883 || strcmp (name, "wide_character") == 0
8884 || strcmp (name, "wide_wide_character") == 0
8885 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8886}
8887
4c4b4cd2 8888/* True if TYPE appears to be an Ada string type. */
14f9c5c9 8889
fc913e53 8890bool
ebf56fd3 8891ada_is_string_type (struct type *type)
14f9c5c9 8892{
61ee279c 8893 type = ada_check_typedef (type);
d2e4a39e 8894 if (type != NULL
78134374 8895 && type->code () != TYPE_CODE_PTR
76a01679 8896 && (ada_is_simple_array_type (type)
dda83cd7 8897 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8898 && ada_array_arity (type) == 1)
8899 {
8900 struct type *elttype = ada_array_element_type (type, 1);
8901
8902 return ada_is_character_type (elttype);
8903 }
d2e4a39e 8904 else
fc913e53 8905 return false;
14f9c5c9
AS
8906}
8907
5bf03f13
JB
8908/* The compiler sometimes provides a parallel XVS type for a given
8909 PAD type. Normally, it is safe to follow the PAD type directly,
8910 but older versions of the compiler have a bug that causes the offset
8911 of its "F" field to be wrong. Following that field in that case
8912 would lead to incorrect results, but this can be worked around
8913 by ignoring the PAD type and using the associated XVS type instead.
8914
8915 Set to True if the debugger should trust the contents of PAD types.
8916 Otherwise, ignore the PAD type if there is a parallel XVS type. */
491144b5 8917static bool trust_pad_over_xvs = true;
14f9c5c9
AS
8918
8919/* True if TYPE is a struct type introduced by the compiler to force the
8920 alignment of a value. Such types have a single field with a
4c4b4cd2 8921 distinctive name. */
14f9c5c9
AS
8922
8923int
ebf56fd3 8924ada_is_aligner_type (struct type *type)
14f9c5c9 8925{
61ee279c 8926 type = ada_check_typedef (type);
714e53ab 8927
5bf03f13 8928 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8929 return 0;
8930
78134374 8931 return (type->code () == TYPE_CODE_STRUCT
dda83cd7
SM
8932 && type->num_fields () == 1
8933 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8934}
8935
8936/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8937 the parallel type. */
14f9c5c9 8938
d2e4a39e
AS
8939struct type *
8940ada_get_base_type (struct type *raw_type)
14f9c5c9 8941{
d2e4a39e
AS
8942 struct type *real_type_namer;
8943 struct type *raw_real_type;
14f9c5c9 8944
78134374 8945 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
8946 return raw_type;
8947
284614f0
JB
8948 if (ada_is_aligner_type (raw_type))
8949 /* The encoding specifies that we should always use the aligner type.
8950 So, even if this aligner type has an associated XVS type, we should
8951 simply ignore it.
8952
8953 According to the compiler gurus, an XVS type parallel to an aligner
8954 type may exist because of a stabs limitation. In stabs, aligner
8955 types are empty because the field has a variable-sized type, and
8956 thus cannot actually be used as an aligner type. As a result,
8957 we need the associated parallel XVS type to decode the type.
8958 Since the policy in the compiler is to not change the internal
8959 representation based on the debugging info format, we sometimes
8960 end up having a redundant XVS type parallel to the aligner type. */
8961 return raw_type;
8962
14f9c5c9 8963 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8964 if (real_type_namer == NULL
78134374 8965 || real_type_namer->code () != TYPE_CODE_STRUCT
1f704f76 8966 || real_type_namer->num_fields () != 1)
14f9c5c9
AS
8967 return raw_type;
8968
940da03e 8969 if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
f80d3ff2
JB
8970 {
8971 /* This is an older encoding form where the base type needs to be
85102364 8972 looked up by name. We prefer the newer encoding because it is
f80d3ff2
JB
8973 more efficient. */
8974 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8975 if (raw_real_type == NULL)
8976 return raw_type;
8977 else
8978 return raw_real_type;
8979 }
8980
8981 /* The field in our XVS type is a reference to the base type. */
940da03e 8982 return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
d2e4a39e 8983}
14f9c5c9 8984
4c4b4cd2 8985/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8986
d2e4a39e
AS
8987struct type *
8988ada_aligned_type (struct type *type)
14f9c5c9
AS
8989{
8990 if (ada_is_aligner_type (type))
940da03e 8991 return ada_aligned_type (type->field (0).type ());
14f9c5c9
AS
8992 else
8993 return ada_get_base_type (type);
8994}
8995
8996
8997/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8998 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 8999
fc1a4b47
AC
9000const gdb_byte *
9001ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9002{
d2e4a39e 9003 if (ada_is_aligner_type (type))
940da03e 9004 return ada_aligned_value_addr (type->field (0).type (),
dda83cd7
SM
9005 valaddr +
9006 TYPE_FIELD_BITPOS (type,
9007 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9008 else
9009 return valaddr;
9010}
9011
4c4b4cd2
PH
9012
9013
14f9c5c9 9014/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9015 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9016const char *
9017ada_enum_name (const char *name)
14f9c5c9 9018{
5f9febe0 9019 static std::string storage;
e6a959d6 9020 const char *tmp;
14f9c5c9 9021
4c4b4cd2
PH
9022 /* First, unqualify the enumeration name:
9023 1. Search for the last '.' character. If we find one, then skip
177b42fe 9024 all the preceding characters, the unqualified name starts
76a01679 9025 right after that dot.
4c4b4cd2 9026 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9027 translates dots into "__". Search forward for double underscores,
9028 but stop searching when we hit an overloading suffix, which is
9029 of the form "__" followed by digits. */
4c4b4cd2 9030
c3e5cd34
PH
9031 tmp = strrchr (name, '.');
9032 if (tmp != NULL)
4c4b4cd2
PH
9033 name = tmp + 1;
9034 else
14f9c5c9 9035 {
4c4b4cd2 9036 while ((tmp = strstr (name, "__")) != NULL)
dda83cd7
SM
9037 {
9038 if (isdigit (tmp[2]))
9039 break;
9040 else
9041 name = tmp + 2;
9042 }
14f9c5c9
AS
9043 }
9044
9045 if (name[0] == 'Q')
9046 {
14f9c5c9 9047 int v;
5b4ee69b 9048
14f9c5c9 9049 if (name[1] == 'U' || name[1] == 'W')
dda83cd7
SM
9050 {
9051 if (sscanf (name + 2, "%x", &v) != 1)
9052 return name;
9053 }
272560b5
TT
9054 else if (((name[1] >= '0' && name[1] <= '9')
9055 || (name[1] >= 'a' && name[1] <= 'z'))
9056 && name[2] == '\0')
9057 {
5f9febe0
TT
9058 storage = string_printf ("'%c'", name[1]);
9059 return storage.c_str ();
272560b5 9060 }
14f9c5c9 9061 else
dda83cd7 9062 return name;
14f9c5c9
AS
9063
9064 if (isascii (v) && isprint (v))
5f9febe0 9065 storage = string_printf ("'%c'", v);
14f9c5c9 9066 else if (name[1] == 'U')
5f9febe0 9067 storage = string_printf ("[\"%02x\"]", v);
14f9c5c9 9068 else
5f9febe0 9069 storage = string_printf ("[\"%04x\"]", v);
14f9c5c9 9070
5f9febe0 9071 return storage.c_str ();
14f9c5c9 9072 }
d2e4a39e 9073 else
4c4b4cd2 9074 {
c3e5cd34
PH
9075 tmp = strstr (name, "__");
9076 if (tmp == NULL)
9077 tmp = strstr (name, "$");
9078 if (tmp != NULL)
dda83cd7 9079 {
5f9febe0
TT
9080 storage = std::string (name, tmp - name);
9081 return storage.c_str ();
dda83cd7 9082 }
4c4b4cd2
PH
9083
9084 return name;
9085 }
14f9c5c9
AS
9086}
9087
14f9c5c9
AS
9088/* Evaluate the subexpression of EXP starting at *POS as for
9089 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9090 expression. */
14f9c5c9 9091
d2e4a39e
AS
9092static struct value *
9093evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9094{
fe1fe7ea 9095 return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9096}
9097
9098/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9099 value it wraps. */
14f9c5c9 9100
d2e4a39e
AS
9101static struct value *
9102unwrap_value (struct value *val)
14f9c5c9 9103{
df407dfe 9104 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9105
14f9c5c9
AS
9106 if (ada_is_aligner_type (type))
9107 {
de4d072f 9108 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9109 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9110
14f9c5c9 9111 if (ada_type_name (val_type) == NULL)
d0e39ea2 9112 val_type->set_name (ada_type_name (type));
14f9c5c9
AS
9113
9114 return unwrap_value (v);
9115 }
d2e4a39e 9116 else
14f9c5c9 9117 {
d2e4a39e 9118 struct type *raw_real_type =
dda83cd7 9119 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9120
5bf03f13
JB
9121 /* If there is no parallel XVS or XVE type, then the value is
9122 already unwrapped. Return it without further modification. */
9123 if ((type == raw_real_type)
9124 && ada_find_parallel_type (type, "___XVE") == NULL)
9125 return val;
14f9c5c9 9126
d2e4a39e 9127 return
dda83cd7
SM
9128 coerce_unspec_val_to_type
9129 (val, ada_to_fixed_type (raw_real_type, 0,
9130 value_address (val),
9131 NULL, 1));
14f9c5c9
AS
9132 }
9133}
d2e4a39e 9134
d99dcf51
JB
9135/* Given two array types T1 and T2, return nonzero iff both arrays
9136 contain the same number of elements. */
9137
9138static int
9139ada_same_array_size_p (struct type *t1, struct type *t2)
9140{
9141 LONGEST lo1, hi1, lo2, hi2;
9142
9143 /* Get the array bounds in order to verify that the size of
9144 the two arrays match. */
9145 if (!get_array_bounds (t1, &lo1, &hi1)
9146 || !get_array_bounds (t2, &lo2, &hi2))
9147 error (_("unable to determine array bounds"));
9148
9149 /* To make things easier for size comparison, normalize a bit
9150 the case of empty arrays by making sure that the difference
9151 between upper bound and lower bound is always -1. */
9152 if (lo1 > hi1)
9153 hi1 = lo1 - 1;
9154 if (lo2 > hi2)
9155 hi2 = lo2 - 1;
9156
9157 return (hi1 - lo1 == hi2 - lo2);
9158}
9159
9160/* Assuming that VAL is an array of integrals, and TYPE represents
9161 an array with the same number of elements, but with wider integral
9162 elements, return an array "casted" to TYPE. In practice, this
9163 means that the returned array is built by casting each element
9164 of the original array into TYPE's (wider) element type. */
9165
9166static struct value *
9167ada_promote_array_of_integrals (struct type *type, struct value *val)
9168{
9169 struct type *elt_type = TYPE_TARGET_TYPE (type);
9170 LONGEST lo, hi;
9171 struct value *res;
9172 LONGEST i;
9173
9174 /* Verify that both val and type are arrays of scalars, and
9175 that the size of val's elements is smaller than the size
9176 of type's element. */
78134374 9177 gdb_assert (type->code () == TYPE_CODE_ARRAY);
d99dcf51 9178 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
78134374 9179 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
d99dcf51
JB
9180 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9181 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9182 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9183
9184 if (!get_array_bounds (type, &lo, &hi))
9185 error (_("unable to determine array bounds"));
9186
9187 res = allocate_value (type);
9188
9189 /* Promote each array element. */
9190 for (i = 0; i < hi - lo + 1; i++)
9191 {
9192 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9193
9194 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9195 value_contents_all (elt), TYPE_LENGTH (elt_type));
9196 }
9197
9198 return res;
9199}
9200
4c4b4cd2
PH
9201/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9202 return the converted value. */
9203
d2e4a39e
AS
9204static struct value *
9205coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9206{
df407dfe 9207 struct type *type2 = value_type (val);
5b4ee69b 9208
14f9c5c9
AS
9209 if (type == type2)
9210 return val;
9211
61ee279c
PH
9212 type2 = ada_check_typedef (type2);
9213 type = ada_check_typedef (type);
14f9c5c9 9214
78134374
SM
9215 if (type2->code () == TYPE_CODE_PTR
9216 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9
AS
9217 {
9218 val = ada_value_ind (val);
df407dfe 9219 type2 = value_type (val);
14f9c5c9
AS
9220 }
9221
78134374
SM
9222 if (type2->code () == TYPE_CODE_ARRAY
9223 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9 9224 {
d99dcf51
JB
9225 if (!ada_same_array_size_p (type, type2))
9226 error (_("cannot assign arrays of different length"));
9227
9228 if (is_integral_type (TYPE_TARGET_TYPE (type))
9229 && is_integral_type (TYPE_TARGET_TYPE (type2))
9230 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9231 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9232 {
9233 /* Allow implicit promotion of the array elements to
9234 a wider type. */
9235 return ada_promote_array_of_integrals (type, val);
9236 }
9237
9238 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
dda83cd7
SM
9239 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9240 error (_("Incompatible types in assignment"));
04624583 9241 deprecated_set_value_type (val, type);
14f9c5c9 9242 }
d2e4a39e 9243 return val;
14f9c5c9
AS
9244}
9245
4c4b4cd2
PH
9246static struct value *
9247ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9248{
9249 struct value *val;
9250 struct type *type1, *type2;
9251 LONGEST v, v1, v2;
9252
994b9211
AC
9253 arg1 = coerce_ref (arg1);
9254 arg2 = coerce_ref (arg2);
18af8284
JB
9255 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9256 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9257
78134374
SM
9258 if (type1->code () != TYPE_CODE_INT
9259 || type2->code () != TYPE_CODE_INT)
4c4b4cd2
PH
9260 return value_binop (arg1, arg2, op);
9261
76a01679 9262 switch (op)
4c4b4cd2
PH
9263 {
9264 case BINOP_MOD:
9265 case BINOP_DIV:
9266 case BINOP_REM:
9267 break;
9268 default:
9269 return value_binop (arg1, arg2, op);
9270 }
9271
9272 v2 = value_as_long (arg2);
9273 if (v2 == 0)
323e0a4a 9274 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2 9275
c6d940a9 9276 if (type1->is_unsigned () || op == BINOP_MOD)
4c4b4cd2
PH
9277 return value_binop (arg1, arg2, op);
9278
9279 v1 = value_as_long (arg1);
9280 switch (op)
9281 {
9282 case BINOP_DIV:
9283 v = v1 / v2;
76a01679 9284 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
dda83cd7 9285 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9286 break;
9287 case BINOP_REM:
9288 v = v1 % v2;
76a01679 9289 if (v * v1 < 0)
dda83cd7 9290 v -= v2;
4c4b4cd2
PH
9291 break;
9292 default:
9293 /* Should not reach this point. */
9294 v = 0;
9295 }
9296
9297 val = allocate_value (type1);
990a07ab 9298 store_unsigned_integer (value_contents_raw (val),
dda83cd7 9299 TYPE_LENGTH (value_type (val)),
34877895 9300 type_byte_order (type1), v);
4c4b4cd2
PH
9301 return val;
9302}
9303
9304static int
9305ada_value_equal (struct value *arg1, struct value *arg2)
9306{
df407dfe
AC
9307 if (ada_is_direct_array_type (value_type (arg1))
9308 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9309 {
79e8fcaa
JB
9310 struct type *arg1_type, *arg2_type;
9311
f58b38bf 9312 /* Automatically dereference any array reference before
dda83cd7 9313 we attempt to perform the comparison. */
f58b38bf
JB
9314 arg1 = ada_coerce_ref (arg1);
9315 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9316
4c4b4cd2
PH
9317 arg1 = ada_coerce_to_simple_array (arg1);
9318 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9319
9320 arg1_type = ada_check_typedef (value_type (arg1));
9321 arg2_type = ada_check_typedef (value_type (arg2));
9322
78134374 9323 if (arg1_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
9324 || arg2_type->code () != TYPE_CODE_ARRAY)
9325 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9326 /* FIXME: The following works only for types whose
dda83cd7
SM
9327 representations use all bits (no padding or undefined bits)
9328 and do not have user-defined equality. */
79e8fcaa
JB
9329 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9330 && memcmp (value_contents (arg1), value_contents (arg2),
9331 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9332 }
9333 return value_equal (arg1, arg2);
9334}
9335
52ce6436
PH
9336/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9337 component of LHS (a simple array or a record), updating *POS past
9338 the expression, assuming that LHS is contained in CONTAINER. Does
9339 not modify the inferior's memory, nor does it modify LHS (unless
9340 LHS == CONTAINER). */
9341
9342static void
9343assign_component (struct value *container, struct value *lhs, LONGEST index,
9344 struct expression *exp, int *pos)
9345{
9346 struct value *mark = value_mark ();
9347 struct value *elt;
0e2da9f0 9348 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9349
78134374 9350 if (lhs_type->code () == TYPE_CODE_ARRAY)
52ce6436 9351 {
22601c15
UW
9352 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9353 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9354
52ce6436
PH
9355 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9356 }
9357 else
9358 {
9359 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9360 elt = ada_to_fixed_value (elt);
52ce6436
PH
9361 }
9362
9363 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9364 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9365 else
9366 value_assign_to_component (container, elt,
9367 ada_evaluate_subexp (NULL, exp, pos,
9368 EVAL_NORMAL));
9369
9370 value_free_to_mark (mark);
9371}
9372
9373/* Assuming that LHS represents an lvalue having a record or array
9374 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9375 of that aggregate's value to LHS, advancing *POS past the
9376 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9377 lvalue containing LHS (possibly LHS itself). Does not modify
9378 the inferior's memory, nor does it modify the contents of
0963b4bd 9379 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9380
9381static struct value *
9382assign_aggregate (struct value *container,
9383 struct value *lhs, struct expression *exp,
9384 int *pos, enum noside noside)
9385{
9386 struct type *lhs_type;
9387 int n = exp->elts[*pos+1].longconst;
9388 LONGEST low_index, high_index;
52ce6436 9389 int i;
52ce6436
PH
9390
9391 *pos += 3;
9392 if (noside != EVAL_NORMAL)
9393 {
52ce6436
PH
9394 for (i = 0; i < n; i += 1)
9395 ada_evaluate_subexp (NULL, exp, pos, noside);
9396 return container;
9397 }
9398
9399 container = ada_coerce_ref (container);
9400 if (ada_is_direct_array_type (value_type (container)))
9401 container = ada_coerce_to_simple_array (container);
9402 lhs = ada_coerce_ref (lhs);
9403 if (!deprecated_value_modifiable (lhs))
9404 error (_("Left operand of assignment is not a modifiable lvalue."));
9405
0e2da9f0 9406 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9407 if (ada_is_direct_array_type (lhs_type))
9408 {
9409 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 9410 lhs_type = check_typedef (value_type (lhs));
cf88be68
SM
9411 low_index = lhs_type->bounds ()->low.const_val ();
9412 high_index = lhs_type->bounds ()->high.const_val ();
52ce6436 9413 }
78134374 9414 else if (lhs_type->code () == TYPE_CODE_STRUCT)
52ce6436
PH
9415 {
9416 low_index = 0;
9417 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9418 }
9419 else
9420 error (_("Left-hand side must be array or record."));
9421
cf608cc4 9422 std::vector<LONGEST> indices (4);
52ce6436
PH
9423 indices[0] = indices[1] = low_index - 1;
9424 indices[2] = indices[3] = high_index + 1;
52ce6436
PH
9425
9426 for (i = 0; i < n; i += 1)
9427 {
9428 switch (exp->elts[*pos].opcode)
9429 {
1fbf5ada 9430 case OP_CHOICES:
cf608cc4 9431 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
1fbf5ada
JB
9432 low_index, high_index);
9433 break;
9434 case OP_POSITIONAL:
9435 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436 9436 low_index, high_index);
1fbf5ada
JB
9437 break;
9438 case OP_OTHERS:
9439 if (i != n-1)
9440 error (_("Misplaced 'others' clause"));
cf608cc4
TT
9441 aggregate_assign_others (container, lhs, exp, pos, indices,
9442 low_index, high_index);
1fbf5ada
JB
9443 break;
9444 default:
9445 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9446 }
9447 }
9448
9449 return container;
9450}
9451
9452/* Assign into the component of LHS indexed by the OP_POSITIONAL
9453 construct at *POS, updating *POS past the construct, given that
cf608cc4
TT
9454 the positions are relative to lower bound LOW, where HIGH is the
9455 upper bound. Record the position in INDICES. CONTAINER is as for
0963b4bd 9456 assign_aggregate. */
52ce6436
PH
9457static void
9458aggregate_assign_positional (struct value *container,
9459 struct value *lhs, struct expression *exp,
cf608cc4
TT
9460 int *pos, std::vector<LONGEST> &indices,
9461 LONGEST low, LONGEST high)
52ce6436
PH
9462{
9463 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9464
9465 if (ind - 1 == high)
e1d5a0d2 9466 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9467 if (ind <= high)
9468 {
cf608cc4 9469 add_component_interval (ind, ind, indices);
52ce6436
PH
9470 *pos += 3;
9471 assign_component (container, lhs, ind, exp, pos);
9472 }
9473 else
9474 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9475}
9476
9477/* Assign into the components of LHS indexed by the OP_CHOICES
9478 construct at *POS, updating *POS past the construct, given that
9479 the allowable indices are LOW..HIGH. Record the indices assigned
cf608cc4 9480 to in INDICES. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9481static void
9482aggregate_assign_from_choices (struct value *container,
9483 struct value *lhs, struct expression *exp,
cf608cc4
TT
9484 int *pos, std::vector<LONGEST> &indices,
9485 LONGEST low, LONGEST high)
52ce6436
PH
9486{
9487 int j;
9488 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9489 int choice_pos, expr_pc;
9490 int is_array = ada_is_direct_array_type (value_type (lhs));
9491
9492 choice_pos = *pos += 3;
9493
9494 for (j = 0; j < n_choices; j += 1)
9495 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9496 expr_pc = *pos;
9497 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9498
9499 for (j = 0; j < n_choices; j += 1)
9500 {
9501 LONGEST lower, upper;
9502 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9503
52ce6436
PH
9504 if (op == OP_DISCRETE_RANGE)
9505 {
9506 choice_pos += 1;
9507 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9508 EVAL_NORMAL));
9509 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9510 EVAL_NORMAL));
9511 }
9512 else if (is_array)
9513 {
9514 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9515 EVAL_NORMAL));
9516 upper = lower;
9517 }
9518 else
9519 {
9520 int ind;
0d5cff50 9521 const char *name;
5b4ee69b 9522
52ce6436
PH
9523 switch (op)
9524 {
9525 case OP_NAME:
9526 name = &exp->elts[choice_pos + 2].string;
9527 break;
9528 case OP_VAR_VALUE:
987012b8 9529 name = exp->elts[choice_pos + 2].symbol->natural_name ();
52ce6436
PH
9530 break;
9531 default:
9532 error (_("Invalid record component association."));
9533 }
9534 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9535 ind = 0;
9536 if (! find_struct_field (name, value_type (lhs), 0,
9537 NULL, NULL, NULL, NULL, &ind))
9538 error (_("Unknown component name: %s."), name);
9539 lower = upper = ind;
9540 }
9541
9542 if (lower <= upper && (lower < low || upper > high))
9543 error (_("Index in component association out of bounds."));
9544
cf608cc4 9545 add_component_interval (lower, upper, indices);
52ce6436
PH
9546 while (lower <= upper)
9547 {
9548 int pos1;
5b4ee69b 9549
52ce6436
PH
9550 pos1 = expr_pc;
9551 assign_component (container, lhs, lower, exp, &pos1);
9552 lower += 1;
9553 }
9554 }
9555}
9556
9557/* Assign the value of the expression in the OP_OTHERS construct in
9558 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9559 have not been previously assigned. The index intervals already assigned
cf608cc4
TT
9560 are in INDICES. Updates *POS to after the OP_OTHERS clause.
9561 CONTAINER is as for assign_aggregate. */
52ce6436
PH
9562static void
9563aggregate_assign_others (struct value *container,
9564 struct value *lhs, struct expression *exp,
cf608cc4 9565 int *pos, std::vector<LONGEST> &indices,
52ce6436
PH
9566 LONGEST low, LONGEST high)
9567{
9568 int i;
5ce64950 9569 int expr_pc = *pos + 1;
52ce6436 9570
cf608cc4 9571 int num_indices = indices.size ();
52ce6436
PH
9572 for (i = 0; i < num_indices - 2; i += 2)
9573 {
9574 LONGEST ind;
5b4ee69b 9575
52ce6436
PH
9576 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9577 {
5ce64950 9578 int localpos;
5b4ee69b 9579
5ce64950
MS
9580 localpos = expr_pc;
9581 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9582 }
9583 }
9584 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9585}
9586
cf608cc4
TT
9587/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9588 [ INDICES[0] .. INDICES[1] ],... The resulting intervals do not
9589 overlap. */
52ce6436
PH
9590static void
9591add_component_interval (LONGEST low, LONGEST high,
cf608cc4 9592 std::vector<LONGEST> &indices)
52ce6436
PH
9593{
9594 int i, j;
5b4ee69b 9595
cf608cc4
TT
9596 int size = indices.size ();
9597 for (i = 0; i < size; i += 2) {
52ce6436
PH
9598 if (high >= indices[i] && low <= indices[i + 1])
9599 {
9600 int kh;
5b4ee69b 9601
cf608cc4 9602 for (kh = i + 2; kh < size; kh += 2)
52ce6436
PH
9603 if (high < indices[kh])
9604 break;
9605 if (low < indices[i])
9606 indices[i] = low;
9607 indices[i + 1] = indices[kh - 1];
9608 if (high > indices[i + 1])
9609 indices[i + 1] = high;
cf608cc4
TT
9610 memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
9611 indices.resize (kh - i - 2);
52ce6436
PH
9612 return;
9613 }
9614 else if (high < indices[i])
9615 break;
9616 }
9617
cf608cc4 9618 indices.resize (indices.size () + 2);
d4813f10 9619 for (j = indices.size () - 1; j >= i + 2; j -= 1)
52ce6436
PH
9620 indices[j] = indices[j - 2];
9621 indices[i] = low;
9622 indices[i + 1] = high;
9623}
9624
6e48bd2c
JB
9625/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9626 is different. */
9627
9628static struct value *
b7e22850 9629ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
9630{
9631 if (type == ada_check_typedef (value_type (arg2)))
9632 return arg2;
9633
6e48bd2c
JB
9634 return value_cast (type, arg2);
9635}
9636
284614f0
JB
9637/* Evaluating Ada expressions, and printing their result.
9638 ------------------------------------------------------
9639
21649b50
JB
9640 1. Introduction:
9641 ----------------
9642
284614f0
JB
9643 We usually evaluate an Ada expression in order to print its value.
9644 We also evaluate an expression in order to print its type, which
9645 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9646 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9647 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9648 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9649 similar.
9650
9651 Evaluating expressions is a little more complicated for Ada entities
9652 than it is for entities in languages such as C. The main reason for
9653 this is that Ada provides types whose definition might be dynamic.
9654 One example of such types is variant records. Or another example
9655 would be an array whose bounds can only be known at run time.
9656
9657 The following description is a general guide as to what should be
9658 done (and what should NOT be done) in order to evaluate an expression
9659 involving such types, and when. This does not cover how the semantic
9660 information is encoded by GNAT as this is covered separatly. For the
9661 document used as the reference for the GNAT encoding, see exp_dbug.ads
9662 in the GNAT sources.
9663
9664 Ideally, we should embed each part of this description next to its
9665 associated code. Unfortunately, the amount of code is so vast right
9666 now that it's hard to see whether the code handling a particular
9667 situation might be duplicated or not. One day, when the code is
9668 cleaned up, this guide might become redundant with the comments
9669 inserted in the code, and we might want to remove it.
9670
21649b50
JB
9671 2. ``Fixing'' an Entity, the Simple Case:
9672 -----------------------------------------
9673
284614f0
JB
9674 When evaluating Ada expressions, the tricky issue is that they may
9675 reference entities whose type contents and size are not statically
9676 known. Consider for instance a variant record:
9677
9678 type Rec (Empty : Boolean := True) is record
dda83cd7
SM
9679 case Empty is
9680 when True => null;
9681 when False => Value : Integer;
9682 end case;
284614f0
JB
9683 end record;
9684 Yes : Rec := (Empty => False, Value => 1);
9685 No : Rec := (empty => True);
9686
9687 The size and contents of that record depends on the value of the
9688 descriminant (Rec.Empty). At this point, neither the debugging
9689 information nor the associated type structure in GDB are able to
9690 express such dynamic types. So what the debugger does is to create
9691 "fixed" versions of the type that applies to the specific object.
30baf67b 9692 We also informally refer to this operation as "fixing" an object,
284614f0
JB
9693 which means creating its associated fixed type.
9694
9695 Example: when printing the value of variable "Yes" above, its fixed
9696 type would look like this:
9697
9698 type Rec is record
dda83cd7
SM
9699 Empty : Boolean;
9700 Value : Integer;
284614f0
JB
9701 end record;
9702
9703 On the other hand, if we printed the value of "No", its fixed type
9704 would become:
9705
9706 type Rec is record
dda83cd7 9707 Empty : Boolean;
284614f0
JB
9708 end record;
9709
9710 Things become a little more complicated when trying to fix an entity
9711 with a dynamic type that directly contains another dynamic type,
9712 such as an array of variant records, for instance. There are
9713 two possible cases: Arrays, and records.
9714
21649b50
JB
9715 3. ``Fixing'' Arrays:
9716 ---------------------
9717
9718 The type structure in GDB describes an array in terms of its bounds,
9719 and the type of its elements. By design, all elements in the array
9720 have the same type and we cannot represent an array of variant elements
9721 using the current type structure in GDB. When fixing an array,
9722 we cannot fix the array element, as we would potentially need one
9723 fixed type per element of the array. As a result, the best we can do
9724 when fixing an array is to produce an array whose bounds and size
9725 are correct (allowing us to read it from memory), but without having
9726 touched its element type. Fixing each element will be done later,
9727 when (if) necessary.
9728
9729 Arrays are a little simpler to handle than records, because the same
9730 amount of memory is allocated for each element of the array, even if
1b536f04 9731 the amount of space actually used by each element differs from element
21649b50 9732 to element. Consider for instance the following array of type Rec:
284614f0
JB
9733
9734 type Rec_Array is array (1 .. 2) of Rec;
9735
1b536f04
JB
9736 The actual amount of memory occupied by each element might be different
9737 from element to element, depending on the value of their discriminant.
21649b50 9738 But the amount of space reserved for each element in the array remains
1b536f04 9739 fixed regardless. So we simply need to compute that size using
21649b50
JB
9740 the debugging information available, from which we can then determine
9741 the array size (we multiply the number of elements of the array by
9742 the size of each element).
9743
9744 The simplest case is when we have an array of a constrained element
9745 type. For instance, consider the following type declarations:
9746
dda83cd7
SM
9747 type Bounded_String (Max_Size : Integer) is
9748 Length : Integer;
9749 Buffer : String (1 .. Max_Size);
9750 end record;
9751 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
21649b50
JB
9752
9753 In this case, the compiler describes the array as an array of
9754 variable-size elements (identified by its XVS suffix) for which
9755 the size can be read in the parallel XVZ variable.
9756
9757 In the case of an array of an unconstrained element type, the compiler
9758 wraps the array element inside a private PAD type. This type should not
9759 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9760 that we also use the adjective "aligner" in our code to designate
9761 these wrapper types.
9762
1b536f04 9763 In some cases, the size allocated for each element is statically
21649b50
JB
9764 known. In that case, the PAD type already has the correct size,
9765 and the array element should remain unfixed.
9766
9767 But there are cases when this size is not statically known.
9768 For instance, assuming that "Five" is an integer variable:
284614f0 9769
dda83cd7
SM
9770 type Dynamic is array (1 .. Five) of Integer;
9771 type Wrapper (Has_Length : Boolean := False) is record
9772 Data : Dynamic;
9773 case Has_Length is
9774 when True => Length : Integer;
9775 when False => null;
9776 end case;
9777 end record;
9778 type Wrapper_Array is array (1 .. 2) of Wrapper;
284614f0 9779
dda83cd7
SM
9780 Hello : Wrapper_Array := (others => (Has_Length => True,
9781 Data => (others => 17),
9782 Length => 1));
284614f0
JB
9783
9784
9785 The debugging info would describe variable Hello as being an
9786 array of a PAD type. The size of that PAD type is not statically
9787 known, but can be determined using a parallel XVZ variable.
9788 In that case, a copy of the PAD type with the correct size should
9789 be used for the fixed array.
9790
21649b50
JB
9791 3. ``Fixing'' record type objects:
9792 ----------------------------------
9793
9794 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9795 record types. In this case, in order to compute the associated
9796 fixed type, we need to determine the size and offset of each of
9797 its components. This, in turn, requires us to compute the fixed
9798 type of each of these components.
9799
9800 Consider for instance the example:
9801
dda83cd7
SM
9802 type Bounded_String (Max_Size : Natural) is record
9803 Str : String (1 .. Max_Size);
9804 Length : Natural;
9805 end record;
9806 My_String : Bounded_String (Max_Size => 10);
284614f0
JB
9807
9808 In that case, the position of field "Length" depends on the size
9809 of field Str, which itself depends on the value of the Max_Size
21649b50 9810 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9811 we need to fix the type of field Str. Therefore, fixing a variant
9812 record requires us to fix each of its components.
9813
9814 However, if a component does not have a dynamic size, the component
9815 should not be fixed. In particular, fields that use a PAD type
9816 should not fixed. Here is an example where this might happen
9817 (assuming type Rec above):
9818
9819 type Container (Big : Boolean) is record
dda83cd7
SM
9820 First : Rec;
9821 After : Integer;
9822 case Big is
9823 when True => Another : Integer;
9824 when False => null;
9825 end case;
284614f0
JB
9826 end record;
9827 My_Container : Container := (Big => False,
dda83cd7
SM
9828 First => (Empty => True),
9829 After => 42);
284614f0
JB
9830
9831 In that example, the compiler creates a PAD type for component First,
9832 whose size is constant, and then positions the component After just
9833 right after it. The offset of component After is therefore constant
9834 in this case.
9835
9836 The debugger computes the position of each field based on an algorithm
9837 that uses, among other things, the actual position and size of the field
21649b50
JB
9838 preceding it. Let's now imagine that the user is trying to print
9839 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9840 end up computing the offset of field After based on the size of the
9841 fixed version of field First. And since in our example First has
9842 only one actual field, the size of the fixed type is actually smaller
9843 than the amount of space allocated to that field, and thus we would
9844 compute the wrong offset of field After.
9845
21649b50
JB
9846 To make things more complicated, we need to watch out for dynamic
9847 components of variant records (identified by the ___XVL suffix in
9848 the component name). Even if the target type is a PAD type, the size
9849 of that type might not be statically known. So the PAD type needs
9850 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9851 we might end up with the wrong size for our component. This can be
9852 observed with the following type declarations:
284614f0 9853
dda83cd7
SM
9854 type Octal is new Integer range 0 .. 7;
9855 type Octal_Array is array (Positive range <>) of Octal;
9856 pragma Pack (Octal_Array);
284614f0 9857
dda83cd7
SM
9858 type Octal_Buffer (Size : Positive) is record
9859 Buffer : Octal_Array (1 .. Size);
9860 Length : Integer;
9861 end record;
284614f0
JB
9862
9863 In that case, Buffer is a PAD type whose size is unset and needs
9864 to be computed by fixing the unwrapped type.
9865
21649b50
JB
9866 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9867 ----------------------------------------------------------
9868
9869 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9870 thus far, be actually fixed?
9871
9872 The answer is: Only when referencing that element. For instance
9873 when selecting one component of a record, this specific component
9874 should be fixed at that point in time. Or when printing the value
9875 of a record, each component should be fixed before its value gets
9876 printed. Similarly for arrays, the element of the array should be
9877 fixed when printing each element of the array, or when extracting
9878 one element out of that array. On the other hand, fixing should
9879 not be performed on the elements when taking a slice of an array!
9880
31432a67 9881 Note that one of the side effects of miscomputing the offset and
284614f0
JB
9882 size of each field is that we end up also miscomputing the size
9883 of the containing type. This can have adverse results when computing
9884 the value of an entity. GDB fetches the value of an entity based
9885 on the size of its type, and thus a wrong size causes GDB to fetch
9886 the wrong amount of memory. In the case where the computed size is
9887 too small, GDB fetches too little data to print the value of our
31432a67 9888 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
9889 past the buffer containing the data =:-o. */
9890
ced9779b
JB
9891/* Evaluate a subexpression of EXP, at index *POS, and return a value
9892 for that subexpression cast to TO_TYPE. Advance *POS over the
9893 subexpression. */
9894
9895static value *
9896ada_evaluate_subexp_for_cast (expression *exp, int *pos,
9897 enum noside noside, struct type *to_type)
9898{
9899 int pc = *pos;
9900
9901 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
9902 || exp->elts[pc].opcode == OP_VAR_VALUE)
9903 {
9904 (*pos) += 4;
9905
9906 value *val;
9907 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
dda83cd7
SM
9908 {
9909 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9910 return value_zero (to_type, not_lval);
9911
9912 val = evaluate_var_msym_value (noside,
9913 exp->elts[pc + 1].objfile,
9914 exp->elts[pc + 2].msymbol);
9915 }
ced9779b 9916 else
dda83cd7
SM
9917 val = evaluate_var_value (noside,
9918 exp->elts[pc + 1].block,
9919 exp->elts[pc + 2].symbol);
ced9779b
JB
9920
9921 if (noside == EVAL_SKIP)
dda83cd7 9922 return eval_skip_value (exp);
ced9779b
JB
9923
9924 val = ada_value_cast (to_type, val);
9925
9926 /* Follow the Ada language semantics that do not allow taking
9927 an address of the result of a cast (view conversion in Ada). */
9928 if (VALUE_LVAL (val) == lval_memory)
dda83cd7
SM
9929 {
9930 if (value_lazy (val))
9931 value_fetch_lazy (val);
9932 VALUE_LVAL (val) = not_lval;
9933 }
ced9779b
JB
9934 return val;
9935 }
9936
9937 value *val = evaluate_subexp (to_type, exp, pos, noside);
9938 if (noside == EVAL_SKIP)
9939 return eval_skip_value (exp);
9940 return ada_value_cast (to_type, val);
9941}
9942
62d4bd94
TT
9943/* A helper function for TERNOP_IN_RANGE. */
9944
9945static value *
9946eval_ternop_in_range (struct type *expect_type, struct expression *exp,
9947 enum noside noside,
9948 value *arg1, value *arg2, value *arg3)
9949{
9950 if (noside == EVAL_SKIP)
9951 return eval_skip_value (exp);
9952
9953 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9954 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9955 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
9956 return
9957 value_from_longest (type,
9958 (value_less (arg1, arg3)
9959 || value_equal (arg1, arg3))
9960 && (value_less (arg2, arg1)
9961 || value_equal (arg2, arg1)));
9962}
9963
82390ab8
TT
9964/* A helper function for UNOP_NEG. */
9965
9966static value *
9967ada_unop_neg (struct type *expect_type,
9968 struct expression *exp,
9969 enum noside noside, enum exp_opcode op,
9970 struct value *arg1)
9971{
9972 if (noside == EVAL_SKIP)
9973 return eval_skip_value (exp);
9974 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9975 return value_neg (arg1);
9976}
9977
7efc87ff
TT
9978/* A helper function for UNOP_IN_RANGE. */
9979
9980static value *
9981ada_unop_in_range (struct type *expect_type,
9982 struct expression *exp,
9983 enum noside noside, enum exp_opcode op,
9984 struct value *arg1, struct type *type)
9985{
9986 if (noside == EVAL_SKIP)
9987 return eval_skip_value (exp);
9988
9989 struct value *arg2, *arg3;
9990 switch (type->code ())
9991 {
9992 default:
9993 lim_warning (_("Membership test incompletely implemented; "
9994 "always returns true"));
9995 type = language_bool_type (exp->language_defn, exp->gdbarch);
9996 return value_from_longest (type, (LONGEST) 1);
9997
9998 case TYPE_CODE_RANGE:
9999 arg2 = value_from_longest (type,
10000 type->bounds ()->low.const_val ());
10001 arg3 = value_from_longest (type,
10002 type->bounds ()->high.const_val ());
10003 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10004 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10005 type = language_bool_type (exp->language_defn, exp->gdbarch);
10006 return
10007 value_from_longest (type,
10008 (value_less (arg1, arg3)
10009 || value_equal (arg1, arg3))
10010 && (value_less (arg2, arg1)
10011 || value_equal (arg2, arg1)));
10012 }
10013}
10014
020dbabe
TT
10015/* A helper function for OP_ATR_TAG. */
10016
10017static value *
10018ada_atr_tag (struct type *expect_type,
10019 struct expression *exp,
10020 enum noside noside, enum exp_opcode op,
10021 struct value *arg1)
10022{
10023 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10024 return value_zero (ada_tag_type (arg1), not_lval);
10025
10026 return ada_value_tag (arg1);
10027}
10028
68c75735
TT
10029/* A helper function for OP_ATR_SIZE. */
10030
10031static value *
10032ada_atr_size (struct type *expect_type,
10033 struct expression *exp,
10034 enum noside noside, enum exp_opcode op,
10035 struct value *arg1)
10036{
10037 struct type *type = value_type (arg1);
10038
10039 /* If the argument is a reference, then dereference its type, since
10040 the user is really asking for the size of the actual object,
10041 not the size of the pointer. */
10042 if (type->code () == TYPE_CODE_REF)
10043 type = TYPE_TARGET_TYPE (type);
10044
10045 if (noside == EVAL_SKIP)
10046 return eval_skip_value (exp);
10047 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10048 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10049 else
10050 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10051 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10052}
10053
d05e24e6
TT
10054/* A helper function for UNOP_ABS. */
10055
10056static value *
10057ada_abs (struct type *expect_type,
10058 struct expression *exp,
10059 enum noside noside, enum exp_opcode op,
10060 struct value *arg1)
10061{
10062 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10063 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10064 return value_neg (arg1);
10065 else
10066 return arg1;
10067}
10068
faa1dfd7
TT
10069/* A helper function for BINOP_MUL. */
10070
10071static value *
10072ada_mult_binop (struct type *expect_type,
10073 struct expression *exp,
10074 enum noside noside, enum exp_opcode op,
10075 struct value *arg1, struct value *arg2)
10076{
10077 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10078 {
10079 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10080 return value_zero (value_type (arg1), not_lval);
10081 }
10082 else
10083 {
10084 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10085 return ada_value_binop (arg1, arg2, op);
10086 }
10087}
10088
214b13ac
TT
10089/* A helper function for BINOP_EQUAL and BINOP_NOTEQUAL. */
10090
10091static value *
10092ada_equal_binop (struct type *expect_type,
10093 struct expression *exp,
10094 enum noside noside, enum exp_opcode op,
10095 struct value *arg1, struct value *arg2)
10096{
10097 int tem;
10098 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10099 tem = 0;
10100 else
10101 {
10102 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10103 tem = ada_value_equal (arg1, arg2);
10104 }
10105 if (op == BINOP_NOTEQUAL)
10106 tem = !tem;
10107 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
10108 return value_from_longest (type, (LONGEST) tem);
10109}
10110
5ce19db8
TT
10111/* A helper function for TERNOP_SLICE. */
10112
10113static value *
10114ada_ternop_slice (struct expression *exp,
10115 enum noside noside,
10116 struct value *array, struct value *low_bound_val,
10117 struct value *high_bound_val)
10118{
10119 LONGEST low_bound;
10120 LONGEST high_bound;
10121
10122 low_bound_val = coerce_ref (low_bound_val);
10123 high_bound_val = coerce_ref (high_bound_val);
10124 low_bound = value_as_long (low_bound_val);
10125 high_bound = value_as_long (high_bound_val);
10126
10127 /* If this is a reference to an aligner type, then remove all
10128 the aligners. */
10129 if (value_type (array)->code () == TYPE_CODE_REF
10130 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10131 TYPE_TARGET_TYPE (value_type (array)) =
10132 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10133
10134 if (ada_is_any_packed_array_type (value_type (array)))
10135 error (_("cannot slice a packed array"));
10136
10137 /* If this is a reference to an array or an array lvalue,
10138 convert to a pointer. */
10139 if (value_type (array)->code () == TYPE_CODE_REF
10140 || (value_type (array)->code () == TYPE_CODE_ARRAY
10141 && VALUE_LVAL (array) == lval_memory))
10142 array = value_addr (array);
10143
10144 if (noside == EVAL_AVOID_SIDE_EFFECTS
10145 && ada_is_array_descriptor_type (ada_check_typedef
10146 (value_type (array))))
10147 return empty_array (ada_type_of_array (array, 0), low_bound,
10148 high_bound);
10149
10150 array = ada_coerce_to_simple_array_ptr (array);
10151
10152 /* If we have more than one level of pointer indirection,
10153 dereference the value until we get only one level. */
10154 while (value_type (array)->code () == TYPE_CODE_PTR
10155 && (TYPE_TARGET_TYPE (value_type (array))->code ()
10156 == TYPE_CODE_PTR))
10157 array = value_ind (array);
10158
10159 /* Make sure we really do have an array type before going further,
10160 to avoid a SEGV when trying to get the index type or the target
10161 type later down the road if the debug info generated by
10162 the compiler is incorrect or incomplete. */
10163 if (!ada_is_simple_array_type (value_type (array)))
10164 error (_("cannot take slice of non-array"));
10165
10166 if (ada_check_typedef (value_type (array))->code ()
10167 == TYPE_CODE_PTR)
10168 {
10169 struct type *type0 = ada_check_typedef (value_type (array));
10170
10171 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10172 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10173 else
10174 {
10175 struct type *arr_type0 =
10176 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10177
10178 return ada_value_slice_from_ptr (array, arr_type0,
10179 longest_to_int (low_bound),
10180 longest_to_int (high_bound));
10181 }
10182 }
10183 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10184 return array;
10185 else if (high_bound < low_bound)
10186 return empty_array (value_type (array), low_bound, high_bound);
10187 else
10188 return ada_value_slice (array, longest_to_int (low_bound),
10189 longest_to_int (high_bound));
10190}
10191
b467efaa
TT
10192/* A helper function for BINOP_IN_BOUNDS. */
10193
10194static value *
10195ada_binop_in_bounds (struct expression *exp, enum noside noside,
10196 struct value *arg1, struct value *arg2, int n)
10197{
10198 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10199 {
10200 struct type *type = language_bool_type (exp->language_defn,
10201 exp->gdbarch);
10202 return value_zero (type, not_lval);
10203 }
10204
10205 struct type *type = ada_index_type (value_type (arg2), n, "range");
10206 if (!type)
10207 type = value_type (arg1);
10208
10209 value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
10210 arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
10211
10212 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10213 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10214 type = language_bool_type (exp->language_defn, exp->gdbarch);
10215 return value_from_longest (type,
10216 (value_less (arg1, arg3)
10217 || value_equal (arg1, arg3))
10218 && (value_less (arg2, arg1)
10219 || value_equal (arg2, arg1)));
10220}
10221
b84564fc
TT
10222/* A helper function for some attribute operations. */
10223
10224static value *
10225ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
10226 struct value *arg1, struct type *type_arg, int tem)
10227{
10228 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10229 {
10230 if (type_arg == NULL)
10231 type_arg = value_type (arg1);
10232
10233 if (ada_is_constrained_packed_array_type (type_arg))
10234 type_arg = decode_constrained_packed_array_type (type_arg);
10235
10236 if (!discrete_type_p (type_arg))
10237 {
10238 switch (op)
10239 {
10240 default: /* Should never happen. */
10241 error (_("unexpected attribute encountered"));
10242 case OP_ATR_FIRST:
10243 case OP_ATR_LAST:
10244 type_arg = ada_index_type (type_arg, tem,
10245 ada_attribute_name (op));
10246 break;
10247 case OP_ATR_LENGTH:
10248 type_arg = builtin_type (exp->gdbarch)->builtin_int;
10249 break;
10250 }
10251 }
10252
10253 return value_zero (type_arg, not_lval);
10254 }
10255 else if (type_arg == NULL)
10256 {
10257 arg1 = ada_coerce_ref (arg1);
10258
10259 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10260 arg1 = ada_coerce_to_simple_array (arg1);
10261
10262 struct type *type;
10263 if (op == OP_ATR_LENGTH)
10264 type = builtin_type (exp->gdbarch)->builtin_int;
10265 else
10266 {
10267 type = ada_index_type (value_type (arg1), tem,
10268 ada_attribute_name (op));
10269 if (type == NULL)
10270 type = builtin_type (exp->gdbarch)->builtin_int;
10271 }
10272
10273 switch (op)
10274 {
10275 default: /* Should never happen. */
10276 error (_("unexpected attribute encountered"));
10277 case OP_ATR_FIRST:
10278 return value_from_longest
10279 (type, ada_array_bound (arg1, tem, 0));
10280 case OP_ATR_LAST:
10281 return value_from_longest
10282 (type, ada_array_bound (arg1, tem, 1));
10283 case OP_ATR_LENGTH:
10284 return value_from_longest
10285 (type, ada_array_length (arg1, tem));
10286 }
10287 }
10288 else if (discrete_type_p (type_arg))
10289 {
10290 struct type *range_type;
10291 const char *name = ada_type_name (type_arg);
10292
10293 range_type = NULL;
10294 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10295 range_type = to_fixed_range_type (type_arg, NULL);
10296 if (range_type == NULL)
10297 range_type = type_arg;
10298 switch (op)
10299 {
10300 default:
10301 error (_("unexpected attribute encountered"));
10302 case OP_ATR_FIRST:
10303 return value_from_longest
10304 (range_type, ada_discrete_type_low_bound (range_type));
10305 case OP_ATR_LAST:
10306 return value_from_longest
10307 (range_type, ada_discrete_type_high_bound (range_type));
10308 case OP_ATR_LENGTH:
10309 error (_("the 'length attribute applies only to array types"));
10310 }
10311 }
10312 else if (type_arg->code () == TYPE_CODE_FLT)
10313 error (_("unimplemented type attribute"));
10314 else
10315 {
10316 LONGEST low, high;
10317
10318 if (ada_is_constrained_packed_array_type (type_arg))
10319 type_arg = decode_constrained_packed_array_type (type_arg);
10320
10321 struct type *type;
10322 if (op == OP_ATR_LENGTH)
10323 type = builtin_type (exp->gdbarch)->builtin_int;
10324 else
10325 {
10326 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10327 if (type == NULL)
10328 type = builtin_type (exp->gdbarch)->builtin_int;
10329 }
10330
10331 switch (op)
10332 {
10333 default:
10334 error (_("unexpected attribute encountered"));
10335 case OP_ATR_FIRST:
10336 low = ada_array_bound_from_type (type_arg, tem, 0);
10337 return value_from_longest (type, low);
10338 case OP_ATR_LAST:
10339 high = ada_array_bound_from_type (type_arg, tem, 1);
10340 return value_from_longest (type, high);
10341 case OP_ATR_LENGTH:
10342 low = ada_array_bound_from_type (type_arg, tem, 0);
10343 high = ada_array_bound_from_type (type_arg, tem, 1);
10344 return value_from_longest (type, high - low + 1);
10345 }
10346 }
10347}
10348
38dc70cf
TT
10349/* A helper function for OP_ATR_MIN and OP_ATR_MAX. */
10350
10351static struct value *
10352ada_binop_minmax (struct type *expect_type,
10353 struct expression *exp,
10354 enum noside noside, enum exp_opcode op,
10355 struct value *arg1, struct value *arg2)
10356{
10357 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10358 return value_zero (value_type (arg1), not_lval);
10359 else
10360 {
10361 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10362 return value_binop (arg1, arg2,
10363 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10364 }
10365}
10366
284614f0
JB
10367/* Implement the evaluate_exp routine in the exp_descriptor structure
10368 for the Ada language. */
10369
52ce6436 10370static struct value *
ebf56fd3 10371ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
dda83cd7 10372 int *pos, enum noside noside)
14f9c5c9
AS
10373{
10374 enum exp_opcode op;
b5385fc0 10375 int tem;
14f9c5c9 10376 int pc;
5ec18f2b 10377 int preeval_pos;
14f9c5c9
AS
10378 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10379 struct type *type;
52ce6436 10380 int nargs, oplen;
d2e4a39e 10381 struct value **argvec;
14f9c5c9 10382
d2e4a39e
AS
10383 pc = *pos;
10384 *pos += 1;
14f9c5c9
AS
10385 op = exp->elts[pc].opcode;
10386
d2e4a39e 10387 switch (op)
14f9c5c9
AS
10388 {
10389 default:
10390 *pos -= 1;
6e48bd2c 10391 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10392
10393 if (noside == EVAL_NORMAL)
10394 arg1 = unwrap_value (arg1);
6e48bd2c 10395
edd079d9 10396 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
dda83cd7
SM
10397 then we need to perform the conversion manually, because
10398 evaluate_subexp_standard doesn't do it. This conversion is
10399 necessary in Ada because the different kinds of float/fixed
10400 types in Ada have different representations.
6e48bd2c 10401
dda83cd7
SM
10402 Similarly, we need to perform the conversion from OP_LONG
10403 ourselves. */
edd079d9 10404 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
dda83cd7 10405 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10406
10407 return arg1;
4c4b4cd2
PH
10408
10409 case OP_STRING:
10410 {
dda83cd7
SM
10411 struct value *result;
10412
10413 *pos -= 1;
10414 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10415 /* The result type will have code OP_STRING, bashed there from
10416 OP_ARRAY. Bash it back. */
10417 if (value_type (result)->code () == TYPE_CODE_STRING)
10418 value_type (result)->set_code (TYPE_CODE_ARRAY);
10419 return result;
4c4b4cd2 10420 }
14f9c5c9
AS
10421
10422 case UNOP_CAST:
10423 (*pos) += 2;
10424 type = exp->elts[pc + 1].type;
ced9779b 10425 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10426
4c4b4cd2
PH
10427 case UNOP_QUAL:
10428 (*pos) += 2;
10429 type = exp->elts[pc + 1].type;
10430 return ada_evaluate_subexp (type, exp, pos, noside);
10431
14f9c5c9 10432 case BINOP_ASSIGN:
fe1fe7ea 10433 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
52ce6436
PH
10434 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10435 {
10436 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10437 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10438 return arg1;
10439 return ada_value_assign (arg1, arg1);
10440 }
003f3813 10441 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
dda83cd7
SM
10442 except if the lhs of our assignment is a convenience variable.
10443 In the case of assigning to a convenience variable, the lhs
10444 should be exactly the result of the evaluation of the rhs. */
003f3813
JB
10445 type = value_type (arg1);
10446 if (VALUE_LVAL (arg1) == lval_internalvar)
dda83cd7 10447 type = NULL;
003f3813 10448 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10449 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10450 return arg1;
f411722c
TT
10451 if (VALUE_LVAL (arg1) == lval_internalvar)
10452 {
10453 /* Nothing. */
10454 }
d2e4a39e 10455 else
dda83cd7 10456 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10457 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10458
10459 case BINOP_ADD:
10460 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10461 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10462 if (noside == EVAL_SKIP)
dda83cd7 10463 goto nosideret;
78134374 10464 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10465 return (value_from_longest
10466 (value_type (arg1),
10467 value_as_long (arg1) + value_as_long (arg2)));
78134374 10468 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10469 return (value_from_longest
10470 (value_type (arg2),
10471 value_as_long (arg1) + value_as_long (arg2)));
b49180ac
TT
10472 /* Preserve the original type for use by the range case below.
10473 We cannot cast the result to a reference type, so if ARG1 is
10474 a reference type, find its underlying type. */
b7789565 10475 type = value_type (arg1);
78134374 10476 while (type->code () == TYPE_CODE_REF)
dda83cd7 10477 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10478 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10479 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10480 /* We need to special-case the result of adding to a range.
10481 This is done for the benefit of "ptype". gdb's Ada support
10482 historically used the LHS to set the result type here, so
10483 preserve this behavior. */
10484 if (type->code () == TYPE_CODE_RANGE)
10485 arg1 = value_cast (type, arg1);
10486 return arg1;
14f9c5c9
AS
10487
10488 case BINOP_SUB:
10489 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10490 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10491 if (noside == EVAL_SKIP)
dda83cd7 10492 goto nosideret;
78134374 10493 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10494 return (value_from_longest
10495 (value_type (arg1),
10496 value_as_long (arg1) - value_as_long (arg2)));
78134374 10497 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10498 return (value_from_longest
10499 (value_type (arg2),
10500 value_as_long (arg1) - value_as_long (arg2)));
b49180ac
TT
10501 /* Preserve the original type for use by the range case below.
10502 We cannot cast the result to a reference type, so if ARG1 is
10503 a reference type, find its underlying type. */
b7789565 10504 type = value_type (arg1);
78134374 10505 while (type->code () == TYPE_CODE_REF)
dda83cd7 10506 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10507 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10508 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10509 /* We need to special-case the result of adding to a range.
10510 This is done for the benefit of "ptype". gdb's Ada support
10511 historically used the LHS to set the result type here, so
10512 preserve this behavior. */
10513 if (type->code () == TYPE_CODE_RANGE)
10514 arg1 = value_cast (type, arg1);
10515 return arg1;
14f9c5c9
AS
10516
10517 case BINOP_MUL:
10518 case BINOP_DIV:
e1578042
JB
10519 case BINOP_REM:
10520 case BINOP_MOD:
fe1fe7ea
SM
10521 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10522 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10523 if (noside == EVAL_SKIP)
dda83cd7 10524 goto nosideret;
faa1dfd7
TT
10525 return ada_mult_binop (expect_type, exp, noside, op,
10526 arg1, arg2);
4c4b4cd2 10527
4c4b4cd2
PH
10528 case BINOP_EQUAL:
10529 case BINOP_NOTEQUAL:
fe1fe7ea 10530 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
df407dfe 10531 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10532 if (noside == EVAL_SKIP)
dda83cd7 10533 goto nosideret;
214b13ac 10534 return ada_equal_binop (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
10535
10536 case UNOP_NEG:
fe1fe7ea 10537 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
82390ab8 10538 return ada_unop_neg (expect_type, exp, noside, op, arg1);
4c4b4cd2 10539
2330c6c6
JB
10540 case BINOP_LOGICAL_AND:
10541 case BINOP_LOGICAL_OR:
10542 case UNOP_LOGICAL_NOT:
000d5124 10543 {
dda83cd7 10544 struct value *val;
000d5124 10545
dda83cd7
SM
10546 *pos -= 1;
10547 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1 10548 type = language_bool_type (exp->language_defn, exp->gdbarch);
dda83cd7 10549 return value_cast (type, val);
000d5124 10550 }
2330c6c6
JB
10551
10552 case BINOP_BITWISE_AND:
10553 case BINOP_BITWISE_IOR:
10554 case BINOP_BITWISE_XOR:
000d5124 10555 {
dda83cd7 10556 struct value *val;
000d5124 10557
fe1fe7ea
SM
10558 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10559 *pos = pc;
dda83cd7 10560 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
000d5124 10561
dda83cd7 10562 return value_cast (value_type (arg1), val);
000d5124 10563 }
2330c6c6 10564
14f9c5c9
AS
10565 case OP_VAR_VALUE:
10566 *pos -= 1;
6799def4 10567
14f9c5c9 10568 if (noside == EVAL_SKIP)
dda83cd7
SM
10569 {
10570 *pos += 4;
10571 goto nosideret;
10572 }
da5c522f
JB
10573
10574 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7
SM
10575 /* Only encountered when an unresolved symbol occurs in a
10576 context other than a function call, in which case, it is
10577 invalid. */
10578 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10579 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10580
10581 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10582 {
10583 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10584 /* Check to see if this is a tagged type. We also need to handle
10585 the case where the type is a reference to a tagged type, but
10586 we have to be careful to exclude pointers to tagged types.
10587 The latter should be shown as usual (as a pointer), whereas
10588 a reference should mostly be transparent to the user. */
10589 if (ada_is_tagged_type (type, 0)
10590 || (type->code () == TYPE_CODE_REF
10591 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10592 {
10593 /* Tagged types are a little special in the fact that the real
10594 type is dynamic and can only be determined by inspecting the
10595 object's tag. This means that we need to get the object's
10596 value first (EVAL_NORMAL) and then extract the actual object
10597 type from its tag.
10598
10599 Note that we cannot skip the final step where we extract
10600 the object type from its tag, because the EVAL_NORMAL phase
10601 results in dynamic components being resolved into fixed ones.
10602 This can cause problems when trying to print the type
10603 description of tagged types whose parent has a dynamic size:
10604 We use the type name of the "_parent" component in order
10605 to print the name of the ancestor type in the type description.
10606 If that component had a dynamic size, the resolution into
10607 a fixed type would result in the loss of that type name,
10608 thus preventing us from printing the name of the ancestor
10609 type in the type description. */
fe1fe7ea 10610 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
0d72a7c3 10611
78134374 10612 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10613 {
10614 struct type *actual_type;
10615
10616 actual_type = type_from_tag (ada_value_tag (arg1));
10617 if (actual_type == NULL)
10618 /* If, for some reason, we were unable to determine
10619 the actual type from the tag, then use the static
10620 approximation that we just computed as a fallback.
10621 This can happen if the debugging information is
10622 incomplete, for instance. */
10623 actual_type = type;
10624 return value_zero (actual_type, not_lval);
10625 }
10626 else
10627 {
10628 /* In the case of a ref, ada_coerce_ref takes care
10629 of determining the actual type. But the evaluation
10630 should return a ref as it should be valid to ask
10631 for its address; so rebuild a ref after coerce. */
10632 arg1 = ada_coerce_ref (arg1);
a65cfae5 10633 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10634 }
10635 }
0c1f74cf 10636
84754697
JB
10637 /* Records and unions for which GNAT encodings have been
10638 generated need to be statically fixed as well.
10639 Otherwise, non-static fixing produces a type where
10640 all dynamic properties are removed, which prevents "ptype"
10641 from being able to completely describe the type.
10642 For instance, a case statement in a variant record would be
10643 replaced by the relevant components based on the actual
10644 value of the discriminants. */
78134374 10645 if ((type->code () == TYPE_CODE_STRUCT
84754697 10646 && dynamic_template_type (type) != NULL)
78134374 10647 || (type->code () == TYPE_CODE_UNION
84754697
JB
10648 && ada_find_parallel_type (type, "___XVU") != NULL))
10649 {
10650 *pos += 4;
10651 return value_zero (to_static_fixed_type (type), not_lval);
10652 }
dda83cd7 10653 }
da5c522f
JB
10654
10655 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10656 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10657
10658 case OP_FUNCALL:
10659 (*pos) += 2;
10660
10661 /* Allocate arg vector, including space for the function to be
dda83cd7 10662 called in argvec[0] and a terminating NULL. */
4c4b4cd2 10663 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10664 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10665
10666 if (exp->elts[*pos].opcode == OP_VAR_VALUE
dda83cd7
SM
10667 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10668 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10669 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2 10670 else
dda83cd7
SM
10671 {
10672 for (tem = 0; tem <= nargs; tem += 1)
fe1fe7ea
SM
10673 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10674 argvec[tem] = 0;
4c4b4cd2 10675
dda83cd7
SM
10676 if (noside == EVAL_SKIP)
10677 goto nosideret;
10678 }
4c4b4cd2 10679
ad82864c
JB
10680 if (ada_is_constrained_packed_array_type
10681 (desc_base_type (value_type (argvec[0]))))
dda83cd7 10682 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 10683 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
dda83cd7
SM
10684 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10685 /* This is a packed array that has already been fixed, and
284614f0
JB
10686 therefore already coerced to a simple array. Nothing further
10687 to do. */
dda83cd7 10688 ;
78134374 10689 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
10690 {
10691 /* Make sure we dereference references so that all the code below
10692 feels like it's really handling the referenced value. Wrapping
10693 types (for alignment) may be there, so make sure we strip them as
10694 well. */
10695 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10696 }
78134374 10697 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
10698 && VALUE_LVAL (argvec[0]) == lval_memory)
10699 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10700
df407dfe 10701 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10702
10703 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10704 them. So, if this is an array typedef (encoding use for array
10705 access types encoded as fat pointers), strip it now. */
78134374 10706 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
10707 type = ada_typedef_target_type (type);
10708
78134374 10709 if (type->code () == TYPE_CODE_PTR)
dda83cd7
SM
10710 {
10711 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10712 {
10713 case TYPE_CODE_FUNC:
10714 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10715 break;
10716 case TYPE_CODE_ARRAY:
10717 break;
10718 case TYPE_CODE_STRUCT:
10719 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10720 argvec[0] = ada_value_ind (argvec[0]);
10721 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10722 break;
10723 default:
10724 error (_("cannot subscript or call something of type `%s'"),
10725 ada_type_name (value_type (argvec[0])));
10726 break;
10727 }
10728 }
4c4b4cd2 10729
78134374 10730 switch (type->code ())
dda83cd7
SM
10731 {
10732 case TYPE_CODE_FUNC:
10733 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10734 {
7022349d
PA
10735 if (TYPE_TARGET_TYPE (type) == NULL)
10736 error_call_unknown_return_type (NULL);
10737 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10738 }
e71585ff
PA
10739 return call_function_by_hand (argvec[0], NULL,
10740 gdb::make_array_view (argvec + 1,
10741 nargs));
c8ea1972
PH
10742 case TYPE_CODE_INTERNAL_FUNCTION:
10743 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10744 /* We don't know anything about what the internal
10745 function might return, but we have to return
10746 something. */
10747 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10748 not_lval);
10749 else
10750 return call_internal_function (exp->gdbarch, exp->language_defn,
10751 argvec[0], nargs, argvec + 1);
10752
dda83cd7
SM
10753 case TYPE_CODE_STRUCT:
10754 {
10755 int arity;
10756
10757 arity = ada_array_arity (type);
10758 type = ada_array_element_type (type, nargs);
10759 if (type == NULL)
10760 error (_("cannot subscript or call a record"));
10761 if (arity != nargs)
10762 error (_("wrong number of subscripts; expecting %d"), arity);
10763 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10764 return value_zero (ada_aligned_type (type), lval_memory);
10765 return
10766 unwrap_value (ada_value_subscript
10767 (argvec[0], nargs, argvec + 1));
10768 }
10769 case TYPE_CODE_ARRAY:
10770 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10771 {
10772 type = ada_array_element_type (type, nargs);
10773 if (type == NULL)
10774 error (_("element type of array unknown"));
10775 else
10776 return value_zero (ada_aligned_type (type), lval_memory);
10777 }
10778 return
10779 unwrap_value (ada_value_subscript
10780 (ada_coerce_to_simple_array (argvec[0]),
10781 nargs, argvec + 1));
10782 case TYPE_CODE_PTR: /* Pointer to array */
10783 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10784 {
deede10c 10785 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
dda83cd7
SM
10786 type = ada_array_element_type (type, nargs);
10787 if (type == NULL)
10788 error (_("element type of array unknown"));
10789 else
10790 return value_zero (ada_aligned_type (type), lval_memory);
10791 }
10792 return
10793 unwrap_value (ada_value_ptr_subscript (argvec[0],
deede10c 10794 nargs, argvec + 1));
4c4b4cd2 10795
dda83cd7
SM
10796 default:
10797 error (_("Attempt to index or call something other than an "
e1d5a0d2 10798 "array or function"));
dda83cd7 10799 }
4c4b4cd2
PH
10800
10801 case TERNOP_SLICE:
10802 {
fe1fe7ea
SM
10803 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10804 struct value *low_bound_val
10805 = evaluate_subexp (nullptr, exp, pos, noside);
10806 struct value *high_bound_val
10807 = evaluate_subexp (nullptr, exp, pos, noside);
dda83cd7
SM
10808
10809 if (noside == EVAL_SKIP)
10810 goto nosideret;
10811
5ce19db8
TT
10812 return ada_ternop_slice (exp, noside, array, low_bound_val,
10813 high_bound_val);
4c4b4cd2 10814 }
14f9c5c9 10815
4c4b4cd2
PH
10816 case UNOP_IN_RANGE:
10817 (*pos) += 2;
fe1fe7ea 10818 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
8008e265 10819 type = check_typedef (exp->elts[pc + 1].type);
7efc87ff 10820 return ada_unop_in_range (expect_type, exp, noside, op, arg1, type);
4c4b4cd2
PH
10821
10822 case BINOP_IN_BOUNDS:
14f9c5c9 10823 (*pos) += 2;
fe1fe7ea
SM
10824 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10825 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10826
4c4b4cd2 10827 if (noside == EVAL_SKIP)
dda83cd7 10828 goto nosideret;
14f9c5c9 10829
4c4b4cd2 10830 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10831
b467efaa 10832 return ada_binop_in_bounds (exp, noside, arg1, arg2, tem);
4c4b4cd2
PH
10833
10834 case TERNOP_IN_RANGE:
fe1fe7ea
SM
10835 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10836 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10837 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10838
62d4bd94 10839 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
4c4b4cd2
PH
10840
10841 case OP_ATR_FIRST:
10842 case OP_ATR_LAST:
10843 case OP_ATR_LENGTH:
10844 {
dda83cd7 10845 struct type *type_arg;
5b4ee69b 10846
dda83cd7
SM
10847 if (exp->elts[*pos].opcode == OP_TYPE)
10848 {
fe1fe7ea
SM
10849 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10850 arg1 = NULL;
dda83cd7
SM
10851 type_arg = check_typedef (exp->elts[pc + 2].type);
10852 }
10853 else
10854 {
fe1fe7ea
SM
10855 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10856 type_arg = NULL;
dda83cd7 10857 }
76a01679 10858
dda83cd7
SM
10859 if (exp->elts[*pos].opcode != OP_LONG)
10860 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10861 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10862 *pos += 4;
76a01679 10863
dda83cd7
SM
10864 if (noside == EVAL_SKIP)
10865 goto nosideret;
1eea4ebd 10866
b84564fc 10867 return ada_unop_atr (exp, noside, op, arg1, type_arg, tem);
14f9c5c9
AS
10868 }
10869
4c4b4cd2 10870 case OP_ATR_TAG:
fe1fe7ea 10871 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10872 if (noside == EVAL_SKIP)
dda83cd7 10873 goto nosideret;
020dbabe 10874 return ada_atr_tag (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
10875
10876 case OP_ATR_MIN:
10877 case OP_ATR_MAX:
fe1fe7ea
SM
10878 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10879 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10880 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10881 if (noside == EVAL_SKIP)
dda83cd7 10882 goto nosideret;
38dc70cf 10883 return ada_binop_minmax (expect_type, exp, noside, op, arg1, arg2);
14f9c5c9 10884
4c4b4cd2
PH
10885 case OP_ATR_MODULUS:
10886 {
dda83cd7 10887 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10888
fe1fe7ea
SM
10889 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10890 if (noside == EVAL_SKIP)
dda83cd7 10891 goto nosideret;
4c4b4cd2 10892
dda83cd7
SM
10893 if (!ada_is_modular_type (type_arg))
10894 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10895
dda83cd7
SM
10896 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10897 ada_modulus (type_arg));
4c4b4cd2
PH
10898 }
10899
10900
10901 case OP_ATR_POS:
fe1fe7ea
SM
10902 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10903 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10904 if (noside == EVAL_SKIP)
dda83cd7 10905 goto nosideret;
3cb382c9
UW
10906 type = builtin_type (exp->gdbarch)->builtin_int;
10907 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10908 return value_zero (type, not_lval);
14f9c5c9 10909 else
3cb382c9 10910 return value_pos_atr (type, arg1);
14f9c5c9 10911
4c4b4cd2 10912 case OP_ATR_SIZE:
fe1fe7ea 10913 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
68c75735 10914 return ada_atr_size (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
10915
10916 case OP_ATR_VAL:
fe1fe7ea
SM
10917 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10918 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10919 type = exp->elts[pc + 2].type;
14f9c5c9 10920 if (noside == EVAL_SKIP)
dda83cd7 10921 goto nosideret;
3848abd6 10922 return ada_val_atr (noside, type, arg1);
4c4b4cd2
PH
10923
10924 case BINOP_EXP:
fe1fe7ea
SM
10925 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10926 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10927 if (noside == EVAL_SKIP)
dda83cd7 10928 goto nosideret;
4c4b4cd2 10929 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10930 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10931 else
f44316fa
UW
10932 {
10933 /* For integer exponentiation operations,
10934 only promote the first argument. */
10935 if (is_integral_type (value_type (arg2)))
10936 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10937 else
10938 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10939
10940 return value_binop (arg1, arg2, op);
10941 }
4c4b4cd2
PH
10942
10943 case UNOP_PLUS:
fe1fe7ea 10944 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10945 if (noside == EVAL_SKIP)
dda83cd7 10946 goto nosideret;
4c4b4cd2 10947 else
dda83cd7 10948 return arg1;
4c4b4cd2
PH
10949
10950 case UNOP_ABS:
fe1fe7ea 10951 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10952 if (noside == EVAL_SKIP)
dda83cd7 10953 goto nosideret;
d05e24e6 10954 return ada_abs (expect_type, exp, noside, op, arg1);
14f9c5c9
AS
10955
10956 case UNOP_IND:
5ec18f2b 10957 preeval_pos = *pos;
fe1fe7ea 10958 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10959 if (noside == EVAL_SKIP)
dda83cd7 10960 goto nosideret;
df407dfe 10961 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10962 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10963 {
10964 if (ada_is_array_descriptor_type (type))
10965 /* GDB allows dereferencing GNAT array descriptors. */
10966 {
10967 struct type *arrType = ada_type_of_array (arg1, 0);
10968
10969 if (arrType == NULL)
10970 error (_("Attempt to dereference null array pointer."));
10971 return value_at_lazy (arrType, 0);
10972 }
10973 else if (type->code () == TYPE_CODE_PTR
10974 || type->code () == TYPE_CODE_REF
10975 /* In C you can dereference an array to get the 1st elt. */
10976 || type->code () == TYPE_CODE_ARRAY)
10977 {
10978 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10979 only be determined by inspecting the object's tag.
10980 This means that we need to evaluate completely the
10981 expression in order to get its type. */
5ec18f2b 10982
78134374
SM
10983 if ((type->code () == TYPE_CODE_REF
10984 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
10985 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10986 {
fe1fe7ea
SM
10987 arg1
10988 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
10989 type = value_type (ada_value_ind (arg1));
10990 }
10991 else
10992 {
10993 type = to_static_fixed_type
10994 (ada_aligned_type
10995 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10996 }
c1b5a1a6 10997 ada_ensure_varsize_limit (type);
dda83cd7
SM
10998 return value_zero (type, lval_memory);
10999 }
11000 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11001 {
11002 /* GDB allows dereferencing an int. */
11003 if (expect_type == NULL)
11004 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11005 lval_memory);
11006 else
11007 {
11008 expect_type =
11009 to_static_fixed_type (ada_aligned_type (expect_type));
11010 return value_zero (expect_type, lval_memory);
11011 }
11012 }
dda83cd7
SM
11013 else
11014 error (_("Attempt to take contents of a non-pointer value."));
11015 }
0963b4bd 11016 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11017 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11018
78134374 11019 if (type->code () == TYPE_CODE_INT)
dda83cd7
SM
11020 /* GDB allows dereferencing an int. If we were given
11021 the expect_type, then use that as the target type.
11022 Otherwise, assume that the target type is an int. */
11023 {
11024 if (expect_type != NULL)
96967637
JB
11025 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11026 arg1));
11027 else
11028 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11029 (CORE_ADDR) value_as_address (arg1));
dda83cd7 11030 }
6b0d7253 11031
4c4b4cd2 11032 if (ada_is_array_descriptor_type (type))
dda83cd7
SM
11033 /* GDB allows dereferencing GNAT array descriptors. */
11034 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11035 else
dda83cd7 11036 return ada_value_ind (arg1);
14f9c5c9
AS
11037
11038 case STRUCTOP_STRUCT:
11039 tem = longest_to_int (exp->elts[pc + 1].longconst);
11040 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11041 preeval_pos = *pos;
fe1fe7ea 11042 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11043 if (noside == EVAL_SKIP)
dda83cd7 11044 goto nosideret;
14f9c5c9 11045 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11046 {
11047 struct type *type1 = value_type (arg1);
5b4ee69b 11048
dda83cd7
SM
11049 if (ada_is_tagged_type (type1, 1))
11050 {
11051 type = ada_lookup_struct_elt_type (type1,
11052 &exp->elts[pc + 2].string,
11053 1, 1);
5ec18f2b
JG
11054
11055 /* If the field is not found, check if it exists in the
11056 extension of this object's type. This means that we
11057 need to evaluate completely the expression. */
11058
dda83cd7 11059 if (type == NULL)
5ec18f2b 11060 {
fe1fe7ea
SM
11061 arg1
11062 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11063 arg1 = ada_value_struct_elt (arg1,
11064 &exp->elts[pc + 2].string,
11065 0);
11066 arg1 = unwrap_value (arg1);
11067 type = value_type (ada_to_fixed_value (arg1));
11068 }
dda83cd7
SM
11069 }
11070 else
11071 type =
11072 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11073 0);
11074
11075 return value_zero (ada_aligned_type (type), lval_memory);
11076 }
14f9c5c9 11077 else
a579cd9a
MW
11078 {
11079 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11080 arg1 = unwrap_value (arg1);
11081 return ada_to_fixed_value (arg1);
11082 }
284614f0 11083
14f9c5c9 11084 case OP_TYPE:
4c4b4cd2 11085 /* The value is not supposed to be used. This is here to make it
dda83cd7 11086 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11087 (*pos) += 2;
11088 if (noside == EVAL_SKIP)
dda83cd7 11089 goto nosideret;
14f9c5c9 11090 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 11091 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11092 else
dda83cd7 11093 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11094
11095 case OP_AGGREGATE:
11096 case OP_CHOICES:
11097 case OP_OTHERS:
11098 case OP_DISCRETE_RANGE:
11099 case OP_POSITIONAL:
11100 case OP_NAME:
11101 if (noside == EVAL_NORMAL)
11102 switch (op)
11103 {
11104 case OP_NAME:
11105 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11106 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11107 case OP_AGGREGATE:
11108 error (_("Aggregates only allowed on the right of an assignment"));
11109 default:
0963b4bd
MS
11110 internal_error (__FILE__, __LINE__,
11111 _("aggregate apparently mangled"));
52ce6436
PH
11112 }
11113
11114 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11115 *pos += oplen - 1;
11116 for (tem = 0; tem < nargs; tem += 1)
11117 ada_evaluate_subexp (NULL, exp, pos, noside);
11118 goto nosideret;
14f9c5c9
AS
11119 }
11120
11121nosideret:
ced9779b 11122 return eval_skip_value (exp);
14f9c5c9 11123}
14f9c5c9 11124\f
d2e4a39e 11125
4c4b4cd2
PH
11126/* Return non-zero iff TYPE represents a System.Address type. */
11127
11128int
11129ada_is_system_address_type (struct type *type)
11130{
7d93a1e0 11131 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11132}
11133
14f9c5c9 11134\f
d2e4a39e 11135
dda83cd7 11136 /* Range types */
14f9c5c9
AS
11137
11138/* Scan STR beginning at position K for a discriminant name, and
11139 return the value of that discriminant field of DVAL in *PX. If
11140 PNEW_K is not null, put the position of the character beyond the
11141 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11142 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11143
11144static int
108d56a4 11145scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
dda83cd7 11146 int *pnew_k)
14f9c5c9 11147{
5f9febe0 11148 static std::string storage;
5da1a4d3 11149 const char *pstart, *pend, *bound;
d2e4a39e 11150 struct value *bound_val;
14f9c5c9
AS
11151
11152 if (dval == NULL || str == NULL || str[k] == '\0')
11153 return 0;
11154
5da1a4d3
SM
11155 pstart = str + k;
11156 pend = strstr (pstart, "__");
14f9c5c9
AS
11157 if (pend == NULL)
11158 {
5da1a4d3 11159 bound = pstart;
14f9c5c9
AS
11160 k += strlen (bound);
11161 }
d2e4a39e 11162 else
14f9c5c9 11163 {
5da1a4d3
SM
11164 int len = pend - pstart;
11165
11166 /* Strip __ and beyond. */
5f9febe0
TT
11167 storage = std::string (pstart, len);
11168 bound = storage.c_str ();
d2e4a39e 11169 k = pend - str;
14f9c5c9 11170 }
d2e4a39e 11171
df407dfe 11172 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11173 if (bound_val == NULL)
11174 return 0;
11175
11176 *px = value_as_long (bound_val);
11177 if (pnew_k != NULL)
11178 *pnew_k = k;
11179 return 1;
11180}
11181
25a1127b
TT
11182/* Value of variable named NAME. Only exact matches are considered.
11183 If no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11184 otherwise causes an error with message ERR_MSG. */
11185
d2e4a39e 11186static struct value *
edb0c9cb 11187get_var_value (const char *name, const char *err_msg)
14f9c5c9 11188{
25a1127b
TT
11189 std::string quoted_name = add_angle_brackets (name);
11190
11191 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
14f9c5c9 11192
d1183b06
TT
11193 std::vector<struct block_symbol> syms
11194 = ada_lookup_symbol_list_worker (lookup_name,
11195 get_selected_block (0),
11196 VAR_DOMAIN, 1);
14f9c5c9 11197
d1183b06 11198 if (syms.size () != 1)
14f9c5c9
AS
11199 {
11200 if (err_msg == NULL)
dda83cd7 11201 return 0;
14f9c5c9 11202 else
dda83cd7 11203 error (("%s"), err_msg);
14f9c5c9
AS
11204 }
11205
54d343a2 11206 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11207}
d2e4a39e 11208
edb0c9cb
PA
11209/* Value of integer variable named NAME in the current environment.
11210 If no such variable is found, returns false. Otherwise, sets VALUE
11211 to the variable's value and returns true. */
4c4b4cd2 11212
edb0c9cb
PA
11213bool
11214get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11215{
4c4b4cd2 11216 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11217
14f9c5c9 11218 if (var_val == 0)
edb0c9cb
PA
11219 return false;
11220
11221 value = value_as_long (var_val);
11222 return true;
14f9c5c9 11223}
d2e4a39e 11224
14f9c5c9
AS
11225
11226/* Return a range type whose base type is that of the range type named
11227 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11228 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11229 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11230 corresponding range type from debug information; fall back to using it
11231 if symbol lookup fails. If a new type must be created, allocate it
11232 like ORIG_TYPE was. The bounds information, in general, is encoded
11233 in NAME, the base type given in the named range type. */
14f9c5c9 11234
d2e4a39e 11235static struct type *
28c85d6c 11236to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11237{
0d5cff50 11238 const char *name;
14f9c5c9 11239 struct type *base_type;
108d56a4 11240 const char *subtype_info;
14f9c5c9 11241
28c85d6c 11242 gdb_assert (raw_type != NULL);
7d93a1e0 11243 gdb_assert (raw_type->name () != NULL);
dddfab26 11244
78134374 11245 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11246 base_type = TYPE_TARGET_TYPE (raw_type);
11247 else
11248 base_type = raw_type;
11249
7d93a1e0 11250 name = raw_type->name ();
14f9c5c9
AS
11251 subtype_info = strstr (name, "___XD");
11252 if (subtype_info == NULL)
690cc4eb 11253 {
43bbcdc2
PH
11254 LONGEST L = ada_discrete_type_low_bound (raw_type);
11255 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11256
690cc4eb
PH
11257 if (L < INT_MIN || U > INT_MAX)
11258 return raw_type;
11259 else
0c9c3474
SA
11260 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11261 L, U);
690cc4eb 11262 }
14f9c5c9
AS
11263 else
11264 {
14f9c5c9
AS
11265 int prefix_len = subtype_info - name;
11266 LONGEST L, U;
11267 struct type *type;
108d56a4 11268 const char *bounds_str;
14f9c5c9
AS
11269 int n;
11270
14f9c5c9
AS
11271 subtype_info += 5;
11272 bounds_str = strchr (subtype_info, '_');
11273 n = 1;
11274
d2e4a39e 11275 if (*subtype_info == 'L')
dda83cd7
SM
11276 {
11277 if (!ada_scan_number (bounds_str, n, &L, &n)
11278 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11279 return raw_type;
11280 if (bounds_str[n] == '_')
11281 n += 2;
11282 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11283 n += 1;
11284 subtype_info += 1;
11285 }
d2e4a39e 11286 else
dda83cd7 11287 {
5f9febe0
TT
11288 std::string name_buf = std::string (name, prefix_len) + "___L";
11289 if (!get_int_var_value (name_buf.c_str (), L))
dda83cd7
SM
11290 {
11291 lim_warning (_("Unknown lower bound, using 1."));
11292 L = 1;
11293 }
11294 }
14f9c5c9 11295
d2e4a39e 11296 if (*subtype_info == 'U')
dda83cd7
SM
11297 {
11298 if (!ada_scan_number (bounds_str, n, &U, &n)
11299 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11300 return raw_type;
11301 }
d2e4a39e 11302 else
dda83cd7 11303 {
5f9febe0
TT
11304 std::string name_buf = std::string (name, prefix_len) + "___U";
11305 if (!get_int_var_value (name_buf.c_str (), U))
dda83cd7
SM
11306 {
11307 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11308 U = L;
11309 }
11310 }
14f9c5c9 11311
0c9c3474
SA
11312 type = create_static_range_type (alloc_type_copy (raw_type),
11313 base_type, L, U);
f5a91472 11314 /* create_static_range_type alters the resulting type's length
dda83cd7
SM
11315 to match the size of the base_type, which is not what we want.
11316 Set it back to the original range type's length. */
f5a91472 11317 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11318 type->set_name (name);
14f9c5c9
AS
11319 return type;
11320 }
11321}
11322
4c4b4cd2
PH
11323/* True iff NAME is the name of a range type. */
11324
14f9c5c9 11325int
d2e4a39e 11326ada_is_range_type_name (const char *name)
14f9c5c9
AS
11327{
11328 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11329}
14f9c5c9 11330\f
d2e4a39e 11331
dda83cd7 11332 /* Modular types */
4c4b4cd2
PH
11333
11334/* True iff TYPE is an Ada modular type. */
14f9c5c9 11335
14f9c5c9 11336int
d2e4a39e 11337ada_is_modular_type (struct type *type)
14f9c5c9 11338{
18af8284 11339 struct type *subranged_type = get_base_type (type);
14f9c5c9 11340
78134374 11341 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
dda83cd7
SM
11342 && subranged_type->code () == TYPE_CODE_INT
11343 && subranged_type->is_unsigned ());
14f9c5c9
AS
11344}
11345
4c4b4cd2
PH
11346/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11347
61ee279c 11348ULONGEST
0056e4d5 11349ada_modulus (struct type *type)
14f9c5c9 11350{
5e500d33
SM
11351 const dynamic_prop &high = type->bounds ()->high;
11352
11353 if (high.kind () == PROP_CONST)
11354 return (ULONGEST) high.const_val () + 1;
11355
11356 /* If TYPE is unresolved, the high bound might be a location list. Return
11357 0, for lack of a better value to return. */
11358 return 0;
14f9c5c9 11359}
d2e4a39e 11360\f
f7f9143b
JB
11361
11362/* Ada exception catchpoint support:
11363 ---------------------------------
11364
11365 We support 3 kinds of exception catchpoints:
11366 . catchpoints on Ada exceptions
11367 . catchpoints on unhandled Ada exceptions
11368 . catchpoints on failed assertions
11369
11370 Exceptions raised during failed assertions, or unhandled exceptions
11371 could perfectly be caught with the general catchpoint on Ada exceptions.
11372 However, we can easily differentiate these two special cases, and having
11373 the option to distinguish these two cases from the rest can be useful
11374 to zero-in on certain situations.
11375
11376 Exception catchpoints are a specialized form of breakpoint,
11377 since they rely on inserting breakpoints inside known routines
11378 of the GNAT runtime. The implementation therefore uses a standard
11379 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11380 of breakpoint_ops.
11381
0259addd
JB
11382 Support in the runtime for exception catchpoints have been changed
11383 a few times already, and these changes affect the implementation
11384 of these catchpoints. In order to be able to support several
11385 variants of the runtime, we use a sniffer that will determine
28010a5d 11386 the runtime variant used by the program being debugged. */
f7f9143b 11387
82eacd52
JB
11388/* Ada's standard exceptions.
11389
11390 The Ada 83 standard also defined Numeric_Error. But there so many
11391 situations where it was unclear from the Ada 83 Reference Manual
11392 (RM) whether Constraint_Error or Numeric_Error should be raised,
11393 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11394 Interpretation saying that anytime the RM says that Numeric_Error
11395 should be raised, the implementation may raise Constraint_Error.
11396 Ada 95 went one step further and pretty much removed Numeric_Error
11397 from the list of standard exceptions (it made it a renaming of
11398 Constraint_Error, to help preserve compatibility when compiling
11399 an Ada83 compiler). As such, we do not include Numeric_Error from
11400 this list of standard exceptions. */
3d0b0fa3 11401
27087b7f 11402static const char * const standard_exc[] = {
3d0b0fa3
JB
11403 "constraint_error",
11404 "program_error",
11405 "storage_error",
11406 "tasking_error"
11407};
11408
0259addd
JB
11409typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11410
11411/* A structure that describes how to support exception catchpoints
11412 for a given executable. */
11413
11414struct exception_support_info
11415{
11416 /* The name of the symbol to break on in order to insert
11417 a catchpoint on exceptions. */
11418 const char *catch_exception_sym;
11419
11420 /* The name of the symbol to break on in order to insert
11421 a catchpoint on unhandled exceptions. */
11422 const char *catch_exception_unhandled_sym;
11423
11424 /* The name of the symbol to break on in order to insert
11425 a catchpoint on failed assertions. */
11426 const char *catch_assert_sym;
11427
9f757bf7
XR
11428 /* The name of the symbol to break on in order to insert
11429 a catchpoint on exception handling. */
11430 const char *catch_handlers_sym;
11431
0259addd
JB
11432 /* Assuming that the inferior just triggered an unhandled exception
11433 catchpoint, this function is responsible for returning the address
11434 in inferior memory where the name of that exception is stored.
11435 Return zero if the address could not be computed. */
11436 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11437};
11438
11439static CORE_ADDR ada_unhandled_exception_name_addr (void);
11440static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11441
11442/* The following exception support info structure describes how to
11443 implement exception catchpoints with the latest version of the
ca683e3a 11444 Ada runtime (as of 2019-08-??). */
0259addd
JB
11445
11446static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11447{
11448 "__gnat_debug_raise_exception", /* catch_exception_sym */
11449 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11450 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11451 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11452 ada_unhandled_exception_name_addr
11453};
11454
11455/* The following exception support info structure describes how to
11456 implement exception catchpoints with an earlier version of the
11457 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11458
11459static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11460{
11461 "__gnat_debug_raise_exception", /* catch_exception_sym */
11462 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11463 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11464 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11465 ada_unhandled_exception_name_addr
11466};
11467
11468/* The following exception support info structure describes how to
11469 implement exception catchpoints with a slightly older version
11470 of the Ada runtime. */
11471
11472static const struct exception_support_info exception_support_info_fallback =
11473{
11474 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11475 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11476 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11477 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11478 ada_unhandled_exception_name_addr_from_raise
11479};
11480
f17011e0
JB
11481/* Return nonzero if we can detect the exception support routines
11482 described in EINFO.
11483
11484 This function errors out if an abnormal situation is detected
11485 (for instance, if we find the exception support routines, but
11486 that support is found to be incomplete). */
11487
11488static int
11489ada_has_this_exception_support (const struct exception_support_info *einfo)
11490{
11491 struct symbol *sym;
11492
11493 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11494 that should be compiled with debugging information. As a result, we
11495 expect to find that symbol in the symtabs. */
11496
11497 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11498 if (sym == NULL)
a6af7abe
JB
11499 {
11500 /* Perhaps we did not find our symbol because the Ada runtime was
11501 compiled without debugging info, or simply stripped of it.
11502 It happens on some GNU/Linux distributions for instance, where
11503 users have to install a separate debug package in order to get
11504 the runtime's debugging info. In that situation, let the user
11505 know why we cannot insert an Ada exception catchpoint.
11506
11507 Note: Just for the purpose of inserting our Ada exception
11508 catchpoint, we could rely purely on the associated minimal symbol.
11509 But we would be operating in degraded mode anyway, since we are
11510 still lacking the debugging info needed later on to extract
11511 the name of the exception being raised (this name is printed in
11512 the catchpoint message, and is also used when trying to catch
11513 a specific exception). We do not handle this case for now. */
3b7344d5 11514 struct bound_minimal_symbol msym
1c8e84b0
JB
11515 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11516
3b7344d5 11517 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11518 error (_("Your Ada runtime appears to be missing some debugging "
11519 "information.\nCannot insert Ada exception catchpoint "
11520 "in this configuration."));
11521
11522 return 0;
11523 }
f17011e0
JB
11524
11525 /* Make sure that the symbol we found corresponds to a function. */
11526
11527 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11528 {
11529 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11530 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11531 return 0;
11532 }
11533
11534 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11535 if (sym == NULL)
11536 {
11537 struct bound_minimal_symbol msym
11538 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11539
11540 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11541 error (_("Your Ada runtime appears to be missing some debugging "
11542 "information.\nCannot insert Ada exception catchpoint "
11543 "in this configuration."));
11544
11545 return 0;
11546 }
11547
11548 /* Make sure that the symbol we found corresponds to a function. */
11549
11550 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11551 {
11552 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11553 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11554 return 0;
11555 }
f17011e0
JB
11556
11557 return 1;
11558}
11559
0259addd
JB
11560/* Inspect the Ada runtime and determine which exception info structure
11561 should be used to provide support for exception catchpoints.
11562
3eecfa55
JB
11563 This function will always set the per-inferior exception_info,
11564 or raise an error. */
0259addd
JB
11565
11566static void
11567ada_exception_support_info_sniffer (void)
11568{
3eecfa55 11569 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11570
11571 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11572 if (data->exception_info != NULL)
0259addd
JB
11573 return;
11574
11575 /* Check the latest (default) exception support info. */
f17011e0 11576 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11577 {
3eecfa55 11578 data->exception_info = &default_exception_support_info;
0259addd
JB
11579 return;
11580 }
11581
ca683e3a
AO
11582 /* Try the v0 exception suport info. */
11583 if (ada_has_this_exception_support (&exception_support_info_v0))
11584 {
11585 data->exception_info = &exception_support_info_v0;
11586 return;
11587 }
11588
0259addd 11589 /* Try our fallback exception suport info. */
f17011e0 11590 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11591 {
3eecfa55 11592 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11593 return;
11594 }
11595
11596 /* Sometimes, it is normal for us to not be able to find the routine
11597 we are looking for. This happens when the program is linked with
11598 the shared version of the GNAT runtime, and the program has not been
11599 started yet. Inform the user of these two possible causes if
11600 applicable. */
11601
ccefe4c4 11602 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11603 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11604
11605 /* If the symbol does not exist, then check that the program is
11606 already started, to make sure that shared libraries have been
11607 loaded. If it is not started, this may mean that the symbol is
11608 in a shared library. */
11609
e99b03dc 11610 if (inferior_ptid.pid () == 0)
0259addd
JB
11611 error (_("Unable to insert catchpoint. Try to start the program first."));
11612
11613 /* At this point, we know that we are debugging an Ada program and
11614 that the inferior has been started, but we still are not able to
0963b4bd 11615 find the run-time symbols. That can mean that we are in
0259addd
JB
11616 configurable run time mode, or that a-except as been optimized
11617 out by the linker... In any case, at this point it is not worth
11618 supporting this feature. */
11619
7dda8cff 11620 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11621}
11622
f7f9143b
JB
11623/* True iff FRAME is very likely to be that of a function that is
11624 part of the runtime system. This is all very heuristic, but is
11625 intended to be used as advice as to what frames are uninteresting
11626 to most users. */
11627
11628static int
11629is_known_support_routine (struct frame_info *frame)
11630{
692465f1 11631 enum language func_lang;
f7f9143b 11632 int i;
f35a17b5 11633 const char *fullname;
f7f9143b 11634
4ed6b5be
JB
11635 /* If this code does not have any debugging information (no symtab),
11636 This cannot be any user code. */
f7f9143b 11637
51abb421 11638 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11639 if (sal.symtab == NULL)
11640 return 1;
11641
4ed6b5be
JB
11642 /* If there is a symtab, but the associated source file cannot be
11643 located, then assume this is not user code: Selecting a frame
11644 for which we cannot display the code would not be very helpful
11645 for the user. This should also take care of case such as VxWorks
11646 where the kernel has some debugging info provided for a few units. */
f7f9143b 11647
f35a17b5
JK
11648 fullname = symtab_to_fullname (sal.symtab);
11649 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11650 return 1;
11651
85102364 11652 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
11653 We also check the name of the objfile against the name of some
11654 known system libraries that sometimes come with debugging info
11655 too. */
11656
f7f9143b
JB
11657 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11658 {
11659 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11660 if (re_exec (lbasename (sal.symtab->filename)))
dda83cd7 11661 return 1;
eb822aa6 11662 if (SYMTAB_OBJFILE (sal.symtab) != NULL
dda83cd7
SM
11663 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11664 return 1;
f7f9143b
JB
11665 }
11666
4ed6b5be 11667 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11668
c6dc63a1
TT
11669 gdb::unique_xmalloc_ptr<char> func_name
11670 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
11671 if (func_name == NULL)
11672 return 1;
11673
11674 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11675 {
11676 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
11677 if (re_exec (func_name.get ()))
11678 return 1;
f7f9143b
JB
11679 }
11680
11681 return 0;
11682}
11683
11684/* Find the first frame that contains debugging information and that is not
11685 part of the Ada run-time, starting from FI and moving upward. */
11686
0ef643c8 11687void
f7f9143b
JB
11688ada_find_printable_frame (struct frame_info *fi)
11689{
11690 for (; fi != NULL; fi = get_prev_frame (fi))
11691 {
11692 if (!is_known_support_routine (fi))
dda83cd7
SM
11693 {
11694 select_frame (fi);
11695 break;
11696 }
f7f9143b
JB
11697 }
11698
11699}
11700
11701/* Assuming that the inferior just triggered an unhandled exception
11702 catchpoint, return the address in inferior memory where the name
11703 of the exception is stored.
11704
11705 Return zero if the address could not be computed. */
11706
11707static CORE_ADDR
11708ada_unhandled_exception_name_addr (void)
0259addd
JB
11709{
11710 return parse_and_eval_address ("e.full_name");
11711}
11712
11713/* Same as ada_unhandled_exception_name_addr, except that this function
11714 should be used when the inferior uses an older version of the runtime,
11715 where the exception name needs to be extracted from a specific frame
11716 several frames up in the callstack. */
11717
11718static CORE_ADDR
11719ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11720{
11721 int frame_level;
11722 struct frame_info *fi;
3eecfa55 11723 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
11724
11725 /* To determine the name of this exception, we need to select
11726 the frame corresponding to RAISE_SYM_NAME. This frame is
11727 at least 3 levels up, so we simply skip the first 3 frames
11728 without checking the name of their associated function. */
11729 fi = get_current_frame ();
11730 for (frame_level = 0; frame_level < 3; frame_level += 1)
11731 if (fi != NULL)
11732 fi = get_prev_frame (fi);
11733
11734 while (fi != NULL)
11735 {
692465f1
JB
11736 enum language func_lang;
11737
c6dc63a1
TT
11738 gdb::unique_xmalloc_ptr<char> func_name
11739 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
11740 if (func_name != NULL)
11741 {
dda83cd7 11742 if (strcmp (func_name.get (),
55b87a52
KS
11743 data->exception_info->catch_exception_sym) == 0)
11744 break; /* We found the frame we were looking for... */
55b87a52 11745 }
fb44b1a7 11746 fi = get_prev_frame (fi);
f7f9143b
JB
11747 }
11748
11749 if (fi == NULL)
11750 return 0;
11751
11752 select_frame (fi);
11753 return parse_and_eval_address ("id.full_name");
11754}
11755
11756/* Assuming the inferior just triggered an Ada exception catchpoint
11757 (of any type), return the address in inferior memory where the name
11758 of the exception is stored, if applicable.
11759
45db7c09
PA
11760 Assumes the selected frame is the current frame.
11761
f7f9143b
JB
11762 Return zero if the address could not be computed, or if not relevant. */
11763
11764static CORE_ADDR
761269c8 11765ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
dda83cd7 11766 struct breakpoint *b)
f7f9143b 11767{
3eecfa55
JB
11768 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11769
f7f9143b
JB
11770 switch (ex)
11771 {
761269c8 11772 case ada_catch_exception:
dda83cd7
SM
11773 return (parse_and_eval_address ("e.full_name"));
11774 break;
f7f9143b 11775
761269c8 11776 case ada_catch_exception_unhandled:
dda83cd7
SM
11777 return data->exception_info->unhandled_exception_name_addr ();
11778 break;
9f757bf7
XR
11779
11780 case ada_catch_handlers:
dda83cd7 11781 return 0; /* The runtimes does not provide access to the exception
9f757bf7 11782 name. */
dda83cd7 11783 break;
9f757bf7 11784
761269c8 11785 case ada_catch_assert:
dda83cd7
SM
11786 return 0; /* Exception name is not relevant in this case. */
11787 break;
f7f9143b
JB
11788
11789 default:
dda83cd7
SM
11790 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11791 break;
f7f9143b
JB
11792 }
11793
11794 return 0; /* Should never be reached. */
11795}
11796
e547c119
JB
11797/* Assuming the inferior is stopped at an exception catchpoint,
11798 return the message which was associated to the exception, if
11799 available. Return NULL if the message could not be retrieved.
11800
e547c119
JB
11801 Note: The exception message can be associated to an exception
11802 either through the use of the Raise_Exception function, or
11803 more simply (Ada 2005 and later), via:
11804
11805 raise Exception_Name with "exception message";
11806
11807 */
11808
6f46ac85 11809static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11810ada_exception_message_1 (void)
11811{
11812 struct value *e_msg_val;
e547c119 11813 int e_msg_len;
e547c119
JB
11814
11815 /* For runtimes that support this feature, the exception message
11816 is passed as an unbounded string argument called "message". */
11817 e_msg_val = parse_and_eval ("message");
11818 if (e_msg_val == NULL)
11819 return NULL; /* Exception message not supported. */
11820
11821 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11822 gdb_assert (e_msg_val != NULL);
11823 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11824
11825 /* If the message string is empty, then treat it as if there was
11826 no exception message. */
11827 if (e_msg_len <= 0)
11828 return NULL;
11829
15f3b077
TT
11830 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11831 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11832 e_msg_len);
11833 e_msg.get ()[e_msg_len] = '\0';
11834
11835 return e_msg;
e547c119
JB
11836}
11837
11838/* Same as ada_exception_message_1, except that all exceptions are
11839 contained here (returning NULL instead). */
11840
6f46ac85 11841static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11842ada_exception_message (void)
11843{
6f46ac85 11844 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 11845
a70b8144 11846 try
e547c119
JB
11847 {
11848 e_msg = ada_exception_message_1 ();
11849 }
230d2906 11850 catch (const gdb_exception_error &e)
e547c119 11851 {
6f46ac85 11852 e_msg.reset (nullptr);
e547c119 11853 }
e547c119
JB
11854
11855 return e_msg;
11856}
11857
f7f9143b
JB
11858/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11859 any error that ada_exception_name_addr_1 might cause to be thrown.
11860 When an error is intercepted, a warning with the error message is printed,
11861 and zero is returned. */
11862
11863static CORE_ADDR
761269c8 11864ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
dda83cd7 11865 struct breakpoint *b)
f7f9143b 11866{
f7f9143b
JB
11867 CORE_ADDR result = 0;
11868
a70b8144 11869 try
f7f9143b
JB
11870 {
11871 result = ada_exception_name_addr_1 (ex, b);
11872 }
11873
230d2906 11874 catch (const gdb_exception_error &e)
f7f9143b 11875 {
3d6e9d23 11876 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
11877 return 0;
11878 }
11879
11880 return result;
11881}
11882
cb7de75e 11883static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
11884 (const char *excep_string,
11885 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
11886
11887/* Ada catchpoints.
11888
11889 In the case of catchpoints on Ada exceptions, the catchpoint will
11890 stop the target on every exception the program throws. When a user
11891 specifies the name of a specific exception, we translate this
11892 request into a condition expression (in text form), and then parse
11893 it into an expression stored in each of the catchpoint's locations.
11894 We then use this condition to check whether the exception that was
11895 raised is the one the user is interested in. If not, then the
11896 target is resumed again. We store the name of the requested
11897 exception, in order to be able to re-set the condition expression
11898 when symbols change. */
11899
11900/* An instance of this type is used to represent an Ada catchpoint
5625a286 11901 breakpoint location. */
28010a5d 11902
5625a286 11903class ada_catchpoint_location : public bp_location
28010a5d 11904{
5625a286 11905public:
5f486660 11906 ada_catchpoint_location (breakpoint *owner)
f06f1252 11907 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 11908 {}
28010a5d
PA
11909
11910 /* The condition that checks whether the exception that was raised
11911 is the specific exception the user specified on catchpoint
11912 creation. */
4d01a485 11913 expression_up excep_cond_expr;
28010a5d
PA
11914};
11915
c1fc2657 11916/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 11917
c1fc2657 11918struct ada_catchpoint : public breakpoint
28010a5d 11919{
37f6a7f4
TT
11920 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
11921 : m_kind (kind)
11922 {
11923 }
11924
28010a5d 11925 /* The name of the specific exception the user specified. */
bc18fbb5 11926 std::string excep_string;
37f6a7f4
TT
11927
11928 /* What kind of catchpoint this is. */
11929 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
11930};
11931
11932/* Parse the exception condition string in the context of each of the
11933 catchpoint's locations, and store them for later evaluation. */
11934
11935static void
9f757bf7 11936create_excep_cond_exprs (struct ada_catchpoint *c,
dda83cd7 11937 enum ada_exception_catchpoint_kind ex)
28010a5d 11938{
fccf9de1
TT
11939 struct bp_location *bl;
11940
28010a5d 11941 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 11942 if (c->excep_string.empty ())
28010a5d
PA
11943 return;
11944
11945 /* Same if there are no locations... */
c1fc2657 11946 if (c->loc == NULL)
28010a5d
PA
11947 return;
11948
fccf9de1
TT
11949 /* Compute the condition expression in text form, from the specific
11950 expection we want to catch. */
11951 std::string cond_string
11952 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 11953
fccf9de1
TT
11954 /* Iterate over all the catchpoint's locations, and parse an
11955 expression for each. */
11956 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
11957 {
11958 struct ada_catchpoint_location *ada_loc
fccf9de1 11959 = (struct ada_catchpoint_location *) bl;
4d01a485 11960 expression_up exp;
28010a5d 11961
fccf9de1 11962 if (!bl->shlib_disabled)
28010a5d 11963 {
bbc13ae3 11964 const char *s;
28010a5d 11965
cb7de75e 11966 s = cond_string.c_str ();
a70b8144 11967 try
28010a5d 11968 {
fccf9de1
TT
11969 exp = parse_exp_1 (&s, bl->address,
11970 block_for_pc (bl->address),
036e657b 11971 0);
28010a5d 11972 }
230d2906 11973 catch (const gdb_exception_error &e)
849f2b52
JB
11974 {
11975 warning (_("failed to reevaluate internal exception condition "
11976 "for catchpoint %d: %s"),
3d6e9d23 11977 c->number, e.what ());
849f2b52 11978 }
28010a5d
PA
11979 }
11980
b22e99fd 11981 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 11982 }
28010a5d
PA
11983}
11984
28010a5d
PA
11985/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11986 structure for all exception catchpoint kinds. */
11987
11988static struct bp_location *
37f6a7f4 11989allocate_location_exception (struct breakpoint *self)
28010a5d 11990{
5f486660 11991 return new ada_catchpoint_location (self);
28010a5d
PA
11992}
11993
11994/* Implement the RE_SET method in the breakpoint_ops structure for all
11995 exception catchpoint kinds. */
11996
11997static void
37f6a7f4 11998re_set_exception (struct breakpoint *b)
28010a5d
PA
11999{
12000 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12001
12002 /* Call the base class's method. This updates the catchpoint's
12003 locations. */
2060206e 12004 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12005
12006 /* Reparse the exception conditional expressions. One for each
12007 location. */
37f6a7f4 12008 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12009}
12010
12011/* Returns true if we should stop for this breakpoint hit. If the
12012 user specified a specific exception, we only want to cause a stop
12013 if the program thrown that exception. */
12014
12015static int
12016should_stop_exception (const struct bp_location *bl)
12017{
12018 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12019 const struct ada_catchpoint_location *ada_loc
12020 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12021 int stop;
12022
37f6a7f4
TT
12023 struct internalvar *var = lookup_internalvar ("_ada_exception");
12024 if (c->m_kind == ada_catch_assert)
12025 clear_internalvar (var);
12026 else
12027 {
12028 try
12029 {
12030 const char *expr;
12031
12032 if (c->m_kind == ada_catch_handlers)
12033 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12034 ".all.occurrence.id");
12035 else
12036 expr = "e";
12037
12038 struct value *exc = parse_and_eval (expr);
12039 set_internalvar (var, exc);
12040 }
12041 catch (const gdb_exception_error &ex)
12042 {
12043 clear_internalvar (var);
12044 }
12045 }
12046
28010a5d 12047 /* With no specific exception, should always stop. */
bc18fbb5 12048 if (c->excep_string.empty ())
28010a5d
PA
12049 return 1;
12050
12051 if (ada_loc->excep_cond_expr == NULL)
12052 {
12053 /* We will have a NULL expression if back when we were creating
12054 the expressions, this location's had failed to parse. */
12055 return 1;
12056 }
12057
12058 stop = 1;
a70b8144 12059 try
28010a5d
PA
12060 {
12061 struct value *mark;
12062
12063 mark = value_mark ();
4d01a485 12064 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12065 value_free_to_mark (mark);
12066 }
230d2906 12067 catch (const gdb_exception &ex)
492d29ea
PA
12068 {
12069 exception_fprintf (gdb_stderr, ex,
12070 _("Error in testing exception condition:\n"));
12071 }
492d29ea 12072
28010a5d
PA
12073 return stop;
12074}
12075
12076/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12077 for all exception catchpoint kinds. */
12078
12079static void
37f6a7f4 12080check_status_exception (bpstat bs)
28010a5d 12081{
b6433ede 12082 bs->stop = should_stop_exception (bs->bp_location_at.get ());
28010a5d
PA
12083}
12084
f7f9143b
JB
12085/* Implement the PRINT_IT method in the breakpoint_ops structure
12086 for all exception catchpoint kinds. */
12087
12088static enum print_stop_action
37f6a7f4 12089print_it_exception (bpstat bs)
f7f9143b 12090{
79a45e25 12091 struct ui_out *uiout = current_uiout;
348d480f
PA
12092 struct breakpoint *b = bs->breakpoint_at;
12093
956a9fb9 12094 annotate_catchpoint (b->number);
f7f9143b 12095
112e8700 12096 if (uiout->is_mi_like_p ())
f7f9143b 12097 {
112e8700 12098 uiout->field_string ("reason",
956a9fb9 12099 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12100 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12101 }
12102
112e8700
SM
12103 uiout->text (b->disposition == disp_del
12104 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12105 uiout->field_signed ("bkptno", b->number);
112e8700 12106 uiout->text (", ");
f7f9143b 12107
45db7c09
PA
12108 /* ada_exception_name_addr relies on the selected frame being the
12109 current frame. Need to do this here because this function may be
12110 called more than once when printing a stop, and below, we'll
12111 select the first frame past the Ada run-time (see
12112 ada_find_printable_frame). */
12113 select_frame (get_current_frame ());
12114
37f6a7f4
TT
12115 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12116 switch (c->m_kind)
f7f9143b 12117 {
761269c8
JB
12118 case ada_catch_exception:
12119 case ada_catch_exception_unhandled:
9f757bf7 12120 case ada_catch_handlers:
956a9fb9 12121 {
37f6a7f4 12122 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12123 char exception_name[256];
12124
12125 if (addr != 0)
12126 {
c714b426
PA
12127 read_memory (addr, (gdb_byte *) exception_name,
12128 sizeof (exception_name) - 1);
956a9fb9
JB
12129 exception_name [sizeof (exception_name) - 1] = '\0';
12130 }
12131 else
12132 {
12133 /* For some reason, we were unable to read the exception
12134 name. This could happen if the Runtime was compiled
12135 without debugging info, for instance. In that case,
12136 just replace the exception name by the generic string
12137 "exception" - it will read as "an exception" in the
12138 notification we are about to print. */
967cff16 12139 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12140 }
12141 /* In the case of unhandled exception breakpoints, we print
12142 the exception name as "unhandled EXCEPTION_NAME", to make
12143 it clearer to the user which kind of catchpoint just got
12144 hit. We used ui_out_text to make sure that this extra
12145 info does not pollute the exception name in the MI case. */
37f6a7f4 12146 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12147 uiout->text ("unhandled ");
12148 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12149 }
12150 break;
761269c8 12151 case ada_catch_assert:
956a9fb9
JB
12152 /* In this case, the name of the exception is not really
12153 important. Just print "failed assertion" to make it clearer
12154 that his program just hit an assertion-failure catchpoint.
12155 We used ui_out_text because this info does not belong in
12156 the MI output. */
112e8700 12157 uiout->text ("failed assertion");
956a9fb9 12158 break;
f7f9143b 12159 }
e547c119 12160
6f46ac85 12161 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12162 if (exception_message != NULL)
12163 {
e547c119 12164 uiout->text (" (");
6f46ac85 12165 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12166 uiout->text (")");
e547c119
JB
12167 }
12168
112e8700 12169 uiout->text (" at ");
956a9fb9 12170 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12171
12172 return PRINT_SRC_AND_LOC;
12173}
12174
12175/* Implement the PRINT_ONE method in the breakpoint_ops structure
12176 for all exception catchpoint kinds. */
12177
12178static void
37f6a7f4 12179print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12180{
79a45e25 12181 struct ui_out *uiout = current_uiout;
28010a5d 12182 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12183 struct value_print_options opts;
12184
12185 get_user_print_options (&opts);
f06f1252 12186
79a45b7d 12187 if (opts.addressprint)
f06f1252 12188 uiout->field_skip ("addr");
f7f9143b
JB
12189
12190 annotate_field (5);
37f6a7f4 12191 switch (c->m_kind)
f7f9143b 12192 {
761269c8 12193 case ada_catch_exception:
dda83cd7
SM
12194 if (!c->excep_string.empty ())
12195 {
bc18fbb5
TT
12196 std::string msg = string_printf (_("`%s' Ada exception"),
12197 c->excep_string.c_str ());
28010a5d 12198
dda83cd7
SM
12199 uiout->field_string ("what", msg);
12200 }
12201 else
12202 uiout->field_string ("what", "all Ada exceptions");
12203
12204 break;
f7f9143b 12205
761269c8 12206 case ada_catch_exception_unhandled:
dda83cd7
SM
12207 uiout->field_string ("what", "unhandled Ada exceptions");
12208 break;
f7f9143b 12209
9f757bf7 12210 case ada_catch_handlers:
dda83cd7
SM
12211 if (!c->excep_string.empty ())
12212 {
9f757bf7
XR
12213 uiout->field_fmt ("what",
12214 _("`%s' Ada exception handlers"),
bc18fbb5 12215 c->excep_string.c_str ());
dda83cd7
SM
12216 }
12217 else
9f757bf7 12218 uiout->field_string ("what", "all Ada exceptions handlers");
dda83cd7 12219 break;
9f757bf7 12220
761269c8 12221 case ada_catch_assert:
dda83cd7
SM
12222 uiout->field_string ("what", "failed Ada assertions");
12223 break;
f7f9143b
JB
12224
12225 default:
dda83cd7
SM
12226 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12227 break;
f7f9143b
JB
12228 }
12229}
12230
12231/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12232 for all exception catchpoint kinds. */
12233
12234static void
37f6a7f4 12235print_mention_exception (struct breakpoint *b)
f7f9143b 12236{
28010a5d 12237 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12238 struct ui_out *uiout = current_uiout;
28010a5d 12239
112e8700 12240 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
dda83cd7 12241 : _("Catchpoint "));
381befee 12242 uiout->field_signed ("bkptno", b->number);
112e8700 12243 uiout->text (": ");
00eb2c4a 12244
37f6a7f4 12245 switch (c->m_kind)
f7f9143b 12246 {
761269c8 12247 case ada_catch_exception:
dda83cd7 12248 if (!c->excep_string.empty ())
00eb2c4a 12249 {
862d101a 12250 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12251 c->excep_string.c_str ());
862d101a 12252 uiout->text (info.c_str ());
00eb2c4a 12253 }
dda83cd7
SM
12254 else
12255 uiout->text (_("all Ada exceptions"));
12256 break;
f7f9143b 12257
761269c8 12258 case ada_catch_exception_unhandled:
dda83cd7
SM
12259 uiout->text (_("unhandled Ada exceptions"));
12260 break;
9f757bf7
XR
12261
12262 case ada_catch_handlers:
dda83cd7 12263 if (!c->excep_string.empty ())
9f757bf7
XR
12264 {
12265 std::string info
12266 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12267 c->excep_string.c_str ());
9f757bf7
XR
12268 uiout->text (info.c_str ());
12269 }
dda83cd7
SM
12270 else
12271 uiout->text (_("all Ada exceptions handlers"));
12272 break;
9f757bf7 12273
761269c8 12274 case ada_catch_assert:
dda83cd7
SM
12275 uiout->text (_("failed Ada assertions"));
12276 break;
f7f9143b
JB
12277
12278 default:
dda83cd7
SM
12279 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12280 break;
f7f9143b
JB
12281 }
12282}
12283
6149aea9
PA
12284/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12285 for all exception catchpoint kinds. */
12286
12287static void
37f6a7f4 12288print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12289{
28010a5d
PA
12290 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12291
37f6a7f4 12292 switch (c->m_kind)
6149aea9 12293 {
761269c8 12294 case ada_catch_exception:
6149aea9 12295 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12296 if (!c->excep_string.empty ())
12297 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12298 break;
12299
761269c8 12300 case ada_catch_exception_unhandled:
78076abc 12301 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12302 break;
12303
9f757bf7
XR
12304 case ada_catch_handlers:
12305 fprintf_filtered (fp, "catch handlers");
12306 break;
12307
761269c8 12308 case ada_catch_assert:
6149aea9
PA
12309 fprintf_filtered (fp, "catch assert");
12310 break;
12311
12312 default:
12313 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12314 }
d9b3f62e 12315 print_recreate_thread (b, fp);
6149aea9
PA
12316}
12317
37f6a7f4 12318/* Virtual tables for various breakpoint types. */
2060206e 12319static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12320static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12321static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12322static struct breakpoint_ops catch_handlers_breakpoint_ops;
12323
f06f1252
TT
12324/* See ada-lang.h. */
12325
12326bool
12327is_ada_exception_catchpoint (breakpoint *bp)
12328{
12329 return (bp->ops == &catch_exception_breakpoint_ops
12330 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12331 || bp->ops == &catch_assert_breakpoint_ops
12332 || bp->ops == &catch_handlers_breakpoint_ops);
12333}
12334
f7f9143b
JB
12335/* Split the arguments specified in a "catch exception" command.
12336 Set EX to the appropriate catchpoint type.
28010a5d 12337 Set EXCEP_STRING to the name of the specific exception if
5845583d 12338 specified by the user.
9f757bf7
XR
12339 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12340 "catch handlers" command. False otherwise.
5845583d
JB
12341 If a condition is found at the end of the arguments, the condition
12342 expression is stored in COND_STRING (memory must be deallocated
12343 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12344
12345static void
a121b7c1 12346catch_ada_exception_command_split (const char *args,
9f757bf7 12347 bool is_catch_handlers_cmd,
dda83cd7 12348 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12349 std::string *excep_string,
12350 std::string *cond_string)
f7f9143b 12351{
bc18fbb5 12352 std::string exception_name;
f7f9143b 12353
bc18fbb5
TT
12354 exception_name = extract_arg (&args);
12355 if (exception_name == "if")
5845583d
JB
12356 {
12357 /* This is not an exception name; this is the start of a condition
12358 expression for a catchpoint on all exceptions. So, "un-get"
12359 this token, and set exception_name to NULL. */
bc18fbb5 12360 exception_name.clear ();
5845583d
JB
12361 args -= 2;
12362 }
f7f9143b 12363
5845583d 12364 /* Check to see if we have a condition. */
f7f9143b 12365
f1735a53 12366 args = skip_spaces (args);
61012eef 12367 if (startswith (args, "if")
5845583d
JB
12368 && (isspace (args[2]) || args[2] == '\0'))
12369 {
12370 args += 2;
f1735a53 12371 args = skip_spaces (args);
5845583d
JB
12372
12373 if (args[0] == '\0')
dda83cd7 12374 error (_("Condition missing after `if' keyword"));
bc18fbb5 12375 *cond_string = args;
5845583d
JB
12376
12377 args += strlen (args);
12378 }
12379
12380 /* Check that we do not have any more arguments. Anything else
12381 is unexpected. */
f7f9143b
JB
12382
12383 if (args[0] != '\0')
12384 error (_("Junk at end of expression"));
12385
9f757bf7
XR
12386 if (is_catch_handlers_cmd)
12387 {
12388 /* Catch handling of exceptions. */
12389 *ex = ada_catch_handlers;
12390 *excep_string = exception_name;
12391 }
bc18fbb5 12392 else if (exception_name.empty ())
f7f9143b
JB
12393 {
12394 /* Catch all exceptions. */
761269c8 12395 *ex = ada_catch_exception;
bc18fbb5 12396 excep_string->clear ();
f7f9143b 12397 }
bc18fbb5 12398 else if (exception_name == "unhandled")
f7f9143b
JB
12399 {
12400 /* Catch unhandled exceptions. */
761269c8 12401 *ex = ada_catch_exception_unhandled;
bc18fbb5 12402 excep_string->clear ();
f7f9143b
JB
12403 }
12404 else
12405 {
12406 /* Catch a specific exception. */
761269c8 12407 *ex = ada_catch_exception;
28010a5d 12408 *excep_string = exception_name;
f7f9143b
JB
12409 }
12410}
12411
12412/* Return the name of the symbol on which we should break in order to
12413 implement a catchpoint of the EX kind. */
12414
12415static const char *
761269c8 12416ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12417{
3eecfa55
JB
12418 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12419
12420 gdb_assert (data->exception_info != NULL);
0259addd 12421
f7f9143b
JB
12422 switch (ex)
12423 {
761269c8 12424 case ada_catch_exception:
dda83cd7
SM
12425 return (data->exception_info->catch_exception_sym);
12426 break;
761269c8 12427 case ada_catch_exception_unhandled:
dda83cd7
SM
12428 return (data->exception_info->catch_exception_unhandled_sym);
12429 break;
761269c8 12430 case ada_catch_assert:
dda83cd7
SM
12431 return (data->exception_info->catch_assert_sym);
12432 break;
9f757bf7 12433 case ada_catch_handlers:
dda83cd7
SM
12434 return (data->exception_info->catch_handlers_sym);
12435 break;
f7f9143b 12436 default:
dda83cd7
SM
12437 internal_error (__FILE__, __LINE__,
12438 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12439 }
12440}
12441
12442/* Return the breakpoint ops "virtual table" used for catchpoints
12443 of the EX kind. */
12444
c0a91b2b 12445static const struct breakpoint_ops *
761269c8 12446ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12447{
12448 switch (ex)
12449 {
761269c8 12450 case ada_catch_exception:
dda83cd7
SM
12451 return (&catch_exception_breakpoint_ops);
12452 break;
761269c8 12453 case ada_catch_exception_unhandled:
dda83cd7
SM
12454 return (&catch_exception_unhandled_breakpoint_ops);
12455 break;
761269c8 12456 case ada_catch_assert:
dda83cd7
SM
12457 return (&catch_assert_breakpoint_ops);
12458 break;
9f757bf7 12459 case ada_catch_handlers:
dda83cd7
SM
12460 return (&catch_handlers_breakpoint_ops);
12461 break;
f7f9143b 12462 default:
dda83cd7
SM
12463 internal_error (__FILE__, __LINE__,
12464 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12465 }
12466}
12467
12468/* Return the condition that will be used to match the current exception
12469 being raised with the exception that the user wants to catch. This
12470 assumes that this condition is used when the inferior just triggered
12471 an exception catchpoint.
cb7de75e 12472 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12473
cb7de75e 12474static std::string
9f757bf7 12475ada_exception_catchpoint_cond_string (const char *excep_string,
dda83cd7 12476 enum ada_exception_catchpoint_kind ex)
f7f9143b 12477{
3d0b0fa3 12478 int i;
fccf9de1 12479 bool is_standard_exc = false;
cb7de75e 12480 std::string result;
9f757bf7
XR
12481
12482 if (ex == ada_catch_handlers)
12483 {
12484 /* For exception handlers catchpoints, the condition string does
dda83cd7 12485 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12486 result = ("long_integer (GNAT_GCC_exception_Access"
12487 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12488 }
12489 else
fccf9de1 12490 result = "long_integer (e)";
3d0b0fa3 12491
0963b4bd 12492 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12493 runtime units that have been compiled without debugging info; if
28010a5d 12494 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12495 exception (e.g. "constraint_error") then, during the evaluation
12496 of the condition expression, the symbol lookup on this name would
0963b4bd 12497 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12498 may then be set only on user-defined exceptions which have the
12499 same not-fully-qualified name (e.g. my_package.constraint_error).
12500
12501 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12502 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12503 exception constraint_error" is rewritten into "catch exception
12504 standard.constraint_error".
12505
85102364 12506 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12507 the inferior program, then the only way to specify this exception as a
12508 breakpoint condition is to use its fully-qualified named:
fccf9de1 12509 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12510
12511 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12512 {
28010a5d 12513 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12514 {
fccf9de1 12515 is_standard_exc = true;
9f757bf7 12516 break;
3d0b0fa3
JB
12517 }
12518 }
9f757bf7 12519
fccf9de1
TT
12520 result += " = ";
12521
12522 if (is_standard_exc)
12523 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12524 else
12525 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12526
9f757bf7 12527 return result;
f7f9143b
JB
12528}
12529
12530/* Return the symtab_and_line that should be used to insert an exception
12531 catchpoint of the TYPE kind.
12532
28010a5d
PA
12533 ADDR_STRING returns the name of the function where the real
12534 breakpoint that implements the catchpoints is set, depending on the
12535 type of catchpoint we need to create. */
f7f9143b
JB
12536
12537static struct symtab_and_line
bc18fbb5 12538ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12539 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12540{
12541 const char *sym_name;
12542 struct symbol *sym;
f7f9143b 12543
0259addd
JB
12544 /* First, find out which exception support info to use. */
12545 ada_exception_support_info_sniffer ();
12546
12547 /* Then lookup the function on which we will break in order to catch
f7f9143b 12548 the Ada exceptions requested by the user. */
f7f9143b
JB
12549 sym_name = ada_exception_sym_name (ex);
12550 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12551
57aff202
JB
12552 if (sym == NULL)
12553 error (_("Catchpoint symbol not found: %s"), sym_name);
12554
12555 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12556 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12557
12558 /* Set ADDR_STRING. */
cc12f4a8 12559 *addr_string = sym_name;
f7f9143b 12560
f7f9143b 12561 /* Set OPS. */
4b9eee8c 12562 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12563
f17011e0 12564 return find_function_start_sal (sym, 1);
f7f9143b
JB
12565}
12566
b4a5b78b 12567/* Create an Ada exception catchpoint.
f7f9143b 12568
b4a5b78b 12569 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12570
bc18fbb5 12571 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12572 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12573 of the exception to which this catchpoint applies.
2df4d1d5 12574
bc18fbb5 12575 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12576
b4a5b78b
JB
12577 TEMPFLAG, if nonzero, means that the underlying breakpoint
12578 should be temporary.
28010a5d 12579
b4a5b78b 12580 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12581
349774ef 12582void
28010a5d 12583create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12584 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12585 const std::string &excep_string,
56ecd069 12586 const std::string &cond_string,
28010a5d 12587 int tempflag,
349774ef 12588 int disabled,
28010a5d
PA
12589 int from_tty)
12590{
cc12f4a8 12591 std::string addr_string;
b4a5b78b 12592 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12593 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12594
37f6a7f4 12595 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12596 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12597 ops, tempflag, disabled, from_tty);
28010a5d 12598 c->excep_string = excep_string;
9f757bf7 12599 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069 12600 if (!cond_string.empty ())
733d554a 12601 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
b270e6f9 12602 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12603}
12604
9ac4176b
PA
12605/* Implement the "catch exception" command. */
12606
12607static void
eb4c3f4a 12608catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12609 struct cmd_list_element *command)
12610{
a121b7c1 12611 const char *arg = arg_entry;
9ac4176b
PA
12612 struct gdbarch *gdbarch = get_current_arch ();
12613 int tempflag;
761269c8 12614 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12615 std::string excep_string;
56ecd069 12616 std::string cond_string;
9ac4176b
PA
12617
12618 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12619
12620 if (!arg)
12621 arg = "";
9f757bf7 12622 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12623 &cond_string);
9f757bf7
XR
12624 create_ada_exception_catchpoint (gdbarch, ex_kind,
12625 excep_string, cond_string,
12626 tempflag, 1 /* enabled */,
12627 from_tty);
12628}
12629
12630/* Implement the "catch handlers" command. */
12631
12632static void
12633catch_ada_handlers_command (const char *arg_entry, int from_tty,
12634 struct cmd_list_element *command)
12635{
12636 const char *arg = arg_entry;
12637 struct gdbarch *gdbarch = get_current_arch ();
12638 int tempflag;
12639 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12640 std::string excep_string;
56ecd069 12641 std::string cond_string;
9f757bf7
XR
12642
12643 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12644
12645 if (!arg)
12646 arg = "";
12647 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 12648 &cond_string);
b4a5b78b
JB
12649 create_ada_exception_catchpoint (gdbarch, ex_kind,
12650 excep_string, cond_string,
349774ef
JB
12651 tempflag, 1 /* enabled */,
12652 from_tty);
9ac4176b
PA
12653}
12654
71bed2db
TT
12655/* Completion function for the Ada "catch" commands. */
12656
12657static void
12658catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12659 const char *text, const char *word)
12660{
12661 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12662
12663 for (const ada_exc_info &info : exceptions)
12664 {
12665 if (startswith (info.name, word))
b02f78f9 12666 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
12667 }
12668}
12669
b4a5b78b 12670/* Split the arguments specified in a "catch assert" command.
5845583d 12671
b4a5b78b
JB
12672 ARGS contains the command's arguments (or the empty string if
12673 no arguments were passed).
5845583d
JB
12674
12675 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12676 (the memory needs to be deallocated after use). */
5845583d 12677
b4a5b78b 12678static void
56ecd069 12679catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 12680{
f1735a53 12681 args = skip_spaces (args);
f7f9143b 12682
5845583d 12683 /* Check whether a condition was provided. */
61012eef 12684 if (startswith (args, "if")
5845583d 12685 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12686 {
5845583d 12687 args += 2;
f1735a53 12688 args = skip_spaces (args);
5845583d 12689 if (args[0] == '\0')
dda83cd7 12690 error (_("condition missing after `if' keyword"));
56ecd069 12691 cond_string.assign (args);
f7f9143b
JB
12692 }
12693
5845583d
JB
12694 /* Otherwise, there should be no other argument at the end of
12695 the command. */
12696 else if (args[0] != '\0')
12697 error (_("Junk at end of arguments."));
f7f9143b
JB
12698}
12699
9ac4176b
PA
12700/* Implement the "catch assert" command. */
12701
12702static void
eb4c3f4a 12703catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12704 struct cmd_list_element *command)
12705{
a121b7c1 12706 const char *arg = arg_entry;
9ac4176b
PA
12707 struct gdbarch *gdbarch = get_current_arch ();
12708 int tempflag;
56ecd069 12709 std::string cond_string;
9ac4176b
PA
12710
12711 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12712
12713 if (!arg)
12714 arg = "";
56ecd069 12715 catch_ada_assert_command_split (arg, cond_string);
761269c8 12716 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 12717 "", cond_string,
349774ef
JB
12718 tempflag, 1 /* enabled */,
12719 from_tty);
9ac4176b 12720}
778865d3
JB
12721
12722/* Return non-zero if the symbol SYM is an Ada exception object. */
12723
12724static int
12725ada_is_exception_sym (struct symbol *sym)
12726{
7d93a1e0 12727 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
12728
12729 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
dda83cd7
SM
12730 && SYMBOL_CLASS (sym) != LOC_BLOCK
12731 && SYMBOL_CLASS (sym) != LOC_CONST
12732 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12733 && type_name != NULL && strcmp (type_name, "exception") == 0);
778865d3
JB
12734}
12735
12736/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12737 Ada exception object. This matches all exceptions except the ones
12738 defined by the Ada language. */
12739
12740static int
12741ada_is_non_standard_exception_sym (struct symbol *sym)
12742{
12743 int i;
12744
12745 if (!ada_is_exception_sym (sym))
12746 return 0;
12747
12748 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 12749 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
12750 return 0; /* A standard exception. */
12751
12752 /* Numeric_Error is also a standard exception, so exclude it.
12753 See the STANDARD_EXC description for more details as to why
12754 this exception is not listed in that array. */
987012b8 12755 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
12756 return 0;
12757
12758 return 1;
12759}
12760
ab816a27 12761/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
12762 objects.
12763
12764 The comparison is determined first by exception name, and then
12765 by exception address. */
12766
ab816a27 12767bool
cc536b21 12768ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 12769{
778865d3
JB
12770 int result;
12771
ab816a27
TT
12772 result = strcmp (name, other.name);
12773 if (result < 0)
12774 return true;
12775 if (result == 0 && addr < other.addr)
12776 return true;
12777 return false;
12778}
778865d3 12779
ab816a27 12780bool
cc536b21 12781ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
12782{
12783 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
12784}
12785
12786/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12787 routine, but keeping the first SKIP elements untouched.
12788
12789 All duplicates are also removed. */
12790
12791static void
ab816a27 12792sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
12793 int skip)
12794{
ab816a27
TT
12795 std::sort (exceptions->begin () + skip, exceptions->end ());
12796 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12797 exceptions->end ());
778865d3
JB
12798}
12799
778865d3
JB
12800/* Add all exceptions defined by the Ada standard whose name match
12801 a regular expression.
12802
12803 If PREG is not NULL, then this regexp_t object is used to
12804 perform the symbol name matching. Otherwise, no name-based
12805 filtering is performed.
12806
12807 EXCEPTIONS is a vector of exceptions to which matching exceptions
12808 gets pushed. */
12809
12810static void
2d7cc5c7 12811ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 12812 std::vector<ada_exc_info> *exceptions)
778865d3
JB
12813{
12814 int i;
12815
12816 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12817 {
12818 if (preg == NULL
2d7cc5c7 12819 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
12820 {
12821 struct bound_minimal_symbol msymbol
12822 = ada_lookup_simple_minsym (standard_exc[i]);
12823
12824 if (msymbol.minsym != NULL)
12825 {
12826 struct ada_exc_info info
77e371c0 12827 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 12828
ab816a27 12829 exceptions->push_back (info);
778865d3
JB
12830 }
12831 }
12832 }
12833}
12834
12835/* Add all Ada exceptions defined locally and accessible from the given
12836 FRAME.
12837
12838 If PREG is not NULL, then this regexp_t object is used to
12839 perform the symbol name matching. Otherwise, no name-based
12840 filtering is performed.
12841
12842 EXCEPTIONS is a vector of exceptions to which matching exceptions
12843 gets pushed. */
12844
12845static void
2d7cc5c7
PA
12846ada_add_exceptions_from_frame (compiled_regex *preg,
12847 struct frame_info *frame,
ab816a27 12848 std::vector<ada_exc_info> *exceptions)
778865d3 12849{
3977b71f 12850 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12851
12852 while (block != 0)
12853 {
12854 struct block_iterator iter;
12855 struct symbol *sym;
12856
12857 ALL_BLOCK_SYMBOLS (block, iter, sym)
12858 {
12859 switch (SYMBOL_CLASS (sym))
12860 {
12861 case LOC_TYPEDEF:
12862 case LOC_BLOCK:
12863 case LOC_CONST:
12864 break;
12865 default:
12866 if (ada_is_exception_sym (sym))
12867 {
987012b8 12868 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
12869 SYMBOL_VALUE_ADDRESS (sym)};
12870
ab816a27 12871 exceptions->push_back (info);
778865d3
JB
12872 }
12873 }
12874 }
12875 if (BLOCK_FUNCTION (block) != NULL)
12876 break;
12877 block = BLOCK_SUPERBLOCK (block);
12878 }
12879}
12880
14bc53a8
PA
12881/* Return true if NAME matches PREG or if PREG is NULL. */
12882
12883static bool
2d7cc5c7 12884name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
12885{
12886 return (preg == NULL
f945dedf 12887 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
12888}
12889
778865d3
JB
12890/* Add all exceptions defined globally whose name name match
12891 a regular expression, excluding standard exceptions.
12892
12893 The reason we exclude standard exceptions is that they need
12894 to be handled separately: Standard exceptions are defined inside
12895 a runtime unit which is normally not compiled with debugging info,
12896 and thus usually do not show up in our symbol search. However,
12897 if the unit was in fact built with debugging info, we need to
12898 exclude them because they would duplicate the entry we found
12899 during the special loop that specifically searches for those
12900 standard exceptions.
12901
12902 If PREG is not NULL, then this regexp_t object is used to
12903 perform the symbol name matching. Otherwise, no name-based
12904 filtering is performed.
12905
12906 EXCEPTIONS is a vector of exceptions to which matching exceptions
12907 gets pushed. */
12908
12909static void
2d7cc5c7 12910ada_add_global_exceptions (compiled_regex *preg,
ab816a27 12911 std::vector<ada_exc_info> *exceptions)
778865d3 12912{
14bc53a8
PA
12913 /* In Ada, the symbol "search name" is a linkage name, whereas the
12914 regular expression used to do the matching refers to the natural
12915 name. So match against the decoded name. */
12916 expand_symtabs_matching (NULL,
b5ec771e 12917 lookup_name_info::match_any (),
14bc53a8
PA
12918 [&] (const char *search_name)
12919 {
f945dedf
CB
12920 std::string decoded = ada_decode (search_name);
12921 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
12922 },
12923 NULL,
12924 VARIABLES_DOMAIN);
778865d3 12925
2030c079 12926 for (objfile *objfile : current_program_space->objfiles ())
778865d3 12927 {
b669c953 12928 for (compunit_symtab *s : objfile->compunits ())
778865d3 12929 {
d8aeb77f
TT
12930 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
12931 int i;
778865d3 12932
d8aeb77f
TT
12933 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12934 {
582942f4 12935 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
12936 struct block_iterator iter;
12937 struct symbol *sym;
778865d3 12938
d8aeb77f
TT
12939 ALL_BLOCK_SYMBOLS (b, iter, sym)
12940 if (ada_is_non_standard_exception_sym (sym)
987012b8 12941 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
12942 {
12943 struct ada_exc_info info
987012b8 12944 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
12945
12946 exceptions->push_back (info);
12947 }
12948 }
778865d3
JB
12949 }
12950 }
12951}
12952
12953/* Implements ada_exceptions_list with the regular expression passed
12954 as a regex_t, rather than a string.
12955
12956 If not NULL, PREG is used to filter out exceptions whose names
12957 do not match. Otherwise, all exceptions are listed. */
12958
ab816a27 12959static std::vector<ada_exc_info>
2d7cc5c7 12960ada_exceptions_list_1 (compiled_regex *preg)
778865d3 12961{
ab816a27 12962 std::vector<ada_exc_info> result;
778865d3
JB
12963 int prev_len;
12964
12965 /* First, list the known standard exceptions. These exceptions
12966 need to be handled separately, as they are usually defined in
12967 runtime units that have been compiled without debugging info. */
12968
12969 ada_add_standard_exceptions (preg, &result);
12970
12971 /* Next, find all exceptions whose scope is local and accessible
12972 from the currently selected frame. */
12973
12974 if (has_stack_frames ())
12975 {
ab816a27 12976 prev_len = result.size ();
778865d3
JB
12977 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12978 &result);
ab816a27 12979 if (result.size () > prev_len)
778865d3
JB
12980 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12981 }
12982
12983 /* Add all exceptions whose scope is global. */
12984
ab816a27 12985 prev_len = result.size ();
778865d3 12986 ada_add_global_exceptions (preg, &result);
ab816a27 12987 if (result.size () > prev_len)
778865d3
JB
12988 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12989
778865d3
JB
12990 return result;
12991}
12992
12993/* Return a vector of ada_exc_info.
12994
12995 If REGEXP is NULL, all exceptions are included in the result.
12996 Otherwise, it should contain a valid regular expression,
12997 and only the exceptions whose names match that regular expression
12998 are included in the result.
12999
13000 The exceptions are sorted in the following order:
13001 - Standard exceptions (defined by the Ada language), in
13002 alphabetical order;
13003 - Exceptions only visible from the current frame, in
13004 alphabetical order;
13005 - Exceptions whose scope is global, in alphabetical order. */
13006
ab816a27 13007std::vector<ada_exc_info>
778865d3
JB
13008ada_exceptions_list (const char *regexp)
13009{
2d7cc5c7
PA
13010 if (regexp == NULL)
13011 return ada_exceptions_list_1 (NULL);
778865d3 13012
2d7cc5c7
PA
13013 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13014 return ada_exceptions_list_1 (&reg);
778865d3
JB
13015}
13016
13017/* Implement the "info exceptions" command. */
13018
13019static void
1d12d88f 13020info_exceptions_command (const char *regexp, int from_tty)
778865d3 13021{
778865d3 13022 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13023
ab816a27 13024 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13025
13026 if (regexp != NULL)
13027 printf_filtered
13028 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13029 else
13030 printf_filtered (_("All defined Ada exceptions:\n"));
13031
ab816a27
TT
13032 for (const ada_exc_info &info : exceptions)
13033 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13034}
13035
dda83cd7 13036 /* Operators */
4c4b4cd2
PH
13037/* Information about operators given special treatment in functions
13038 below. */
13039/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13040
13041#define ADA_OPERATORS \
13042 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13043 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13044 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13045 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13046 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13047 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13048 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13049 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13050 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13051 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13052 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13053 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13054 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13055 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13056 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13057 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13058 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13059 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13060 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13061
13062static void
554794dc
SDJ
13063ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13064 int *argsp)
4c4b4cd2
PH
13065{
13066 switch (exp->elts[pc - 1].opcode)
13067 {
76a01679 13068 default:
4c4b4cd2
PH
13069 operator_length_standard (exp, pc, oplenp, argsp);
13070 break;
13071
13072#define OP_DEFN(op, len, args, binop) \
13073 case op: *oplenp = len; *argsp = args; break;
13074 ADA_OPERATORS;
13075#undef OP_DEFN
52ce6436
PH
13076
13077 case OP_AGGREGATE:
13078 *oplenp = 3;
13079 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13080 break;
13081
13082 case OP_CHOICES:
13083 *oplenp = 3;
13084 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13085 break;
4c4b4cd2
PH
13086 }
13087}
13088
c0201579
JK
13089/* Implementation of the exp_descriptor method operator_check. */
13090
13091static int
13092ada_operator_check (struct expression *exp, int pos,
13093 int (*objfile_func) (struct objfile *objfile, void *data),
13094 void *data)
13095{
13096 const union exp_element *const elts = exp->elts;
13097 struct type *type = NULL;
13098
13099 switch (elts[pos].opcode)
13100 {
13101 case UNOP_IN_RANGE:
13102 case UNOP_QUAL:
13103 type = elts[pos + 1].type;
13104 break;
13105
13106 default:
13107 return operator_check_standard (exp, pos, objfile_func, data);
13108 }
13109
13110 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13111
6ac37371
SM
13112 if (type != nullptr && type->objfile_owner () != nullptr
13113 && objfile_func (type->objfile_owner (), data))
c0201579
JK
13114 return 1;
13115
13116 return 0;
13117}
13118
4c4b4cd2
PH
13119/* As for operator_length, but assumes PC is pointing at the first
13120 element of the operator, and gives meaningful results only for the
52ce6436 13121 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13122
13123static void
76a01679 13124ada_forward_operator_length (struct expression *exp, int pc,
dda83cd7 13125 int *oplenp, int *argsp)
4c4b4cd2 13126{
76a01679 13127 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13128 {
13129 default:
13130 *oplenp = *argsp = 0;
13131 break;
52ce6436 13132
4c4b4cd2
PH
13133#define OP_DEFN(op, len, args, binop) \
13134 case op: *oplenp = len; *argsp = args; break;
13135 ADA_OPERATORS;
13136#undef OP_DEFN
52ce6436
PH
13137
13138 case OP_AGGREGATE:
13139 *oplenp = 3;
13140 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13141 break;
13142
13143 case OP_CHOICES:
13144 *oplenp = 3;
13145 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13146 break;
13147
13148 case OP_STRING:
13149 case OP_NAME:
13150 {
13151 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13152
52ce6436
PH
13153 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13154 *argsp = 0;
13155 break;
13156 }
4c4b4cd2
PH
13157 }
13158}
13159
13160static int
13161ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13162{
13163 enum exp_opcode op = exp->elts[elt].opcode;
13164 int oplen, nargs;
13165 int pc = elt;
13166 int i;
76a01679 13167
4c4b4cd2
PH
13168 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13169
76a01679 13170 switch (op)
4c4b4cd2 13171 {
76a01679 13172 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13173 case OP_ATR_FIRST:
13174 case OP_ATR_LAST:
13175 case OP_ATR_LENGTH:
13176 case OP_ATR_IMAGE:
13177 case OP_ATR_MAX:
13178 case OP_ATR_MIN:
13179 case OP_ATR_MODULUS:
13180 case OP_ATR_POS:
13181 case OP_ATR_SIZE:
13182 case OP_ATR_TAG:
13183 case OP_ATR_VAL:
13184 break;
13185
13186 case UNOP_IN_RANGE:
13187 case UNOP_QUAL:
323e0a4a
AC
13188 /* XXX: gdb_sprint_host_address, type_sprint */
13189 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13190 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13191 fprintf_filtered (stream, " (");
13192 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13193 fprintf_filtered (stream, ")");
13194 break;
13195 case BINOP_IN_BOUNDS:
52ce6436
PH
13196 fprintf_filtered (stream, " (%d)",
13197 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13198 break;
13199 case TERNOP_IN_RANGE:
13200 break;
13201
52ce6436
PH
13202 case OP_AGGREGATE:
13203 case OP_OTHERS:
13204 case OP_DISCRETE_RANGE:
13205 case OP_POSITIONAL:
13206 case OP_CHOICES:
13207 break;
13208
13209 case OP_NAME:
13210 case OP_STRING:
13211 {
13212 char *name = &exp->elts[elt + 2].string;
13213 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13214
52ce6436
PH
13215 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13216 break;
13217 }
13218
4c4b4cd2
PH
13219 default:
13220 return dump_subexp_body_standard (exp, stream, elt);
13221 }
13222
13223 elt += oplen;
13224 for (i = 0; i < nargs; i += 1)
13225 elt = dump_subexp (exp, stream, elt);
13226
13227 return elt;
13228}
13229
13230/* The Ada extension of print_subexp (q.v.). */
13231
76a01679
JB
13232static void
13233ada_print_subexp (struct expression *exp, int *pos,
dda83cd7 13234 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13235{
52ce6436 13236 int oplen, nargs, i;
4c4b4cd2
PH
13237 int pc = *pos;
13238 enum exp_opcode op = exp->elts[pc].opcode;
13239
13240 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13241
52ce6436 13242 *pos += oplen;
4c4b4cd2
PH
13243 switch (op)
13244 {
13245 default:
52ce6436 13246 *pos -= oplen;
4c4b4cd2
PH
13247 print_subexp_standard (exp, pos, stream, prec);
13248 return;
13249
13250 case OP_VAR_VALUE:
987012b8 13251 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13252 return;
13253
13254 case BINOP_IN_BOUNDS:
323e0a4a 13255 /* XXX: sprint_subexp */
4c4b4cd2 13256 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13257 fputs_filtered (" in ", stream);
4c4b4cd2 13258 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13259 fputs_filtered ("'range", stream);
4c4b4cd2 13260 if (exp->elts[pc + 1].longconst > 1)
dda83cd7
SM
13261 fprintf_filtered (stream, "(%ld)",
13262 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13263 return;
13264
13265 case TERNOP_IN_RANGE:
4c4b4cd2 13266 if (prec >= PREC_EQUAL)
dda83cd7 13267 fputs_filtered ("(", stream);
323e0a4a 13268 /* XXX: sprint_subexp */
4c4b4cd2 13269 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13270 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13271 print_subexp (exp, pos, stream, PREC_EQUAL);
13272 fputs_filtered (" .. ", stream);
13273 print_subexp (exp, pos, stream, PREC_EQUAL);
13274 if (prec >= PREC_EQUAL)
dda83cd7 13275 fputs_filtered (")", stream);
76a01679 13276 return;
4c4b4cd2
PH
13277
13278 case OP_ATR_FIRST:
13279 case OP_ATR_LAST:
13280 case OP_ATR_LENGTH:
13281 case OP_ATR_IMAGE:
13282 case OP_ATR_MAX:
13283 case OP_ATR_MIN:
13284 case OP_ATR_MODULUS:
13285 case OP_ATR_POS:
13286 case OP_ATR_SIZE:
13287 case OP_ATR_TAG:
13288 case OP_ATR_VAL:
4c4b4cd2 13289 if (exp->elts[*pos].opcode == OP_TYPE)
dda83cd7
SM
13290 {
13291 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13292 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
79d43c61 13293 &type_print_raw_options);
dda83cd7
SM
13294 *pos += 3;
13295 }
4c4b4cd2 13296 else
dda83cd7 13297 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13298 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13299 if (nargs > 1)
dda83cd7
SM
13300 {
13301 int tem;
13302
13303 for (tem = 1; tem < nargs; tem += 1)
13304 {
13305 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13306 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13307 }
13308 fputs_filtered (")", stream);
13309 }
4c4b4cd2 13310 return;
14f9c5c9 13311
4c4b4cd2 13312 case UNOP_QUAL:
4c4b4cd2
PH
13313 type_print (exp->elts[pc + 1].type, "", stream, 0);
13314 fputs_filtered ("'(", stream);
13315 print_subexp (exp, pos, stream, PREC_PREFIX);
13316 fputs_filtered (")", stream);
13317 return;
14f9c5c9 13318
4c4b4cd2 13319 case UNOP_IN_RANGE:
323e0a4a 13320 /* XXX: sprint_subexp */
4c4b4cd2 13321 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13322 fputs_filtered (" in ", stream);
79d43c61
TT
13323 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13324 &type_print_raw_options);
4c4b4cd2 13325 return;
52ce6436
PH
13326
13327 case OP_DISCRETE_RANGE:
13328 print_subexp (exp, pos, stream, PREC_SUFFIX);
13329 fputs_filtered ("..", stream);
13330 print_subexp (exp, pos, stream, PREC_SUFFIX);
13331 return;
13332
13333 case OP_OTHERS:
13334 fputs_filtered ("others => ", stream);
13335 print_subexp (exp, pos, stream, PREC_SUFFIX);
13336 return;
13337
13338 case OP_CHOICES:
13339 for (i = 0; i < nargs-1; i += 1)
13340 {
13341 if (i > 0)
13342 fputs_filtered ("|", stream);
13343 print_subexp (exp, pos, stream, PREC_SUFFIX);
13344 }
13345 fputs_filtered (" => ", stream);
13346 print_subexp (exp, pos, stream, PREC_SUFFIX);
13347 return;
13348
13349 case OP_POSITIONAL:
13350 print_subexp (exp, pos, stream, PREC_SUFFIX);
13351 return;
13352
13353 case OP_AGGREGATE:
13354 fputs_filtered ("(", stream);
13355 for (i = 0; i < nargs; i += 1)
13356 {
13357 if (i > 0)
13358 fputs_filtered (", ", stream);
13359 print_subexp (exp, pos, stream, PREC_SUFFIX);
13360 }
13361 fputs_filtered (")", stream);
13362 return;
4c4b4cd2
PH
13363 }
13364}
14f9c5c9
AS
13365
13366/* Table mapping opcodes into strings for printing operators
13367 and precedences of the operators. */
13368
d2e4a39e
AS
13369static const struct op_print ada_op_print_tab[] = {
13370 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13371 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13372 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13373 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13374 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13375 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13376 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13377 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13378 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13379 {">=", BINOP_GEQ, PREC_ORDER, 0},
13380 {">", BINOP_GTR, PREC_ORDER, 0},
13381 {"<", BINOP_LESS, PREC_ORDER, 0},
13382 {">>", BINOP_RSH, PREC_SHIFT, 0},
13383 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13384 {"+", BINOP_ADD, PREC_ADD, 0},
13385 {"-", BINOP_SUB, PREC_ADD, 0},
13386 {"&", BINOP_CONCAT, PREC_ADD, 0},
13387 {"*", BINOP_MUL, PREC_MUL, 0},
13388 {"/", BINOP_DIV, PREC_MUL, 0},
13389 {"rem", BINOP_REM, PREC_MUL, 0},
13390 {"mod", BINOP_MOD, PREC_MUL, 0},
13391 {"**", BINOP_EXP, PREC_REPEAT, 0},
13392 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13393 {"-", UNOP_NEG, PREC_PREFIX, 0},
13394 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13395 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13396 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13397 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13398 {".all", UNOP_IND, PREC_SUFFIX, 1},
13399 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13400 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13401 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9 13402};
6c038f32
PH
13403\f
13404 /* Language vector */
13405
6c038f32
PH
13406static const struct exp_descriptor ada_exp_descriptor = {
13407 ada_print_subexp,
13408 ada_operator_length,
c0201579 13409 ada_operator_check,
6c038f32
PH
13410 ada_dump_subexp_body,
13411 ada_evaluate_subexp
13412};
13413
b5ec771e
PA
13414/* symbol_name_matcher_ftype adapter for wild_match. */
13415
13416static bool
13417do_wild_match (const char *symbol_search_name,
13418 const lookup_name_info &lookup_name,
a207cff2 13419 completion_match_result *comp_match_res)
b5ec771e
PA
13420{
13421 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13422}
13423
13424/* symbol_name_matcher_ftype adapter for full_match. */
13425
13426static bool
13427do_full_match (const char *symbol_search_name,
13428 const lookup_name_info &lookup_name,
a207cff2 13429 completion_match_result *comp_match_res)
b5ec771e 13430{
959d6a67
TT
13431 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13432
13433 /* If both symbols start with "_ada_", just let the loop below
13434 handle the comparison. However, if only the symbol name starts
13435 with "_ada_", skip the prefix and let the match proceed as
13436 usual. */
13437 if (startswith (symbol_search_name, "_ada_")
13438 && !startswith (lname, "_ada"))
86b44259
TT
13439 symbol_search_name += 5;
13440
86b44259
TT
13441 int uscore_count = 0;
13442 while (*lname != '\0')
13443 {
13444 if (*symbol_search_name != *lname)
13445 {
13446 if (*symbol_search_name == 'B' && uscore_count == 2
13447 && symbol_search_name[1] == '_')
13448 {
13449 symbol_search_name += 2;
13450 while (isdigit (*symbol_search_name))
13451 ++symbol_search_name;
13452 if (symbol_search_name[0] == '_'
13453 && symbol_search_name[1] == '_')
13454 {
13455 symbol_search_name += 2;
13456 continue;
13457 }
13458 }
13459 return false;
13460 }
13461
13462 if (*symbol_search_name == '_')
13463 ++uscore_count;
13464 else
13465 uscore_count = 0;
13466
13467 ++symbol_search_name;
13468 ++lname;
13469 }
13470
13471 return is_name_suffix (symbol_search_name);
b5ec771e
PA
13472}
13473
a2cd4f14
JB
13474/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13475
13476static bool
13477do_exact_match (const char *symbol_search_name,
13478 const lookup_name_info &lookup_name,
13479 completion_match_result *comp_match_res)
13480{
13481 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13482}
13483
b5ec771e
PA
13484/* Build the Ada lookup name for LOOKUP_NAME. */
13485
13486ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13487{
e0802d59 13488 gdb::string_view user_name = lookup_name.name ();
b5ec771e 13489
6a780b67 13490 if (!user_name.empty () && user_name[0] == '<')
b5ec771e
PA
13491 {
13492 if (user_name.back () == '>')
e0802d59 13493 m_encoded_name
5ac58899 13494 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
b5ec771e 13495 else
e0802d59 13496 m_encoded_name
5ac58899 13497 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
b5ec771e
PA
13498 m_encoded_p = true;
13499 m_verbatim_p = true;
13500 m_wild_match_p = false;
13501 m_standard_p = false;
13502 }
13503 else
13504 {
13505 m_verbatim_p = false;
13506
e0802d59 13507 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13508
13509 if (!m_encoded_p)
13510 {
e0802d59 13511 const char *folded = ada_fold_name (user_name);
5c4258f4
TT
13512 m_encoded_name = ada_encode_1 (folded, false);
13513 if (m_encoded_name.empty ())
5ac58899 13514 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13515 }
13516 else
5ac58899 13517 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13518
13519 /* Handle the 'package Standard' special case. See description
13520 of m_standard_p. */
13521 if (startswith (m_encoded_name.c_str (), "standard__"))
13522 {
13523 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13524 m_standard_p = true;
13525 }
13526 else
13527 m_standard_p = false;
74ccd7f5 13528
b5ec771e
PA
13529 /* If the name contains a ".", then the user is entering a fully
13530 qualified entity name, and the match must not be done in wild
13531 mode. Similarly, if the user wants to complete what looks
13532 like an encoded name, the match must not be done in wild
13533 mode. Also, in the standard__ special case always do
13534 non-wild matching. */
13535 m_wild_match_p
13536 = (lookup_name.match_type () != symbol_name_match_type::FULL
13537 && !m_encoded_p
13538 && !m_standard_p
13539 && user_name.find ('.') == std::string::npos);
13540 }
13541}
13542
13543/* symbol_name_matcher_ftype method for Ada. This only handles
13544 completion mode. */
13545
13546static bool
13547ada_symbol_name_matches (const char *symbol_search_name,
13548 const lookup_name_info &lookup_name,
a207cff2 13549 completion_match_result *comp_match_res)
74ccd7f5 13550{
b5ec771e
PA
13551 return lookup_name.ada ().matches (symbol_search_name,
13552 lookup_name.match_type (),
a207cff2 13553 comp_match_res);
b5ec771e
PA
13554}
13555
de63c46b
PA
13556/* A name matcher that matches the symbol name exactly, with
13557 strcmp. */
13558
13559static bool
13560literal_symbol_name_matcher (const char *symbol_search_name,
13561 const lookup_name_info &lookup_name,
13562 completion_match_result *comp_match_res)
13563{
e0802d59 13564 gdb::string_view name_view = lookup_name.name ();
de63c46b 13565
e0802d59
TT
13566 if (lookup_name.completion_mode ()
13567 ? (strncmp (symbol_search_name, name_view.data (),
13568 name_view.size ()) == 0)
13569 : symbol_search_name == name_view)
de63c46b
PA
13570 {
13571 if (comp_match_res != NULL)
13572 comp_match_res->set_match (symbol_search_name);
13573 return true;
13574 }
13575 else
13576 return false;
13577}
13578
c9debfb9 13579/* Implement the "get_symbol_name_matcher" language_defn method for
b5ec771e
PA
13580 Ada. */
13581
13582static symbol_name_matcher_ftype *
13583ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13584{
de63c46b
PA
13585 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13586 return literal_symbol_name_matcher;
13587
b5ec771e
PA
13588 if (lookup_name.completion_mode ())
13589 return ada_symbol_name_matches;
74ccd7f5 13590 else
b5ec771e
PA
13591 {
13592 if (lookup_name.ada ().wild_match_p ())
13593 return do_wild_match;
a2cd4f14
JB
13594 else if (lookup_name.ada ().verbatim_p ())
13595 return do_exact_match;
b5ec771e
PA
13596 else
13597 return do_full_match;
13598 }
74ccd7f5
JB
13599}
13600
0874fd07
AB
13601/* Class representing the Ada language. */
13602
13603class ada_language : public language_defn
13604{
13605public:
13606 ada_language ()
0e25e767 13607 : language_defn (language_ada)
0874fd07 13608 { /* Nothing. */ }
5bd40f2a 13609
6f7664a9
AB
13610 /* See language.h. */
13611
13612 const char *name () const override
13613 { return "ada"; }
13614
13615 /* See language.h. */
13616
13617 const char *natural_name () const override
13618 { return "Ada"; }
13619
e171d6f1
AB
13620 /* See language.h. */
13621
13622 const std::vector<const char *> &filename_extensions () const override
13623 {
13624 static const std::vector<const char *> extensions
13625 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13626 return extensions;
13627 }
13628
5bd40f2a
AB
13629 /* Print an array element index using the Ada syntax. */
13630
13631 void print_array_index (struct type *index_type,
13632 LONGEST index,
13633 struct ui_file *stream,
13634 const value_print_options *options) const override
13635 {
13636 struct value *index_value = val_atr (index_type, index);
13637
00c696a6 13638 value_print (index_value, stream, options);
5bd40f2a
AB
13639 fprintf_filtered (stream, " => ");
13640 }
15e5fd35
AB
13641
13642 /* Implement the "read_var_value" language_defn method for Ada. */
13643
13644 struct value *read_var_value (struct symbol *var,
13645 const struct block *var_block,
13646 struct frame_info *frame) const override
13647 {
13648 /* The only case where default_read_var_value is not sufficient
13649 is when VAR is a renaming... */
13650 if (frame != nullptr)
13651 {
13652 const struct block *frame_block = get_frame_block (frame, NULL);
13653 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13654 return ada_read_renaming_var_value (var, frame_block);
13655 }
13656
13657 /* This is a typical case where we expect the default_read_var_value
13658 function to work. */
13659 return language_defn::read_var_value (var, var_block, frame);
13660 }
1fb314aa
AB
13661
13662 /* See language.h. */
13663 void language_arch_info (struct gdbarch *gdbarch,
13664 struct language_arch_info *lai) const override
13665 {
13666 const struct builtin_type *builtin = builtin_type (gdbarch);
13667
7bea47f0
AB
13668 /* Helper function to allow shorter lines below. */
13669 auto add = [&] (struct type *t)
13670 {
13671 lai->add_primitive_type (t);
13672 };
13673
13674 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13675 0, "integer"));
13676 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13677 0, "long_integer"));
13678 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13679 0, "short_integer"));
13680 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13681 0, "character");
13682 lai->set_string_char_type (char_type);
13683 add (char_type);
13684 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13685 "float", gdbarch_float_format (gdbarch)));
13686 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13687 "long_float", gdbarch_double_format (gdbarch)));
13688 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13689 0, "long_long_integer"));
13690 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13691 "long_long_float",
13692 gdbarch_long_double_format (gdbarch)));
13693 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13694 0, "natural"));
13695 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13696 0, "positive"));
13697 add (builtin->builtin_void);
13698
13699 struct type *system_addr_ptr
1fb314aa
AB
13700 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13701 "void"));
7bea47f0
AB
13702 system_addr_ptr->set_name ("system__address");
13703 add (system_addr_ptr);
1fb314aa
AB
13704
13705 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13706 type. This is a signed integral type whose size is the same as
13707 the size of addresses. */
7bea47f0
AB
13708 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
13709 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13710 "storage_offset"));
1fb314aa 13711
7bea47f0 13712 lai->set_bool_type (builtin->builtin_bool);
1fb314aa 13713 }
4009ee92
AB
13714
13715 /* See language.h. */
13716
13717 bool iterate_over_symbols
13718 (const struct block *block, const lookup_name_info &name,
13719 domain_enum domain,
13720 gdb::function_view<symbol_found_callback_ftype> callback) const override
13721 {
d1183b06
TT
13722 std::vector<struct block_symbol> results
13723 = ada_lookup_symbol_list_worker (name, block, domain, 0);
4009ee92
AB
13724 for (block_symbol &sym : results)
13725 {
13726 if (!callback (&sym))
13727 return false;
13728 }
13729
13730 return true;
13731 }
6f827019
AB
13732
13733 /* See language.h. */
13734 bool sniff_from_mangled_name (const char *mangled,
13735 char **out) const override
13736 {
13737 std::string demangled = ada_decode (mangled);
13738
13739 *out = NULL;
13740
13741 if (demangled != mangled && demangled[0] != '<')
13742 {
13743 /* Set the gsymbol language to Ada, but still return 0.
13744 Two reasons for that:
13745
13746 1. For Ada, we prefer computing the symbol's decoded name
13747 on the fly rather than pre-compute it, in order to save
13748 memory (Ada projects are typically very large).
13749
13750 2. There are some areas in the definition of the GNAT
13751 encoding where, with a bit of bad luck, we might be able
13752 to decode a non-Ada symbol, generating an incorrect
13753 demangled name (Eg: names ending with "TB" for instance
13754 are identified as task bodies and so stripped from
13755 the decoded name returned).
13756
13757 Returning true, here, but not setting *DEMANGLED, helps us get
13758 a little bit of the best of both worlds. Because we're last,
13759 we should not affect any of the other languages that were
13760 able to demangle the symbol before us; we get to correctly
13761 tag Ada symbols as such; and even if we incorrectly tagged a
13762 non-Ada symbol, which should be rare, any routing through the
13763 Ada language should be transparent (Ada tries to behave much
13764 like C/C++ with non-Ada symbols). */
13765 return true;
13766 }
13767
13768 return false;
13769 }
fbfb0a46
AB
13770
13771 /* See language.h. */
13772
5399db93 13773 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d
AB
13774 {
13775 return ada_la_decode (mangled, options);
13776 }
13777
13778 /* See language.h. */
13779
fbfb0a46
AB
13780 void print_type (struct type *type, const char *varstring,
13781 struct ui_file *stream, int show, int level,
13782 const struct type_print_options *flags) const override
13783 {
13784 ada_print_type (type, varstring, stream, show, level, flags);
13785 }
c9debfb9 13786
53fc67f8
AB
13787 /* See language.h. */
13788
13789 const char *word_break_characters (void) const override
13790 {
13791 return ada_completer_word_break_characters;
13792 }
13793
7e56227d
AB
13794 /* See language.h. */
13795
13796 void collect_symbol_completion_matches (completion_tracker &tracker,
13797 complete_symbol_mode mode,
13798 symbol_name_match_type name_match_type,
13799 const char *text, const char *word,
13800 enum type_code code) const override
13801 {
13802 struct symbol *sym;
13803 const struct block *b, *surrounding_static_block = 0;
13804 struct block_iterator iter;
13805
13806 gdb_assert (code == TYPE_CODE_UNDEF);
13807
13808 lookup_name_info lookup_name (text, name_match_type, true);
13809
13810 /* First, look at the partial symtab symbols. */
13811 expand_symtabs_matching (NULL,
13812 lookup_name,
13813 NULL,
13814 NULL,
13815 ALL_DOMAIN);
13816
13817 /* At this point scan through the misc symbol vectors and add each
13818 symbol you find to the list. Eventually we want to ignore
13819 anything that isn't a text symbol (everything else will be
13820 handled by the psymtab code above). */
13821
13822 for (objfile *objfile : current_program_space->objfiles ())
13823 {
13824 for (minimal_symbol *msymbol : objfile->msymbols ())
13825 {
13826 QUIT;
13827
13828 if (completion_skip_symbol (mode, msymbol))
13829 continue;
13830
13831 language symbol_language = msymbol->language ();
13832
13833 /* Ada minimal symbols won't have their language set to Ada. If
13834 we let completion_list_add_name compare using the
13835 default/C-like matcher, then when completing e.g., symbols in a
13836 package named "pck", we'd match internal Ada symbols like
13837 "pckS", which are invalid in an Ada expression, unless you wrap
13838 them in '<' '>' to request a verbatim match.
13839
13840 Unfortunately, some Ada encoded names successfully demangle as
13841 C++ symbols (using an old mangling scheme), such as "name__2Xn"
13842 -> "Xn::name(void)" and thus some Ada minimal symbols end up
13843 with the wrong language set. Paper over that issue here. */
13844 if (symbol_language == language_auto
13845 || symbol_language == language_cplus)
13846 symbol_language = language_ada;
13847
13848 completion_list_add_name (tracker,
13849 symbol_language,
13850 msymbol->linkage_name (),
13851 lookup_name, text, word);
13852 }
13853 }
13854
13855 /* Search upwards from currently selected frame (so that we can
13856 complete on local vars. */
13857
13858 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13859 {
13860 if (!BLOCK_SUPERBLOCK (b))
13861 surrounding_static_block = b; /* For elmin of dups */
13862
13863 ALL_BLOCK_SYMBOLS (b, iter, sym)
13864 {
13865 if (completion_skip_symbol (mode, sym))
13866 continue;
13867
13868 completion_list_add_name (tracker,
13869 sym->language (),
13870 sym->linkage_name (),
13871 lookup_name, text, word);
13872 }
13873 }
13874
13875 /* Go through the symtabs and check the externs and statics for
13876 symbols which match. */
13877
13878 for (objfile *objfile : current_program_space->objfiles ())
13879 {
13880 for (compunit_symtab *s : objfile->compunits ())
13881 {
13882 QUIT;
13883 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
13884 ALL_BLOCK_SYMBOLS (b, iter, sym)
13885 {
13886 if (completion_skip_symbol (mode, sym))
13887 continue;
13888
13889 completion_list_add_name (tracker,
13890 sym->language (),
13891 sym->linkage_name (),
13892 lookup_name, text, word);
13893 }
13894 }
13895 }
13896
13897 for (objfile *objfile : current_program_space->objfiles ())
13898 {
13899 for (compunit_symtab *s : objfile->compunits ())
13900 {
13901 QUIT;
13902 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
13903 /* Don't do this block twice. */
13904 if (b == surrounding_static_block)
13905 continue;
13906 ALL_BLOCK_SYMBOLS (b, iter, sym)
13907 {
13908 if (completion_skip_symbol (mode, sym))
13909 continue;
13910
13911 completion_list_add_name (tracker,
13912 sym->language (),
13913 sym->linkage_name (),
13914 lookup_name, text, word);
13915 }
13916 }
13917 }
13918 }
13919
f16a9f57
AB
13920 /* See language.h. */
13921
13922 gdb::unique_xmalloc_ptr<char> watch_location_expression
13923 (struct type *type, CORE_ADDR addr) const override
13924 {
13925 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
13926 std::string name = type_to_string (type);
13927 return gdb::unique_xmalloc_ptr<char>
13928 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
13929 }
13930
a1d1fa3e
AB
13931 /* See language.h. */
13932
13933 void value_print (struct value *val, struct ui_file *stream,
13934 const struct value_print_options *options) const override
13935 {
13936 return ada_value_print (val, stream, options);
13937 }
13938
ebe2334e
AB
13939 /* See language.h. */
13940
13941 void value_print_inner
13942 (struct value *val, struct ui_file *stream, int recurse,
13943 const struct value_print_options *options) const override
13944 {
13945 return ada_value_print_inner (val, stream, recurse, options);
13946 }
13947
a78a19b1
AB
13948 /* See language.h. */
13949
13950 struct block_symbol lookup_symbol_nonlocal
13951 (const char *name, const struct block *block,
13952 const domain_enum domain) const override
13953 {
13954 struct block_symbol sym;
13955
13956 sym = ada_lookup_symbol (name, block_static_block (block), domain);
13957 if (sym.symbol != NULL)
13958 return sym;
13959
13960 /* If we haven't found a match at this point, try the primitive
13961 types. In other languages, this search is performed before
13962 searching for global symbols in order to short-circuit that
13963 global-symbol search if it happens that the name corresponds
13964 to a primitive type. But we cannot do the same in Ada, because
13965 it is perfectly legitimate for a program to declare a type which
13966 has the same name as a standard type. If looking up a type in
13967 that situation, we have traditionally ignored the primitive type
13968 in favor of user-defined types. This is why, unlike most other
13969 languages, we search the primitive types this late and only after
13970 having searched the global symbols without success. */
13971
13972 if (domain == VAR_DOMAIN)
13973 {
13974 struct gdbarch *gdbarch;
13975
13976 if (block == NULL)
13977 gdbarch = target_gdbarch ();
13978 else
13979 gdbarch = block_gdbarch (block);
13980 sym.symbol
13981 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
13982 if (sym.symbol != NULL)
13983 return sym;
13984 }
13985
13986 return {};
13987 }
13988
87afa652
AB
13989 /* See language.h. */
13990
13991 int parser (struct parser_state *ps) const override
13992 {
13993 warnings_issued = 0;
13994 return ada_parse (ps);
13995 }
13996
1bf9c363
AB
13997 /* See language.h.
13998
13999 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14000 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14001 namespace) and converts operators that are user-defined into
14002 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
14003 a preferred result type [at the moment, only type void has any
14004 effect---causing procedures to be preferred over functions in calls].
14005 A null CONTEXT_TYPE indicates that a non-void return type is
14006 preferred. May change (expand) *EXP. */
14007
c5c41205
TT
14008 void post_parser (expression_up *expp, struct parser_state *ps)
14009 const override
1bf9c363
AB
14010 {
14011 struct type *context_type = NULL;
14012 int pc = 0;
14013
c5c41205 14014 if (ps->void_context_p)
1bf9c363
AB
14015 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14016
c5c41205
TT
14017 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
14018 ps->block_tracker);
1bf9c363
AB
14019 }
14020
ec8cec5b
AB
14021 /* See language.h. */
14022
14023 void emitchar (int ch, struct type *chtype,
14024 struct ui_file *stream, int quoter) const override
14025 {
14026 ada_emit_char (ch, chtype, stream, quoter, 1);
14027 }
14028
52b50f2c
AB
14029 /* See language.h. */
14030
14031 void printchar (int ch, struct type *chtype,
14032 struct ui_file *stream) const override
14033 {
14034 ada_printchar (ch, chtype, stream);
14035 }
14036
d711ee67
AB
14037 /* See language.h. */
14038
14039 void printstr (struct ui_file *stream, struct type *elttype,
14040 const gdb_byte *string, unsigned int length,
14041 const char *encoding, int force_ellipses,
14042 const struct value_print_options *options) const override
14043 {
14044 ada_printstr (stream, elttype, string, length, encoding,
14045 force_ellipses, options);
14046 }
14047
4ffc13fb
AB
14048 /* See language.h. */
14049
14050 void print_typedef (struct type *type, struct symbol *new_symbol,
14051 struct ui_file *stream) const override
14052 {
14053 ada_print_typedef (type, new_symbol, stream);
14054 }
14055
39e7ecca
AB
14056 /* See language.h. */
14057
14058 bool is_string_type_p (struct type *type) const override
14059 {
14060 return ada_is_string_type (type);
14061 }
14062
22e3f3ed
AB
14063 /* See language.h. */
14064
14065 const char *struct_too_deep_ellipsis () const override
14066 { return "(...)"; }
39e7ecca 14067
67bd3fd5
AB
14068 /* See language.h. */
14069
14070 bool c_style_arrays_p () const override
14071 { return false; }
14072
d3355e4d
AB
14073 /* See language.h. */
14074
14075 bool store_sym_names_in_linkage_form_p () const override
14076 { return true; }
14077
b63a3f3f
AB
14078 /* See language.h. */
14079
14080 const struct lang_varobj_ops *varobj_ops () const override
14081 { return &ada_varobj_ops; }
14082
5aba6ebe
AB
14083 /* See language.h. */
14084
14085 const struct exp_descriptor *expression_ops () const override
14086 { return &ada_exp_descriptor; }
14087
b7c6e27d
AB
14088 /* See language.h. */
14089
14090 const struct op_print *opcode_print_table () const override
14091 { return ada_op_print_tab; }
14092
c9debfb9
AB
14093protected:
14094 /* See language.h. */
14095
14096 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14097 (const lookup_name_info &lookup_name) const override
14098 {
14099 return ada_get_symbol_name_matcher (lookup_name);
14100 }
0874fd07
AB
14101};
14102
14103/* Single instance of the Ada language class. */
14104
14105static ada_language ada_language_defn;
14106
5bf03f13
JB
14107/* Command-list for the "set/show ada" prefix command. */
14108static struct cmd_list_element *set_ada_list;
14109static struct cmd_list_element *show_ada_list;
14110
2060206e
PA
14111static void
14112initialize_ada_catchpoint_ops (void)
14113{
14114 struct breakpoint_ops *ops;
14115
14116 initialize_breakpoint_ops ();
14117
14118 ops = &catch_exception_breakpoint_ops;
14119 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14120 ops->allocate_location = allocate_location_exception;
14121 ops->re_set = re_set_exception;
14122 ops->check_status = check_status_exception;
14123 ops->print_it = print_it_exception;
14124 ops->print_one = print_one_exception;
14125 ops->print_mention = print_mention_exception;
14126 ops->print_recreate = print_recreate_exception;
2060206e
PA
14127
14128 ops = &catch_exception_unhandled_breakpoint_ops;
14129 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14130 ops->allocate_location = allocate_location_exception;
14131 ops->re_set = re_set_exception;
14132 ops->check_status = check_status_exception;
14133 ops->print_it = print_it_exception;
14134 ops->print_one = print_one_exception;
14135 ops->print_mention = print_mention_exception;
14136 ops->print_recreate = print_recreate_exception;
2060206e
PA
14137
14138 ops = &catch_assert_breakpoint_ops;
14139 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14140 ops->allocate_location = allocate_location_exception;
14141 ops->re_set = re_set_exception;
14142 ops->check_status = check_status_exception;
14143 ops->print_it = print_it_exception;
14144 ops->print_one = print_one_exception;
14145 ops->print_mention = print_mention_exception;
14146 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14147
14148 ops = &catch_handlers_breakpoint_ops;
14149 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14150 ops->allocate_location = allocate_location_exception;
14151 ops->re_set = re_set_exception;
14152 ops->check_status = check_status_exception;
14153 ops->print_it = print_it_exception;
14154 ops->print_one = print_one_exception;
14155 ops->print_mention = print_mention_exception;
14156 ops->print_recreate = print_recreate_exception;
2060206e
PA
14157}
14158
3d9434b5
JB
14159/* This module's 'new_objfile' observer. */
14160
14161static void
14162ada_new_objfile_observer (struct objfile *objfile)
14163{
14164 ada_clear_symbol_cache ();
14165}
14166
14167/* This module's 'free_objfile' observer. */
14168
14169static void
14170ada_free_objfile_observer (struct objfile *objfile)
14171{
14172 ada_clear_symbol_cache ();
14173}
14174
6c265988 14175void _initialize_ada_language ();
d2e4a39e 14176void
6c265988 14177_initialize_ada_language ()
14f9c5c9 14178{
2060206e
PA
14179 initialize_ada_catchpoint_ops ();
14180
0743fc83
TT
14181 add_basic_prefix_cmd ("ada", no_class,
14182 _("Prefix command for changing Ada-specific settings."),
14183 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14184
0743fc83
TT
14185 add_show_prefix_cmd ("ada", no_class,
14186 _("Generic command for showing Ada-specific settings."),
14187 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14188
14189 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
dda83cd7 14190 &trust_pad_over_xvs, _("\
590042fc
PW
14191Enable or disable an optimization trusting PAD types over XVS types."), _("\
14192Show whether an optimization trusting PAD types over XVS types is activated."),
dda83cd7 14193 _("\
5bf03f13
JB
14194This is related to the encoding used by the GNAT compiler. The debugger\n\
14195should normally trust the contents of PAD types, but certain older versions\n\
14196of GNAT have a bug that sometimes causes the information in the PAD type\n\
14197to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14198work around this bug. It is always safe to turn this option \"off\", but\n\
14199this incurs a slight performance penalty, so it is recommended to NOT change\n\
14200this option to \"off\" unless necessary."),
dda83cd7 14201 NULL, NULL, &set_ada_list, &show_ada_list);
5bf03f13 14202
d72413e6
PMR
14203 add_setshow_boolean_cmd ("print-signatures", class_vars,
14204 &print_signatures, _("\
14205Enable or disable the output of formal and return types for functions in the \
590042fc 14206overloads selection menu."), _("\
d72413e6 14207Show whether the output of formal and return types for functions in the \
590042fc 14208overloads selection menu is activated."),
d72413e6
PMR
14209 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14210
9ac4176b
PA
14211 add_catch_command ("exception", _("\
14212Catch Ada exceptions, when raised.\n\
9bf7038b 14213Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14214Without any argument, stop when any Ada exception is raised.\n\
14215If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14216being raised does not have a handler (and will therefore lead to the task's\n\
14217termination).\n\
14218Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14219raised is the same as ARG.\n\
14220CONDITION is a boolean expression that is evaluated to see whether the\n\
14221exception should cause a stop."),
9ac4176b 14222 catch_ada_exception_command,
71bed2db 14223 catch_ada_completer,
9ac4176b
PA
14224 CATCH_PERMANENT,
14225 CATCH_TEMPORARY);
9f757bf7
XR
14226
14227 add_catch_command ("handlers", _("\
14228Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14229Usage: catch handlers [ARG] [if CONDITION]\n\
14230Without any argument, stop when any Ada exception is handled.\n\
14231With an argument, catch only exceptions with the given name.\n\
14232CONDITION is a boolean expression that is evaluated to see whether the\n\
14233exception should cause a stop."),
9f757bf7 14234 catch_ada_handlers_command,
dda83cd7 14235 catch_ada_completer,
9f757bf7
XR
14236 CATCH_PERMANENT,
14237 CATCH_TEMPORARY);
9ac4176b
PA
14238 add_catch_command ("assert", _("\
14239Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14240Usage: catch assert [if CONDITION]\n\
14241CONDITION is a boolean expression that is evaluated to see whether the\n\
14242exception should cause a stop."),
9ac4176b 14243 catch_assert_command,
dda83cd7 14244 NULL,
9ac4176b
PA
14245 CATCH_PERMANENT,
14246 CATCH_TEMPORARY);
14247
6c038f32 14248 varsize_limit = 65536;
3fcded8f
JB
14249 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14250 &varsize_limit, _("\
14251Set the maximum number of bytes allowed in a variable-size object."), _("\
14252Show the maximum number of bytes allowed in a variable-size object."), _("\
14253Attempts to access an object whose size is not a compile-time constant\n\
14254and exceeds this limit will cause an error."),
14255 NULL, NULL, &setlist, &showlist);
6c038f32 14256
778865d3
JB
14257 add_info ("exceptions", info_exceptions_command,
14258 _("\
14259List all Ada exception names.\n\
9bf7038b 14260Usage: info exceptions [REGEXP]\n\
778865d3
JB
14261If a regular expression is passed as an argument, only those matching\n\
14262the regular expression are listed."));
14263
0743fc83
TT
14264 add_basic_prefix_cmd ("ada", class_maintenance,
14265 _("Set Ada maintenance-related variables."),
14266 &maint_set_ada_cmdlist, "maintenance set ada ",
14267 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14268
0743fc83
TT
14269 add_show_prefix_cmd ("ada", class_maintenance,
14270 _("Show Ada maintenance-related variables."),
14271 &maint_show_ada_cmdlist, "maintenance show ada ",
14272 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14273
14274 add_setshow_boolean_cmd
14275 ("ignore-descriptive-types", class_maintenance,
14276 &ada_ignore_descriptive_types_p,
14277 _("Set whether descriptive types generated by GNAT should be ignored."),
14278 _("Show whether descriptive types generated by GNAT should be ignored."),
14279 _("\
14280When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14281DWARF attribute."),
14282 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14283
459a2e4c
TT
14284 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14285 NULL, xcalloc, xfree);
6b69afc4 14286
3d9434b5 14287 /* The ada-lang observers. */
76727919
TT
14288 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14289 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14290 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14291}