]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ada-lang.c
Implement the "&&" and "||" operators
[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>
03070ee9 60#include "ada-exp.h"
ccefe4c4 61
4c4b4cd2 62/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 63 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
64 Copied from valarith.c. */
65
66#ifndef TRUNCATION_TOWARDS_ZERO
67#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
68#endif
69
d2e4a39e 70static struct type *desc_base_type (struct type *);
14f9c5c9 71
d2e4a39e 72static struct type *desc_bounds_type (struct type *);
14f9c5c9 73
d2e4a39e 74static struct value *desc_bounds (struct value *);
14f9c5c9 75
d2e4a39e 76static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 77
d2e4a39e 78static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 79
556bdfd4 80static struct type *desc_data_target_type (struct type *);
14f9c5c9 81
d2e4a39e 82static struct value *desc_data (struct value *);
14f9c5c9 83
d2e4a39e 84static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 85
d2e4a39e 86static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 87
d2e4a39e 88static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 89
d2e4a39e 90static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 91
d2e4a39e 92static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 93
d2e4a39e 94static struct type *desc_index_type (struct type *, int);
14f9c5c9 95
d2e4a39e 96static int desc_arity (struct type *);
14f9c5c9 97
d2e4a39e 98static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 99
d2e4a39e 100static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 101
40bc484c 102static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 103
d1183b06 104static void ada_add_block_symbols (std::vector<struct block_symbol> &,
b5ec771e
PA
105 const struct block *,
106 const lookup_name_info &lookup_name,
107 domain_enum, struct objfile *);
14f9c5c9 108
d1183b06
TT
109static void ada_add_all_symbols (std::vector<struct block_symbol> &,
110 const struct block *,
b5ec771e
PA
111 const lookup_name_info &lookup_name,
112 domain_enum, int, int *);
22cee43f 113
d1183b06 114static int is_nonfunction (const std::vector<struct block_symbol> &);
14f9c5c9 115
d1183b06
TT
116static void add_defn_to_vec (std::vector<struct block_symbol> &,
117 struct symbol *,
dda83cd7 118 const struct block *);
14f9c5c9 119
e9d9f57e 120static struct value *resolve_subexp (expression_up *, int *, int,
dda83cd7 121 struct type *, int,
699bd4cf 122 innermost_block_tracker *);
14f9c5c9 123
e9d9f57e 124static void replace_operator_with_call (expression_up *, int, int, int,
dda83cd7 125 struct symbol *, const struct block *);
14f9c5c9 126
d2e4a39e 127static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 128
4c4b4cd2 129static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 130
d2e4a39e 131static int numeric_type_p (struct type *);
14f9c5c9 132
d2e4a39e 133static int integer_type_p (struct type *);
14f9c5c9 134
d2e4a39e 135static int scalar_type_p (struct type *);
14f9c5c9 136
d2e4a39e 137static int discrete_type_p (struct type *);
14f9c5c9 138
a121b7c1 139static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
dda83cd7 140 int, int);
4c4b4cd2 141
d2e4a39e 142static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 143
b4ba55a1 144static struct type *ada_find_parallel_type_with_name (struct type *,
dda83cd7 145 const char *);
b4ba55a1 146
d2e4a39e 147static int is_dynamic_field (struct type *, int);
14f9c5c9 148
10a2c479 149static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 150 const gdb_byte *,
dda83cd7 151 CORE_ADDR, struct value *);
4c4b4cd2
PH
152
153static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 154
28c85d6c 155static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 156
d2e4a39e 157static struct type *to_static_fixed_type (struct type *);
f192137b 158static struct type *static_unwrap_type (struct type *type);
14f9c5c9 159
d2e4a39e 160static struct value *unwrap_value (struct value *);
14f9c5c9 161
ad82864c 162static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 163
ad82864c 164static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 165
ad82864c
JB
166static long decode_packed_array_bitsize (struct type *);
167
168static struct value *decode_constrained_packed_array (struct value *);
169
ad82864c 170static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 171
d2e4a39e 172static struct value *value_subscript_packed (struct value *, int,
dda83cd7 173 struct value **);
14f9c5c9 174
4c4b4cd2 175static struct value *coerce_unspec_val_to_type (struct value *,
dda83cd7 176 struct type *);
14f9c5c9 177
d2e4a39e 178static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 179
d2e4a39e 180static int equiv_types (struct type *, struct type *);
14f9c5c9 181
d2e4a39e 182static int is_name_suffix (const char *);
14f9c5c9 183
59c8a30b 184static int advance_wild_match (const char **, const char *, char);
73589123 185
b5ec771e 186static bool wild_match (const char *name, const char *patn);
14f9c5c9 187
d2e4a39e 188static struct value *ada_coerce_ref (struct value *);
14f9c5c9 189
4c4b4cd2
PH
190static LONGEST pos_atr (struct value *);
191
3cb382c9 192static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 193
53a47a3e
TT
194static struct value *val_atr (struct type *, LONGEST);
195
4c4b4cd2 196static struct symbol *standard_lookup (const char *, const struct block *,
dda83cd7 197 domain_enum);
14f9c5c9 198
108d56a4 199static struct value *ada_search_struct_field (const char *, struct value *, int,
dda83cd7 200 struct type *);
4c4b4cd2 201
0d5cff50 202static int find_struct_field (const char *, struct type *, int,
dda83cd7 203 struct type **, int *, int *, int *, int *);
4c4b4cd2 204
d1183b06 205static int ada_resolve_function (std::vector<struct block_symbol> &,
dda83cd7
SM
206 struct value **, int, const char *,
207 struct type *, int);
4c4b4cd2 208
4c4b4cd2
PH
209static int ada_is_direct_array_type (struct type *);
210
52ce6436
PH
211static struct value *ada_index_struct_field (int, struct value *, int,
212 struct type *);
213
214static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
215 struct expression *,
216 int *, enum noside);
52ce6436 217
cf608cc4 218static void aggregate_assign_from_choices (struct value *, struct value *,
52ce6436 219 struct expression *,
cf608cc4
TT
220 int *, std::vector<LONGEST> &,
221 LONGEST, LONGEST);
52ce6436
PH
222
223static void aggregate_assign_positional (struct value *, struct value *,
224 struct expression *,
cf608cc4 225 int *, std::vector<LONGEST> &,
52ce6436
PH
226 LONGEST, LONGEST);
227
228
229static void aggregate_assign_others (struct value *, struct value *,
230 struct expression *,
cf608cc4
TT
231 int *, std::vector<LONGEST> &,
232 LONGEST, LONGEST);
52ce6436
PH
233
234
cf608cc4 235static void add_component_interval (LONGEST, LONGEST, std::vector<LONGEST> &);
52ce6436
PH
236
237
238static struct value *ada_evaluate_subexp (struct type *, struct expression *,
239 int *, enum noside);
240
241static void ada_forward_operator_length (struct expression *, int, int *,
242 int *);
852dff6c
JB
243
244static struct type *ada_find_any_type (const char *name);
b5ec771e
PA
245
246static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
247 (const lookup_name_info &lookup_name);
248
4c4b4cd2
PH
249\f
250
ee01b665
JB
251/* The result of a symbol lookup to be stored in our symbol cache. */
252
253struct cache_entry
254{
255 /* The name used to perform the lookup. */
256 const char *name;
257 /* The namespace used during the lookup. */
fe978cb0 258 domain_enum domain;
ee01b665
JB
259 /* The symbol returned by the lookup, or NULL if no matching symbol
260 was found. */
261 struct symbol *sym;
262 /* The block where the symbol was found, or NULL if no matching
263 symbol was found. */
264 const struct block *block;
265 /* A pointer to the next entry with the same hash. */
266 struct cache_entry *next;
267};
268
269/* The Ada symbol cache, used to store the result of Ada-mode symbol
270 lookups in the course of executing the user's commands.
271
272 The cache is implemented using a simple, fixed-sized hash.
273 The size is fixed on the grounds that there are not likely to be
274 all that many symbols looked up during any given session, regardless
275 of the size of the symbol table. If we decide to go to a resizable
276 table, let's just use the stuff from libiberty instead. */
277
278#define HASH_SIZE 1009
279
280struct ada_symbol_cache
281{
282 /* An obstack used to store the entries in our cache. */
bdcccc56 283 struct auto_obstack cache_space;
ee01b665
JB
284
285 /* The root of the hash table used to implement our symbol cache. */
bdcccc56 286 struct cache_entry *root[HASH_SIZE] {};
ee01b665
JB
287};
288
4c4b4cd2 289/* Maximum-sized dynamic type. */
14f9c5c9
AS
290static unsigned int varsize_limit;
291
67cb5b2d 292static const char ada_completer_word_break_characters[] =
4c4b4cd2
PH
293#ifdef VMS
294 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
295#else
14f9c5c9 296 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 297#endif
14f9c5c9 298
4c4b4cd2 299/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 300static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 301 = "__gnat_ada_main_program_name";
14f9c5c9 302
4c4b4cd2
PH
303/* Limit on the number of warnings to raise per expression evaluation. */
304static int warning_limit = 2;
305
306/* Number of warning messages issued; reset to 0 by cleanups after
307 expression evaluation. */
308static int warnings_issued = 0;
309
27087b7f 310static const char * const known_runtime_file_name_patterns[] = {
4c4b4cd2
PH
311 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
312};
313
27087b7f 314static const char * const known_auxiliary_function_name_patterns[] = {
4c4b4cd2
PH
315 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
316};
317
c6044dd1
JB
318/* Maintenance-related settings for this module. */
319
320static struct cmd_list_element *maint_set_ada_cmdlist;
321static struct cmd_list_element *maint_show_ada_cmdlist;
322
c6044dd1
JB
323/* The "maintenance ada set/show ignore-descriptive-type" value. */
324
491144b5 325static bool ada_ignore_descriptive_types_p = false;
c6044dd1 326
e802dbe0
JB
327 /* Inferior-specific data. */
328
329/* Per-inferior data for this module. */
330
331struct ada_inferior_data
332{
333 /* The ada__tags__type_specific_data type, which is used when decoding
334 tagged types. With older versions of GNAT, this type was directly
335 accessible through a component ("tsd") in the object tag. But this
336 is no longer the case, so we cache it for each inferior. */
f37b313d 337 struct type *tsd_type = nullptr;
3eecfa55
JB
338
339 /* The exception_support_info data. This data is used to determine
340 how to implement support for Ada exception catchpoints in a given
341 inferior. */
f37b313d 342 const struct exception_support_info *exception_info = nullptr;
e802dbe0
JB
343};
344
345/* Our key to this module's inferior data. */
f37b313d 346static const struct inferior_key<ada_inferior_data> ada_inferior_data;
e802dbe0
JB
347
348/* Return our inferior data for the given inferior (INF).
349
350 This function always returns a valid pointer to an allocated
351 ada_inferior_data structure. If INF's inferior data has not
352 been previously set, this functions creates a new one with all
353 fields set to zero, sets INF's inferior to it, and then returns
354 a pointer to that newly allocated ada_inferior_data. */
355
356static struct ada_inferior_data *
357get_ada_inferior_data (struct inferior *inf)
358{
359 struct ada_inferior_data *data;
360
f37b313d 361 data = ada_inferior_data.get (inf);
e802dbe0 362 if (data == NULL)
f37b313d 363 data = ada_inferior_data.emplace (inf);
e802dbe0
JB
364
365 return data;
366}
367
368/* Perform all necessary cleanups regarding our module's inferior data
369 that is required after the inferior INF just exited. */
370
371static void
372ada_inferior_exit (struct inferior *inf)
373{
f37b313d 374 ada_inferior_data.clear (inf);
e802dbe0
JB
375}
376
ee01b665
JB
377
378 /* program-space-specific data. */
379
380/* This module's per-program-space data. */
381struct ada_pspace_data
382{
383 /* The Ada symbol cache. */
bdcccc56 384 std::unique_ptr<ada_symbol_cache> sym_cache;
ee01b665
JB
385};
386
387/* Key to our per-program-space data. */
f37b313d 388static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
ee01b665
JB
389
390/* Return this module's data for the given program space (PSPACE).
391 If not is found, add a zero'ed one now.
392
393 This function always returns a valid object. */
394
395static struct ada_pspace_data *
396get_ada_pspace_data (struct program_space *pspace)
397{
398 struct ada_pspace_data *data;
399
f37b313d 400 data = ada_pspace_data_handle.get (pspace);
ee01b665 401 if (data == NULL)
f37b313d 402 data = ada_pspace_data_handle.emplace (pspace);
ee01b665
JB
403
404 return data;
405}
406
dda83cd7 407 /* Utilities */
4c4b4cd2 408
720d1a40 409/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 410 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
411
412 Normally, we really expect a typedef type to only have 1 typedef layer.
413 In other words, we really expect the target type of a typedef type to be
414 a non-typedef type. This is particularly true for Ada units, because
415 the language does not have a typedef vs not-typedef distinction.
416 In that respect, the Ada compiler has been trying to eliminate as many
417 typedef definitions in the debugging information, since they generally
418 do not bring any extra information (we still use typedef under certain
419 circumstances related mostly to the GNAT encoding).
420
421 Unfortunately, we have seen situations where the debugging information
422 generated by the compiler leads to such multiple typedef layers. For
423 instance, consider the following example with stabs:
424
425 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
426 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
427
428 This is an error in the debugging information which causes type
429 pck__float_array___XUP to be defined twice, and the second time,
430 it is defined as a typedef of a typedef.
431
432 This is on the fringe of legality as far as debugging information is
433 concerned, and certainly unexpected. But it is easy to handle these
434 situations correctly, so we can afford to be lenient in this case. */
435
436static struct type *
437ada_typedef_target_type (struct type *type)
438{
78134374 439 while (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
440 type = TYPE_TARGET_TYPE (type);
441 return type;
442}
443
41d27058
JB
444/* Given DECODED_NAME a string holding a symbol name in its
445 decoded form (ie using the Ada dotted notation), returns
446 its unqualified name. */
447
448static const char *
449ada_unqualified_name (const char *decoded_name)
450{
2b0f535a
JB
451 const char *result;
452
453 /* If the decoded name starts with '<', it means that the encoded
454 name does not follow standard naming conventions, and thus that
455 it is not your typical Ada symbol name. Trying to unqualify it
456 is therefore pointless and possibly erroneous. */
457 if (decoded_name[0] == '<')
458 return decoded_name;
459
460 result = strrchr (decoded_name, '.');
41d27058
JB
461 if (result != NULL)
462 result++; /* Skip the dot... */
463 else
464 result = decoded_name;
465
466 return result;
467}
468
39e7af3e 469/* Return a string starting with '<', followed by STR, and '>'. */
41d27058 470
39e7af3e 471static std::string
41d27058
JB
472add_angle_brackets (const char *str)
473{
39e7af3e 474 return string_printf ("<%s>", str);
41d27058 475}
96d887e8 476
14f9c5c9 477/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 478 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
479
480static int
ebf56fd3 481field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
482{
483 int len = strlen (target);
5b4ee69b 484
d2e4a39e 485 return
4c4b4cd2
PH
486 (strncmp (field_name, target, len) == 0
487 && (field_name[len] == '\0'
dda83cd7
SM
488 || (startswith (field_name + len, "___")
489 && strcmp (field_name + strlen (field_name) - 6,
490 "___XVN") != 0)));
14f9c5c9
AS
491}
492
493
872c8b51
JB
494/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
495 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
496 and return its index. This function also handles fields whose name
497 have ___ suffixes because the compiler sometimes alters their name
498 by adding such a suffix to represent fields with certain constraints.
499 If the field could not be found, return a negative number if
500 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
501
502int
503ada_get_field_index (const struct type *type, const char *field_name,
dda83cd7 504 int maybe_missing)
4c4b4cd2
PH
505{
506 int fieldno;
872c8b51
JB
507 struct type *struct_type = check_typedef ((struct type *) type);
508
1f704f76 509 for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
872c8b51 510 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
511 return fieldno;
512
513 if (!maybe_missing)
323e0a4a 514 error (_("Unable to find field %s in struct %s. Aborting"),
dda83cd7 515 field_name, struct_type->name ());
4c4b4cd2
PH
516
517 return -1;
518}
519
520/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
521
522int
d2e4a39e 523ada_name_prefix_len (const char *name)
14f9c5c9
AS
524{
525 if (name == NULL)
526 return 0;
d2e4a39e 527 else
14f9c5c9 528 {
d2e4a39e 529 const char *p = strstr (name, "___");
5b4ee69b 530
14f9c5c9 531 if (p == NULL)
dda83cd7 532 return strlen (name);
14f9c5c9 533 else
dda83cd7 534 return p - name;
14f9c5c9
AS
535 }
536}
537
4c4b4cd2
PH
538/* Return non-zero if SUFFIX is a suffix of STR.
539 Return zero if STR is null. */
540
14f9c5c9 541static int
d2e4a39e 542is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
543{
544 int len1, len2;
5b4ee69b 545
14f9c5c9
AS
546 if (str == NULL)
547 return 0;
548 len1 = strlen (str);
549 len2 = strlen (suffix);
4c4b4cd2 550 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
551}
552
4c4b4cd2
PH
553/* The contents of value VAL, treated as a value of type TYPE. The
554 result is an lval in memory if VAL is. */
14f9c5c9 555
d2e4a39e 556static struct value *
4c4b4cd2 557coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 558{
61ee279c 559 type = ada_check_typedef (type);
df407dfe 560 if (value_type (val) == type)
4c4b4cd2 561 return val;
d2e4a39e 562 else
14f9c5c9 563 {
4c4b4cd2
PH
564 struct value *result;
565
566 /* Make sure that the object size is not unreasonable before
dda83cd7 567 trying to allocate some memory for it. */
c1b5a1a6 568 ada_ensure_varsize_limit (type);
4c4b4cd2 569
f73e424f
TT
570 if (value_optimized_out (val))
571 result = allocate_optimized_out_value (type);
572 else if (value_lazy (val)
573 /* Be careful not to make a lazy not_lval value. */
574 || (VALUE_LVAL (val) != not_lval
575 && TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))))
41e8491f
JK
576 result = allocate_value_lazy (type);
577 else
578 {
579 result = allocate_value (type);
f73e424f 580 value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 581 }
74bcbdf3 582 set_value_component_location (result, val);
9bbda503
AC
583 set_value_bitsize (result, value_bitsize (val));
584 set_value_bitpos (result, value_bitpos (val));
c408a94f
TT
585 if (VALUE_LVAL (result) == lval_memory)
586 set_value_address (result, value_address (val));
14f9c5c9
AS
587 return result;
588 }
589}
590
fc1a4b47
AC
591static const gdb_byte *
592cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
593{
594 if (valaddr == NULL)
595 return NULL;
596 else
597 return valaddr + offset;
598}
599
600static CORE_ADDR
ebf56fd3 601cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
602{
603 if (address == 0)
604 return 0;
d2e4a39e 605 else
14f9c5c9
AS
606 return address + offset;
607}
608
4c4b4cd2
PH
609/* Issue a warning (as for the definition of warning in utils.c, but
610 with exactly one argument rather than ...), unless the limit on the
611 number of warnings has passed during the evaluation of the current
612 expression. */
a2249542 613
77109804
AC
614/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
615 provided by "complaint". */
a0b31db1 616static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 617
14f9c5c9 618static void
a2249542 619lim_warning (const char *format, ...)
14f9c5c9 620{
a2249542 621 va_list args;
a2249542 622
5b4ee69b 623 va_start (args, format);
4c4b4cd2
PH
624 warnings_issued += 1;
625 if (warnings_issued <= warning_limit)
a2249542
MK
626 vwarning (format, args);
627
628 va_end (args);
4c4b4cd2
PH
629}
630
714e53ab
PH
631/* Issue an error if the size of an object of type T is unreasonable,
632 i.e. if it would be a bad idea to allocate a value of this type in
633 GDB. */
634
c1b5a1a6
JB
635void
636ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
637{
638 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 639 error (_("object size is larger than varsize-limit"));
714e53ab
PH
640}
641
0963b4bd 642/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 643static LONGEST
c3e5cd34 644max_of_size (int size)
4c4b4cd2 645{
76a01679 646 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 647
76a01679 648 return top_bit | (top_bit - 1);
4c4b4cd2
PH
649}
650
0963b4bd 651/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 652static LONGEST
c3e5cd34 653min_of_size (int size)
4c4b4cd2 654{
c3e5cd34 655 return -max_of_size (size) - 1;
4c4b4cd2
PH
656}
657
0963b4bd 658/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 659static ULONGEST
c3e5cd34 660umax_of_size (int size)
4c4b4cd2 661{
76a01679 662 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 663
76a01679 664 return top_bit | (top_bit - 1);
4c4b4cd2
PH
665}
666
0963b4bd 667/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
668static LONGEST
669max_of_type (struct type *t)
4c4b4cd2 670{
c6d940a9 671 if (t->is_unsigned ())
c3e5cd34
PH
672 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
673 else
674 return max_of_size (TYPE_LENGTH (t));
675}
676
0963b4bd 677/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
678static LONGEST
679min_of_type (struct type *t)
680{
c6d940a9 681 if (t->is_unsigned ())
c3e5cd34
PH
682 return 0;
683 else
684 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
685}
686
687/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
688LONGEST
689ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 690{
b249d2c2 691 type = resolve_dynamic_type (type, {}, 0);
78134374 692 switch (type->code ())
4c4b4cd2
PH
693 {
694 case TYPE_CODE_RANGE:
d1fd641e
SM
695 {
696 const dynamic_prop &high = type->bounds ()->high;
697
698 if (high.kind () == PROP_CONST)
699 return high.const_val ();
700 else
701 {
702 gdb_assert (high.kind () == PROP_UNDEFINED);
703
704 /* This happens when trying to evaluate a type's dynamic bound
705 without a live target. There is nothing relevant for us to
706 return here, so return 0. */
707 return 0;
708 }
709 }
4c4b4cd2 710 case TYPE_CODE_ENUM:
1f704f76 711 return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
690cc4eb
PH
712 case TYPE_CODE_BOOL:
713 return 1;
714 case TYPE_CODE_CHAR:
76a01679 715 case TYPE_CODE_INT:
690cc4eb 716 return max_of_type (type);
4c4b4cd2 717 default:
43bbcdc2 718 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
719 }
720}
721
14e75d8e 722/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
723LONGEST
724ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 725{
b249d2c2 726 type = resolve_dynamic_type (type, {}, 0);
78134374 727 switch (type->code ())
4c4b4cd2
PH
728 {
729 case TYPE_CODE_RANGE:
d1fd641e
SM
730 {
731 const dynamic_prop &low = type->bounds ()->low;
732
733 if (low.kind () == PROP_CONST)
734 return low.const_val ();
735 else
736 {
737 gdb_assert (low.kind () == PROP_UNDEFINED);
738
739 /* This happens when trying to evaluate a type's dynamic bound
740 without a live target. There is nothing relevant for us to
741 return here, so return 0. */
742 return 0;
743 }
744 }
4c4b4cd2 745 case TYPE_CODE_ENUM:
14e75d8e 746 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
747 case TYPE_CODE_BOOL:
748 return 0;
749 case TYPE_CODE_CHAR:
76a01679 750 case TYPE_CODE_INT:
690cc4eb 751 return min_of_type (type);
4c4b4cd2 752 default:
43bbcdc2 753 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
754 }
755}
756
757/* The identity on non-range types. For range types, the underlying
76a01679 758 non-range scalar type. */
4c4b4cd2
PH
759
760static struct type *
18af8284 761get_base_type (struct type *type)
4c4b4cd2 762{
78134374 763 while (type != NULL && type->code () == TYPE_CODE_RANGE)
4c4b4cd2 764 {
76a01679 765 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
dda83cd7 766 return type;
4c4b4cd2
PH
767 type = TYPE_TARGET_TYPE (type);
768 }
769 return type;
14f9c5c9 770}
41246937
JB
771
772/* Return a decoded version of the given VALUE. This means returning
773 a value whose type is obtained by applying all the GNAT-specific
85102364 774 encodings, making the resulting type a static but standard description
41246937
JB
775 of the initial type. */
776
777struct value *
778ada_get_decoded_value (struct value *value)
779{
780 struct type *type = ada_check_typedef (value_type (value));
781
782 if (ada_is_array_descriptor_type (type)
783 || (ada_is_constrained_packed_array_type (type)
dda83cd7 784 && type->code () != TYPE_CODE_PTR))
41246937 785 {
78134374 786 if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
dda83cd7 787 value = ada_coerce_to_simple_array_ptr (value);
41246937 788 else
dda83cd7 789 value = ada_coerce_to_simple_array (value);
41246937
JB
790 }
791 else
792 value = ada_to_fixed_value (value);
793
794 return value;
795}
796
797/* Same as ada_get_decoded_value, but with the given TYPE.
798 Because there is no associated actual value for this type,
799 the resulting type might be a best-effort approximation in
800 the case of dynamic types. */
801
802struct type *
803ada_get_decoded_type (struct type *type)
804{
805 type = to_static_fixed_type (type);
806 if (ada_is_constrained_packed_array_type (type))
807 type = ada_coerce_to_simple_array_type (type);
808 return type;
809}
810
4c4b4cd2 811\f
76a01679 812
dda83cd7 813 /* Language Selection */
14f9c5c9
AS
814
815/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 816 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 817
de93309a 818static enum language
ccefe4c4 819ada_update_initial_language (enum language lang)
14f9c5c9 820{
cafb3438 821 if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
4c4b4cd2 822 return language_ada;
14f9c5c9
AS
823
824 return lang;
825}
96d887e8
PH
826
827/* If the main procedure is written in Ada, then return its name.
828 The result is good until the next call. Return NULL if the main
829 procedure doesn't appear to be in Ada. */
830
831char *
832ada_main_name (void)
833{
3b7344d5 834 struct bound_minimal_symbol msym;
e83e4e24 835 static gdb::unique_xmalloc_ptr<char> main_program_name;
6c038f32 836
96d887e8
PH
837 /* For Ada, the name of the main procedure is stored in a specific
838 string constant, generated by the binder. Look for that symbol,
839 extract its address, and then read that string. If we didn't find
840 that string, then most probably the main procedure is not written
841 in Ada. */
842 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
843
3b7344d5 844 if (msym.minsym != NULL)
96d887e8 845 {
66920317 846 CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 847 if (main_program_name_addr == 0)
dda83cd7 848 error (_("Invalid address for Ada main program name."));
96d887e8 849
66920317 850 main_program_name = target_read_string (main_program_name_addr, 1024);
e83e4e24 851 return main_program_name.get ();
96d887e8
PH
852 }
853
854 /* The main procedure doesn't seem to be in Ada. */
855 return NULL;
856}
14f9c5c9 857\f
dda83cd7 858 /* Symbols */
d2e4a39e 859
4c4b4cd2
PH
860/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
861 of NULLs. */
14f9c5c9 862
d2e4a39e
AS
863const struct ada_opname_map ada_opname_table[] = {
864 {"Oadd", "\"+\"", BINOP_ADD},
865 {"Osubtract", "\"-\"", BINOP_SUB},
866 {"Omultiply", "\"*\"", BINOP_MUL},
867 {"Odivide", "\"/\"", BINOP_DIV},
868 {"Omod", "\"mod\"", BINOP_MOD},
869 {"Orem", "\"rem\"", BINOP_REM},
870 {"Oexpon", "\"**\"", BINOP_EXP},
871 {"Olt", "\"<\"", BINOP_LESS},
872 {"Ole", "\"<=\"", BINOP_LEQ},
873 {"Ogt", "\">\"", BINOP_GTR},
874 {"Oge", "\">=\"", BINOP_GEQ},
875 {"Oeq", "\"=\"", BINOP_EQUAL},
876 {"One", "\"/=\"", BINOP_NOTEQUAL},
877 {"Oand", "\"and\"", BINOP_BITWISE_AND},
878 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
879 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
880 {"Oconcat", "\"&\"", BINOP_CONCAT},
881 {"Oabs", "\"abs\"", UNOP_ABS},
882 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
883 {"Oadd", "\"+\"", UNOP_PLUS},
884 {"Osubtract", "\"-\"", UNOP_NEG},
885 {NULL, NULL}
14f9c5c9
AS
886};
887
5c4258f4 888/* The "encoded" form of DECODED, according to GNAT conventions. If
b5ec771e 889 THROW_ERRORS, throw an error if invalid operator name is found.
5c4258f4 890 Otherwise, return the empty string in that case. */
4c4b4cd2 891
5c4258f4 892static std::string
b5ec771e 893ada_encode_1 (const char *decoded, bool throw_errors)
14f9c5c9 894{
4c4b4cd2 895 if (decoded == NULL)
5c4258f4 896 return {};
14f9c5c9 897
5c4258f4
TT
898 std::string encoding_buffer;
899 for (const char *p = decoded; *p != '\0'; p += 1)
14f9c5c9 900 {
cdc7bb92 901 if (*p == '.')
5c4258f4 902 encoding_buffer.append ("__");
14f9c5c9 903 else if (*p == '"')
dda83cd7
SM
904 {
905 const struct ada_opname_map *mapping;
906
907 for (mapping = ada_opname_table;
908 mapping->encoded != NULL
909 && !startswith (p, mapping->decoded); mapping += 1)
910 ;
911 if (mapping->encoded == NULL)
b5ec771e
PA
912 {
913 if (throw_errors)
914 error (_("invalid Ada operator name: %s"), p);
915 else
5c4258f4 916 return {};
b5ec771e 917 }
5c4258f4 918 encoding_buffer.append (mapping->encoded);
dda83cd7
SM
919 break;
920 }
d2e4a39e 921 else
5c4258f4 922 encoding_buffer.push_back (*p);
14f9c5c9
AS
923 }
924
4c4b4cd2 925 return encoding_buffer;
14f9c5c9
AS
926}
927
5c4258f4 928/* The "encoded" form of DECODED, according to GNAT conventions. */
b5ec771e 929
5c4258f4 930std::string
b5ec771e
PA
931ada_encode (const char *decoded)
932{
933 return ada_encode_1 (decoded, true);
934}
935
14f9c5c9 936/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
937 quotes, unfolded, but with the quotes stripped away. Result good
938 to next call. */
939
5f9febe0 940static const char *
e0802d59 941ada_fold_name (gdb::string_view name)
14f9c5c9 942{
5f9febe0 943 static std::string fold_storage;
14f9c5c9 944
6a780b67 945 if (!name.empty () && name[0] == '\'')
01573d73 946 fold_storage = gdb::to_string (name.substr (1, name.size () - 2));
14f9c5c9
AS
947 else
948 {
01573d73 949 fold_storage = gdb::to_string (name);
5f9febe0
TT
950 for (int i = 0; i < name.size (); i += 1)
951 fold_storage[i] = tolower (fold_storage[i]);
14f9c5c9
AS
952 }
953
5f9febe0 954 return fold_storage.c_str ();
14f9c5c9
AS
955}
956
529cad9c
PH
957/* Return nonzero if C is either a digit or a lowercase alphabet character. */
958
959static int
960is_lower_alphanum (const char c)
961{
962 return (isdigit (c) || (isalpha (c) && islower (c)));
963}
964
c90092fe
JB
965/* ENCODED is the linkage name of a symbol and LEN contains its length.
966 This function saves in LEN the length of that same symbol name but
967 without either of these suffixes:
29480c32
JB
968 . .{DIGIT}+
969 . ${DIGIT}+
970 . ___{DIGIT}+
971 . __{DIGIT}+.
c90092fe 972
29480c32
JB
973 These are suffixes introduced by the compiler for entities such as
974 nested subprogram for instance, in order to avoid name clashes.
975 They do not serve any purpose for the debugger. */
976
977static void
978ada_remove_trailing_digits (const char *encoded, int *len)
979{
980 if (*len > 1 && isdigit (encoded[*len - 1]))
981 {
982 int i = *len - 2;
5b4ee69b 983
29480c32 984 while (i > 0 && isdigit (encoded[i]))
dda83cd7 985 i--;
29480c32 986 if (i >= 0 && encoded[i] == '.')
dda83cd7 987 *len = i;
29480c32 988 else if (i >= 0 && encoded[i] == '$')
dda83cd7 989 *len = i;
61012eef 990 else if (i >= 2 && startswith (encoded + i - 2, "___"))
dda83cd7 991 *len = i - 2;
61012eef 992 else if (i >= 1 && startswith (encoded + i - 1, "__"))
dda83cd7 993 *len = i - 1;
29480c32
JB
994 }
995}
996
997/* Remove the suffix introduced by the compiler for protected object
998 subprograms. */
999
1000static void
1001ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1002{
1003 /* Remove trailing N. */
1004
1005 /* Protected entry subprograms are broken into two
1006 separate subprograms: The first one is unprotected, and has
1007 a 'N' suffix; the second is the protected version, and has
0963b4bd 1008 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1009 the protection. Since the P subprograms are internally generated,
1010 we leave these names undecoded, giving the user a clue that this
1011 entity is internal. */
1012
1013 if (*len > 1
1014 && encoded[*len - 1] == 'N'
1015 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1016 *len = *len - 1;
1017}
1018
1019/* If ENCODED follows the GNAT entity encoding conventions, then return
1020 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
f945dedf 1021 replaced by ENCODED. */
14f9c5c9 1022
f945dedf 1023std::string
4c4b4cd2 1024ada_decode (const char *encoded)
14f9c5c9
AS
1025{
1026 int i, j;
1027 int len0;
d2e4a39e 1028 const char *p;
14f9c5c9 1029 int at_start_name;
f945dedf 1030 std::string decoded;
d2e4a39e 1031
0d81f350
JG
1032 /* With function descriptors on PPC64, the value of a symbol named
1033 ".FN", if it exists, is the entry point of the function "FN". */
1034 if (encoded[0] == '.')
1035 encoded += 1;
1036
29480c32
JB
1037 /* The name of the Ada main procedure starts with "_ada_".
1038 This prefix is not part of the decoded name, so skip this part
1039 if we see this prefix. */
61012eef 1040 if (startswith (encoded, "_ada_"))
4c4b4cd2 1041 encoded += 5;
14f9c5c9 1042
29480c32
JB
1043 /* If the name starts with '_', then it is not a properly encoded
1044 name, so do not attempt to decode it. Similarly, if the name
1045 starts with '<', the name should not be decoded. */
4c4b4cd2 1046 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1047 goto Suppress;
1048
4c4b4cd2 1049 len0 = strlen (encoded);
4c4b4cd2 1050
29480c32
JB
1051 ada_remove_trailing_digits (encoded, &len0);
1052 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1053
4c4b4cd2
PH
1054 /* Remove the ___X.* suffix if present. Do not forget to verify that
1055 the suffix is located before the current "end" of ENCODED. We want
1056 to avoid re-matching parts of ENCODED that have previously been
1057 marked as discarded (by decrementing LEN0). */
1058 p = strstr (encoded, "___");
1059 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1060 {
1061 if (p[3] == 'X')
dda83cd7 1062 len0 = p - encoded;
14f9c5c9 1063 else
dda83cd7 1064 goto Suppress;
14f9c5c9 1065 }
4c4b4cd2 1066
29480c32
JB
1067 /* Remove any trailing TKB suffix. It tells us that this symbol
1068 is for the body of a task, but that information does not actually
1069 appear in the decoded name. */
1070
61012eef 1071 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1072 len0 -= 3;
76a01679 1073
a10967fa
JB
1074 /* Remove any trailing TB suffix. The TB suffix is slightly different
1075 from the TKB suffix because it is used for non-anonymous task
1076 bodies. */
1077
61012eef 1078 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1079 len0 -= 2;
1080
29480c32
JB
1081 /* Remove trailing "B" suffixes. */
1082 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1083
61012eef 1084 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1085 len0 -= 1;
1086
4c4b4cd2 1087 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1088
f945dedf 1089 decoded.resize (2 * len0 + 1, 'X');
14f9c5c9 1090
29480c32
JB
1091 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1092
4c4b4cd2 1093 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1094 {
4c4b4cd2
PH
1095 i = len0 - 2;
1096 while ((i >= 0 && isdigit (encoded[i]))
dda83cd7
SM
1097 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1098 i -= 1;
4c4b4cd2 1099 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
dda83cd7 1100 len0 = i - 1;
4c4b4cd2 1101 else if (encoded[i] == '$')
dda83cd7 1102 len0 = i;
d2e4a39e 1103 }
14f9c5c9 1104
29480c32
JB
1105 /* The first few characters that are not alphabetic are not part
1106 of any encoding we use, so we can copy them over verbatim. */
1107
4c4b4cd2
PH
1108 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1109 decoded[j] = encoded[i];
14f9c5c9
AS
1110
1111 at_start_name = 1;
1112 while (i < len0)
1113 {
29480c32 1114 /* Is this a symbol function? */
4c4b4cd2 1115 if (at_start_name && encoded[i] == 'O')
dda83cd7
SM
1116 {
1117 int k;
1118
1119 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1120 {
1121 int op_len = strlen (ada_opname_table[k].encoded);
1122 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1123 op_len - 1) == 0)
1124 && !isalnum (encoded[i + op_len]))
1125 {
1126 strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
1127 at_start_name = 0;
1128 i += op_len;
1129 j += strlen (ada_opname_table[k].decoded);
1130 break;
1131 }
1132 }
1133 if (ada_opname_table[k].encoded != NULL)
1134 continue;
1135 }
14f9c5c9
AS
1136 at_start_name = 0;
1137
529cad9c 1138 /* Replace "TK__" with "__", which will eventually be translated
dda83cd7 1139 into "." (just below). */
529cad9c 1140
61012eef 1141 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
dda83cd7 1142 i += 2;
529cad9c 1143
29480c32 1144 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
dda83cd7
SM
1145 be translated into "." (just below). These are internal names
1146 generated for anonymous blocks inside which our symbol is nested. */
29480c32
JB
1147
1148 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
dda83cd7
SM
1149 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1150 && isdigit (encoded [i+4]))
1151 {
1152 int k = i + 5;
1153
1154 while (k < len0 && isdigit (encoded[k]))
1155 k++; /* Skip any extra digit. */
1156
1157 /* Double-check that the "__B_{DIGITS}+" sequence we found
1158 is indeed followed by "__". */
1159 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1160 i = k;
1161 }
29480c32 1162
529cad9c
PH
1163 /* Remove _E{DIGITS}+[sb] */
1164
1165 /* Just as for protected object subprograms, there are 2 categories
dda83cd7
SM
1166 of subprograms created by the compiler for each entry. The first
1167 one implements the actual entry code, and has a suffix following
1168 the convention above; the second one implements the barrier and
1169 uses the same convention as above, except that the 'E' is replaced
1170 by a 'B'.
529cad9c 1171
dda83cd7
SM
1172 Just as above, we do not decode the name of barrier functions
1173 to give the user a clue that the code he is debugging has been
1174 internally generated. */
529cad9c
PH
1175
1176 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
dda83cd7
SM
1177 && isdigit (encoded[i+2]))
1178 {
1179 int k = i + 3;
1180
1181 while (k < len0 && isdigit (encoded[k]))
1182 k++;
1183
1184 if (k < len0
1185 && (encoded[k] == 'b' || encoded[k] == 's'))
1186 {
1187 k++;
1188 /* Just as an extra precaution, make sure that if this
1189 suffix is followed by anything else, it is a '_'.
1190 Otherwise, we matched this sequence by accident. */
1191 if (k == len0
1192 || (k < len0 && encoded[k] == '_'))
1193 i = k;
1194 }
1195 }
529cad9c
PH
1196
1197 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
dda83cd7 1198 the GNAT front-end in protected object subprograms. */
529cad9c
PH
1199
1200 if (i < len0 + 3
dda83cd7
SM
1201 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1202 {
1203 /* Backtrack a bit up until we reach either the begining of
1204 the encoded name, or "__". Make sure that we only find
1205 digits or lowercase characters. */
1206 const char *ptr = encoded + i - 1;
1207
1208 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1209 ptr--;
1210 if (ptr < encoded
1211 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1212 i++;
1213 }
529cad9c 1214
4c4b4cd2 1215 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
dda83cd7
SM
1216 {
1217 /* This is a X[bn]* sequence not separated from the previous
1218 part of the name with a non-alpha-numeric character (in other
1219 words, immediately following an alpha-numeric character), then
1220 verify that it is placed at the end of the encoded name. If
1221 not, then the encoding is not valid and we should abort the
1222 decoding. Otherwise, just skip it, it is used in body-nested
1223 package names. */
1224 do
1225 i += 1;
1226 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1227 if (i < len0)
1228 goto Suppress;
1229 }
cdc7bb92 1230 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
dda83cd7
SM
1231 {
1232 /* Replace '__' by '.'. */
1233 decoded[j] = '.';
1234 at_start_name = 1;
1235 i += 2;
1236 j += 1;
1237 }
14f9c5c9 1238 else
dda83cd7
SM
1239 {
1240 /* It's a character part of the decoded name, so just copy it
1241 over. */
1242 decoded[j] = encoded[i];
1243 i += 1;
1244 j += 1;
1245 }
14f9c5c9 1246 }
f945dedf 1247 decoded.resize (j);
14f9c5c9 1248
29480c32
JB
1249 /* Decoded names should never contain any uppercase character.
1250 Double-check this, and abort the decoding if we find one. */
1251
f945dedf 1252 for (i = 0; i < decoded.length(); ++i)
4c4b4cd2 1253 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1254 goto Suppress;
1255
f945dedf 1256 return decoded;
14f9c5c9
AS
1257
1258Suppress:
4c4b4cd2 1259 if (encoded[0] == '<')
f945dedf 1260 decoded = encoded;
14f9c5c9 1261 else
f945dedf 1262 decoded = '<' + std::string(encoded) + '>';
4c4b4cd2
PH
1263 return decoded;
1264
1265}
1266
1267/* Table for keeping permanent unique copies of decoded names. Once
1268 allocated, names in this table are never released. While this is a
1269 storage leak, it should not be significant unless there are massive
1270 changes in the set of decoded names in successive versions of a
1271 symbol table loaded during a single session. */
1272static struct htab *decoded_names_store;
1273
1274/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1275 in the language-specific part of GSYMBOL, if it has not been
1276 previously computed. Tries to save the decoded name in the same
1277 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1278 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1279 GSYMBOL).
4c4b4cd2
PH
1280 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1281 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1282 when a decoded name is cached in it. */
4c4b4cd2 1283
45e6c716 1284const char *
f85f34ed 1285ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1286{
f85f34ed
TT
1287 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1288 const char **resultp =
615b3f62 1289 &gsymbol->language_specific.demangled_name;
5b4ee69b 1290
f85f34ed 1291 if (!gsymbol->ada_mangled)
4c4b4cd2 1292 {
4d4eaa30 1293 std::string decoded = ada_decode (gsymbol->linkage_name ());
f85f34ed 1294 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1295
f85f34ed 1296 gsymbol->ada_mangled = 1;
5b4ee69b 1297
f85f34ed 1298 if (obstack != NULL)
f945dedf 1299 *resultp = obstack_strdup (obstack, decoded.c_str ());
f85f34ed 1300 else
dda83cd7 1301 {
f85f34ed
TT
1302 /* Sometimes, we can't find a corresponding objfile, in
1303 which case, we put the result on the heap. Since we only
1304 decode when needed, we hope this usually does not cause a
1305 significant memory leak (FIXME). */
1306
dda83cd7
SM
1307 char **slot = (char **) htab_find_slot (decoded_names_store,
1308 decoded.c_str (), INSERT);
5b4ee69b 1309
dda83cd7
SM
1310 if (*slot == NULL)
1311 *slot = xstrdup (decoded.c_str ());
1312 *resultp = *slot;
1313 }
4c4b4cd2 1314 }
14f9c5c9 1315
4c4b4cd2
PH
1316 return *resultp;
1317}
76a01679 1318
2c0b251b 1319static char *
76a01679 1320ada_la_decode (const char *encoded, int options)
4c4b4cd2 1321{
f945dedf 1322 return xstrdup (ada_decode (encoded).c_str ());
14f9c5c9
AS
1323}
1324
14f9c5c9 1325\f
d2e4a39e 1326
dda83cd7 1327 /* Arrays */
14f9c5c9 1328
28c85d6c
JB
1329/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1330 generated by the GNAT compiler to describe the index type used
1331 for each dimension of an array, check whether it follows the latest
1332 known encoding. If not, fix it up to conform to the latest encoding.
1333 Otherwise, do nothing. This function also does nothing if
1334 INDEX_DESC_TYPE is NULL.
1335
85102364 1336 The GNAT encoding used to describe the array index type evolved a bit.
28c85d6c
JB
1337 Initially, the information would be provided through the name of each
1338 field of the structure type only, while the type of these fields was
1339 described as unspecified and irrelevant. The debugger was then expected
1340 to perform a global type lookup using the name of that field in order
1341 to get access to the full index type description. Because these global
1342 lookups can be very expensive, the encoding was later enhanced to make
1343 the global lookup unnecessary by defining the field type as being
1344 the full index type description.
1345
1346 The purpose of this routine is to allow us to support older versions
1347 of the compiler by detecting the use of the older encoding, and by
1348 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1349 we essentially replace each field's meaningless type by the associated
1350 index subtype). */
1351
1352void
1353ada_fixup_array_indexes_type (struct type *index_desc_type)
1354{
1355 int i;
1356
1357 if (index_desc_type == NULL)
1358 return;
1f704f76 1359 gdb_assert (index_desc_type->num_fields () > 0);
28c85d6c
JB
1360
1361 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1362 to check one field only, no need to check them all). If not, return
1363 now.
1364
1365 If our INDEX_DESC_TYPE was generated using the older encoding,
1366 the field type should be a meaningless integer type whose name
1367 is not equal to the field name. */
940da03e
SM
1368 if (index_desc_type->field (0).type ()->name () != NULL
1369 && strcmp (index_desc_type->field (0).type ()->name (),
dda83cd7 1370 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
28c85d6c
JB
1371 return;
1372
1373 /* Fixup each field of INDEX_DESC_TYPE. */
1f704f76 1374 for (i = 0; i < index_desc_type->num_fields (); i++)
28c85d6c 1375 {
0d5cff50 1376 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1377 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1378
1379 if (raw_type)
5d14b6e5 1380 index_desc_type->field (i).set_type (raw_type);
28c85d6c
JB
1381 }
1382}
1383
4c4b4cd2
PH
1384/* The desc_* routines return primitive portions of array descriptors
1385 (fat pointers). */
14f9c5c9
AS
1386
1387/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1388 level of indirection, if needed. */
1389
d2e4a39e
AS
1390static struct type *
1391desc_base_type (struct type *type)
14f9c5c9
AS
1392{
1393 if (type == NULL)
1394 return NULL;
61ee279c 1395 type = ada_check_typedef (type);
78134374 1396 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
1397 type = ada_typedef_target_type (type);
1398
1265e4aa 1399 if (type != NULL
78134374 1400 && (type->code () == TYPE_CODE_PTR
dda83cd7 1401 || type->code () == TYPE_CODE_REF))
61ee279c 1402 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1403 else
1404 return type;
1405}
1406
4c4b4cd2
PH
1407/* True iff TYPE indicates a "thin" array pointer type. */
1408
14f9c5c9 1409static int
d2e4a39e 1410is_thin_pntr (struct type *type)
14f9c5c9 1411{
d2e4a39e 1412 return
14f9c5c9
AS
1413 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1414 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1415}
1416
4c4b4cd2
PH
1417/* The descriptor type for thin pointer type TYPE. */
1418
d2e4a39e
AS
1419static struct type *
1420thin_descriptor_type (struct type *type)
14f9c5c9 1421{
d2e4a39e 1422 struct type *base_type = desc_base_type (type);
5b4ee69b 1423
14f9c5c9
AS
1424 if (base_type == NULL)
1425 return NULL;
1426 if (is_suffix (ada_type_name (base_type), "___XVE"))
1427 return base_type;
d2e4a39e 1428 else
14f9c5c9 1429 {
d2e4a39e 1430 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1431
14f9c5c9 1432 if (alt_type == NULL)
dda83cd7 1433 return base_type;
14f9c5c9 1434 else
dda83cd7 1435 return alt_type;
14f9c5c9
AS
1436 }
1437}
1438
4c4b4cd2
PH
1439/* A pointer to the array data for thin-pointer value VAL. */
1440
d2e4a39e
AS
1441static struct value *
1442thin_data_pntr (struct value *val)
14f9c5c9 1443{
828292f2 1444 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1445 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1446
556bdfd4
UW
1447 data_type = lookup_pointer_type (data_type);
1448
78134374 1449 if (type->code () == TYPE_CODE_PTR)
556bdfd4 1450 return value_cast (data_type, value_copy (val));
d2e4a39e 1451 else
42ae5230 1452 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1453}
1454
4c4b4cd2
PH
1455/* True iff TYPE indicates a "thick" array pointer type. */
1456
14f9c5c9 1457static int
d2e4a39e 1458is_thick_pntr (struct type *type)
14f9c5c9
AS
1459{
1460 type = desc_base_type (type);
78134374 1461 return (type != NULL && type->code () == TYPE_CODE_STRUCT
dda83cd7 1462 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1463}
1464
4c4b4cd2
PH
1465/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1466 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1467
d2e4a39e
AS
1468static struct type *
1469desc_bounds_type (struct type *type)
14f9c5c9 1470{
d2e4a39e 1471 struct type *r;
14f9c5c9
AS
1472
1473 type = desc_base_type (type);
1474
1475 if (type == NULL)
1476 return NULL;
1477 else if (is_thin_pntr (type))
1478 {
1479 type = thin_descriptor_type (type);
1480 if (type == NULL)
dda83cd7 1481 return NULL;
14f9c5c9
AS
1482 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1483 if (r != NULL)
dda83cd7 1484 return ada_check_typedef (r);
14f9c5c9 1485 }
78134374 1486 else if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
1487 {
1488 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1489 if (r != NULL)
dda83cd7 1490 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1491 }
1492 return NULL;
1493}
1494
1495/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1496 one, a pointer to its bounds data. Otherwise NULL. */
1497
d2e4a39e
AS
1498static struct value *
1499desc_bounds (struct value *arr)
14f9c5c9 1500{
df407dfe 1501 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1502
d2e4a39e 1503 if (is_thin_pntr (type))
14f9c5c9 1504 {
d2e4a39e 1505 struct type *bounds_type =
dda83cd7 1506 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1507 LONGEST addr;
1508
4cdfadb1 1509 if (bounds_type == NULL)
dda83cd7 1510 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1511
1512 /* NOTE: The following calculation is not really kosher, but
dda83cd7
SM
1513 since desc_type is an XVE-encoded type (and shouldn't be),
1514 the correct calculation is a real pain. FIXME (and fix GCC). */
78134374 1515 if (type->code () == TYPE_CODE_PTR)
dda83cd7 1516 addr = value_as_long (arr);
d2e4a39e 1517 else
dda83cd7 1518 addr = value_address (arr);
14f9c5c9 1519
d2e4a39e 1520 return
dda83cd7
SM
1521 value_from_longest (lookup_pointer_type (bounds_type),
1522 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1523 }
1524
1525 else if (is_thick_pntr (type))
05e522ef
JB
1526 {
1527 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1528 _("Bad GNAT array descriptor"));
1529 struct type *p_bounds_type = value_type (p_bounds);
1530
1531 if (p_bounds_type
78134374 1532 && p_bounds_type->code () == TYPE_CODE_PTR)
05e522ef
JB
1533 {
1534 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1535
e46d3488 1536 if (target_type->is_stub ())
05e522ef
JB
1537 p_bounds = value_cast (lookup_pointer_type
1538 (ada_check_typedef (target_type)),
1539 p_bounds);
1540 }
1541 else
1542 error (_("Bad GNAT array descriptor"));
1543
1544 return p_bounds;
1545 }
14f9c5c9
AS
1546 else
1547 return NULL;
1548}
1549
4c4b4cd2
PH
1550/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1551 position of the field containing the address of the bounds data. */
1552
14f9c5c9 1553static int
d2e4a39e 1554fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1555{
1556 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1557}
1558
1559/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1560 size of the field containing the address of the bounds data. */
1561
14f9c5c9 1562static int
d2e4a39e 1563fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1564{
1565 type = desc_base_type (type);
1566
d2e4a39e 1567 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1568 return TYPE_FIELD_BITSIZE (type, 1);
1569 else
940da03e 1570 return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
14f9c5c9
AS
1571}
1572
4c4b4cd2 1573/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1574 pointer to one, the type of its array data (a array-with-no-bounds type);
1575 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1576 data. */
4c4b4cd2 1577
d2e4a39e 1578static struct type *
556bdfd4 1579desc_data_target_type (struct type *type)
14f9c5c9
AS
1580{
1581 type = desc_base_type (type);
1582
4c4b4cd2 1583 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1584 if (is_thin_pntr (type))
940da03e 1585 return desc_base_type (thin_descriptor_type (type)->field (1).type ());
14f9c5c9 1586 else if (is_thick_pntr (type))
556bdfd4
UW
1587 {
1588 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1589
1590 if (data_type
78134374 1591 && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
05e522ef 1592 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1593 }
1594
1595 return NULL;
14f9c5c9
AS
1596}
1597
1598/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1599 its array data. */
4c4b4cd2 1600
d2e4a39e
AS
1601static struct value *
1602desc_data (struct value *arr)
14f9c5c9 1603{
df407dfe 1604 struct type *type = value_type (arr);
5b4ee69b 1605
14f9c5c9
AS
1606 if (is_thin_pntr (type))
1607 return thin_data_pntr (arr);
1608 else if (is_thick_pntr (type))
d2e4a39e 1609 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
dda83cd7 1610 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1611 else
1612 return NULL;
1613}
1614
1615
1616/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1617 position of the field containing the address of the data. */
1618
14f9c5c9 1619static int
d2e4a39e 1620fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1621{
1622 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1623}
1624
1625/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1626 size of the field containing the address of the data. */
1627
14f9c5c9 1628static int
d2e4a39e 1629fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1630{
1631 type = desc_base_type (type);
1632
1633 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1634 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1635 else
940da03e 1636 return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
14f9c5c9
AS
1637}
1638
4c4b4cd2 1639/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1640 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1641 bound, if WHICH is 1. The first bound is I=1. */
1642
d2e4a39e
AS
1643static struct value *
1644desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1645{
250106a7
TT
1646 char bound_name[20];
1647 xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1648 which ? 'U' : 'L', i - 1);
1649 return value_struct_elt (&bounds, NULL, bound_name, NULL,
dda83cd7 1650 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1651}
1652
1653/* If BOUNDS is an array-bounds structure type, return the bit position
1654 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1655 bound, if WHICH is 1. The first bound is I=1. */
1656
14f9c5c9 1657static int
d2e4a39e 1658desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1659{
d2e4a39e 1660 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1661}
1662
1663/* If BOUNDS is an array-bounds structure type, return the bit field size
1664 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1665 bound, if WHICH is 1. The first bound is I=1. */
1666
76a01679 1667static int
d2e4a39e 1668desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1669{
1670 type = desc_base_type (type);
1671
d2e4a39e
AS
1672 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1673 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1674 else
940da03e 1675 return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
14f9c5c9
AS
1676}
1677
1678/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1679 Ith bound (numbering from 1). Otherwise, NULL. */
1680
d2e4a39e
AS
1681static struct type *
1682desc_index_type (struct type *type, int i)
14f9c5c9
AS
1683{
1684 type = desc_base_type (type);
1685
78134374 1686 if (type->code () == TYPE_CODE_STRUCT)
250106a7
TT
1687 {
1688 char bound_name[20];
1689 xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1690 return lookup_struct_elt_type (type, bound_name, 1);
1691 }
d2e4a39e 1692 else
14f9c5c9
AS
1693 return NULL;
1694}
1695
4c4b4cd2
PH
1696/* The number of index positions in the array-bounds type TYPE.
1697 Return 0 if TYPE is NULL. */
1698
14f9c5c9 1699static int
d2e4a39e 1700desc_arity (struct type *type)
14f9c5c9
AS
1701{
1702 type = desc_base_type (type);
1703
1704 if (type != NULL)
1f704f76 1705 return type->num_fields () / 2;
14f9c5c9
AS
1706 return 0;
1707}
1708
4c4b4cd2
PH
1709/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1710 an array descriptor type (representing an unconstrained array
1711 type). */
1712
76a01679
JB
1713static int
1714ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1715{
1716 if (type == NULL)
1717 return 0;
61ee279c 1718 type = ada_check_typedef (type);
78134374 1719 return (type->code () == TYPE_CODE_ARRAY
dda83cd7 1720 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1721}
1722
52ce6436 1723/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1724 * to one. */
52ce6436 1725
2c0b251b 1726static int
52ce6436
PH
1727ada_is_array_type (struct type *type)
1728{
78134374
SM
1729 while (type != NULL
1730 && (type->code () == TYPE_CODE_PTR
1731 || type->code () == TYPE_CODE_REF))
52ce6436
PH
1732 type = TYPE_TARGET_TYPE (type);
1733 return ada_is_direct_array_type (type);
1734}
1735
4c4b4cd2 1736/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1737
14f9c5c9 1738int
4c4b4cd2 1739ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1740{
1741 if (type == NULL)
1742 return 0;
61ee279c 1743 type = ada_check_typedef (type);
78134374
SM
1744 return (type->code () == TYPE_CODE_ARRAY
1745 || (type->code () == TYPE_CODE_PTR
1746 && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1747 == TYPE_CODE_ARRAY)));
14f9c5c9
AS
1748}
1749
4c4b4cd2
PH
1750/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1751
14f9c5c9 1752int
4c4b4cd2 1753ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1754{
556bdfd4 1755 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1756
1757 if (type == NULL)
1758 return 0;
61ee279c 1759 type = ada_check_typedef (type);
556bdfd4 1760 return (data_type != NULL
78134374 1761 && data_type->code () == TYPE_CODE_ARRAY
556bdfd4 1762 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1763}
1764
1765/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1766 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1767 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1768 is still needed. */
1769
14f9c5c9 1770int
ebf56fd3 1771ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1772{
d2e4a39e 1773 return
14f9c5c9 1774 type != NULL
78134374 1775 && type->code () == TYPE_CODE_STRUCT
14f9c5c9 1776 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
dda83cd7 1777 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
4c4b4cd2 1778 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1779}
1780
1781
4c4b4cd2 1782/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1783 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1784 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1785 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1786 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1787 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1788 a descriptor. */
de93309a
SM
1789
1790static struct type *
d2e4a39e 1791ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1792{
ad82864c
JB
1793 if (ada_is_constrained_packed_array_type (value_type (arr)))
1794 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1795
df407dfe
AC
1796 if (!ada_is_array_descriptor_type (value_type (arr)))
1797 return value_type (arr);
d2e4a39e
AS
1798
1799 if (!bounds)
ad82864c
JB
1800 {
1801 struct type *array_type =
1802 ada_check_typedef (desc_data_target_type (value_type (arr)));
1803
1804 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1805 TYPE_FIELD_BITSIZE (array_type, 0) =
1806 decode_packed_array_bitsize (value_type (arr));
1807
1808 return array_type;
1809 }
14f9c5c9
AS
1810 else
1811 {
d2e4a39e 1812 struct type *elt_type;
14f9c5c9 1813 int arity;
d2e4a39e 1814 struct value *descriptor;
14f9c5c9 1815
df407dfe
AC
1816 elt_type = ada_array_element_type (value_type (arr), -1);
1817 arity = ada_array_arity (value_type (arr));
14f9c5c9 1818
d2e4a39e 1819 if (elt_type == NULL || arity == 0)
dda83cd7 1820 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1821
1822 descriptor = desc_bounds (arr);
d2e4a39e 1823 if (value_as_long (descriptor) == 0)
dda83cd7 1824 return NULL;
d2e4a39e 1825 while (arity > 0)
dda83cd7
SM
1826 {
1827 struct type *range_type = alloc_type_copy (value_type (arr));
1828 struct type *array_type = alloc_type_copy (value_type (arr));
1829 struct value *low = desc_one_bound (descriptor, arity, 0);
1830 struct value *high = desc_one_bound (descriptor, arity, 1);
1831
1832 arity -= 1;
1833 create_static_range_type (range_type, value_type (low),
0c9c3474
SA
1834 longest_to_int (value_as_long (low)),
1835 longest_to_int (value_as_long (high)));
dda83cd7 1836 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1837
1838 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1839 {
1840 /* We need to store the element packed bitsize, as well as
dda83cd7 1841 recompute the array size, because it was previously
e67ad678
JB
1842 computed based on the unpacked element size. */
1843 LONGEST lo = value_as_long (low);
1844 LONGEST hi = value_as_long (high);
1845
1846 TYPE_FIELD_BITSIZE (elt_type, 0) =
1847 decode_packed_array_bitsize (value_type (arr));
1848 /* If the array has no element, then the size is already
dda83cd7 1849 zero, and does not need to be recomputed. */
e67ad678
JB
1850 if (lo < hi)
1851 {
1852 int array_bitsize =
dda83cd7 1853 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
e67ad678
JB
1854
1855 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1856 }
1857 }
dda83cd7 1858 }
14f9c5c9
AS
1859
1860 return lookup_pointer_type (elt_type);
1861 }
1862}
1863
1864/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1865 Otherwise, returns either a standard GDB array with bounds set
1866 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1867 GDB array. Returns NULL if ARR is a null fat pointer. */
1868
d2e4a39e
AS
1869struct value *
1870ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1871{
df407dfe 1872 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1873 {
d2e4a39e 1874 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1875
14f9c5c9 1876 if (arrType == NULL)
dda83cd7 1877 return NULL;
14f9c5c9
AS
1878 return value_cast (arrType, value_copy (desc_data (arr)));
1879 }
ad82864c
JB
1880 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1881 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1882 else
1883 return arr;
1884}
1885
1886/* If ARR does not represent an array, returns ARR unchanged.
1887 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1888 be ARR itself if it already is in the proper form). */
1889
720d1a40 1890struct value *
d2e4a39e 1891ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1892{
df407dfe 1893 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1894 {
d2e4a39e 1895 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1896
14f9c5c9 1897 if (arrVal == NULL)
dda83cd7 1898 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 1899 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1900 return value_ind (arrVal);
1901 }
ad82864c
JB
1902 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1903 return decode_constrained_packed_array (arr);
d2e4a39e 1904 else
14f9c5c9
AS
1905 return arr;
1906}
1907
1908/* If TYPE represents a GNAT array type, return it translated to an
1909 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1910 packing). For other types, is the identity. */
1911
d2e4a39e
AS
1912struct type *
1913ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1914{
ad82864c
JB
1915 if (ada_is_constrained_packed_array_type (type))
1916 return decode_constrained_packed_array_type (type);
17280b9f
UW
1917
1918 if (ada_is_array_descriptor_type (type))
556bdfd4 1919 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1920
1921 return type;
14f9c5c9
AS
1922}
1923
4c4b4cd2
PH
1924/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1925
ad82864c 1926static int
57567375 1927ada_is_gnat_encoded_packed_array_type (struct type *type)
14f9c5c9
AS
1928{
1929 if (type == NULL)
1930 return 0;
4c4b4cd2 1931 type = desc_base_type (type);
61ee279c 1932 type = ada_check_typedef (type);
d2e4a39e 1933 return
14f9c5c9
AS
1934 ada_type_name (type) != NULL
1935 && strstr (ada_type_name (type), "___XP") != NULL;
1936}
1937
ad82864c
JB
1938/* Non-zero iff TYPE represents a standard GNAT constrained
1939 packed-array type. */
1940
1941int
1942ada_is_constrained_packed_array_type (struct type *type)
1943{
57567375 1944 return ada_is_gnat_encoded_packed_array_type (type)
ad82864c
JB
1945 && !ada_is_array_descriptor_type (type);
1946}
1947
1948/* Non-zero iff TYPE represents an array descriptor for a
1949 unconstrained packed-array type. */
1950
1951static int
1952ada_is_unconstrained_packed_array_type (struct type *type)
1953{
57567375
TT
1954 if (!ada_is_array_descriptor_type (type))
1955 return 0;
1956
1957 if (ada_is_gnat_encoded_packed_array_type (type))
1958 return 1;
1959
1960 /* If we saw GNAT encodings, then the above code is sufficient.
1961 However, with minimal encodings, we will just have a thick
1962 pointer instead. */
1963 if (is_thick_pntr (type))
1964 {
1965 type = desc_base_type (type);
1966 /* The structure's first field is a pointer to an array, so this
1967 fetches the array type. */
1968 type = TYPE_TARGET_TYPE (type->field (0).type ());
1969 /* Now we can see if the array elements are packed. */
1970 return TYPE_FIELD_BITSIZE (type, 0) > 0;
1971 }
1972
1973 return 0;
ad82864c
JB
1974}
1975
c9a28cbe
TT
1976/* Return true if TYPE is a (Gnat-encoded) constrained packed array
1977 type, or if it is an ordinary (non-Gnat-encoded) packed array. */
1978
1979static bool
1980ada_is_any_packed_array_type (struct type *type)
1981{
1982 return (ada_is_constrained_packed_array_type (type)
1983 || (type->code () == TYPE_CODE_ARRAY
1984 && TYPE_FIELD_BITSIZE (type, 0) % 8 != 0));
1985}
1986
ad82864c
JB
1987/* Given that TYPE encodes a packed array type (constrained or unconstrained),
1988 return the size of its elements in bits. */
1989
1990static long
1991decode_packed_array_bitsize (struct type *type)
1992{
0d5cff50
DE
1993 const char *raw_name;
1994 const char *tail;
ad82864c
JB
1995 long bits;
1996
720d1a40
JB
1997 /* Access to arrays implemented as fat pointers are encoded as a typedef
1998 of the fat pointer type. We need the name of the fat pointer type
1999 to do the decoding, so strip the typedef layer. */
78134374 2000 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
2001 type = ada_typedef_target_type (type);
2002
2003 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2004 if (!raw_name)
2005 raw_name = ada_type_name (desc_base_type (type));
2006
2007 if (!raw_name)
2008 return 0;
2009
2010 tail = strstr (raw_name, "___XP");
57567375
TT
2011 if (tail == nullptr)
2012 {
2013 gdb_assert (is_thick_pntr (type));
2014 /* The structure's first field is a pointer to an array, so this
2015 fetches the array type. */
2016 type = TYPE_TARGET_TYPE (type->field (0).type ());
2017 /* Now we can see if the array elements are packed. */
2018 return TYPE_FIELD_BITSIZE (type, 0);
2019 }
ad82864c
JB
2020
2021 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2022 {
2023 lim_warning
2024 (_("could not understand bit size information on packed array"));
2025 return 0;
2026 }
2027
2028 return bits;
2029}
2030
14f9c5c9
AS
2031/* Given that TYPE is a standard GDB array type with all bounds filled
2032 in, and that the element size of its ultimate scalar constituents
2033 (that is, either its elements, or, if it is an array of arrays, its
2034 elements' elements, etc.) is *ELT_BITS, return an identical type,
2035 but with the bit sizes of its elements (and those of any
2036 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2037 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2038 in bits.
2039
2040 Note that, for arrays whose index type has an XA encoding where
2041 a bound references a record discriminant, getting that discriminant,
2042 and therefore the actual value of that bound, is not possible
2043 because none of the given parameters gives us access to the record.
2044 This function assumes that it is OK in the context where it is being
2045 used to return an array whose bounds are still dynamic and where
2046 the length is arbitrary. */
4c4b4cd2 2047
d2e4a39e 2048static struct type *
ad82864c 2049constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2050{
d2e4a39e
AS
2051 struct type *new_elt_type;
2052 struct type *new_type;
99b1c762
JB
2053 struct type *index_type_desc;
2054 struct type *index_type;
14f9c5c9
AS
2055 LONGEST low_bound, high_bound;
2056
61ee279c 2057 type = ada_check_typedef (type);
78134374 2058 if (type->code () != TYPE_CODE_ARRAY)
14f9c5c9
AS
2059 return type;
2060
99b1c762
JB
2061 index_type_desc = ada_find_parallel_type (type, "___XA");
2062 if (index_type_desc)
940da03e 2063 index_type = to_fixed_range_type (index_type_desc->field (0).type (),
99b1c762
JB
2064 NULL);
2065 else
3d967001 2066 index_type = type->index_type ();
99b1c762 2067
e9bb382b 2068 new_type = alloc_type_copy (type);
ad82864c
JB
2069 new_elt_type =
2070 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2071 elt_bits);
99b1c762 2072 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9 2073 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
d0e39ea2 2074 new_type->set_name (ada_type_name (type));
14f9c5c9 2075
78134374 2076 if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
4a46959e 2077 && is_dynamic_type (check_typedef (index_type)))
1f8d2881 2078 || !get_discrete_bounds (index_type, &low_bound, &high_bound))
14f9c5c9
AS
2079 low_bound = high_bound = 0;
2080 if (high_bound < low_bound)
2081 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2082 else
14f9c5c9
AS
2083 {
2084 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2085 TYPE_LENGTH (new_type) =
dda83cd7 2086 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2087 }
2088
9cdd0d12 2089 new_type->set_is_fixed_instance (true);
14f9c5c9
AS
2090 return new_type;
2091}
2092
ad82864c
JB
2093/* The array type encoded by TYPE, where
2094 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2095
d2e4a39e 2096static struct type *
ad82864c 2097decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2098{
0d5cff50 2099 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2100 char *name;
0d5cff50 2101 const char *tail;
d2e4a39e 2102 struct type *shadow_type;
14f9c5c9 2103 long bits;
14f9c5c9 2104
727e3d2e
JB
2105 if (!raw_name)
2106 raw_name = ada_type_name (desc_base_type (type));
2107
2108 if (!raw_name)
2109 return NULL;
2110
2111 name = (char *) alloca (strlen (raw_name) + 1);
2112 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2113 type = desc_base_type (type);
2114
14f9c5c9
AS
2115 memcpy (name, raw_name, tail - raw_name);
2116 name[tail - raw_name] = '\000';
2117
b4ba55a1
JB
2118 shadow_type = ada_find_parallel_type_with_name (type, name);
2119
2120 if (shadow_type == NULL)
14f9c5c9 2121 {
323e0a4a 2122 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2123 return NULL;
2124 }
f168693b 2125 shadow_type = check_typedef (shadow_type);
14f9c5c9 2126
78134374 2127 if (shadow_type->code () != TYPE_CODE_ARRAY)
14f9c5c9 2128 {
0963b4bd
MS
2129 lim_warning (_("could not understand bounds "
2130 "information on packed array"));
14f9c5c9
AS
2131 return NULL;
2132 }
d2e4a39e 2133
ad82864c
JB
2134 bits = decode_packed_array_bitsize (type);
2135 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2136}
2137
a7400e44
TT
2138/* Helper function for decode_constrained_packed_array. Set the field
2139 bitsize on a series of packed arrays. Returns the number of
2140 elements in TYPE. */
2141
2142static LONGEST
2143recursively_update_array_bitsize (struct type *type)
2144{
2145 gdb_assert (type->code () == TYPE_CODE_ARRAY);
2146
2147 LONGEST low, high;
1f8d2881 2148 if (!get_discrete_bounds (type->index_type (), &low, &high)
a7400e44
TT
2149 || low > high)
2150 return 0;
2151 LONGEST our_len = high - low + 1;
2152
2153 struct type *elt_type = TYPE_TARGET_TYPE (type);
2154 if (elt_type->code () == TYPE_CODE_ARRAY)
2155 {
2156 LONGEST elt_len = recursively_update_array_bitsize (elt_type);
2157 LONGEST elt_bitsize = elt_len * TYPE_FIELD_BITSIZE (elt_type, 0);
2158 TYPE_FIELD_BITSIZE (type, 0) = elt_bitsize;
2159
2160 TYPE_LENGTH (type) = ((our_len * elt_bitsize + HOST_CHAR_BIT - 1)
2161 / HOST_CHAR_BIT);
2162 }
2163
2164 return our_len;
2165}
2166
ad82864c
JB
2167/* Given that ARR is a struct value *indicating a GNAT constrained packed
2168 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2169 standard GDB array type except that the BITSIZEs of the array
2170 target types are set to the number of bits in each element, and the
4c4b4cd2 2171 type length is set appropriately. */
14f9c5c9 2172
d2e4a39e 2173static struct value *
ad82864c 2174decode_constrained_packed_array (struct value *arr)
14f9c5c9 2175{
4c4b4cd2 2176 struct type *type;
14f9c5c9 2177
11aa919a
PMR
2178 /* If our value is a pointer, then dereference it. Likewise if
2179 the value is a reference. Make sure that this operation does not
2180 cause the target type to be fixed, as this would indirectly cause
2181 this array to be decoded. The rest of the routine assumes that
2182 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2183 and "value_ind" routines to perform the dereferencing, as opposed
2184 to using "ada_coerce_ref" or "ada_value_ind". */
2185 arr = coerce_ref (arr);
78134374 2186 if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
284614f0 2187 arr = value_ind (arr);
4c4b4cd2 2188
ad82864c 2189 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2190 if (type == NULL)
2191 {
323e0a4a 2192 error (_("can't unpack array"));
14f9c5c9
AS
2193 return NULL;
2194 }
61ee279c 2195
a7400e44
TT
2196 /* Decoding the packed array type could not correctly set the field
2197 bitsizes for any dimension except the innermost, because the
2198 bounds may be variable and were not passed to that function. So,
2199 we further resolve the array bounds here and then update the
2200 sizes. */
2201 const gdb_byte *valaddr = value_contents_for_printing (arr);
2202 CORE_ADDR address = value_address (arr);
2203 gdb::array_view<const gdb_byte> view
2204 = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
2205 type = resolve_dynamic_type (type, view, address);
2206 recursively_update_array_bitsize (type);
2207
d5a22e77 2208 if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
32c9a795 2209 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2210 {
2211 /* This is a (right-justified) modular type representing a packed
2212 array with no wrapper. In order to interpret the value through
2213 the (left-justified) packed array type we just built, we must
2214 first left-justify it. */
2215 int bit_size, bit_pos;
2216 ULONGEST mod;
2217
df407dfe 2218 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2219 bit_size = 0;
2220 while (mod > 0)
2221 {
2222 bit_size += 1;
2223 mod >>= 1;
2224 }
df407dfe 2225 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2226 arr = ada_value_primitive_packed_val (arr, NULL,
2227 bit_pos / HOST_CHAR_BIT,
2228 bit_pos % HOST_CHAR_BIT,
2229 bit_size,
2230 type);
2231 }
2232
4c4b4cd2 2233 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2234}
2235
2236
2237/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2238 given in IND. ARR must be a simple array. */
14f9c5c9 2239
d2e4a39e
AS
2240static struct value *
2241value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2242{
2243 int i;
2244 int bits, elt_off, bit_off;
2245 long elt_total_bit_offset;
d2e4a39e
AS
2246 struct type *elt_type;
2247 struct value *v;
14f9c5c9
AS
2248
2249 bits = 0;
2250 elt_total_bit_offset = 0;
df407dfe 2251 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2252 for (i = 0; i < arity; i += 1)
14f9c5c9 2253 {
78134374 2254 if (elt_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
2255 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2256 error
2257 (_("attempt to do packed indexing of "
0963b4bd 2258 "something other than a packed array"));
14f9c5c9 2259 else
dda83cd7
SM
2260 {
2261 struct type *range_type = elt_type->index_type ();
2262 LONGEST lowerbound, upperbound;
2263 LONGEST idx;
2264
1f8d2881 2265 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
dda83cd7
SM
2266 {
2267 lim_warning (_("don't know bounds of array"));
2268 lowerbound = upperbound = 0;
2269 }
2270
2271 idx = pos_atr (ind[i]);
2272 if (idx < lowerbound || idx > upperbound)
2273 lim_warning (_("packed array index %ld out of bounds"),
0963b4bd 2274 (long) idx);
dda83cd7
SM
2275 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2276 elt_total_bit_offset += (idx - lowerbound) * bits;
2277 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2278 }
14f9c5c9
AS
2279 }
2280 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2281 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2282
2283 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
dda83cd7 2284 bits, elt_type);
14f9c5c9
AS
2285 return v;
2286}
2287
4c4b4cd2 2288/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2289
2290static int
d2e4a39e 2291has_negatives (struct type *type)
14f9c5c9 2292{
78134374 2293 switch (type->code ())
d2e4a39e
AS
2294 {
2295 default:
2296 return 0;
2297 case TYPE_CODE_INT:
c6d940a9 2298 return !type->is_unsigned ();
d2e4a39e 2299 case TYPE_CODE_RANGE:
5537ddd0 2300 return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
d2e4a39e 2301 }
14f9c5c9 2302}
d2e4a39e 2303
f93fca70 2304/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
5b639dea 2305 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
f93fca70 2306 the unpacked buffer.
14f9c5c9 2307
5b639dea
JB
2308 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2309 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2310
f93fca70
JB
2311 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2312 zero otherwise.
14f9c5c9 2313
f93fca70 2314 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2315
f93fca70
JB
2316 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2317
2318static void
2319ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2320 gdb_byte *unpacked, int unpacked_len,
2321 int is_big_endian, int is_signed_type,
2322 int is_scalar)
2323{
a1c95e6b
JB
2324 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2325 int src_idx; /* Index into the source area */
2326 int src_bytes_left; /* Number of source bytes left to process. */
2327 int srcBitsLeft; /* Number of source bits left to move */
2328 int unusedLS; /* Number of bits in next significant
dda83cd7 2329 byte of source that are unused */
a1c95e6b 2330
a1c95e6b
JB
2331 int unpacked_idx; /* Index into the unpacked buffer */
2332 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2333
4c4b4cd2 2334 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2335 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2336 unsigned char sign;
a1c95e6b 2337
4c4b4cd2
PH
2338 /* Transmit bytes from least to most significant; delta is the direction
2339 the indices move. */
f93fca70 2340 int delta = is_big_endian ? -1 : 1;
14f9c5c9 2341
5b639dea
JB
2342 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2343 bits from SRC. .*/
2344 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2345 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2346 bit_size, unpacked_len);
2347
14f9c5c9 2348 srcBitsLeft = bit_size;
086ca51f 2349 src_bytes_left = src_len;
f93fca70 2350 unpacked_bytes_left = unpacked_len;
14f9c5c9 2351 sign = 0;
f93fca70
JB
2352
2353 if (is_big_endian)
14f9c5c9 2354 {
086ca51f 2355 src_idx = src_len - 1;
f93fca70
JB
2356 if (is_signed_type
2357 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
dda83cd7 2358 sign = ~0;
d2e4a39e
AS
2359
2360 unusedLS =
dda83cd7
SM
2361 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2362 % HOST_CHAR_BIT;
14f9c5c9 2363
f93fca70
JB
2364 if (is_scalar)
2365 {
dda83cd7
SM
2366 accumSize = 0;
2367 unpacked_idx = unpacked_len - 1;
f93fca70
JB
2368 }
2369 else
2370 {
dda83cd7
SM
2371 /* Non-scalar values must be aligned at a byte boundary... */
2372 accumSize =
2373 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2374 /* ... And are placed at the beginning (most-significant) bytes
2375 of the target. */
2376 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2377 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2378 }
14f9c5c9 2379 }
d2e4a39e 2380 else
14f9c5c9
AS
2381 {
2382 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2383
086ca51f 2384 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2385 unusedLS = bit_offset;
2386 accumSize = 0;
2387
f93fca70 2388 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
dda83cd7 2389 sign = ~0;
14f9c5c9 2390 }
d2e4a39e 2391
14f9c5c9 2392 accum = 0;
086ca51f 2393 while (src_bytes_left > 0)
14f9c5c9
AS
2394 {
2395 /* Mask for removing bits of the next source byte that are not
dda83cd7 2396 part of the value. */
d2e4a39e 2397 unsigned int unusedMSMask =
dda83cd7
SM
2398 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2399 1;
4c4b4cd2 2400 /* Sign-extend bits for this byte. */
14f9c5c9 2401 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2402
d2e4a39e 2403 accum |=
dda83cd7 2404 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2405 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2406 if (accumSize >= HOST_CHAR_BIT)
dda83cd7
SM
2407 {
2408 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2409 accumSize -= HOST_CHAR_BIT;
2410 accum >>= HOST_CHAR_BIT;
2411 unpacked_bytes_left -= 1;
2412 unpacked_idx += delta;
2413 }
14f9c5c9
AS
2414 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2415 unusedLS = 0;
086ca51f
JB
2416 src_bytes_left -= 1;
2417 src_idx += delta;
14f9c5c9 2418 }
086ca51f 2419 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2420 {
2421 accum |= sign << accumSize;
db297a65 2422 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
14f9c5c9 2423 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2424 if (accumSize < 0)
2425 accumSize = 0;
14f9c5c9 2426 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2427 unpacked_bytes_left -= 1;
2428 unpacked_idx += delta;
14f9c5c9 2429 }
f93fca70
JB
2430}
2431
2432/* Create a new value of type TYPE from the contents of OBJ starting
2433 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2434 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2435 assigning through the result will set the field fetched from.
2436 VALADDR is ignored unless OBJ is NULL, in which case,
2437 VALADDR+OFFSET must address the start of storage containing the
2438 packed value. The value returned in this case is never an lval.
2439 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2440
2441struct value *
2442ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2443 long offset, int bit_offset, int bit_size,
dda83cd7 2444 struct type *type)
f93fca70
JB
2445{
2446 struct value *v;
bfb1c796 2447 const gdb_byte *src; /* First byte containing data to unpack */
f93fca70 2448 gdb_byte *unpacked;
220475ed 2449 const int is_scalar = is_scalar_type (type);
d5a22e77 2450 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d5722aa2 2451 gdb::byte_vector staging;
f93fca70
JB
2452
2453 type = ada_check_typedef (type);
2454
d0a9e810 2455 if (obj == NULL)
bfb1c796 2456 src = valaddr + offset;
d0a9e810 2457 else
bfb1c796 2458 src = value_contents (obj) + offset;
d0a9e810
JB
2459
2460 if (is_dynamic_type (type))
2461 {
2462 /* The length of TYPE might by dynamic, so we need to resolve
2463 TYPE in order to know its actual size, which we then use
2464 to create the contents buffer of the value we return.
2465 The difficulty is that the data containing our object is
2466 packed, and therefore maybe not at a byte boundary. So, what
2467 we do, is unpack the data into a byte-aligned buffer, and then
2468 use that buffer as our object's value for resolving the type. */
d5722aa2
PA
2469 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2470 staging.resize (staging_len);
d0a9e810
JB
2471
2472 ada_unpack_from_contents (src, bit_offset, bit_size,
dda83cd7 2473 staging.data (), staging.size (),
d0a9e810
JB
2474 is_big_endian, has_negatives (type),
2475 is_scalar);
b249d2c2 2476 type = resolve_dynamic_type (type, staging, 0);
0cafa88c
JB
2477 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2478 {
2479 /* This happens when the length of the object is dynamic,
2480 and is actually smaller than the space reserved for it.
2481 For instance, in an array of variant records, the bit_size
2482 we're given is the array stride, which is constant and
2483 normally equal to the maximum size of its element.
2484 But, in reality, each element only actually spans a portion
2485 of that stride. */
2486 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2487 }
d0a9e810
JB
2488 }
2489
f93fca70
JB
2490 if (obj == NULL)
2491 {
2492 v = allocate_value (type);
bfb1c796 2493 src = valaddr + offset;
f93fca70
JB
2494 }
2495 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2496 {
0cafa88c 2497 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
bfb1c796 2498 gdb_byte *buf;
0cafa88c 2499
f93fca70 2500 v = value_at (type, value_address (obj) + offset);
bfb1c796
PA
2501 buf = (gdb_byte *) alloca (src_len);
2502 read_memory (value_address (v), buf, src_len);
2503 src = buf;
f93fca70
JB
2504 }
2505 else
2506 {
2507 v = allocate_value (type);
bfb1c796 2508 src = value_contents (obj) + offset;
f93fca70
JB
2509 }
2510
2511 if (obj != NULL)
2512 {
2513 long new_offset = offset;
2514
2515 set_value_component_location (v, obj);
2516 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2517 set_value_bitsize (v, bit_size);
2518 if (value_bitpos (v) >= HOST_CHAR_BIT)
dda83cd7 2519 {
f93fca70 2520 ++new_offset;
dda83cd7
SM
2521 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2522 }
f93fca70
JB
2523 set_value_offset (v, new_offset);
2524
2525 /* Also set the parent value. This is needed when trying to
2526 assign a new value (in inferior memory). */
2527 set_value_parent (v, obj);
2528 }
2529 else
2530 set_value_bitsize (v, bit_size);
bfb1c796 2531 unpacked = value_contents_writeable (v);
f93fca70
JB
2532
2533 if (bit_size == 0)
2534 {
2535 memset (unpacked, 0, TYPE_LENGTH (type));
2536 return v;
2537 }
2538
d5722aa2 2539 if (staging.size () == TYPE_LENGTH (type))
f93fca70 2540 {
d0a9e810
JB
2541 /* Small short-cut: If we've unpacked the data into a buffer
2542 of the same size as TYPE's length, then we can reuse that,
2543 instead of doing the unpacking again. */
d5722aa2 2544 memcpy (unpacked, staging.data (), staging.size ());
f93fca70 2545 }
d0a9e810
JB
2546 else
2547 ada_unpack_from_contents (src, bit_offset, bit_size,
2548 unpacked, TYPE_LENGTH (type),
2549 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2550
14f9c5c9
AS
2551 return v;
2552}
d2e4a39e 2553
14f9c5c9
AS
2554/* Store the contents of FROMVAL into the location of TOVAL.
2555 Return a new value with the location of TOVAL and contents of
2556 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2557 floating-point or non-scalar types. */
14f9c5c9 2558
d2e4a39e
AS
2559static struct value *
2560ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2561{
df407dfe
AC
2562 struct type *type = value_type (toval);
2563 int bits = value_bitsize (toval);
14f9c5c9 2564
52ce6436
PH
2565 toval = ada_coerce_ref (toval);
2566 fromval = ada_coerce_ref (fromval);
2567
2568 if (ada_is_direct_array_type (value_type (toval)))
2569 toval = ada_coerce_to_simple_array (toval);
2570 if (ada_is_direct_array_type (value_type (fromval)))
2571 fromval = ada_coerce_to_simple_array (fromval);
2572
88e3b34b 2573 if (!deprecated_value_modifiable (toval))
323e0a4a 2574 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2575
d2e4a39e 2576 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2577 && bits > 0
78134374 2578 && (type->code () == TYPE_CODE_FLT
dda83cd7 2579 || type->code () == TYPE_CODE_STRUCT))
14f9c5c9 2580 {
df407dfe
AC
2581 int len = (value_bitpos (toval)
2582 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2583 int from_size;
224c3ddb 2584 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2585 struct value *val;
42ae5230 2586 CORE_ADDR to_addr = value_address (toval);
14f9c5c9 2587
78134374 2588 if (type->code () == TYPE_CODE_FLT)
dda83cd7 2589 fromval = value_cast (type, fromval);
14f9c5c9 2590
52ce6436 2591 read_memory (to_addr, buffer, len);
aced2898
PH
2592 from_size = value_bitsize (fromval);
2593 if (from_size == 0)
2594 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
d48e62f4 2595
d5a22e77 2596 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d48e62f4
TT
2597 ULONGEST from_offset = 0;
2598 if (is_big_endian && is_scalar_type (value_type (fromval)))
2599 from_offset = from_size - bits;
2600 copy_bitwise (buffer, value_bitpos (toval),
2601 value_contents (fromval), from_offset,
2602 bits, is_big_endian);
972daa01 2603 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2604
14f9c5c9 2605 val = value_copy (toval);
0fd88904 2606 memcpy (value_contents_raw (val), value_contents (fromval),
dda83cd7 2607 TYPE_LENGTH (type));
04624583 2608 deprecated_set_value_type (val, type);
d2e4a39e 2609
14f9c5c9
AS
2610 return val;
2611 }
2612
2613 return value_assign (toval, fromval);
2614}
2615
2616
7c512744
JB
2617/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2618 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2619 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2620 COMPONENT, and not the inferior's memory. The current contents
2621 of COMPONENT are ignored.
2622
2623 Although not part of the initial design, this function also works
2624 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2625 had a null address, and COMPONENT had an address which is equal to
2626 its offset inside CONTAINER. */
2627
52ce6436
PH
2628static void
2629value_assign_to_component (struct value *container, struct value *component,
2630 struct value *val)
2631{
2632 LONGEST offset_in_container =
42ae5230 2633 (LONGEST) (value_address (component) - value_address (container));
7c512744 2634 int bit_offset_in_container =
52ce6436
PH
2635 value_bitpos (component) - value_bitpos (container);
2636 int bits;
7c512744 2637
52ce6436
PH
2638 val = value_cast (value_type (component), val);
2639
2640 if (value_bitsize (component) == 0)
2641 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2642 else
2643 bits = value_bitsize (component);
2644
d5a22e77 2645 if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2a62dfa9
JB
2646 {
2647 int src_offset;
2648
2649 if (is_scalar_type (check_typedef (value_type (component))))
dda83cd7 2650 src_offset
2a62dfa9
JB
2651 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2652 else
2653 src_offset = 0;
a99bc3d2
JB
2654 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2655 value_bitpos (container) + bit_offset_in_container,
2656 value_contents (val), src_offset, bits, 1);
2a62dfa9 2657 }
52ce6436 2658 else
a99bc3d2
JB
2659 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2660 value_bitpos (container) + bit_offset_in_container,
2661 value_contents (val), 0, bits, 0);
7c512744
JB
2662}
2663
736ade86
XR
2664/* Determine if TYPE is an access to an unconstrained array. */
2665
d91e9ea8 2666bool
736ade86
XR
2667ada_is_access_to_unconstrained_array (struct type *type)
2668{
78134374 2669 return (type->code () == TYPE_CODE_TYPEDEF
736ade86
XR
2670 && is_thick_pntr (ada_typedef_target_type (type)));
2671}
2672
4c4b4cd2
PH
2673/* The value of the element of array ARR at the ARITY indices given in IND.
2674 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2675 thereto. */
2676
d2e4a39e
AS
2677struct value *
2678ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2679{
2680 int k;
d2e4a39e
AS
2681 struct value *elt;
2682 struct type *elt_type;
14f9c5c9
AS
2683
2684 elt = ada_coerce_to_simple_array (arr);
2685
df407dfe 2686 elt_type = ada_check_typedef (value_type (elt));
78134374 2687 if (elt_type->code () == TYPE_CODE_ARRAY
14f9c5c9
AS
2688 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2689 return value_subscript_packed (elt, arity, ind);
2690
2691 for (k = 0; k < arity; k += 1)
2692 {
b9c50e9a
XR
2693 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2694
78134374 2695 if (elt_type->code () != TYPE_CODE_ARRAY)
dda83cd7 2696 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2697
2497b498 2698 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2699
2700 if (ada_is_access_to_unconstrained_array (saved_elt_type)
78134374 2701 && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
b9c50e9a
XR
2702 {
2703 /* The element is a typedef to an unconstrained array,
2704 except that the value_subscript call stripped the
2705 typedef layer. The typedef layer is GNAT's way to
2706 specify that the element is, at the source level, an
2707 access to the unconstrained array, rather than the
2708 unconstrained array. So, we need to restore that
2709 typedef layer, which we can do by forcing the element's
2710 type back to its original type. Otherwise, the returned
2711 value is going to be printed as the array, rather
2712 than as an access. Another symptom of the same issue
2713 would be that an expression trying to dereference the
2714 element would also be improperly rejected. */
2715 deprecated_set_value_type (elt, saved_elt_type);
2716 }
2717
2718 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2719 }
b9c50e9a 2720
14f9c5c9
AS
2721 return elt;
2722}
2723
deede10c
JB
2724/* Assuming ARR is a pointer to a GDB array, the value of the element
2725 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2726 Does not read the entire array into memory.
2727
2728 Note: Unlike what one would expect, this function is used instead of
2729 ada_value_subscript for basically all non-packed array types. The reason
2730 for this is that a side effect of doing our own pointer arithmetics instead
2731 of relying on value_subscript is that there is no implicit typedef peeling.
2732 This is important for arrays of array accesses, where it allows us to
2733 preserve the fact that the array's element is an array access, where the
2734 access part os encoded in a typedef layer. */
14f9c5c9 2735
2c0b251b 2736static struct value *
deede10c 2737ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2738{
2739 int k;
919e6dbe 2740 struct value *array_ind = ada_value_ind (arr);
deede10c 2741 struct type *type
919e6dbe
PMR
2742 = check_typedef (value_enclosing_type (array_ind));
2743
78134374 2744 if (type->code () == TYPE_CODE_ARRAY
919e6dbe
PMR
2745 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2746 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2747
2748 for (k = 0; k < arity; k += 1)
2749 {
2750 LONGEST lwb, upb;
14f9c5c9 2751
78134374 2752 if (type->code () != TYPE_CODE_ARRAY)
dda83cd7 2753 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2754 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
dda83cd7 2755 value_copy (arr));
3d967001 2756 get_discrete_bounds (type->index_type (), &lwb, &upb);
53a47a3e 2757 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2758 type = TYPE_TARGET_TYPE (type);
2759 }
2760
2761 return value_ind (arr);
2762}
2763
0b5d8877 2764/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2765 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2766 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2767 this array is LOW, as per Ada rules. */
0b5d8877 2768static struct value *
f5938064 2769ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
dda83cd7 2770 int low, int high)
0b5d8877 2771{
b0dd7688 2772 struct type *type0 = ada_check_typedef (type);
3d967001 2773 struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ());
0c9c3474 2774 struct type *index_type
aa715135 2775 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2776 struct type *slice_type = create_array_type_with_stride
2777 (NULL, TYPE_TARGET_TYPE (type0), index_type,
24e99c6c 2778 type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2779 TYPE_FIELD_BITSIZE (type0, 0));
3d967001 2780 int base_low = ada_discrete_type_low_bound (type0->index_type ());
6244c119 2781 gdb::optional<LONGEST> base_low_pos, low_pos;
aa715135
JG
2782 CORE_ADDR base;
2783
6244c119
SM
2784 low_pos = discrete_position (base_index_type, low);
2785 base_low_pos = discrete_position (base_index_type, base_low);
2786
2787 if (!low_pos.has_value () || !base_low_pos.has_value ())
aa715135
JG
2788 {
2789 warning (_("unable to get positions in slice, use bounds instead"));
2790 low_pos = low;
2791 base_low_pos = base_low;
2792 }
5b4ee69b 2793
7ff5b937
TT
2794 ULONGEST stride = TYPE_FIELD_BITSIZE (slice_type, 0) / 8;
2795 if (stride == 0)
2796 stride = TYPE_LENGTH (TYPE_TARGET_TYPE (type0));
2797
6244c119 2798 base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
f5938064 2799 return value_at_lazy (slice_type, base);
0b5d8877
PH
2800}
2801
2802
2803static struct value *
2804ada_value_slice (struct value *array, int low, int high)
2805{
b0dd7688 2806 struct type *type = ada_check_typedef (value_type (array));
3d967001 2807 struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
0c9c3474 2808 struct type *index_type
3d967001 2809 = create_static_range_type (NULL, type->index_type (), low, high);
9fe561ab
JB
2810 struct type *slice_type = create_array_type_with_stride
2811 (NULL, TYPE_TARGET_TYPE (type), index_type,
24e99c6c 2812 type->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2813 TYPE_FIELD_BITSIZE (type, 0));
6244c119
SM
2814 gdb::optional<LONGEST> low_pos, high_pos;
2815
5b4ee69b 2816
6244c119
SM
2817 low_pos = discrete_position (base_index_type, low);
2818 high_pos = discrete_position (base_index_type, high);
2819
2820 if (!low_pos.has_value () || !high_pos.has_value ())
aa715135
JG
2821 {
2822 warning (_("unable to get positions in slice, use bounds instead"));
2823 low_pos = low;
2824 high_pos = high;
2825 }
2826
2827 return value_cast (slice_type,
6244c119 2828 value_slice (array, low, *high_pos - *low_pos + 1));
0b5d8877
PH
2829}
2830
14f9c5c9
AS
2831/* If type is a record type in the form of a standard GNAT array
2832 descriptor, returns the number of dimensions for type. If arr is a
2833 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2834 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2835
2836int
d2e4a39e 2837ada_array_arity (struct type *type)
14f9c5c9
AS
2838{
2839 int arity;
2840
2841 if (type == NULL)
2842 return 0;
2843
2844 type = desc_base_type (type);
2845
2846 arity = 0;
78134374 2847 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9 2848 return desc_arity (desc_bounds_type (type));
d2e4a39e 2849 else
78134374 2850 while (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2851 {
dda83cd7
SM
2852 arity += 1;
2853 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2854 }
d2e4a39e 2855
14f9c5c9
AS
2856 return arity;
2857}
2858
2859/* If TYPE is a record type in the form of a standard GNAT array
2860 descriptor or a simple array type, returns the element type for
2861 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2862 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2863
d2e4a39e
AS
2864struct type *
2865ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2866{
2867 type = desc_base_type (type);
2868
78134374 2869 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
2870 {
2871 int k;
d2e4a39e 2872 struct type *p_array_type;
14f9c5c9 2873
556bdfd4 2874 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2875
2876 k = ada_array_arity (type);
2877 if (k == 0)
dda83cd7 2878 return NULL;
d2e4a39e 2879
4c4b4cd2 2880 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2881 if (nindices >= 0 && k > nindices)
dda83cd7 2882 k = nindices;
d2e4a39e 2883 while (k > 0 && p_array_type != NULL)
dda83cd7
SM
2884 {
2885 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2886 k -= 1;
2887 }
14f9c5c9
AS
2888 return p_array_type;
2889 }
78134374 2890 else if (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2891 {
78134374 2892 while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
dda83cd7
SM
2893 {
2894 type = TYPE_TARGET_TYPE (type);
2895 nindices -= 1;
2896 }
14f9c5c9
AS
2897 return type;
2898 }
2899
2900 return NULL;
2901}
2902
4c4b4cd2 2903/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2904 Does not examine memory. Throws an error if N is invalid or TYPE
2905 is not an array type. NAME is the name of the Ada attribute being
2906 evaluated ('range, 'first, 'last, or 'length); it is used in building
2907 the error message. */
14f9c5c9 2908
1eea4ebd
UW
2909static struct type *
2910ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2911{
4c4b4cd2
PH
2912 struct type *result_type;
2913
14f9c5c9
AS
2914 type = desc_base_type (type);
2915
1eea4ebd
UW
2916 if (n < 0 || n > ada_array_arity (type))
2917 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2918
4c4b4cd2 2919 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2920 {
2921 int i;
2922
2923 for (i = 1; i < n; i += 1)
dda83cd7 2924 type = TYPE_TARGET_TYPE (type);
3d967001 2925 result_type = TYPE_TARGET_TYPE (type->index_type ());
4c4b4cd2 2926 /* FIXME: The stabs type r(0,0);bound;bound in an array type
dda83cd7
SM
2927 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2928 perhaps stabsread.c would make more sense. */
78134374 2929 if (result_type && result_type->code () == TYPE_CODE_UNDEF)
dda83cd7 2930 result_type = NULL;
14f9c5c9 2931 }
d2e4a39e 2932 else
1eea4ebd
UW
2933 {
2934 result_type = desc_index_type (desc_bounds_type (type), n);
2935 if (result_type == NULL)
2936 error (_("attempt to take bound of something that is not an array"));
2937 }
2938
2939 return result_type;
14f9c5c9
AS
2940}
2941
2942/* Given that arr is an array type, returns the lower bound of the
2943 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2944 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2945 array-descriptor type. It works for other arrays with bounds supplied
2946 by run-time quantities other than discriminants. */
14f9c5c9 2947
abb68b3e 2948static LONGEST
fb5e3d5c 2949ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2950{
8a48ac95 2951 struct type *type, *index_type_desc, *index_type;
1ce677a4 2952 int i;
262452ec
JK
2953
2954 gdb_assert (which == 0 || which == 1);
14f9c5c9 2955
ad82864c
JB
2956 if (ada_is_constrained_packed_array_type (arr_type))
2957 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2958
4c4b4cd2 2959 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2960 return (LONGEST) - which;
14f9c5c9 2961
78134374 2962 if (arr_type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
2963 type = TYPE_TARGET_TYPE (arr_type);
2964 else
2965 type = arr_type;
2966
22c4c60c 2967 if (type->is_fixed_instance ())
bafffb51
JB
2968 {
2969 /* The array has already been fixed, so we do not need to
2970 check the parallel ___XA type again. That encoding has
2971 already been applied, so ignore it now. */
2972 index_type_desc = NULL;
2973 }
2974 else
2975 {
2976 index_type_desc = ada_find_parallel_type (type, "___XA");
2977 ada_fixup_array_indexes_type (index_type_desc);
2978 }
2979
262452ec 2980 if (index_type_desc != NULL)
940da03e 2981 index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
28c85d6c 2982 NULL);
262452ec 2983 else
8a48ac95
JB
2984 {
2985 struct type *elt_type = check_typedef (type);
2986
2987 for (i = 1; i < n; i++)
2988 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2989
3d967001 2990 index_type = elt_type->index_type ();
8a48ac95 2991 }
262452ec 2992
43bbcdc2
PH
2993 return
2994 (LONGEST) (which == 0
dda83cd7
SM
2995 ? ada_discrete_type_low_bound (index_type)
2996 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2997}
2998
2999/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3000 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3001 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3002 supplied by run-time quantities other than discriminants. */
14f9c5c9 3003
1eea4ebd 3004static LONGEST
4dc81987 3005ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3006{
eb479039
JB
3007 struct type *arr_type;
3008
78134374 3009 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3010 arr = value_ind (arr);
3011 arr_type = value_enclosing_type (arr);
14f9c5c9 3012
ad82864c
JB
3013 if (ada_is_constrained_packed_array_type (arr_type))
3014 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3015 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3016 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3017 else
1eea4ebd 3018 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3019}
3020
3021/* Given that arr is an array value, returns the length of the
3022 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3023 supplied by run-time quantities other than discriminants.
3024 Does not work for arrays indexed by enumeration types with representation
3025 clauses at the moment. */
14f9c5c9 3026
1eea4ebd 3027static LONGEST
d2e4a39e 3028ada_array_length (struct value *arr, int n)
14f9c5c9 3029{
aa715135
JG
3030 struct type *arr_type, *index_type;
3031 int low, high;
eb479039 3032
78134374 3033 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3034 arr = value_ind (arr);
3035 arr_type = value_enclosing_type (arr);
14f9c5c9 3036
ad82864c
JB
3037 if (ada_is_constrained_packed_array_type (arr_type))
3038 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3039
4c4b4cd2 3040 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3041 {
3042 low = ada_array_bound_from_type (arr_type, n, 0);
3043 high = ada_array_bound_from_type (arr_type, n, 1);
3044 }
14f9c5c9 3045 else
aa715135
JG
3046 {
3047 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3048 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3049 }
3050
f168693b 3051 arr_type = check_typedef (arr_type);
7150d33c 3052 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3053 if (index_type != NULL)
3054 {
3055 struct type *base_type;
78134374 3056 if (index_type->code () == TYPE_CODE_RANGE)
aa715135
JG
3057 base_type = TYPE_TARGET_TYPE (index_type);
3058 else
3059 base_type = index_type;
3060
3061 low = pos_atr (value_from_longest (base_type, low));
3062 high = pos_atr (value_from_longest (base_type, high));
3063 }
3064 return high - low + 1;
4c4b4cd2
PH
3065}
3066
bff8c71f
TT
3067/* An array whose type is that of ARR_TYPE (an array type), with
3068 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3069 less than LOW, then LOW-1 is used. */
4c4b4cd2
PH
3070
3071static struct value *
bff8c71f 3072empty_array (struct type *arr_type, int low, int high)
4c4b4cd2 3073{
b0dd7688 3074 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3075 struct type *index_type
3076 = create_static_range_type
dda83cd7 3077 (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
bff8c71f 3078 high < low ? low - 1 : high);
b0dd7688 3079 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3080
0b5d8877 3081 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3082}
14f9c5c9 3083\f
d2e4a39e 3084
dda83cd7 3085 /* Name resolution */
14f9c5c9 3086
4c4b4cd2
PH
3087/* The "decoded" name for the user-definable Ada operator corresponding
3088 to OP. */
14f9c5c9 3089
d2e4a39e 3090static const char *
4c4b4cd2 3091ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3092{
3093 int i;
3094
4c4b4cd2 3095 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3096 {
3097 if (ada_opname_table[i].op == op)
dda83cd7 3098 return ada_opname_table[i].decoded;
14f9c5c9 3099 }
323e0a4a 3100 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3101}
3102
de93309a
SM
3103/* Returns true (non-zero) iff decoded name N0 should appear before N1
3104 in a listing of choices during disambiguation (see sort_choices, below).
3105 The idea is that overloadings of a subprogram name from the
3106 same package should sort in their source order. We settle for ordering
3107 such symbols by their trailing number (__N or $N). */
14f9c5c9 3108
de93309a
SM
3109static int
3110encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9 3111{
de93309a
SM
3112 if (N1 == NULL)
3113 return 0;
3114 else if (N0 == NULL)
3115 return 1;
3116 else
3117 {
3118 int k0, k1;
30b15541 3119
de93309a 3120 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
dda83cd7 3121 ;
de93309a 3122 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
dda83cd7 3123 ;
de93309a 3124 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
dda83cd7
SM
3125 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3126 {
3127 int n0, n1;
3128
3129 n0 = k0;
3130 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3131 n0 -= 1;
3132 n1 = k1;
3133 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3134 n1 -= 1;
3135 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3136 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3137 }
de93309a
SM
3138 return (strcmp (N0, N1) < 0);
3139 }
14f9c5c9
AS
3140}
3141
de93309a
SM
3142/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3143 encoded names. */
14f9c5c9 3144
de93309a
SM
3145static void
3146sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3147{
14f9c5c9 3148 int i;
14f9c5c9 3149
de93309a 3150 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3151 {
de93309a
SM
3152 struct block_symbol sym = syms[i];
3153 int j;
3154
3155 for (j = i - 1; j >= 0; j -= 1)
dda83cd7
SM
3156 {
3157 if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3158 sym.symbol->linkage_name ()))
3159 break;
3160 syms[j + 1] = syms[j];
3161 }
de93309a
SM
3162 syms[j + 1] = sym;
3163 }
3164}
14f9c5c9 3165
de93309a
SM
3166/* Whether GDB should display formals and return types for functions in the
3167 overloads selection menu. */
3168static bool print_signatures = true;
4c4b4cd2 3169
de93309a
SM
3170/* Print the signature for SYM on STREAM according to the FLAGS options. For
3171 all but functions, the signature is just the name of the symbol. For
3172 functions, this is the name of the function, the list of types for formals
3173 and the return type (if any). */
4c4b4cd2 3174
de93309a
SM
3175static void
3176ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3177 const struct type_print_options *flags)
3178{
3179 struct type *type = SYMBOL_TYPE (sym);
14f9c5c9 3180
987012b8 3181 fprintf_filtered (stream, "%s", sym->print_name ());
de93309a
SM
3182 if (!print_signatures
3183 || type == NULL
78134374 3184 || type->code () != TYPE_CODE_FUNC)
de93309a 3185 return;
4c4b4cd2 3186
1f704f76 3187 if (type->num_fields () > 0)
de93309a
SM
3188 {
3189 int i;
14f9c5c9 3190
de93309a 3191 fprintf_filtered (stream, " (");
1f704f76 3192 for (i = 0; i < type->num_fields (); ++i)
de93309a
SM
3193 {
3194 if (i > 0)
3195 fprintf_filtered (stream, "; ");
940da03e 3196 ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
de93309a
SM
3197 flags);
3198 }
3199 fprintf_filtered (stream, ")");
3200 }
3201 if (TYPE_TARGET_TYPE (type) != NULL
78134374 3202 && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
de93309a
SM
3203 {
3204 fprintf_filtered (stream, " return ");
3205 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3206 }
3207}
14f9c5c9 3208
de93309a
SM
3209/* Read and validate a set of numeric choices from the user in the
3210 range 0 .. N_CHOICES-1. Place the results in increasing
3211 order in CHOICES[0 .. N-1], and return N.
14f9c5c9 3212
de93309a
SM
3213 The user types choices as a sequence of numbers on one line
3214 separated by blanks, encoding them as follows:
14f9c5c9 3215
de93309a
SM
3216 + A choice of 0 means to cancel the selection, throwing an error.
3217 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3218 + The user chooses k by typing k+IS_ALL_CHOICE+1.
14f9c5c9 3219
de93309a 3220 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9 3221
de93309a
SM
3222 ANNOTATION_SUFFIX, if present, is used to annotate the input
3223 prompts (for use with the -f switch). */
14f9c5c9 3224
de93309a
SM
3225static int
3226get_selections (int *choices, int n_choices, int max_results,
dda83cd7 3227 int is_all_choice, const char *annotation_suffix)
de93309a 3228{
992a7040 3229 const char *args;
de93309a
SM
3230 const char *prompt;
3231 int n_chosen;
3232 int first_choice = is_all_choice ? 2 : 1;
14f9c5c9 3233
de93309a
SM
3234 prompt = getenv ("PS2");
3235 if (prompt == NULL)
3236 prompt = "> ";
4c4b4cd2 3237
de93309a 3238 args = command_line_input (prompt, annotation_suffix);
4c4b4cd2 3239
de93309a
SM
3240 if (args == NULL)
3241 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3242
de93309a 3243 n_chosen = 0;
4c4b4cd2 3244
de93309a
SM
3245 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3246 order, as given in args. Choices are validated. */
3247 while (1)
14f9c5c9 3248 {
de93309a
SM
3249 char *args2;
3250 int choice, j;
76a01679 3251
de93309a
SM
3252 args = skip_spaces (args);
3253 if (*args == '\0' && n_chosen == 0)
dda83cd7 3254 error_no_arg (_("one or more choice numbers"));
de93309a 3255 else if (*args == '\0')
dda83cd7 3256 break;
76a01679 3257
de93309a
SM
3258 choice = strtol (args, &args2, 10);
3259 if (args == args2 || choice < 0
dda83cd7
SM
3260 || choice > n_choices + first_choice - 1)
3261 error (_("Argument must be choice number"));
de93309a 3262 args = args2;
76a01679 3263
de93309a 3264 if (choice == 0)
dda83cd7 3265 error (_("cancelled"));
76a01679 3266
de93309a 3267 if (choice < first_choice)
dda83cd7
SM
3268 {
3269 n_chosen = n_choices;
3270 for (j = 0; j < n_choices; j += 1)
3271 choices[j] = j;
3272 break;
3273 }
de93309a 3274 choice -= first_choice;
76a01679 3275
de93309a 3276 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
dda83cd7
SM
3277 {
3278 }
4c4b4cd2 3279
de93309a 3280 if (j < 0 || choice != choices[j])
dda83cd7
SM
3281 {
3282 int k;
4c4b4cd2 3283
dda83cd7
SM
3284 for (k = n_chosen - 1; k > j; k -= 1)
3285 choices[k + 1] = choices[k];
3286 choices[j + 1] = choice;
3287 n_chosen += 1;
3288 }
14f9c5c9
AS
3289 }
3290
de93309a
SM
3291 if (n_chosen > max_results)
3292 error (_("Select no more than %d of the above"), max_results);
3293
3294 return n_chosen;
14f9c5c9
AS
3295}
3296
de93309a
SM
3297/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3298 by asking the user (if necessary), returning the number selected,
3299 and setting the first elements of SYMS items. Error if no symbols
3300 selected. */
3301
3302/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3303 to be re-integrated one of these days. */
14f9c5c9
AS
3304
3305static int
de93309a 3306user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9 3307{
de93309a
SM
3308 int i;
3309 int *chosen = XALLOCAVEC (int , nsyms);
3310 int n_chosen;
3311 int first_choice = (max_results == 1) ? 1 : 2;
3312 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9 3313
de93309a
SM
3314 if (max_results < 1)
3315 error (_("Request to select 0 symbols!"));
3316 if (nsyms <= 1)
3317 return nsyms;
14f9c5c9 3318
de93309a
SM
3319 if (select_mode == multiple_symbols_cancel)
3320 error (_("\
3321canceled because the command is ambiguous\n\
3322See set/show multiple-symbol."));
14f9c5c9 3323
de93309a
SM
3324 /* If select_mode is "all", then return all possible symbols.
3325 Only do that if more than one symbol can be selected, of course.
3326 Otherwise, display the menu as usual. */
3327 if (select_mode == multiple_symbols_all && max_results > 1)
3328 return nsyms;
14f9c5c9 3329
de93309a
SM
3330 printf_filtered (_("[0] cancel\n"));
3331 if (max_results > 1)
3332 printf_filtered (_("[1] all\n"));
14f9c5c9 3333
de93309a 3334 sort_choices (syms, nsyms);
14f9c5c9 3335
de93309a
SM
3336 for (i = 0; i < nsyms; i += 1)
3337 {
3338 if (syms[i].symbol == NULL)
dda83cd7 3339 continue;
14f9c5c9 3340
de93309a 3341 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
dda83cd7
SM
3342 {
3343 struct symtab_and_line sal =
3344 find_function_start_sal (syms[i].symbol, 1);
14f9c5c9 3345
de93309a
SM
3346 printf_filtered ("[%d] ", i + first_choice);
3347 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3348 &type_print_raw_options);
3349 if (sal.symtab == NULL)
3350 printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3351 metadata_style.style ().ptr (), nullptr, sal.line);
3352 else
3353 printf_filtered
3354 (_(" at %ps:%d\n"),
3355 styled_string (file_name_style.style (),
3356 symtab_to_filename_for_display (sal.symtab)),
3357 sal.line);
dda83cd7
SM
3358 continue;
3359 }
76a01679 3360 else
dda83cd7
SM
3361 {
3362 int is_enumeral =
3363 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3364 && SYMBOL_TYPE (syms[i].symbol) != NULL
3365 && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
de93309a 3366 struct symtab *symtab = NULL;
4c4b4cd2 3367
de93309a
SM
3368 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3369 symtab = symbol_symtab (syms[i].symbol);
3370
dda83cd7 3371 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
de93309a
SM
3372 {
3373 printf_filtered ("[%d] ", i + first_choice);
3374 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3375 &type_print_raw_options);
3376 printf_filtered (_(" at %s:%d\n"),
3377 symtab_to_filename_for_display (symtab),
3378 SYMBOL_LINE (syms[i].symbol));
3379 }
dda83cd7
SM
3380 else if (is_enumeral
3381 && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
3382 {
3383 printf_filtered (("[%d] "), i + first_choice);
3384 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3385 gdb_stdout, -1, 0, &type_print_raw_options);
3386 printf_filtered (_("'(%s) (enumeral)\n"),
987012b8 3387 syms[i].symbol->print_name ());
dda83cd7 3388 }
de93309a
SM
3389 else
3390 {
3391 printf_filtered ("[%d] ", i + first_choice);
3392 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3393 &type_print_raw_options);
3394
3395 if (symtab != NULL)
3396 printf_filtered (is_enumeral
3397 ? _(" in %s (enumeral)\n")
3398 : _(" at %s:?\n"),
3399 symtab_to_filename_for_display (symtab));
3400 else
3401 printf_filtered (is_enumeral
3402 ? _(" (enumeral)\n")
3403 : _(" at ?\n"));
3404 }
dda83cd7 3405 }
14f9c5c9 3406 }
14f9c5c9 3407
de93309a 3408 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
dda83cd7 3409 "overload-choice");
14f9c5c9 3410
de93309a
SM
3411 for (i = 0; i < n_chosen; i += 1)
3412 syms[i] = syms[chosen[i]];
14f9c5c9 3413
de93309a
SM
3414 return n_chosen;
3415}
14f9c5c9 3416
de93309a
SM
3417/* Resolve the operator of the subexpression beginning at
3418 position *POS of *EXPP. "Resolving" consists of replacing
3419 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3420 with their resolutions, replacing built-in operators with
3421 function calls to user-defined operators, where appropriate, and,
3422 when DEPROCEDURE_P is non-zero, converting function-valued variables
3423 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3424 are as in ada_resolve, above. */
14f9c5c9 3425
de93309a
SM
3426static struct value *
3427resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
dda83cd7 3428 struct type *context_type, int parse_completion,
de93309a 3429 innermost_block_tracker *tracker)
14f9c5c9 3430{
de93309a
SM
3431 int pc = *pos;
3432 int i;
3433 struct expression *exp; /* Convenience: == *expp. */
3434 enum exp_opcode op = (*expp)->elts[pc].opcode;
3435 struct value **argvec; /* Vector of operand types (alloca'ed). */
3436 int nargs; /* Number of operands. */
3437 int oplen;
19184910
TT
3438 /* If we're resolving an expression like ARRAY(ARG...), then we set
3439 this to the type of the array, so we can use the index types as
3440 the expected types for resolution. */
3441 struct type *array_type = nullptr;
3442 /* The arity of ARRAY_TYPE. */
3443 int array_arity = 0;
14f9c5c9 3444
de93309a
SM
3445 argvec = NULL;
3446 nargs = 0;
3447 exp = expp->get ();
4c4b4cd2 3448
de93309a
SM
3449 /* Pass one: resolve operands, saving their types and updating *pos,
3450 if needed. */
3451 switch (op)
3452 {
3453 case OP_FUNCALL:
3454 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
dda83cd7
SM
3455 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3456 *pos += 7;
de93309a 3457 else
dda83cd7
SM
3458 {
3459 *pos += 3;
19184910
TT
3460 struct value *lhs = resolve_subexp (expp, pos, 0, NULL,
3461 parse_completion, tracker);
3462 struct type *lhstype = ada_check_typedef (value_type (lhs));
3463 array_arity = ada_array_arity (lhstype);
3464 if (array_arity > 0)
3465 array_type = lhstype;
dda83cd7 3466 }
de93309a
SM
3467 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3468 break;
14f9c5c9 3469
de93309a
SM
3470 case UNOP_ADDR:
3471 *pos += 1;
3472 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3473 break;
3474
3475 case UNOP_QUAL:
3476 *pos += 3;
3477 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3478 parse_completion, tracker);
3479 break;
3480
3481 case OP_ATR_MODULUS:
3482 case OP_ATR_SIZE:
3483 case OP_ATR_TAG:
3484 case OP_ATR_FIRST:
3485 case OP_ATR_LAST:
3486 case OP_ATR_LENGTH:
3487 case OP_ATR_POS:
3488 case OP_ATR_VAL:
3489 case OP_ATR_MIN:
3490 case OP_ATR_MAX:
3491 case TERNOP_IN_RANGE:
3492 case BINOP_IN_BOUNDS:
3493 case UNOP_IN_RANGE:
3494 case OP_AGGREGATE:
3495 case OP_OTHERS:
3496 case OP_CHOICES:
3497 case OP_POSITIONAL:
3498 case OP_DISCRETE_RANGE:
3499 case OP_NAME:
3500 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3501 *pos += oplen;
3502 break;
3503
3504 case BINOP_ASSIGN:
3505 {
dda83cd7
SM
3506 struct value *arg1;
3507
3508 *pos += 1;
3509 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3510 if (arg1 == NULL)
3511 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3512 else
3513 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
de93309a 3514 tracker);
dda83cd7 3515 break;
de93309a
SM
3516 }
3517
3518 case UNOP_CAST:
3519 *pos += 3;
3520 nargs = 1;
3521 break;
3522
3523 case BINOP_ADD:
3524 case BINOP_SUB:
3525 case BINOP_MUL:
3526 case BINOP_DIV:
3527 case BINOP_REM:
3528 case BINOP_MOD:
3529 case BINOP_EXP:
3530 case BINOP_CONCAT:
3531 case BINOP_LOGICAL_AND:
3532 case BINOP_LOGICAL_OR:
3533 case BINOP_BITWISE_AND:
3534 case BINOP_BITWISE_IOR:
3535 case BINOP_BITWISE_XOR:
3536
3537 case BINOP_EQUAL:
3538 case BINOP_NOTEQUAL:
3539 case BINOP_LESS:
3540 case BINOP_GTR:
3541 case BINOP_LEQ:
3542 case BINOP_GEQ:
3543
3544 case BINOP_REPEAT:
3545 case BINOP_SUBSCRIPT:
3546 case BINOP_COMMA:
3547 *pos += 1;
3548 nargs = 2;
3549 break;
3550
3551 case UNOP_NEG:
3552 case UNOP_PLUS:
3553 case UNOP_LOGICAL_NOT:
3554 case UNOP_ABS:
3555 case UNOP_IND:
3556 *pos += 1;
3557 nargs = 1;
3558 break;
3559
3560 case OP_LONG:
3561 case OP_FLOAT:
3562 case OP_VAR_VALUE:
3563 case OP_VAR_MSYM_VALUE:
3564 *pos += 4;
3565 break;
3566
3567 case OP_TYPE:
3568 case OP_BOOL:
3569 case OP_LAST:
3570 case OP_INTERNALVAR:
3571 *pos += 3;
3572 break;
3573
3574 case UNOP_MEMVAL:
3575 *pos += 3;
3576 nargs = 1;
3577 break;
3578
3579 case OP_REGISTER:
3580 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3581 break;
3582
3583 case STRUCTOP_STRUCT:
3584 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3585 nargs = 1;
3586 break;
3587
3588 case TERNOP_SLICE:
3589 *pos += 1;
3590 nargs = 3;
3591 break;
3592
3593 case OP_STRING:
3594 break;
3595
3596 default:
3597 error (_("Unexpected operator during name resolution"));
14f9c5c9 3598 }
14f9c5c9 3599
de93309a
SM
3600 argvec = XALLOCAVEC (struct value *, nargs + 1);
3601 for (i = 0; i < nargs; i += 1)
19184910
TT
3602 {
3603 struct type *subtype = nullptr;
3604 if (i < array_arity)
3605 subtype = ada_index_type (array_type, i + 1, "array type");
3606 argvec[i] = resolve_subexp (expp, pos, 1, subtype, parse_completion,
3607 tracker);
3608 }
de93309a
SM
3609 argvec[i] = NULL;
3610 exp = expp->get ();
4c4b4cd2 3611
de93309a
SM
3612 /* Pass two: perform any resolution on principal operator. */
3613 switch (op)
14f9c5c9 3614 {
de93309a
SM
3615 default:
3616 break;
5b4ee69b 3617
de93309a
SM
3618 case OP_VAR_VALUE:
3619 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7 3620 {
d1183b06
TT
3621 std::vector<struct block_symbol> candidates
3622 = ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
3623 exp->elts[pc + 1].block, VAR_DOMAIN);
886d459f
TT
3624
3625 if (std::any_of (candidates.begin (),
3626 candidates.end (),
3627 [] (block_symbol &sym)
3628 {
3629 switch (SYMBOL_CLASS (sym.symbol))
3630 {
3631 case LOC_REGISTER:
3632 case LOC_ARG:
3633 case LOC_REF_ARG:
3634 case LOC_REGPARM_ADDR:
3635 case LOC_LOCAL:
3636 case LOC_COMPUTED:
3637 return true;
3638 default:
3639 return false;
3640 }
3641 }))
dda83cd7
SM
3642 {
3643 /* Types tend to get re-introduced locally, so if there
3644 are any local symbols that are not types, first filter
3645 out all types. */
886d459f
TT
3646 candidates.erase
3647 (std::remove_if
3648 (candidates.begin (),
3649 candidates.end (),
3650 [] (block_symbol &sym)
dda83cd7 3651 {
886d459f
TT
3652 return SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF;
3653 }),
3654 candidates.end ());
dda83cd7
SM
3655 }
3656
d1183b06 3657 if (candidates.empty ())
dda83cd7
SM
3658 error (_("No definition found for %s"),
3659 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3660 else if (candidates.size () == 1)
dda83cd7 3661 i = 0;
d1183b06 3662 else if (deprocedure_p && !is_nonfunction (candidates))
dda83cd7
SM
3663 {
3664 i = ada_resolve_function
d1183b06 3665 (candidates, NULL, 0,
dda83cd7
SM
3666 exp->elts[pc + 2].symbol->linkage_name (),
3667 context_type, parse_completion);
3668 if (i < 0)
3669 error (_("Could not find a match for %s"),
3670 exp->elts[pc + 2].symbol->print_name ());
3671 }
3672 else
3673 {
3674 printf_filtered (_("Multiple matches for %s\n"),
3675 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3676 user_select_syms (candidates.data (), candidates.size (), 1);
dda83cd7
SM
3677 i = 0;
3678 }
3679
3680 exp->elts[pc + 1].block = candidates[i].block;
3681 exp->elts[pc + 2].symbol = candidates[i].symbol;
de93309a 3682 tracker->update (candidates[i]);
dda83cd7 3683 }
14f9c5c9 3684
de93309a 3685 if (deprocedure_p
dda83cd7
SM
3686 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3687 == TYPE_CODE_FUNC))
3688 {
3689 replace_operator_with_call (expp, pc, 0, 4,
3690 exp->elts[pc + 2].symbol,
3691 exp->elts[pc + 1].block);
3692 exp = expp->get ();
3693 }
de93309a
SM
3694 break;
3695
3696 case OP_FUNCALL:
3697 {
dda83cd7
SM
3698 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3699 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3700 {
d1183b06
TT
3701 std::vector<struct block_symbol> candidates
3702 = ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
3703 exp->elts[pc + 4].block, VAR_DOMAIN);
dda83cd7 3704
d1183b06 3705 if (candidates.size () == 1)
dda83cd7
SM
3706 i = 0;
3707 else
3708 {
3709 i = ada_resolve_function
d1183b06 3710 (candidates,
dda83cd7
SM
3711 argvec, nargs,
3712 exp->elts[pc + 5].symbol->linkage_name (),
3713 context_type, parse_completion);
3714 if (i < 0)
3715 error (_("Could not find a match for %s"),
3716 exp->elts[pc + 5].symbol->print_name ());
3717 }
3718
3719 exp->elts[pc + 4].block = candidates[i].block;
3720 exp->elts[pc + 5].symbol = candidates[i].symbol;
de93309a 3721 tracker->update (candidates[i]);
dda83cd7 3722 }
de93309a
SM
3723 }
3724 break;
3725 case BINOP_ADD:
3726 case BINOP_SUB:
3727 case BINOP_MUL:
3728 case BINOP_DIV:
3729 case BINOP_REM:
3730 case BINOP_MOD:
3731 case BINOP_CONCAT:
3732 case BINOP_BITWISE_AND:
3733 case BINOP_BITWISE_IOR:
3734 case BINOP_BITWISE_XOR:
3735 case BINOP_EQUAL:
3736 case BINOP_NOTEQUAL:
3737 case BINOP_LESS:
3738 case BINOP_GTR:
3739 case BINOP_LEQ:
3740 case BINOP_GEQ:
3741 case BINOP_EXP:
3742 case UNOP_NEG:
3743 case UNOP_PLUS:
3744 case UNOP_LOGICAL_NOT:
3745 case UNOP_ABS:
3746 if (possible_user_operator_p (op, argvec))
dda83cd7 3747 {
d1183b06
TT
3748 std::vector<struct block_symbol> candidates
3749 = ada_lookup_symbol_list (ada_decoded_op_name (op),
3750 NULL, VAR_DOMAIN);
d72413e6 3751
d1183b06 3752 i = ada_resolve_function (candidates, argvec,
de93309a
SM
3753 nargs, ada_decoded_op_name (op), NULL,
3754 parse_completion);
dda83cd7
SM
3755 if (i < 0)
3756 break;
d72413e6 3757
de93309a
SM
3758 replace_operator_with_call (expp, pc, nargs, 1,
3759 candidates[i].symbol,
3760 candidates[i].block);
dda83cd7
SM
3761 exp = expp->get ();
3762 }
de93309a 3763 break;
d72413e6 3764
de93309a
SM
3765 case OP_TYPE:
3766 case OP_REGISTER:
3767 return NULL;
d72413e6 3768 }
d72413e6 3769
de93309a
SM
3770 *pos = pc;
3771 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3772 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3773 exp->elts[pc + 1].objfile,
3774 exp->elts[pc + 2].msymbol);
3775 else
3776 return evaluate_subexp_type (exp, pos);
3777}
14f9c5c9 3778
de93309a
SM
3779/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3780 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3781 a non-pointer. */
3782/* The term "match" here is rather loose. The match is heuristic and
3783 liberal. */
14f9c5c9 3784
de93309a
SM
3785static int
3786ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3787{
de93309a
SM
3788 ftype = ada_check_typedef (ftype);
3789 atype = ada_check_typedef (atype);
14f9c5c9 3790
78134374 3791 if (ftype->code () == TYPE_CODE_REF)
de93309a 3792 ftype = TYPE_TARGET_TYPE (ftype);
78134374 3793 if (atype->code () == TYPE_CODE_REF)
de93309a 3794 atype = TYPE_TARGET_TYPE (atype);
14f9c5c9 3795
78134374 3796 switch (ftype->code ())
14f9c5c9 3797 {
de93309a 3798 default:
78134374 3799 return ftype->code () == atype->code ();
de93309a 3800 case TYPE_CODE_PTR:
78134374 3801 if (atype->code () == TYPE_CODE_PTR)
dda83cd7
SM
3802 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3803 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3804 else
dda83cd7
SM
3805 return (may_deref
3806 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
de93309a
SM
3807 case TYPE_CODE_INT:
3808 case TYPE_CODE_ENUM:
3809 case TYPE_CODE_RANGE:
78134374 3810 switch (atype->code ())
dda83cd7
SM
3811 {
3812 case TYPE_CODE_INT:
3813 case TYPE_CODE_ENUM:
3814 case TYPE_CODE_RANGE:
3815 return 1;
3816 default:
3817 return 0;
3818 }
d2e4a39e 3819
de93309a 3820 case TYPE_CODE_ARRAY:
78134374 3821 return (atype->code () == TYPE_CODE_ARRAY
dda83cd7 3822 || ada_is_array_descriptor_type (atype));
14f9c5c9 3823
de93309a
SM
3824 case TYPE_CODE_STRUCT:
3825 if (ada_is_array_descriptor_type (ftype))
dda83cd7
SM
3826 return (atype->code () == TYPE_CODE_ARRAY
3827 || ada_is_array_descriptor_type (atype));
de93309a 3828 else
dda83cd7
SM
3829 return (atype->code () == TYPE_CODE_STRUCT
3830 && !ada_is_array_descriptor_type (atype));
14f9c5c9 3831
de93309a
SM
3832 case TYPE_CODE_UNION:
3833 case TYPE_CODE_FLT:
78134374 3834 return (atype->code () == ftype->code ());
de93309a 3835 }
14f9c5c9
AS
3836}
3837
de93309a
SM
3838/* Return non-zero if the formals of FUNC "sufficiently match" the
3839 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3840 may also be an enumeral, in which case it is treated as a 0-
3841 argument function. */
14f9c5c9 3842
de93309a
SM
3843static int
3844ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3845{
3846 int i;
3847 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3848
de93309a 3849 if (SYMBOL_CLASS (func) == LOC_CONST
78134374 3850 && func_type->code () == TYPE_CODE_ENUM)
de93309a 3851 return (n_actuals == 0);
78134374 3852 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
de93309a 3853 return 0;
14f9c5c9 3854
1f704f76 3855 if (func_type->num_fields () != n_actuals)
de93309a 3856 return 0;
14f9c5c9 3857
de93309a
SM
3858 for (i = 0; i < n_actuals; i += 1)
3859 {
3860 if (actuals[i] == NULL)
dda83cd7 3861 return 0;
de93309a 3862 else
dda83cd7
SM
3863 {
3864 struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3865 struct type *atype = ada_check_typedef (value_type (actuals[i]));
14f9c5c9 3866
dda83cd7
SM
3867 if (!ada_type_match (ftype, atype, 1))
3868 return 0;
3869 }
de93309a
SM
3870 }
3871 return 1;
3872}
d2e4a39e 3873
de93309a
SM
3874/* False iff function type FUNC_TYPE definitely does not produce a value
3875 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3876 FUNC_TYPE is not a valid function type with a non-null return type
3877 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
14f9c5c9 3878
de93309a
SM
3879static int
3880return_match (struct type *func_type, struct type *context_type)
3881{
3882 struct type *return_type;
d2e4a39e 3883
de93309a
SM
3884 if (func_type == NULL)
3885 return 1;
14f9c5c9 3886
78134374 3887 if (func_type->code () == TYPE_CODE_FUNC)
de93309a
SM
3888 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3889 else
3890 return_type = get_base_type (func_type);
3891 if (return_type == NULL)
3892 return 1;
76a01679 3893
de93309a 3894 context_type = get_base_type (context_type);
14f9c5c9 3895
78134374 3896 if (return_type->code () == TYPE_CODE_ENUM)
de93309a
SM
3897 return context_type == NULL || return_type == context_type;
3898 else if (context_type == NULL)
78134374 3899 return return_type->code () != TYPE_CODE_VOID;
de93309a 3900 else
78134374 3901 return return_type->code () == context_type->code ();
de93309a 3902}
14f9c5c9 3903
14f9c5c9 3904
1bfa81ac 3905/* Returns the index in SYMS that contains the symbol for the
de93309a
SM
3906 function (if any) that matches the types of the NARGS arguments in
3907 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3908 that returns that type, then eliminate matches that don't. If
3909 CONTEXT_TYPE is void and there is at least one match that does not
3910 return void, eliminate all matches that do.
14f9c5c9 3911
de93309a
SM
3912 Asks the user if there is more than one match remaining. Returns -1
3913 if there is no such symbol or none is selected. NAME is used
3914 solely for messages. May re-arrange and modify SYMS in
3915 the process; the index returned is for the modified vector. */
14f9c5c9 3916
de93309a 3917static int
d1183b06
TT
3918ada_resolve_function (std::vector<struct block_symbol> &syms,
3919 struct value **args, int nargs,
dda83cd7 3920 const char *name, struct type *context_type,
de93309a
SM
3921 int parse_completion)
3922{
3923 int fallback;
3924 int k;
3925 int m; /* Number of hits */
14f9c5c9 3926
de93309a
SM
3927 m = 0;
3928 /* In the first pass of the loop, we only accept functions matching
3929 context_type. If none are found, we add a second pass of the loop
3930 where every function is accepted. */
3931 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3932 {
d1183b06 3933 for (k = 0; k < syms.size (); k += 1)
dda83cd7
SM
3934 {
3935 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
5b4ee69b 3936
dda83cd7
SM
3937 if (ada_args_match (syms[k].symbol, args, nargs)
3938 && (fallback || return_match (type, context_type)))
3939 {
3940 syms[m] = syms[k];
3941 m += 1;
3942 }
3943 }
14f9c5c9
AS
3944 }
3945
de93309a
SM
3946 /* If we got multiple matches, ask the user which one to use. Don't do this
3947 interactive thing during completion, though, as the purpose of the
3948 completion is providing a list of all possible matches. Prompting the
3949 user to filter it down would be completely unexpected in this case. */
3950 if (m == 0)
3951 return -1;
3952 else if (m > 1 && !parse_completion)
3953 {
3954 printf_filtered (_("Multiple matches for %s\n"), name);
d1183b06 3955 user_select_syms (syms.data (), m, 1);
de93309a
SM
3956 return 0;
3957 }
3958 return 0;
14f9c5c9
AS
3959}
3960
4c4b4cd2
PH
3961/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3962 on the function identified by SYM and BLOCK, and taking NARGS
3963 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3964
3965static void
e9d9f57e 3966replace_operator_with_call (expression_up *expp, int pc, int nargs,
dda83cd7
SM
3967 int oplen, struct symbol *sym,
3968 const struct block *block)
14f9c5c9 3969{
00158a68
TT
3970 /* We want to add 6 more elements (3 for funcall, 4 for function
3971 symbol, -OPLEN for operator being replaced) to the
3972 expression. */
e9d9f57e 3973 struct expression *exp = expp->get ();
00158a68 3974 int save_nelts = exp->nelts;
f51f9f1d
TV
3975 int extra_elts = 7 - oplen;
3976 exp->nelts += extra_elts;
14f9c5c9 3977
f51f9f1d
TV
3978 if (extra_elts > 0)
3979 exp->resize (exp->nelts);
00158a68
TT
3980 memmove (exp->elts + pc + 7, exp->elts + pc + oplen,
3981 EXP_ELEM_TO_BYTES (save_nelts - pc - oplen));
f51f9f1d
TV
3982 if (extra_elts < 0)
3983 exp->resize (exp->nelts);
14f9c5c9 3984
00158a68
TT
3985 exp->elts[pc].opcode = exp->elts[pc + 2].opcode = OP_FUNCALL;
3986 exp->elts[pc + 1].longconst = (LONGEST) nargs;
14f9c5c9 3987
00158a68
TT
3988 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
3989 exp->elts[pc + 4].block = block;
3990 exp->elts[pc + 5].symbol = sym;
d2e4a39e 3991}
14f9c5c9
AS
3992
3993/* Type-class predicates */
3994
4c4b4cd2
PH
3995/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3996 or FLOAT). */
14f9c5c9
AS
3997
3998static int
d2e4a39e 3999numeric_type_p (struct type *type)
14f9c5c9
AS
4000{
4001 if (type == NULL)
4002 return 0;
d2e4a39e
AS
4003 else
4004 {
78134374 4005 switch (type->code ())
dda83cd7
SM
4006 {
4007 case TYPE_CODE_INT:
4008 case TYPE_CODE_FLT:
4009 return 1;
4010 case TYPE_CODE_RANGE:
4011 return (type == TYPE_TARGET_TYPE (type)
4012 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4013 default:
4014 return 0;
4015 }
d2e4a39e 4016 }
14f9c5c9
AS
4017}
4018
4c4b4cd2 4019/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4020
4021static int
d2e4a39e 4022integer_type_p (struct type *type)
14f9c5c9
AS
4023{
4024 if (type == NULL)
4025 return 0;
d2e4a39e
AS
4026 else
4027 {
78134374 4028 switch (type->code ())
dda83cd7
SM
4029 {
4030 case TYPE_CODE_INT:
4031 return 1;
4032 case TYPE_CODE_RANGE:
4033 return (type == TYPE_TARGET_TYPE (type)
4034 || integer_type_p (TYPE_TARGET_TYPE (type)));
4035 default:
4036 return 0;
4037 }
d2e4a39e 4038 }
14f9c5c9
AS
4039}
4040
4c4b4cd2 4041/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4042
4043static int
d2e4a39e 4044scalar_type_p (struct type *type)
14f9c5c9
AS
4045{
4046 if (type == NULL)
4047 return 0;
d2e4a39e
AS
4048 else
4049 {
78134374 4050 switch (type->code ())
dda83cd7
SM
4051 {
4052 case TYPE_CODE_INT:
4053 case TYPE_CODE_RANGE:
4054 case TYPE_CODE_ENUM:
4055 case TYPE_CODE_FLT:
4056 return 1;
4057 default:
4058 return 0;
4059 }
d2e4a39e 4060 }
14f9c5c9
AS
4061}
4062
4c4b4cd2 4063/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4064
4065static int
d2e4a39e 4066discrete_type_p (struct type *type)
14f9c5c9
AS
4067{
4068 if (type == NULL)
4069 return 0;
d2e4a39e
AS
4070 else
4071 {
78134374 4072 switch (type->code ())
dda83cd7
SM
4073 {
4074 case TYPE_CODE_INT:
4075 case TYPE_CODE_RANGE:
4076 case TYPE_CODE_ENUM:
4077 case TYPE_CODE_BOOL:
4078 return 1;
4079 default:
4080 return 0;
4081 }
d2e4a39e 4082 }
14f9c5c9
AS
4083}
4084
4c4b4cd2
PH
4085/* Returns non-zero if OP with operands in the vector ARGS could be
4086 a user-defined function. Errs on the side of pre-defined operators
4087 (i.e., result 0). */
14f9c5c9
AS
4088
4089static int
d2e4a39e 4090possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4091{
76a01679 4092 struct type *type0 =
df407dfe 4093 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4094 struct type *type1 =
df407dfe 4095 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4096
4c4b4cd2
PH
4097 if (type0 == NULL)
4098 return 0;
4099
14f9c5c9
AS
4100 switch (op)
4101 {
4102 default:
4103 return 0;
4104
4105 case BINOP_ADD:
4106 case BINOP_SUB:
4107 case BINOP_MUL:
4108 case BINOP_DIV:
d2e4a39e 4109 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4110
4111 case BINOP_REM:
4112 case BINOP_MOD:
4113 case BINOP_BITWISE_AND:
4114 case BINOP_BITWISE_IOR:
4115 case BINOP_BITWISE_XOR:
d2e4a39e 4116 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4117
4118 case BINOP_EQUAL:
4119 case BINOP_NOTEQUAL:
4120 case BINOP_LESS:
4121 case BINOP_GTR:
4122 case BINOP_LEQ:
4123 case BINOP_GEQ:
d2e4a39e 4124 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4125
4126 case BINOP_CONCAT:
ee90b9ab 4127 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4128
4129 case BINOP_EXP:
d2e4a39e 4130 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4131
4132 case UNOP_NEG:
4133 case UNOP_PLUS:
4134 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4135 case UNOP_ABS:
4136 return (!numeric_type_p (type0));
14f9c5c9
AS
4137
4138 }
4139}
4140\f
dda83cd7 4141 /* Renaming */
14f9c5c9 4142
aeb5907d
JB
4143/* NOTES:
4144
4145 1. In the following, we assume that a renaming type's name may
4146 have an ___XD suffix. It would be nice if this went away at some
4147 point.
4148 2. We handle both the (old) purely type-based representation of
4149 renamings and the (new) variable-based encoding. At some point,
4150 it is devoutly to be hoped that the former goes away
4151 (FIXME: hilfinger-2007-07-09).
4152 3. Subprogram renamings are not implemented, although the XRS
4153 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4154
4155/* If SYM encodes a renaming,
4156
4157 <renaming> renames <renamed entity>,
4158
4159 sets *LEN to the length of the renamed entity's name,
4160 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4161 the string describing the subcomponent selected from the renamed
0963b4bd 4162 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4163 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4164 are undefined). Otherwise, returns a value indicating the category
4165 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4166 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4167 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4168 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4169 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4170 may be NULL, in which case they are not assigned.
4171
4172 [Currently, however, GCC does not generate subprogram renamings.] */
4173
4174enum ada_renaming_category
4175ada_parse_renaming (struct symbol *sym,
4176 const char **renamed_entity, int *len,
4177 const char **renaming_expr)
4178{
4179 enum ada_renaming_category kind;
4180 const char *info;
4181 const char *suffix;
4182
4183 if (sym == NULL)
4184 return ADA_NOT_RENAMING;
4185 switch (SYMBOL_CLASS (sym))
14f9c5c9 4186 {
aeb5907d
JB
4187 default:
4188 return ADA_NOT_RENAMING;
aeb5907d
JB
4189 case LOC_LOCAL:
4190 case LOC_STATIC:
4191 case LOC_COMPUTED:
4192 case LOC_OPTIMIZED_OUT:
987012b8 4193 info = strstr (sym->linkage_name (), "___XR");
aeb5907d
JB
4194 if (info == NULL)
4195 return ADA_NOT_RENAMING;
4196 switch (info[5])
4197 {
4198 case '_':
4199 kind = ADA_OBJECT_RENAMING;
4200 info += 6;
4201 break;
4202 case 'E':
4203 kind = ADA_EXCEPTION_RENAMING;
4204 info += 7;
4205 break;
4206 case 'P':
4207 kind = ADA_PACKAGE_RENAMING;
4208 info += 7;
4209 break;
4210 case 'S':
4211 kind = ADA_SUBPROGRAM_RENAMING;
4212 info += 7;
4213 break;
4214 default:
4215 return ADA_NOT_RENAMING;
4216 }
14f9c5c9 4217 }
4c4b4cd2 4218
de93309a
SM
4219 if (renamed_entity != NULL)
4220 *renamed_entity = info;
4221 suffix = strstr (info, "___XE");
4222 if (suffix == NULL || suffix == info)
4223 return ADA_NOT_RENAMING;
4224 if (len != NULL)
4225 *len = strlen (info) - strlen (suffix);
4226 suffix += 5;
4227 if (renaming_expr != NULL)
4228 *renaming_expr = suffix;
4229 return kind;
4230}
4231
4232/* Compute the value of the given RENAMING_SYM, which is expected to
4233 be a symbol encoding a renaming expression. BLOCK is the block
4234 used to evaluate the renaming. */
4235
4236static struct value *
4237ada_read_renaming_var_value (struct symbol *renaming_sym,
4238 const struct block *block)
4239{
4240 const char *sym_name;
4241
987012b8 4242 sym_name = renaming_sym->linkage_name ();
de93309a
SM
4243 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4244 return evaluate_expression (expr.get ());
4245}
4246\f
4247
dda83cd7 4248 /* Evaluation: Function Calls */
de93309a
SM
4249
4250/* Return an lvalue containing the value VAL. This is the identity on
4251 lvalues, and otherwise has the side-effect of allocating memory
4252 in the inferior where a copy of the value contents is copied. */
4253
4254static struct value *
4255ensure_lval (struct value *val)
4256{
4257 if (VALUE_LVAL (val) == not_lval
4258 || VALUE_LVAL (val) == lval_internalvar)
4259 {
4260 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4261 const CORE_ADDR addr =
dda83cd7 4262 value_as_long (value_allocate_space_in_inferior (len));
de93309a
SM
4263
4264 VALUE_LVAL (val) = lval_memory;
4265 set_value_address (val, addr);
4266 write_memory (addr, value_contents (val), len);
4267 }
4268
4269 return val;
4270}
4271
4272/* Given ARG, a value of type (pointer or reference to a)*
4273 structure/union, extract the component named NAME from the ultimate
4274 target structure/union and return it as a value with its
4275 appropriate type.
4276
4277 The routine searches for NAME among all members of the structure itself
4278 and (recursively) among all members of any wrapper members
4279 (e.g., '_parent').
4280
4281 If NO_ERR, then simply return NULL in case of error, rather than
4282 calling error. */
4283
4284static struct value *
4285ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4286{
4287 struct type *t, *t1;
4288 struct value *v;
4289 int check_tag;
4290
4291 v = NULL;
4292 t1 = t = ada_check_typedef (value_type (arg));
78134374 4293 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4294 {
4295 t1 = TYPE_TARGET_TYPE (t);
4296 if (t1 == NULL)
4297 goto BadValue;
4298 t1 = ada_check_typedef (t1);
78134374 4299 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4300 {
4301 arg = coerce_ref (arg);
4302 t = t1;
4303 }
de93309a
SM
4304 }
4305
78134374 4306 while (t->code () == TYPE_CODE_PTR)
de93309a
SM
4307 {
4308 t1 = TYPE_TARGET_TYPE (t);
4309 if (t1 == NULL)
4310 goto BadValue;
4311 t1 = ada_check_typedef (t1);
78134374 4312 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4313 {
4314 arg = value_ind (arg);
4315 t = t1;
4316 }
de93309a 4317 else
dda83cd7 4318 break;
de93309a 4319 }
aeb5907d 4320
78134374 4321 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
de93309a 4322 goto BadValue;
52ce6436 4323
de93309a
SM
4324 if (t1 == t)
4325 v = ada_search_struct_field (name, arg, 0, t);
4326 else
4327 {
4328 int bit_offset, bit_size, byte_offset;
4329 struct type *field_type;
4330 CORE_ADDR address;
a5ee536b 4331
78134374 4332 if (t->code () == TYPE_CODE_PTR)
de93309a
SM
4333 address = value_address (ada_value_ind (arg));
4334 else
4335 address = value_address (ada_coerce_ref (arg));
d2e4a39e 4336
de93309a 4337 /* Check to see if this is a tagged type. We also need to handle
dda83cd7
SM
4338 the case where the type is a reference to a tagged type, but
4339 we have to be careful to exclude pointers to tagged types.
4340 The latter should be shown as usual (as a pointer), whereas
4341 a reference should mostly be transparent to the user. */
14f9c5c9 4342
de93309a 4343 if (ada_is_tagged_type (t1, 0)
dda83cd7
SM
4344 || (t1->code () == TYPE_CODE_REF
4345 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4346 {
4347 /* We first try to find the searched field in the current type.
de93309a 4348 If not found then let's look in the fixed type. */
14f9c5c9 4349
dda83cd7
SM
4350 if (!find_struct_field (name, t1, 0,
4351 &field_type, &byte_offset, &bit_offset,
4352 &bit_size, NULL))
de93309a
SM
4353 check_tag = 1;
4354 else
4355 check_tag = 0;
dda83cd7 4356 }
de93309a
SM
4357 else
4358 check_tag = 0;
c3e5cd34 4359
de93309a
SM
4360 /* Convert to fixed type in all cases, so that we have proper
4361 offsets to each field in unconstrained record types. */
4362 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4363 address, NULL, check_tag);
4364
24aa1b02
TT
4365 /* Resolve the dynamic type as well. */
4366 arg = value_from_contents_and_address (t1, nullptr, address);
4367 t1 = value_type (arg);
4368
de93309a 4369 if (find_struct_field (name, t1, 0,
dda83cd7
SM
4370 &field_type, &byte_offset, &bit_offset,
4371 &bit_size, NULL))
4372 {
4373 if (bit_size != 0)
4374 {
4375 if (t->code () == TYPE_CODE_REF)
4376 arg = ada_coerce_ref (arg);
4377 else
4378 arg = ada_value_ind (arg);
4379 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4380 bit_offset, bit_size,
4381 field_type);
4382 }
4383 else
4384 v = value_at_lazy (field_type, address + byte_offset);
4385 }
c3e5cd34 4386 }
14f9c5c9 4387
de93309a
SM
4388 if (v != NULL || no_err)
4389 return v;
4390 else
4391 error (_("There is no member named %s."), name);
4392
4393 BadValue:
4394 if (no_err)
4395 return NULL;
4396 else
4397 error (_("Attempt to extract a component of "
4398 "a value that is not a record."));
14f9c5c9
AS
4399}
4400
4401/* Return the value ACTUAL, converted to be an appropriate value for a
4402 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4403 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4404 values not residing in memory, updating it as needed. */
14f9c5c9 4405
a93c0eb6 4406struct value *
40bc484c 4407ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4408{
df407dfe 4409 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4410 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e 4411 struct type *formal_target =
78134374 4412 formal_type->code () == TYPE_CODE_PTR
61ee279c 4413 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e 4414 struct type *actual_target =
78134374 4415 actual_type->code () == TYPE_CODE_PTR
61ee279c 4416 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4417
4c4b4cd2 4418 if (ada_is_array_descriptor_type (formal_target)
78134374 4419 && actual_target->code () == TYPE_CODE_ARRAY)
40bc484c 4420 return make_array_descriptor (formal_type, actual);
78134374
SM
4421 else if (formal_type->code () == TYPE_CODE_PTR
4422 || formal_type->code () == TYPE_CODE_REF)
14f9c5c9 4423 {
a84a8a0d 4424 struct value *result;
5b4ee69b 4425
78134374 4426 if (formal_target->code () == TYPE_CODE_ARRAY
dda83cd7 4427 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4428 result = desc_data (actual);
78134374 4429 else if (formal_type->code () != TYPE_CODE_PTR)
dda83cd7
SM
4430 {
4431 if (VALUE_LVAL (actual) != lval_memory)
4432 {
4433 struct value *val;
4434
4435 actual_type = ada_check_typedef (value_type (actual));
4436 val = allocate_value (actual_type);
4437 memcpy ((char *) value_contents_raw (val),
4438 (char *) value_contents (actual),
4439 TYPE_LENGTH (actual_type));
4440 actual = ensure_lval (val);
4441 }
4442 result = value_addr (actual);
4443 }
a84a8a0d
JB
4444 else
4445 return actual;
b1af9e97 4446 return value_cast_pointers (formal_type, result, 0);
14f9c5c9 4447 }
78134374 4448 else if (actual_type->code () == TYPE_CODE_PTR)
14f9c5c9 4449 return ada_value_ind (actual);
8344af1e
JB
4450 else if (ada_is_aligner_type (formal_type))
4451 {
4452 /* We need to turn this parameter into an aligner type
4453 as well. */
4454 struct value *aligner = allocate_value (formal_type);
4455 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4456
4457 value_assign_to_component (aligner, component, actual);
4458 return aligner;
4459 }
14f9c5c9
AS
4460
4461 return actual;
4462}
4463
438c98a1
JB
4464/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4465 type TYPE. This is usually an inefficient no-op except on some targets
4466 (such as AVR) where the representation of a pointer and an address
4467 differs. */
4468
4469static CORE_ADDR
4470value_pointer (struct value *value, struct type *type)
4471{
438c98a1 4472 unsigned len = TYPE_LENGTH (type);
224c3ddb 4473 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4474 CORE_ADDR addr;
4475
4476 addr = value_address (value);
8ee511af 4477 gdbarch_address_to_pointer (type->arch (), type, buf, addr);
34877895 4478 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
438c98a1
JB
4479 return addr;
4480}
4481
14f9c5c9 4482
4c4b4cd2
PH
4483/* Push a descriptor of type TYPE for array value ARR on the stack at
4484 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4485 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4486 to-descriptor type rather than a descriptor type), a struct value *
4487 representing a pointer to this descriptor. */
14f9c5c9 4488
d2e4a39e 4489static struct value *
40bc484c 4490make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4491{
d2e4a39e
AS
4492 struct type *bounds_type = desc_bounds_type (type);
4493 struct type *desc_type = desc_base_type (type);
4494 struct value *descriptor = allocate_value (desc_type);
4495 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4496 int i;
d2e4a39e 4497
0963b4bd
MS
4498 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4499 i > 0; i -= 1)
14f9c5c9 4500 {
19f220c3
JK
4501 modify_field (value_type (bounds), value_contents_writeable (bounds),
4502 ada_array_bound (arr, i, 0),
4503 desc_bound_bitpos (bounds_type, i, 0),
4504 desc_bound_bitsize (bounds_type, i, 0));
4505 modify_field (value_type (bounds), value_contents_writeable (bounds),
4506 ada_array_bound (arr, i, 1),
4507 desc_bound_bitpos (bounds_type, i, 1),
4508 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4509 }
d2e4a39e 4510
40bc484c 4511 bounds = ensure_lval (bounds);
d2e4a39e 4512
19f220c3
JK
4513 modify_field (value_type (descriptor),
4514 value_contents_writeable (descriptor),
4515 value_pointer (ensure_lval (arr),
940da03e 4516 desc_type->field (0).type ()),
19f220c3
JK
4517 fat_pntr_data_bitpos (desc_type),
4518 fat_pntr_data_bitsize (desc_type));
4519
4520 modify_field (value_type (descriptor),
4521 value_contents_writeable (descriptor),
4522 value_pointer (bounds,
940da03e 4523 desc_type->field (1).type ()),
19f220c3
JK
4524 fat_pntr_bounds_bitpos (desc_type),
4525 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4526
40bc484c 4527 descriptor = ensure_lval (descriptor);
14f9c5c9 4528
78134374 4529 if (type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
4530 return value_addr (descriptor);
4531 else
4532 return descriptor;
4533}
14f9c5c9 4534\f
dda83cd7 4535 /* Symbol Cache Module */
3d9434b5 4536
3d9434b5 4537/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4538 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4539 on the type of entity being printed, the cache can make it as much
4540 as an order of magnitude faster than without it.
4541
4542 The descriptive type DWARF extension has significantly reduced
4543 the need for this cache, at least when DWARF is being used. However,
4544 even in this case, some expensive name-based symbol searches are still
4545 sometimes necessary - to find an XVZ variable, mostly. */
4546
ee01b665
JB
4547/* Return the symbol cache associated to the given program space PSPACE.
4548 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4549
ee01b665
JB
4550static struct ada_symbol_cache *
4551ada_get_symbol_cache (struct program_space *pspace)
4552{
4553 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4554
bdcccc56
TT
4555 if (pspace_data->sym_cache == nullptr)
4556 pspace_data->sym_cache.reset (new ada_symbol_cache);
ee01b665 4557
bdcccc56 4558 return pspace_data->sym_cache.get ();
ee01b665 4559}
3d9434b5
JB
4560
4561/* Clear all entries from the symbol cache. */
4562
4563static void
bdcccc56 4564ada_clear_symbol_cache ()
3d9434b5 4565{
bdcccc56
TT
4566 struct ada_pspace_data *pspace_data
4567 = get_ada_pspace_data (current_program_space);
ee01b665 4568
bdcccc56
TT
4569 if (pspace_data->sym_cache != nullptr)
4570 pspace_data->sym_cache.reset ();
3d9434b5
JB
4571}
4572
fe978cb0 4573/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4574 Return it if found, or NULL otherwise. */
4575
4576static struct cache_entry **
fe978cb0 4577find_entry (const char *name, domain_enum domain)
3d9434b5 4578{
ee01b665
JB
4579 struct ada_symbol_cache *sym_cache
4580 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4581 int h = msymbol_hash (name) % HASH_SIZE;
4582 struct cache_entry **e;
4583
ee01b665 4584 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4585 {
fe978cb0 4586 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
dda83cd7 4587 return e;
3d9434b5
JB
4588 }
4589 return NULL;
4590}
4591
fe978cb0 4592/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4593 Return 1 if found, 0 otherwise.
4594
4595 If an entry was found and SYM is not NULL, set *SYM to the entry's
4596 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4597
96d887e8 4598static int
fe978cb0 4599lookup_cached_symbol (const char *name, domain_enum domain,
dda83cd7 4600 struct symbol **sym, const struct block **block)
96d887e8 4601{
fe978cb0 4602 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4603
4604 if (e == NULL)
4605 return 0;
4606 if (sym != NULL)
4607 *sym = (*e)->sym;
4608 if (block != NULL)
4609 *block = (*e)->block;
4610 return 1;
96d887e8
PH
4611}
4612
3d9434b5 4613/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4614 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4615
96d887e8 4616static void
fe978cb0 4617cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
dda83cd7 4618 const struct block *block)
96d887e8 4619{
ee01b665
JB
4620 struct ada_symbol_cache *sym_cache
4621 = ada_get_symbol_cache (current_program_space);
3d9434b5 4622 int h;
3d9434b5
JB
4623 struct cache_entry *e;
4624
1994afbf
DE
4625 /* Symbols for builtin types don't have a block.
4626 For now don't cache such symbols. */
4627 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4628 return;
4629
3d9434b5
JB
4630 /* If the symbol is a local symbol, then do not cache it, as a search
4631 for that symbol depends on the context. To determine whether
4632 the symbol is local or not, we check the block where we found it
4633 against the global and static blocks of its associated symtab. */
4634 if (sym
08be3fe3 4635 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4636 GLOBAL_BLOCK) != block
08be3fe3 4637 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4638 STATIC_BLOCK) != block)
3d9434b5
JB
4639 return;
4640
4641 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4642 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4643 e->next = sym_cache->root[h];
4644 sym_cache->root[h] = e;
2ef5453b 4645 e->name = obstack_strdup (&sym_cache->cache_space, name);
3d9434b5 4646 e->sym = sym;
fe978cb0 4647 e->domain = domain;
3d9434b5 4648 e->block = block;
96d887e8 4649}
4c4b4cd2 4650\f
dda83cd7 4651 /* Symbol Lookup */
4c4b4cd2 4652
b5ec771e
PA
4653/* Return the symbol name match type that should be used used when
4654 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4655
4656 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4657 for Ada lookups. */
c0431670 4658
b5ec771e
PA
4659static symbol_name_match_type
4660name_match_type_from_name (const char *lookup_name)
c0431670 4661{
b5ec771e
PA
4662 return (strstr (lookup_name, "__") == NULL
4663 ? symbol_name_match_type::WILD
4664 : symbol_name_match_type::FULL);
c0431670
JB
4665}
4666
4c4b4cd2
PH
4667/* Return the result of a standard (literal, C-like) lookup of NAME in
4668 given DOMAIN, visible from lexical block BLOCK. */
4669
4670static struct symbol *
4671standard_lookup (const char *name, const struct block *block,
dda83cd7 4672 domain_enum domain)
4c4b4cd2 4673{
acbd605d 4674 /* Initialize it just to avoid a GCC false warning. */
6640a367 4675 struct block_symbol sym = {};
4c4b4cd2 4676
d12307c1
PMR
4677 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4678 return sym.symbol;
a2cd4f14 4679 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4680 cache_symbol (name, domain, sym.symbol, sym.block);
4681 return sym.symbol;
4c4b4cd2
PH
4682}
4683
4684
4685/* Non-zero iff there is at least one non-function/non-enumeral symbol
1bfa81ac 4686 in the symbol fields of SYMS. We treat enumerals as functions,
4c4b4cd2
PH
4687 since they contend in overloading in the same way. */
4688static int
d1183b06 4689is_nonfunction (const std::vector<struct block_symbol> &syms)
4c4b4cd2 4690{
d1183b06
TT
4691 for (const block_symbol &sym : syms)
4692 if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
4693 && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
4694 || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
14f9c5c9
AS
4695 return 1;
4696
4697 return 0;
4698}
4699
4700/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4701 struct types. Otherwise, they may not. */
14f9c5c9
AS
4702
4703static int
d2e4a39e 4704equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4705{
d2e4a39e 4706 if (type0 == type1)
14f9c5c9 4707 return 1;
d2e4a39e 4708 if (type0 == NULL || type1 == NULL
78134374 4709 || type0->code () != type1->code ())
14f9c5c9 4710 return 0;
78134374
SM
4711 if ((type0->code () == TYPE_CODE_STRUCT
4712 || type0->code () == TYPE_CODE_ENUM)
14f9c5c9 4713 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4714 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4715 return 1;
d2e4a39e 4716
14f9c5c9
AS
4717 return 0;
4718}
4719
4720/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4721 no more defined than that of SYM1. */
14f9c5c9
AS
4722
4723static int
d2e4a39e 4724lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4725{
4726 if (sym0 == sym1)
4727 return 1;
176620f1 4728 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4729 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4730 return 0;
4731
d2e4a39e 4732 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4733 {
4734 case LOC_UNDEF:
4735 return 1;
4736 case LOC_TYPEDEF:
4737 {
dda83cd7
SM
4738 struct type *type0 = SYMBOL_TYPE (sym0);
4739 struct type *type1 = SYMBOL_TYPE (sym1);
4740 const char *name0 = sym0->linkage_name ();
4741 const char *name1 = sym1->linkage_name ();
4742 int len0 = strlen (name0);
4743
4744 return
4745 type0->code () == type1->code ()
4746 && (equiv_types (type0, type1)
4747 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4748 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4749 }
4750 case LOC_CONST:
4751 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
dda83cd7 4752 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4b610737
TT
4753
4754 case LOC_STATIC:
4755 {
dda83cd7
SM
4756 const char *name0 = sym0->linkage_name ();
4757 const char *name1 = sym1->linkage_name ();
4758 return (strcmp (name0, name1) == 0
4759 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4b610737
TT
4760 }
4761
d2e4a39e
AS
4762 default:
4763 return 0;
14f9c5c9
AS
4764 }
4765}
4766
d1183b06
TT
4767/* Append (SYM,BLOCK) to the end of the array of struct block_symbol
4768 records in RESULT. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4769
4770static void
d1183b06 4771add_defn_to_vec (std::vector<struct block_symbol> &result,
dda83cd7
SM
4772 struct symbol *sym,
4773 const struct block *block)
14f9c5c9 4774{
529cad9c
PH
4775 /* Do not try to complete stub types, as the debugger is probably
4776 already scanning all symbols matching a certain name at the
4777 time when this function is called. Trying to replace the stub
4778 type by its associated full type will cause us to restart a scan
4779 which may lead to an infinite recursion. Instead, the client
4780 collecting the matching symbols will end up collecting several
4781 matches, with at least one of them complete. It can then filter
4782 out the stub ones if needed. */
4783
d1183b06 4784 for (int i = result.size () - 1; i >= 0; i -= 1)
4c4b4cd2 4785 {
d1183b06 4786 if (lesseq_defined_than (sym, result[i].symbol))
dda83cd7 4787 return;
d1183b06 4788 else if (lesseq_defined_than (result[i].symbol, sym))
dda83cd7 4789 {
d1183b06
TT
4790 result[i].symbol = sym;
4791 result[i].block = block;
dda83cd7
SM
4792 return;
4793 }
4c4b4cd2
PH
4794 }
4795
d1183b06
TT
4796 struct block_symbol info;
4797 info.symbol = sym;
4798 info.block = block;
4799 result.push_back (info);
4c4b4cd2
PH
4800}
4801
7c7b6655
TT
4802/* Return a bound minimal symbol matching NAME according to Ada
4803 decoding rules. Returns an invalid symbol if there is no such
4804 minimal symbol. Names prefixed with "standard__" are handled
4805 specially: "standard__" is first stripped off, and only static and
4806 global symbols are searched. */
4c4b4cd2 4807
7c7b6655 4808struct bound_minimal_symbol
96d887e8 4809ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4810{
7c7b6655 4811 struct bound_minimal_symbol result;
4c4b4cd2 4812
7c7b6655
TT
4813 memset (&result, 0, sizeof (result));
4814
b5ec771e
PA
4815 symbol_name_match_type match_type = name_match_type_from_name (name);
4816 lookup_name_info lookup_name (name, match_type);
4817
4818 symbol_name_matcher_ftype *match_name
4819 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4820
2030c079 4821 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4822 {
7932255d 4823 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf 4824 {
c9d95fa3 4825 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
5325b9bf
TT
4826 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4827 {
4828 result.minsym = msymbol;
4829 result.objfile = objfile;
4830 break;
4831 }
4832 }
4833 }
4c4b4cd2 4834
7c7b6655 4835 return result;
96d887e8 4836}
4c4b4cd2 4837
96d887e8
PH
4838/* For all subprograms that statically enclose the subprogram of the
4839 selected frame, add symbols matching identifier NAME in DOMAIN
1bfa81ac 4840 and their blocks to the list of data in RESULT, as for
48b78332
JB
4841 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4842 with a wildcard prefix. */
4c4b4cd2 4843
96d887e8 4844static void
d1183b06 4845add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
b5ec771e
PA
4846 const lookup_name_info &lookup_name,
4847 domain_enum domain)
96d887e8 4848{
96d887e8 4849}
14f9c5c9 4850
96d887e8
PH
4851/* True if TYPE is definitely an artificial type supplied to a symbol
4852 for which no debugging information was given in the symbol file. */
14f9c5c9 4853
96d887e8
PH
4854static int
4855is_nondebugging_type (struct type *type)
4856{
0d5cff50 4857 const char *name = ada_type_name (type);
5b4ee69b 4858
96d887e8
PH
4859 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4860}
4c4b4cd2 4861
8f17729f
JB
4862/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4863 that are deemed "identical" for practical purposes.
4864
4865 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4866 types and that their number of enumerals is identical (in other
1f704f76 4867 words, type1->num_fields () == type2->num_fields ()). */
8f17729f
JB
4868
4869static int
4870ada_identical_enum_types_p (struct type *type1, struct type *type2)
4871{
4872 int i;
4873
4874 /* The heuristic we use here is fairly conservative. We consider
4875 that 2 enumerate types are identical if they have the same
4876 number of enumerals and that all enumerals have the same
4877 underlying value and name. */
4878
4879 /* All enums in the type should have an identical underlying value. */
1f704f76 4880 for (i = 0; i < type1->num_fields (); i++)
14e75d8e 4881 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4882 return 0;
4883
4884 /* All enumerals should also have the same name (modulo any numerical
4885 suffix). */
1f704f76 4886 for (i = 0; i < type1->num_fields (); i++)
8f17729f 4887 {
0d5cff50
DE
4888 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4889 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4890 int len_1 = strlen (name_1);
4891 int len_2 = strlen (name_2);
4892
4893 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4894 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4895 if (len_1 != len_2
dda83cd7 4896 || strncmp (TYPE_FIELD_NAME (type1, i),
8f17729f
JB
4897 TYPE_FIELD_NAME (type2, i),
4898 len_1) != 0)
4899 return 0;
4900 }
4901
4902 return 1;
4903}
4904
4905/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4906 that are deemed "identical" for practical purposes. Sometimes,
4907 enumerals are not strictly identical, but their types are so similar
4908 that they can be considered identical.
4909
4910 For instance, consider the following code:
4911
4912 type Color is (Black, Red, Green, Blue, White);
4913 type RGB_Color is new Color range Red .. Blue;
4914
4915 Type RGB_Color is a subrange of an implicit type which is a copy
4916 of type Color. If we call that implicit type RGB_ColorB ("B" is
4917 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4918 As a result, when an expression references any of the enumeral
4919 by name (Eg. "print green"), the expression is technically
4920 ambiguous and the user should be asked to disambiguate. But
4921 doing so would only hinder the user, since it wouldn't matter
4922 what choice he makes, the outcome would always be the same.
4923 So, for practical purposes, we consider them as the same. */
4924
4925static int
54d343a2 4926symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
4927{
4928 int i;
4929
4930 /* Before performing a thorough comparison check of each type,
4931 we perform a series of inexpensive checks. We expect that these
4932 checks will quickly fail in the vast majority of cases, and thus
4933 help prevent the unnecessary use of a more expensive comparison.
4934 Said comparison also expects us to make some of these checks
4935 (see ada_identical_enum_types_p). */
4936
4937 /* Quick check: All symbols should have an enum type. */
54d343a2 4938 for (i = 0; i < syms.size (); i++)
78134374 4939 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
8f17729f
JB
4940 return 0;
4941
4942 /* Quick check: They should all have the same value. */
54d343a2 4943 for (i = 1; i < syms.size (); i++)
d12307c1 4944 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
4945 return 0;
4946
4947 /* Quick check: They should all have the same number of enumerals. */
54d343a2 4948 for (i = 1; i < syms.size (); i++)
1f704f76 4949 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
dda83cd7 4950 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
8f17729f
JB
4951 return 0;
4952
4953 /* All the sanity checks passed, so we might have a set of
4954 identical enumeration types. Perform a more complete
4955 comparison of the type of each symbol. */
54d343a2 4956 for (i = 1; i < syms.size (); i++)
d12307c1 4957 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
dda83cd7 4958 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
4959 return 0;
4960
4961 return 1;
4962}
4963
54d343a2 4964/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
4965 duplicate other symbols in the list (The only case I know of where
4966 this happens is when object files containing stabs-in-ecoff are
4967 linked with files containing ordinary ecoff debugging symbols (or no
1bfa81ac 4968 debugging symbols)). Modifies SYMS to squeeze out deleted entries. */
4c4b4cd2 4969
d1183b06 4970static void
54d343a2 4971remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
4972{
4973 int i, j;
4c4b4cd2 4974
8f17729f
JB
4975 /* We should never be called with less than 2 symbols, as there
4976 cannot be any extra symbol in that case. But it's easy to
4977 handle, since we have nothing to do in that case. */
54d343a2 4978 if (syms->size () < 2)
d1183b06 4979 return;
8f17729f 4980
96d887e8 4981 i = 0;
54d343a2 4982 while (i < syms->size ())
96d887e8 4983 {
a35ddb44 4984 int remove_p = 0;
339c13b6
JB
4985
4986 /* If two symbols have the same name and one of them is a stub type,
dda83cd7 4987 the get rid of the stub. */
339c13b6 4988
e46d3488 4989 if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
dda83cd7
SM
4990 && (*syms)[i].symbol->linkage_name () != NULL)
4991 {
4992 for (j = 0; j < syms->size (); j++)
4993 {
4994 if (j != i
4995 && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
4996 && (*syms)[j].symbol->linkage_name () != NULL
4997 && strcmp ((*syms)[i].symbol->linkage_name (),
4998 (*syms)[j].symbol->linkage_name ()) == 0)
4999 remove_p = 1;
5000 }
5001 }
339c13b6
JB
5002
5003 /* Two symbols with the same name, same class and same address
dda83cd7 5004 should be identical. */
339c13b6 5005
987012b8 5006 else if ((*syms)[i].symbol->linkage_name () != NULL
dda83cd7
SM
5007 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5008 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5009 {
5010 for (j = 0; j < syms->size (); j += 1)
5011 {
5012 if (i != j
5013 && (*syms)[j].symbol->linkage_name () != NULL
5014 && strcmp ((*syms)[i].symbol->linkage_name (),
5015 (*syms)[j].symbol->linkage_name ()) == 0
5016 && SYMBOL_CLASS ((*syms)[i].symbol)
54d343a2 5017 == SYMBOL_CLASS ((*syms)[j].symbol)
dda83cd7
SM
5018 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5019 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5020 remove_p = 1;
5021 }
5022 }
339c13b6 5023
a35ddb44 5024 if (remove_p)
54d343a2 5025 syms->erase (syms->begin () + i);
1b788fb6
TT
5026 else
5027 i += 1;
14f9c5c9 5028 }
8f17729f
JB
5029
5030 /* If all the remaining symbols are identical enumerals, then
5031 just keep the first one and discard the rest.
5032
5033 Unlike what we did previously, we do not discard any entry
5034 unless they are ALL identical. This is because the symbol
5035 comparison is not a strict comparison, but rather a practical
5036 comparison. If all symbols are considered identical, then
5037 we can just go ahead and use the first one and discard the rest.
5038 But if we cannot reduce the list to a single element, we have
5039 to ask the user to disambiguate anyways. And if we have to
5040 present a multiple-choice menu, it's less confusing if the list
5041 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5042 if (symbols_are_identical_enums (*syms))
5043 syms->resize (1);
14f9c5c9
AS
5044}
5045
96d887e8
PH
5046/* Given a type that corresponds to a renaming entity, use the type name
5047 to extract the scope (package name or function name, fully qualified,
5048 and following the GNAT encoding convention) where this renaming has been
49d83361 5049 defined. */
4c4b4cd2 5050
49d83361 5051static std::string
96d887e8 5052xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5053{
96d887e8 5054 /* The renaming types adhere to the following convention:
0963b4bd 5055 <scope>__<rename>___<XR extension>.
96d887e8
PH
5056 So, to extract the scope, we search for the "___XR" extension,
5057 and then backtrack until we find the first "__". */
76a01679 5058
7d93a1e0 5059 const char *name = renaming_type->name ();
108d56a4
SM
5060 const char *suffix = strstr (name, "___XR");
5061 const char *last;
14f9c5c9 5062
96d887e8
PH
5063 /* Now, backtrack a bit until we find the first "__". Start looking
5064 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5065
96d887e8
PH
5066 for (last = suffix - 3; last > name; last--)
5067 if (last[0] == '_' && last[1] == '_')
5068 break;
76a01679 5069
96d887e8 5070 /* Make a copy of scope and return it. */
49d83361 5071 return std::string (name, last);
4c4b4cd2
PH
5072}
5073
96d887e8 5074/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5075
96d887e8
PH
5076static int
5077is_package_name (const char *name)
4c4b4cd2 5078{
96d887e8
PH
5079 /* Here, We take advantage of the fact that no symbols are generated
5080 for packages, while symbols are generated for each function.
5081 So the condition for NAME represent a package becomes equivalent
5082 to NAME not existing in our list of symbols. There is only one
5083 small complication with library-level functions (see below). */
4c4b4cd2 5084
96d887e8
PH
5085 /* If it is a function that has not been defined at library level,
5086 then we should be able to look it up in the symbols. */
5087 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5088 return 0;
14f9c5c9 5089
96d887e8
PH
5090 /* Library-level function names start with "_ada_". See if function
5091 "_ada_" followed by NAME can be found. */
14f9c5c9 5092
96d887e8 5093 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5094 functions names cannot contain "__" in them. */
96d887e8
PH
5095 if (strstr (name, "__") != NULL)
5096 return 0;
4c4b4cd2 5097
528e1572 5098 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5099
528e1572 5100 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5101}
14f9c5c9 5102
96d887e8 5103/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5104 not visible from FUNCTION_NAME. */
14f9c5c9 5105
96d887e8 5106static int
0d5cff50 5107old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5108{
aeb5907d
JB
5109 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5110 return 0;
5111
49d83361 5112 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5113
96d887e8 5114 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5115 if (is_package_name (scope.c_str ()))
5116 return 0;
14f9c5c9 5117
96d887e8
PH
5118 /* Check that the rename is in the current function scope by checking
5119 that its name starts with SCOPE. */
76a01679 5120
96d887e8
PH
5121 /* If the function name starts with "_ada_", it means that it is
5122 a library-level function. Strip this prefix before doing the
5123 comparison, as the encoding for the renaming does not contain
5124 this prefix. */
61012eef 5125 if (startswith (function_name, "_ada_"))
96d887e8 5126 function_name += 5;
f26caa11 5127
49d83361 5128 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5129}
5130
aeb5907d
JB
5131/* Remove entries from SYMS that corresponds to a renaming entity that
5132 is not visible from the function associated with CURRENT_BLOCK or
5133 that is superfluous due to the presence of more specific renaming
5134 information. Places surviving symbols in the initial entries of
d1183b06
TT
5135 SYMS.
5136
96d887e8 5137 Rationale:
aeb5907d
JB
5138 First, in cases where an object renaming is implemented as a
5139 reference variable, GNAT may produce both the actual reference
5140 variable and the renaming encoding. In this case, we discard the
5141 latter.
5142
5143 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5144 entity. Unfortunately, STABS currently does not support the definition
5145 of types that are local to a given lexical block, so all renamings types
5146 are emitted at library level. As a consequence, if an application
5147 contains two renaming entities using the same name, and a user tries to
5148 print the value of one of these entities, the result of the ada symbol
5149 lookup will also contain the wrong renaming type.
f26caa11 5150
96d887e8
PH
5151 This function partially covers for this limitation by attempting to
5152 remove from the SYMS list renaming symbols that should be visible
5153 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5154 method with the current information available. The implementation
5155 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5156
5157 - When the user tries to print a rename in a function while there
dda83cd7
SM
5158 is another rename entity defined in a package: Normally, the
5159 rename in the function has precedence over the rename in the
5160 package, so the latter should be removed from the list. This is
5161 currently not the case.
5162
96d887e8 5163 - This function will incorrectly remove valid renames if
dda83cd7
SM
5164 the CURRENT_BLOCK corresponds to a function which symbol name
5165 has been changed by an "Export" pragma. As a consequence,
5166 the user will be unable to print such rename entities. */
4c4b4cd2 5167
d1183b06 5168static void
54d343a2
TT
5169remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5170 const struct block *current_block)
4c4b4cd2
PH
5171{
5172 struct symbol *current_function;
0d5cff50 5173 const char *current_function_name;
4c4b4cd2 5174 int i;
aeb5907d
JB
5175 int is_new_style_renaming;
5176
5177 /* If there is both a renaming foo___XR... encoded as a variable and
5178 a simple variable foo in the same block, discard the latter.
0963b4bd 5179 First, zero out such symbols, then compress. */
aeb5907d 5180 is_new_style_renaming = 0;
54d343a2 5181 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5182 {
54d343a2
TT
5183 struct symbol *sym = (*syms)[i].symbol;
5184 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5185 const char *name;
5186 const char *suffix;
5187
5188 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5189 continue;
987012b8 5190 name = sym->linkage_name ();
aeb5907d
JB
5191 suffix = strstr (name, "___XR");
5192
5193 if (suffix != NULL)
5194 {
5195 int name_len = suffix - name;
5196 int j;
5b4ee69b 5197
aeb5907d 5198 is_new_style_renaming = 1;
54d343a2
TT
5199 for (j = 0; j < syms->size (); j += 1)
5200 if (i != j && (*syms)[j].symbol != NULL
987012b8 5201 && strncmp (name, (*syms)[j].symbol->linkage_name (),
aeb5907d 5202 name_len) == 0
54d343a2
TT
5203 && block == (*syms)[j].block)
5204 (*syms)[j].symbol = NULL;
aeb5907d
JB
5205 }
5206 }
5207 if (is_new_style_renaming)
5208 {
5209 int j, k;
5210
54d343a2
TT
5211 for (j = k = 0; j < syms->size (); j += 1)
5212 if ((*syms)[j].symbol != NULL)
aeb5907d 5213 {
54d343a2 5214 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5215 k += 1;
5216 }
d1183b06
TT
5217 syms->resize (k);
5218 return;
aeb5907d 5219 }
4c4b4cd2
PH
5220
5221 /* Extract the function name associated to CURRENT_BLOCK.
5222 Abort if unable to do so. */
76a01679 5223
4c4b4cd2 5224 if (current_block == NULL)
d1183b06 5225 return;
76a01679 5226
7f0df278 5227 current_function = block_linkage_function (current_block);
4c4b4cd2 5228 if (current_function == NULL)
d1183b06 5229 return;
4c4b4cd2 5230
987012b8 5231 current_function_name = current_function->linkage_name ();
4c4b4cd2 5232 if (current_function_name == NULL)
d1183b06 5233 return;
4c4b4cd2
PH
5234
5235 /* Check each of the symbols, and remove it from the list if it is
5236 a type corresponding to a renaming that is out of the scope of
5237 the current block. */
5238
5239 i = 0;
54d343a2 5240 while (i < syms->size ())
4c4b4cd2 5241 {
54d343a2 5242 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
dda83cd7
SM
5243 == ADA_OBJECT_RENAMING
5244 && old_renaming_is_invisible ((*syms)[i].symbol,
54d343a2
TT
5245 current_function_name))
5246 syms->erase (syms->begin () + i);
4c4b4cd2 5247 else
dda83cd7 5248 i += 1;
4c4b4cd2 5249 }
4c4b4cd2
PH
5250}
5251
d1183b06 5252/* Add to RESULT all symbols from BLOCK (and its super-blocks)
339c13b6
JB
5253 whose name and domain match NAME and DOMAIN respectively.
5254 If no match was found, then extend the search to "enclosing"
5255 routines (in other words, if we're inside a nested function,
5256 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5257 If WILD_MATCH_P is nonzero, perform the naming matching in
5258 "wild" mode (see function "wild_match" for more info).
339c13b6 5259
d1183b06 5260 Note: This function assumes that RESULT has 0 (zero) element in it. */
339c13b6
JB
5261
5262static void
d1183b06 5263ada_add_local_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5264 const lookup_name_info &lookup_name,
5265 const struct block *block, domain_enum domain)
339c13b6
JB
5266{
5267 int block_depth = 0;
5268
5269 while (block != NULL)
5270 {
5271 block_depth += 1;
d1183b06 5272 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
339c13b6
JB
5273
5274 /* If we found a non-function match, assume that's the one. */
d1183b06 5275 if (is_nonfunction (result))
dda83cd7 5276 return;
339c13b6
JB
5277
5278 block = BLOCK_SUPERBLOCK (block);
5279 }
5280
5281 /* If no luck so far, try to find NAME as a local symbol in some lexically
5282 enclosing subprogram. */
d1183b06
TT
5283 if (result.empty () && block_depth > 2)
5284 add_symbols_from_enclosing_procs (result, lookup_name, domain);
339c13b6
JB
5285}
5286
ccefe4c4 5287/* An object of this type is used as the user_data argument when
40658b94 5288 calling the map_matching_symbols method. */
ccefe4c4 5289
40658b94 5290struct match_data
ccefe4c4 5291{
1bfa81ac
TT
5292 explicit match_data (std::vector<struct block_symbol> *rp)
5293 : resultp (rp)
5294 {
5295 }
5296 DISABLE_COPY_AND_ASSIGN (match_data);
5297
5298 struct objfile *objfile = nullptr;
d1183b06 5299 std::vector<struct block_symbol> *resultp;
1bfa81ac 5300 struct symbol *arg_sym = nullptr;
1178743e 5301 bool found_sym = false;
ccefe4c4
TT
5302};
5303
199b4314
TT
5304/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5305 to a list of symbols. DATA is a pointer to a struct match_data *
1bfa81ac 5306 containing the vector that collects the symbol list, the file that SYM
40658b94
PH
5307 must come from, a flag indicating whether a non-argument symbol has
5308 been found in the current block, and the last argument symbol
5309 passed in SYM within the current block (if any). When SYM is null,
5310 marking the end of a block, the argument symbol is added if no
5311 other has been found. */
ccefe4c4 5312
199b4314
TT
5313static bool
5314aux_add_nonlocal_symbols (struct block_symbol *bsym,
5315 struct match_data *data)
ccefe4c4 5316{
199b4314
TT
5317 const struct block *block = bsym->block;
5318 struct symbol *sym = bsym->symbol;
5319
40658b94
PH
5320 if (sym == NULL)
5321 {
5322 if (!data->found_sym && data->arg_sym != NULL)
d1183b06 5323 add_defn_to_vec (*data->resultp,
40658b94
PH
5324 fixup_symbol_section (data->arg_sym, data->objfile),
5325 block);
1178743e 5326 data->found_sym = false;
40658b94
PH
5327 data->arg_sym = NULL;
5328 }
5329 else
5330 {
5331 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
199b4314 5332 return true;
40658b94
PH
5333 else if (SYMBOL_IS_ARGUMENT (sym))
5334 data->arg_sym = sym;
5335 else
5336 {
1178743e 5337 data->found_sym = true;
d1183b06 5338 add_defn_to_vec (*data->resultp,
40658b94
PH
5339 fixup_symbol_section (sym, data->objfile),
5340 block);
5341 }
5342 }
199b4314 5343 return true;
40658b94
PH
5344}
5345
b5ec771e
PA
5346/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5347 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
1bfa81ac 5348 symbols to RESULT. Return whether we found such symbols. */
22cee43f
PMR
5349
5350static int
d1183b06 5351ada_add_block_renamings (std::vector<struct block_symbol> &result,
22cee43f 5352 const struct block *block,
b5ec771e
PA
5353 const lookup_name_info &lookup_name,
5354 domain_enum domain)
22cee43f
PMR
5355{
5356 struct using_direct *renaming;
d1183b06 5357 int defns_mark = result.size ();
22cee43f 5358
b5ec771e
PA
5359 symbol_name_matcher_ftype *name_match
5360 = ada_get_symbol_name_matcher (lookup_name);
5361
22cee43f
PMR
5362 for (renaming = block_using (block);
5363 renaming != NULL;
5364 renaming = renaming->next)
5365 {
5366 const char *r_name;
22cee43f
PMR
5367
5368 /* Avoid infinite recursions: skip this renaming if we are actually
5369 already traversing it.
5370
5371 Currently, symbol lookup in Ada don't use the namespace machinery from
5372 C++/Fortran support: skip namespace imports that use them. */
5373 if (renaming->searched
5374 || (renaming->import_src != NULL
5375 && renaming->import_src[0] != '\0')
5376 || (renaming->import_dest != NULL
5377 && renaming->import_dest[0] != '\0'))
5378 continue;
5379 renaming->searched = 1;
5380
5381 /* TODO: here, we perform another name-based symbol lookup, which can
5382 pull its own multiple overloads. In theory, we should be able to do
5383 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5384 not a simple name. But in order to do this, we would need to enhance
5385 the DWARF reader to associate a symbol to this renaming, instead of a
5386 name. So, for now, we do something simpler: re-use the C++/Fortran
5387 namespace machinery. */
5388 r_name = (renaming->alias != NULL
5389 ? renaming->alias
5390 : renaming->declaration);
b5ec771e
PA
5391 if (name_match (r_name, lookup_name, NULL))
5392 {
5393 lookup_name_info decl_lookup_name (renaming->declaration,
5394 lookup_name.match_type ());
d1183b06 5395 ada_add_all_symbols (result, block, decl_lookup_name, domain,
b5ec771e
PA
5396 1, NULL);
5397 }
22cee43f
PMR
5398 renaming->searched = 0;
5399 }
d1183b06 5400 return result.size () != defns_mark;
22cee43f
PMR
5401}
5402
db230ce3
JB
5403/* Implements compare_names, but only applying the comparision using
5404 the given CASING. */
5b4ee69b 5405
40658b94 5406static int
db230ce3
JB
5407compare_names_with_case (const char *string1, const char *string2,
5408 enum case_sensitivity casing)
40658b94
PH
5409{
5410 while (*string1 != '\0' && *string2 != '\0')
5411 {
db230ce3
JB
5412 char c1, c2;
5413
40658b94
PH
5414 if (isspace (*string1) || isspace (*string2))
5415 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5416
5417 if (casing == case_sensitive_off)
5418 {
5419 c1 = tolower (*string1);
5420 c2 = tolower (*string2);
5421 }
5422 else
5423 {
5424 c1 = *string1;
5425 c2 = *string2;
5426 }
5427 if (c1 != c2)
40658b94 5428 break;
db230ce3 5429
40658b94
PH
5430 string1 += 1;
5431 string2 += 1;
5432 }
db230ce3 5433
40658b94
PH
5434 switch (*string1)
5435 {
5436 case '(':
5437 return strcmp_iw_ordered (string1, string2);
5438 case '_':
5439 if (*string2 == '\0')
5440 {
052874e8 5441 if (is_name_suffix (string1))
40658b94
PH
5442 return 0;
5443 else
1a1d5513 5444 return 1;
40658b94 5445 }
dbb8534f 5446 /* FALLTHROUGH */
40658b94
PH
5447 default:
5448 if (*string2 == '(')
5449 return strcmp_iw_ordered (string1, string2);
5450 else
db230ce3
JB
5451 {
5452 if (casing == case_sensitive_off)
5453 return tolower (*string1) - tolower (*string2);
5454 else
5455 return *string1 - *string2;
5456 }
40658b94 5457 }
ccefe4c4
TT
5458}
5459
db230ce3
JB
5460/* Compare STRING1 to STRING2, with results as for strcmp.
5461 Compatible with strcmp_iw_ordered in that...
5462
5463 strcmp_iw_ordered (STRING1, STRING2) <= 0
5464
5465 ... implies...
5466
5467 compare_names (STRING1, STRING2) <= 0
5468
5469 (they may differ as to what symbols compare equal). */
5470
5471static int
5472compare_names (const char *string1, const char *string2)
5473{
5474 int result;
5475
5476 /* Similar to what strcmp_iw_ordered does, we need to perform
5477 a case-insensitive comparison first, and only resort to
5478 a second, case-sensitive, comparison if the first one was
5479 not sufficient to differentiate the two strings. */
5480
5481 result = compare_names_with_case (string1, string2, case_sensitive_off);
5482 if (result == 0)
5483 result = compare_names_with_case (string1, string2, case_sensitive_on);
5484
5485 return result;
5486}
5487
b5ec771e
PA
5488/* Convenience function to get at the Ada encoded lookup name for
5489 LOOKUP_NAME, as a C string. */
5490
5491static const char *
5492ada_lookup_name (const lookup_name_info &lookup_name)
5493{
5494 return lookup_name.ada ().lookup_name ().c_str ();
5495}
5496
1bfa81ac 5497/* Add to RESULT all non-local symbols whose name and domain match
b5ec771e
PA
5498 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5499 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5500 symbols otherwise. */
339c13b6
JB
5501
5502static void
d1183b06 5503add_nonlocal_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5504 const lookup_name_info &lookup_name,
5505 domain_enum domain, int global)
339c13b6 5506{
1bfa81ac 5507 struct match_data data (&result);
339c13b6 5508
b5ec771e
PA
5509 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5510
199b4314
TT
5511 auto callback = [&] (struct block_symbol *bsym)
5512 {
5513 return aux_add_nonlocal_symbols (bsym, &data);
5514 };
5515
2030c079 5516 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5517 {
5518 data.objfile = objfile;
5519
1228719f
TT
5520 if (objfile->sf != nullptr)
5521 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5522 domain, global, callback,
5523 (is_wild_match
5524 ? NULL : compare_names));
22cee43f 5525
b669c953 5526 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5527 {
5528 const struct block *global_block
5529 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5530
d1183b06 5531 if (ada_add_block_renamings (result, global_block, lookup_name,
b5ec771e 5532 domain))
1178743e 5533 data.found_sym = true;
22cee43f 5534 }
40658b94
PH
5535 }
5536
d1183b06 5537 if (result.empty () && global && !is_wild_match)
40658b94 5538 {
b5ec771e 5539 const char *name = ada_lookup_name (lookup_name);
e0802d59
TT
5540 std::string bracket_name = std::string ("<_ada_") + name + '>';
5541 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
b5ec771e 5542
2030c079 5543 for (objfile *objfile : current_program_space->objfiles ())
dda83cd7 5544 {
40658b94 5545 data.objfile = objfile;
1228719f
TT
5546 if (objfile->sf != nullptr)
5547 objfile->sf->qf->map_matching_symbols (objfile, name1,
5548 domain, global, callback,
5549 compare_names);
40658b94
PH
5550 }
5551 }
339c13b6
JB
5552}
5553
b5ec771e
PA
5554/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5555 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
1bfa81ac 5556 returning the number of matches. Add these to RESULT.
4eeaa230 5557
22cee43f
PMR
5558 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5559 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5560 is the one match returned (no other matches in that or
d9680e73 5561 enclosing blocks is returned). If there are any matches in or
22cee43f 5562 surrounding BLOCK, then these alone are returned.
4eeaa230 5563
b5ec771e
PA
5564 Names prefixed with "standard__" are handled specially:
5565 "standard__" is first stripped off (by the lookup_name
5566 constructor), and only static and global symbols are searched.
14f9c5c9 5567
22cee43f
PMR
5568 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5569 to lookup global symbols. */
5570
5571static void
d1183b06 5572ada_add_all_symbols (std::vector<struct block_symbol> &result,
22cee43f 5573 const struct block *block,
b5ec771e 5574 const lookup_name_info &lookup_name,
22cee43f
PMR
5575 domain_enum domain,
5576 int full_search,
5577 int *made_global_lookup_p)
14f9c5c9
AS
5578{
5579 struct symbol *sym;
14f9c5c9 5580
22cee43f
PMR
5581 if (made_global_lookup_p)
5582 *made_global_lookup_p = 0;
339c13b6
JB
5583
5584 /* Special case: If the user specifies a symbol name inside package
5585 Standard, do a non-wild matching of the symbol name without
5586 the "standard__" prefix. This was primarily introduced in order
5587 to allow the user to specifically access the standard exceptions
5588 using, for instance, Standard.Constraint_Error when Constraint_Error
5589 is ambiguous (due to the user defining its own Constraint_Error
5590 entity inside its program). */
b5ec771e
PA
5591 if (lookup_name.ada ().standard_p ())
5592 block = NULL;
4c4b4cd2 5593
339c13b6 5594 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5595
4eeaa230
DE
5596 if (block != NULL)
5597 {
5598 if (full_search)
d1183b06 5599 ada_add_local_symbols (result, lookup_name, block, domain);
4eeaa230
DE
5600 else
5601 {
5602 /* In the !full_search case we're are being called by
4009ee92 5603 iterate_over_symbols, and we don't want to search
4eeaa230 5604 superblocks. */
d1183b06 5605 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
4eeaa230 5606 }
d1183b06 5607 if (!result.empty () || !full_search)
22cee43f 5608 return;
4eeaa230 5609 }
d2e4a39e 5610
339c13b6
JB
5611 /* No non-global symbols found. Check our cache to see if we have
5612 already performed this search before. If we have, then return
5613 the same result. */
5614
b5ec771e
PA
5615 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5616 domain, &sym, &block))
4c4b4cd2
PH
5617 {
5618 if (sym != NULL)
d1183b06 5619 add_defn_to_vec (result, sym, block);
22cee43f 5620 return;
4c4b4cd2 5621 }
14f9c5c9 5622
22cee43f
PMR
5623 if (made_global_lookup_p)
5624 *made_global_lookup_p = 1;
b1eedac9 5625
339c13b6
JB
5626 /* Search symbols from all global blocks. */
5627
d1183b06 5628 add_nonlocal_symbols (result, lookup_name, domain, 1);
d2e4a39e 5629
4c4b4cd2 5630 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5631 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5632
d1183b06
TT
5633 if (result.empty ())
5634 add_nonlocal_symbols (result, lookup_name, domain, 0);
22cee43f
PMR
5635}
5636
b5ec771e 5637/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
d1183b06
TT
5638 is non-zero, enclosing scope and in global scopes.
5639
5640 Returns (SYM,BLOCK) tuples, indicating the symbols found and the
5641 blocks and symbol tables (if any) in which they were found.
22cee43f
PMR
5642
5643 When full_search is non-zero, any non-function/non-enumeral
5644 symbol match within the nest of blocks whose innermost member is BLOCK,
5645 is the one match returned (no other matches in that or
5646 enclosing blocks is returned). If there are any matches in or
5647 surrounding BLOCK, then these alone are returned.
5648
5649 Names prefixed with "standard__" are handled specially: "standard__"
5650 is first stripped off, and only static and global symbols are searched. */
5651
d1183b06 5652static std::vector<struct block_symbol>
b5ec771e
PA
5653ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5654 const struct block *block,
22cee43f 5655 domain_enum domain,
22cee43f
PMR
5656 int full_search)
5657{
22cee43f 5658 int syms_from_global_search;
d1183b06 5659 std::vector<struct block_symbol> results;
22cee43f 5660
d1183b06 5661 ada_add_all_symbols (results, block, lookup_name,
b5ec771e 5662 domain, full_search, &syms_from_global_search);
14f9c5c9 5663
d1183b06 5664 remove_extra_symbols (&results);
4c4b4cd2 5665
d1183b06 5666 if (results.empty () && full_search && syms_from_global_search)
b5ec771e 5667 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5668
d1183b06 5669 if (results.size () == 1 && full_search && syms_from_global_search)
b5ec771e 5670 cache_symbol (ada_lookup_name (lookup_name), domain,
d1183b06 5671 results[0].symbol, results[0].block);
ec6a20c2 5672
d1183b06
TT
5673 remove_irrelevant_renamings (&results, block);
5674 return results;
14f9c5c9
AS
5675}
5676
b5ec771e 5677/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
d1183b06 5678 in global scopes, returning (SYM,BLOCK) tuples.
ec6a20c2 5679
4eeaa230
DE
5680 See ada_lookup_symbol_list_worker for further details. */
5681
d1183b06 5682std::vector<struct block_symbol>
b5ec771e 5683ada_lookup_symbol_list (const char *name, const struct block *block,
d1183b06 5684 domain_enum domain)
4eeaa230 5685{
b5ec771e
PA
5686 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5687 lookup_name_info lookup_name (name, name_match_type);
5688
d1183b06 5689 return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
4eeaa230
DE
5690}
5691
4e5c77fe
JB
5692/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5693 to 1, but choosing the first symbol found if there are multiple
5694 choices.
5695
5e2336be
JB
5696 The result is stored in *INFO, which must be non-NULL.
5697 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5698
5699void
5700ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5701 domain_enum domain,
d12307c1 5702 struct block_symbol *info)
14f9c5c9 5703{
b5ec771e
PA
5704 /* Since we already have an encoded name, wrap it in '<>' to force a
5705 verbatim match. Otherwise, if the name happens to not look like
5706 an encoded name (because it doesn't include a "__"),
5707 ada_lookup_name_info would re-encode/fold it again, and that
5708 would e.g., incorrectly lowercase object renaming names like
5709 "R28b" -> "r28b". */
12932e2c 5710 std::string verbatim = add_angle_brackets (name);
b5ec771e 5711
5e2336be 5712 gdb_assert (info != NULL);
65392b3e 5713 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
4e5c77fe 5714}
aeb5907d
JB
5715
5716/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5717 scope and in global scopes, or NULL if none. NAME is folded and
5718 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
65392b3e 5719 choosing the first symbol if there are multiple choices. */
4e5c77fe 5720
d12307c1 5721struct block_symbol
aeb5907d 5722ada_lookup_symbol (const char *name, const struct block *block0,
dda83cd7 5723 domain_enum domain)
aeb5907d 5724{
d1183b06
TT
5725 std::vector<struct block_symbol> candidates
5726 = ada_lookup_symbol_list (name, block0, domain);
f98fc17b 5727
d1183b06 5728 if (candidates.empty ())
54d343a2 5729 return {};
f98fc17b
PA
5730
5731 block_symbol info = candidates[0];
5732 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5733 return info;
4c4b4cd2 5734}
14f9c5c9 5735
14f9c5c9 5736
4c4b4cd2
PH
5737/* True iff STR is a possible encoded suffix of a normal Ada name
5738 that is to be ignored for matching purposes. Suffixes of parallel
5739 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5740 are given by any of the regular expressions:
4c4b4cd2 5741
babe1480
JB
5742 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5743 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5744 TKB [subprogram suffix for task bodies]
babe1480 5745 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5746 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5747
5748 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5749 match is performed. This sequence is used to differentiate homonyms,
5750 is an optional part of a valid name suffix. */
4c4b4cd2 5751
14f9c5c9 5752static int
d2e4a39e 5753is_name_suffix (const char *str)
14f9c5c9
AS
5754{
5755 int k;
4c4b4cd2
PH
5756 const char *matching;
5757 const int len = strlen (str);
5758
babe1480
JB
5759 /* Skip optional leading __[0-9]+. */
5760
4c4b4cd2
PH
5761 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5762 {
babe1480
JB
5763 str += 3;
5764 while (isdigit (str[0]))
dda83cd7 5765 str += 1;
4c4b4cd2 5766 }
babe1480
JB
5767
5768 /* [.$][0-9]+ */
4c4b4cd2 5769
babe1480 5770 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5771 {
babe1480 5772 matching = str + 1;
4c4b4cd2 5773 while (isdigit (matching[0]))
dda83cd7 5774 matching += 1;
4c4b4cd2 5775 if (matching[0] == '\0')
dda83cd7 5776 return 1;
4c4b4cd2
PH
5777 }
5778
5779 /* ___[0-9]+ */
babe1480 5780
4c4b4cd2
PH
5781 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5782 {
5783 matching = str + 3;
5784 while (isdigit (matching[0]))
dda83cd7 5785 matching += 1;
4c4b4cd2 5786 if (matching[0] == '\0')
dda83cd7 5787 return 1;
4c4b4cd2
PH
5788 }
5789
9ac7f98e
JB
5790 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5791
5792 if (strcmp (str, "TKB") == 0)
5793 return 1;
5794
529cad9c
PH
5795#if 0
5796 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5797 with a N at the end. Unfortunately, the compiler uses the same
5798 convention for other internal types it creates. So treating
529cad9c 5799 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5800 some regressions. For instance, consider the case of an enumerated
5801 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5802 name ends with N.
5803 Having a single character like this as a suffix carrying some
0963b4bd 5804 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5805 to be something like "_N" instead. In the meantime, do not do
5806 the following check. */
5807 /* Protected Object Subprograms */
5808 if (len == 1 && str [0] == 'N')
5809 return 1;
5810#endif
5811
5812 /* _E[0-9]+[bs]$ */
5813 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5814 {
5815 matching = str + 3;
5816 while (isdigit (matching[0]))
dda83cd7 5817 matching += 1;
529cad9c 5818 if ((matching[0] == 'b' || matching[0] == 's')
dda83cd7
SM
5819 && matching [1] == '\0')
5820 return 1;
529cad9c
PH
5821 }
5822
4c4b4cd2
PH
5823 /* ??? We should not modify STR directly, as we are doing below. This
5824 is fine in this case, but may become problematic later if we find
5825 that this alternative did not work, and want to try matching
5826 another one from the begining of STR. Since we modified it, we
5827 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5828 if (str[0] == 'X')
5829 {
5830 str += 1;
d2e4a39e 5831 while (str[0] != '_' && str[0] != '\0')
dda83cd7
SM
5832 {
5833 if (str[0] != 'n' && str[0] != 'b')
5834 return 0;
5835 str += 1;
5836 }
14f9c5c9 5837 }
babe1480 5838
14f9c5c9
AS
5839 if (str[0] == '\000')
5840 return 1;
babe1480 5841
d2e4a39e 5842 if (str[0] == '_')
14f9c5c9
AS
5843 {
5844 if (str[1] != '_' || str[2] == '\000')
dda83cd7 5845 return 0;
d2e4a39e 5846 if (str[2] == '_')
dda83cd7
SM
5847 {
5848 if (strcmp (str + 3, "JM") == 0)
5849 return 1;
5850 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5851 the LJM suffix in favor of the JM one. But we will
5852 still accept LJM as a valid suffix for a reasonable
5853 amount of time, just to allow ourselves to debug programs
5854 compiled using an older version of GNAT. */
5855 if (strcmp (str + 3, "LJM") == 0)
5856 return 1;
5857 if (str[3] != 'X')
5858 return 0;
5859 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5860 || str[4] == 'U' || str[4] == 'P')
5861 return 1;
5862 if (str[4] == 'R' && str[5] != 'T')
5863 return 1;
5864 return 0;
5865 }
4c4b4cd2 5866 if (!isdigit (str[2]))
dda83cd7 5867 return 0;
4c4b4cd2 5868 for (k = 3; str[k] != '\0'; k += 1)
dda83cd7
SM
5869 if (!isdigit (str[k]) && str[k] != '_')
5870 return 0;
14f9c5c9
AS
5871 return 1;
5872 }
4c4b4cd2 5873 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5874 {
4c4b4cd2 5875 for (k = 2; str[k] != '\0'; k += 1)
dda83cd7
SM
5876 if (!isdigit (str[k]) && str[k] != '_')
5877 return 0;
14f9c5c9
AS
5878 return 1;
5879 }
5880 return 0;
5881}
d2e4a39e 5882
aeb5907d
JB
5883/* Return non-zero if the string starting at NAME and ending before
5884 NAME_END contains no capital letters. */
529cad9c
PH
5885
5886static int
5887is_valid_name_for_wild_match (const char *name0)
5888{
f945dedf 5889 std::string decoded_name = ada_decode (name0);
529cad9c
PH
5890 int i;
5891
5823c3ef
JB
5892 /* If the decoded name starts with an angle bracket, it means that
5893 NAME0 does not follow the GNAT encoding format. It should then
5894 not be allowed as a possible wild match. */
5895 if (decoded_name[0] == '<')
5896 return 0;
5897
529cad9c
PH
5898 for (i=0; decoded_name[i] != '\0'; i++)
5899 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5900 return 0;
5901
5902 return 1;
5903}
5904
59c8a30b
JB
5905/* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
5906 character which could start a simple name. Assumes that *NAMEP points
5907 somewhere inside the string beginning at NAME0. */
4c4b4cd2 5908
14f9c5c9 5909static int
59c8a30b 5910advance_wild_match (const char **namep, const char *name0, char target0)
14f9c5c9 5911{
73589123 5912 const char *name = *namep;
5b4ee69b 5913
5823c3ef 5914 while (1)
14f9c5c9 5915 {
59c8a30b 5916 char t0, t1;
73589123
PH
5917
5918 t0 = *name;
5919 if (t0 == '_')
5920 {
5921 t1 = name[1];
5922 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5923 {
5924 name += 1;
61012eef 5925 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
5926 break;
5927 else
5928 name += 1;
5929 }
aa27d0b3
JB
5930 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5931 || name[2] == target0))
73589123
PH
5932 {
5933 name += 2;
5934 break;
5935 }
86b44259
TT
5936 else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
5937 {
5938 /* Names like "pkg__B_N__name", where N is a number, are
5939 block-local. We can handle these by simply skipping
5940 the "B_" here. */
5941 name += 4;
5942 }
73589123
PH
5943 else
5944 return 0;
5945 }
5946 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5947 name += 1;
5948 else
5823c3ef 5949 return 0;
73589123
PH
5950 }
5951
5952 *namep = name;
5953 return 1;
5954}
5955
b5ec771e
PA
5956/* Return true iff NAME encodes a name of the form prefix.PATN.
5957 Ignores any informational suffixes of NAME (i.e., for which
5958 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
5959 simple name. */
73589123 5960
b5ec771e 5961static bool
73589123
PH
5962wild_match (const char *name, const char *patn)
5963{
22e048c9 5964 const char *p;
73589123
PH
5965 const char *name0 = name;
5966
5967 while (1)
5968 {
5969 const char *match = name;
5970
5971 if (*name == *patn)
5972 {
5973 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5974 if (*p != *name)
5975 break;
5976 if (*p == '\0' && is_name_suffix (name))
b5ec771e 5977 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
5978
5979 if (name[-1] == '_')
5980 name -= 1;
5981 }
5982 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 5983 return false;
96d887e8 5984 }
96d887e8
PH
5985}
5986
d1183b06 5987/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
b5ec771e 5988 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
5989
5990static void
d1183b06 5991ada_add_block_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5992 const struct block *block,
5993 const lookup_name_info &lookup_name,
5994 domain_enum domain, struct objfile *objfile)
96d887e8 5995{
8157b174 5996 struct block_iterator iter;
96d887e8
PH
5997 /* A matching argument symbol, if any. */
5998 struct symbol *arg_sym;
5999 /* Set true when we find a matching non-argument symbol. */
1178743e 6000 bool found_sym;
96d887e8
PH
6001 struct symbol *sym;
6002
6003 arg_sym = NULL;
1178743e 6004 found_sym = false;
b5ec771e
PA
6005 for (sym = block_iter_match_first (block, lookup_name, &iter);
6006 sym != NULL;
6007 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6008 {
c1b5c1eb 6009 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
b5ec771e
PA
6010 {
6011 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6012 {
6013 if (SYMBOL_IS_ARGUMENT (sym))
6014 arg_sym = sym;
6015 else
6016 {
1178743e 6017 found_sym = true;
d1183b06 6018 add_defn_to_vec (result,
b5ec771e
PA
6019 fixup_symbol_section (sym, objfile),
6020 block);
6021 }
6022 }
6023 }
96d887e8
PH
6024 }
6025
22cee43f
PMR
6026 /* Handle renamings. */
6027
d1183b06 6028 if (ada_add_block_renamings (result, block, lookup_name, domain))
1178743e 6029 found_sym = true;
22cee43f 6030
96d887e8
PH
6031 if (!found_sym && arg_sym != NULL)
6032 {
d1183b06 6033 add_defn_to_vec (result,
dda83cd7
SM
6034 fixup_symbol_section (arg_sym, objfile),
6035 block);
96d887e8
PH
6036 }
6037
b5ec771e 6038 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6039 {
6040 arg_sym = NULL;
1178743e 6041 found_sym = false;
b5ec771e
PA
6042 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6043 const char *name = ada_lookup_name.c_str ();
6044 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6045
6046 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6047 {
dda83cd7
SM
6048 if (symbol_matches_domain (sym->language (),
6049 SYMBOL_DOMAIN (sym), domain))
6050 {
6051 int cmp;
6052
6053 cmp = (int) '_' - (int) sym->linkage_name ()[0];
6054 if (cmp == 0)
6055 {
6056 cmp = !startswith (sym->linkage_name (), "_ada_");
6057 if (cmp == 0)
6058 cmp = strncmp (name, sym->linkage_name () + 5,
6059 name_len);
6060 }
6061
6062 if (cmp == 0
6063 && is_name_suffix (sym->linkage_name () + name_len + 5))
6064 {
2a2d4dc3
AS
6065 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6066 {
6067 if (SYMBOL_IS_ARGUMENT (sym))
6068 arg_sym = sym;
6069 else
6070 {
1178743e 6071 found_sym = true;
d1183b06 6072 add_defn_to_vec (result,
2a2d4dc3
AS
6073 fixup_symbol_section (sym, objfile),
6074 block);
6075 }
6076 }
dda83cd7
SM
6077 }
6078 }
76a01679 6079 }
96d887e8
PH
6080
6081 /* NOTE: This really shouldn't be needed for _ada_ symbols.
dda83cd7 6082 They aren't parameters, right? */
96d887e8 6083 if (!found_sym && arg_sym != NULL)
dda83cd7 6084 {
d1183b06 6085 add_defn_to_vec (result,
dda83cd7
SM
6086 fixup_symbol_section (arg_sym, objfile),
6087 block);
6088 }
96d887e8
PH
6089 }
6090}
6091\f
41d27058 6092
dda83cd7 6093 /* Symbol Completion */
41d27058 6094
b5ec771e 6095/* See symtab.h. */
41d27058 6096
b5ec771e
PA
6097bool
6098ada_lookup_name_info::matches
6099 (const char *sym_name,
6100 symbol_name_match_type match_type,
a207cff2 6101 completion_match_result *comp_match_res) const
41d27058 6102{
b5ec771e
PA
6103 bool match = false;
6104 const char *text = m_encoded_name.c_str ();
6105 size_t text_len = m_encoded_name.size ();
41d27058
JB
6106
6107 /* First, test against the fully qualified name of the symbol. */
6108
6109 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6110 match = true;
41d27058 6111
f945dedf 6112 std::string decoded_name = ada_decode (sym_name);
b5ec771e 6113 if (match && !m_encoded_p)
41d27058
JB
6114 {
6115 /* One needed check before declaring a positive match is to verify
dda83cd7
SM
6116 that iff we are doing a verbatim match, the decoded version
6117 of the symbol name starts with '<'. Otherwise, this symbol name
6118 is not a suitable completion. */
41d27058 6119
f945dedf 6120 bool has_angle_bracket = (decoded_name[0] == '<');
b5ec771e 6121 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6122 }
6123
b5ec771e 6124 if (match && !m_verbatim_p)
41d27058
JB
6125 {
6126 /* When doing non-verbatim match, another check that needs to
dda83cd7
SM
6127 be done is to verify that the potentially matching symbol name
6128 does not include capital letters, because the ada-mode would
6129 not be able to understand these symbol names without the
6130 angle bracket notation. */
41d27058
JB
6131 const char *tmp;
6132
6133 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6134 if (*tmp != '\0')
b5ec771e 6135 match = false;
41d27058
JB
6136 }
6137
6138 /* Second: Try wild matching... */
6139
b5ec771e 6140 if (!match && m_wild_match_p)
41d27058
JB
6141 {
6142 /* Since we are doing wild matching, this means that TEXT
dda83cd7
SM
6143 may represent an unqualified symbol name. We therefore must
6144 also compare TEXT against the unqualified name of the symbol. */
f945dedf 6145 sym_name = ada_unqualified_name (decoded_name.c_str ());
41d27058
JB
6146
6147 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6148 match = true;
41d27058
JB
6149 }
6150
b5ec771e 6151 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6152
6153 if (!match)
b5ec771e 6154 return false;
41d27058 6155
a207cff2 6156 if (comp_match_res != NULL)
b5ec771e 6157 {
a207cff2 6158 std::string &match_str = comp_match_res->match.storage ();
41d27058 6159
b5ec771e 6160 if (!m_encoded_p)
a207cff2 6161 match_str = ada_decode (sym_name);
b5ec771e
PA
6162 else
6163 {
6164 if (m_verbatim_p)
6165 match_str = add_angle_brackets (sym_name);
6166 else
6167 match_str = sym_name;
41d27058 6168
b5ec771e 6169 }
a207cff2
PA
6170
6171 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6172 }
6173
b5ec771e 6174 return true;
41d27058
JB
6175}
6176
dda83cd7 6177 /* Field Access */
96d887e8 6178
73fb9985
JB
6179/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6180 for tagged types. */
6181
6182static int
6183ada_is_dispatch_table_ptr_type (struct type *type)
6184{
0d5cff50 6185 const char *name;
73fb9985 6186
78134374 6187 if (type->code () != TYPE_CODE_PTR)
73fb9985
JB
6188 return 0;
6189
7d93a1e0 6190 name = TYPE_TARGET_TYPE (type)->name ();
73fb9985
JB
6191 if (name == NULL)
6192 return 0;
6193
6194 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6195}
6196
ac4a2da4
JG
6197/* Return non-zero if TYPE is an interface tag. */
6198
6199static int
6200ada_is_interface_tag (struct type *type)
6201{
7d93a1e0 6202 const char *name = type->name ();
ac4a2da4
JG
6203
6204 if (name == NULL)
6205 return 0;
6206
6207 return (strcmp (name, "ada__tags__interface_tag") == 0);
6208}
6209
963a6417
PH
6210/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6211 to be invisible to users. */
96d887e8 6212
963a6417
PH
6213int
6214ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6215{
1f704f76 6216 if (field_num < 0 || field_num > type->num_fields ())
963a6417 6217 return 1;
ffde82bf 6218
73fb9985
JB
6219 /* Check the name of that field. */
6220 {
6221 const char *name = TYPE_FIELD_NAME (type, field_num);
6222
6223 /* Anonymous field names should not be printed.
6224 brobecker/2007-02-20: I don't think this can actually happen
30baf67b 6225 but we don't want to print the value of anonymous fields anyway. */
73fb9985
JB
6226 if (name == NULL)
6227 return 1;
6228
ffde82bf
JB
6229 /* Normally, fields whose name start with an underscore ("_")
6230 are fields that have been internally generated by the compiler,
6231 and thus should not be printed. The "_parent" field is special,
6232 however: This is a field internally generated by the compiler
6233 for tagged types, and it contains the components inherited from
6234 the parent type. This field should not be printed as is, but
6235 should not be ignored either. */
61012eef 6236 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6237 return 1;
6238 }
6239
ac4a2da4
JG
6240 /* If this is the dispatch table of a tagged type or an interface tag,
6241 then ignore. */
73fb9985 6242 if (ada_is_tagged_type (type, 1)
940da03e
SM
6243 && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6244 || ada_is_interface_tag (type->field (field_num).type ())))
73fb9985
JB
6245 return 1;
6246
6247 /* Not a special field, so it should not be ignored. */
6248 return 0;
963a6417 6249}
96d887e8 6250
963a6417 6251/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6252 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6253
963a6417
PH
6254int
6255ada_is_tagged_type (struct type *type, int refok)
6256{
988f6b3d 6257 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6258}
96d887e8 6259
963a6417 6260/* True iff TYPE represents the type of X'Tag */
96d887e8 6261
963a6417
PH
6262int
6263ada_is_tag_type (struct type *type)
6264{
460efde1
JB
6265 type = ada_check_typedef (type);
6266
78134374 6267 if (type == NULL || type->code () != TYPE_CODE_PTR)
963a6417
PH
6268 return 0;
6269 else
96d887e8 6270 {
963a6417 6271 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6272
963a6417 6273 return (name != NULL
dda83cd7 6274 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6275 }
96d887e8
PH
6276}
6277
963a6417 6278/* The type of the tag on VAL. */
76a01679 6279
de93309a 6280static struct type *
963a6417 6281ada_tag_type (struct value *val)
96d887e8 6282{
988f6b3d 6283 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6284}
96d887e8 6285
b50d69b5
JG
6286/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6287 retired at Ada 05). */
6288
6289static int
6290is_ada95_tag (struct value *tag)
6291{
6292 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6293}
6294
963a6417 6295/* The value of the tag on VAL. */
96d887e8 6296
de93309a 6297static struct value *
963a6417
PH
6298ada_value_tag (struct value *val)
6299{
03ee6b2e 6300 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6301}
6302
963a6417
PH
6303/* The value of the tag on the object of type TYPE whose contents are
6304 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6305 ADDRESS. */
96d887e8 6306
963a6417 6307static struct value *
10a2c479 6308value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6309 const gdb_byte *valaddr,
dda83cd7 6310 CORE_ADDR address)
96d887e8 6311{
b5385fc0 6312 int tag_byte_offset;
963a6417 6313 struct type *tag_type;
5b4ee69b 6314
963a6417 6315 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
dda83cd7 6316 NULL, NULL, NULL))
96d887e8 6317 {
fc1a4b47 6318 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6319 ? NULL
6320 : valaddr + tag_byte_offset);
963a6417 6321 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6322
963a6417 6323 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6324 }
963a6417
PH
6325 return NULL;
6326}
96d887e8 6327
963a6417
PH
6328static struct type *
6329type_from_tag (struct value *tag)
6330{
f5272a3b 6331 gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
5b4ee69b 6332
963a6417 6333 if (type_name != NULL)
5c4258f4 6334 return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
963a6417
PH
6335 return NULL;
6336}
96d887e8 6337
b50d69b5
JG
6338/* Given a value OBJ of a tagged type, return a value of this
6339 type at the base address of the object. The base address, as
6340 defined in Ada.Tags, it is the address of the primary tag of
6341 the object, and therefore where the field values of its full
6342 view can be fetched. */
6343
6344struct value *
6345ada_tag_value_at_base_address (struct value *obj)
6346{
b50d69b5
JG
6347 struct value *val;
6348 LONGEST offset_to_top = 0;
6349 struct type *ptr_type, *obj_type;
6350 struct value *tag;
6351 CORE_ADDR base_address;
6352
6353 obj_type = value_type (obj);
6354
6355 /* It is the responsability of the caller to deref pointers. */
6356
78134374 6357 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
b50d69b5
JG
6358 return obj;
6359
6360 tag = ada_value_tag (obj);
6361 if (!tag)
6362 return obj;
6363
6364 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6365
6366 if (is_ada95_tag (tag))
6367 return obj;
6368
08f49010
XR
6369 ptr_type = language_lookup_primitive_type
6370 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6371 ptr_type = lookup_pointer_type (ptr_type);
6372 val = value_cast (ptr_type, tag);
6373 if (!val)
6374 return obj;
6375
6376 /* It is perfectly possible that an exception be raised while
6377 trying to determine the base address, just like for the tag;
6378 see ada_tag_name for more details. We do not print the error
6379 message for the same reason. */
6380
a70b8144 6381 try
b50d69b5
JG
6382 {
6383 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6384 }
6385
230d2906 6386 catch (const gdb_exception_error &e)
492d29ea
PA
6387 {
6388 return obj;
6389 }
b50d69b5
JG
6390
6391 /* If offset is null, nothing to do. */
6392
6393 if (offset_to_top == 0)
6394 return obj;
6395
6396 /* -1 is a special case in Ada.Tags; however, what should be done
6397 is not quite clear from the documentation. So do nothing for
6398 now. */
6399
6400 if (offset_to_top == -1)
6401 return obj;
6402
08f49010
XR
6403 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6404 from the base address. This was however incompatible with
6405 C++ dispatch table: C++ uses a *negative* value to *add*
6406 to the base address. Ada's convention has therefore been
6407 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6408 use the same convention. Here, we support both cases by
6409 checking the sign of OFFSET_TO_TOP. */
6410
6411 if (offset_to_top > 0)
6412 offset_to_top = -offset_to_top;
6413
6414 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6415 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6416
6417 /* Make sure that we have a proper tag at the new address.
6418 Otherwise, offset_to_top is bogus (which can happen when
6419 the object is not initialized yet). */
6420
6421 if (!tag)
6422 return obj;
6423
6424 obj_type = type_from_tag (tag);
6425
6426 if (!obj_type)
6427 return obj;
6428
6429 return value_from_contents_and_address (obj_type, NULL, base_address);
6430}
6431
1b611343
JB
6432/* Return the "ada__tags__type_specific_data" type. */
6433
6434static struct type *
6435ada_get_tsd_type (struct inferior *inf)
963a6417 6436{
1b611343 6437 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6438
1b611343
JB
6439 if (data->tsd_type == 0)
6440 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6441 return data->tsd_type;
6442}
529cad9c 6443
1b611343
JB
6444/* Return the TSD (type-specific data) associated to the given TAG.
6445 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6446
1b611343 6447 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6448
1b611343
JB
6449static struct value *
6450ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6451{
4c4b4cd2 6452 struct value *val;
1b611343 6453 struct type *type;
5b4ee69b 6454
1b611343
JB
6455 /* First option: The TSD is simply stored as a field of our TAG.
6456 Only older versions of GNAT would use this format, but we have
6457 to test it first, because there are no visible markers for
6458 the current approach except the absence of that field. */
529cad9c 6459
1b611343
JB
6460 val = ada_value_struct_elt (tag, "tsd", 1);
6461 if (val)
6462 return val;
e802dbe0 6463
1b611343
JB
6464 /* Try the second representation for the dispatch table (in which
6465 there is no explicit 'tsd' field in the referent of the tag pointer,
6466 and instead the tsd pointer is stored just before the dispatch
6467 table. */
e802dbe0 6468
1b611343
JB
6469 type = ada_get_tsd_type (current_inferior());
6470 if (type == NULL)
6471 return NULL;
6472 type = lookup_pointer_type (lookup_pointer_type (type));
6473 val = value_cast (type, tag);
6474 if (val == NULL)
6475 return NULL;
6476 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6477}
6478
1b611343
JB
6479/* Given the TSD of a tag (type-specific data), return a string
6480 containing the name of the associated type.
6481
f5272a3b 6482 May return NULL if we are unable to determine the tag name. */
1b611343 6483
f5272a3b 6484static gdb::unique_xmalloc_ptr<char>
1b611343 6485ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6486{
529cad9c 6487 char *p;
1b611343 6488 struct value *val;
529cad9c 6489
1b611343 6490 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6491 if (val == NULL)
1b611343 6492 return NULL;
66920317
TT
6493 gdb::unique_xmalloc_ptr<char> buffer
6494 = target_read_string (value_as_address (val), INT_MAX);
6495 if (buffer == nullptr)
f5272a3b
TT
6496 return nullptr;
6497
6498 for (p = buffer.get (); *p != '\0'; ++p)
6499 {
6500 if (isalpha (*p))
6501 *p = tolower (*p);
6502 }
6503
6504 return buffer;
4c4b4cd2
PH
6505}
6506
6507/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6508 a C string.
6509
6510 Return NULL if the TAG is not an Ada tag, or if we were unable to
f5272a3b 6511 determine the name of that tag. */
4c4b4cd2 6512
f5272a3b 6513gdb::unique_xmalloc_ptr<char>
4c4b4cd2
PH
6514ada_tag_name (struct value *tag)
6515{
f5272a3b 6516 gdb::unique_xmalloc_ptr<char> name;
5b4ee69b 6517
df407dfe 6518 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6519 return NULL;
1b611343
JB
6520
6521 /* It is perfectly possible that an exception be raised while trying
6522 to determine the TAG's name, even under normal circumstances:
6523 The associated variable may be uninitialized or corrupted, for
6524 instance. We do not let any exception propagate past this point.
6525 instead we return NULL.
6526
6527 We also do not print the error message either (which often is very
6528 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6529 the caller print a more meaningful message if necessary. */
a70b8144 6530 try
1b611343
JB
6531 {
6532 struct value *tsd = ada_get_tsd_from_tag (tag);
6533
6534 if (tsd != NULL)
6535 name = ada_tag_name_from_tsd (tsd);
6536 }
230d2906 6537 catch (const gdb_exception_error &e)
492d29ea
PA
6538 {
6539 }
1b611343
JB
6540
6541 return name;
4c4b4cd2
PH
6542}
6543
6544/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6545
d2e4a39e 6546struct type *
ebf56fd3 6547ada_parent_type (struct type *type)
14f9c5c9
AS
6548{
6549 int i;
6550
61ee279c 6551 type = ada_check_typedef (type);
14f9c5c9 6552
78134374 6553 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
6554 return NULL;
6555
1f704f76 6556 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 6557 if (ada_is_parent_field (type, i))
0c1f74cf 6558 {
dda83cd7 6559 struct type *parent_type = type->field (i).type ();
0c1f74cf 6560
dda83cd7
SM
6561 /* If the _parent field is a pointer, then dereference it. */
6562 if (parent_type->code () == TYPE_CODE_PTR)
6563 parent_type = TYPE_TARGET_TYPE (parent_type);
6564 /* If there is a parallel XVS type, get the actual base type. */
6565 parent_type = ada_get_base_type (parent_type);
0c1f74cf 6566
dda83cd7 6567 return ada_check_typedef (parent_type);
0c1f74cf 6568 }
14f9c5c9
AS
6569
6570 return NULL;
6571}
6572
4c4b4cd2
PH
6573/* True iff field number FIELD_NUM of structure type TYPE contains the
6574 parent-type (inherited) fields of a derived type. Assumes TYPE is
6575 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6576
6577int
ebf56fd3 6578ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6579{
61ee279c 6580 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6581
4c4b4cd2 6582 return (name != NULL
dda83cd7
SM
6583 && (startswith (name, "PARENT")
6584 || startswith (name, "_parent")));
14f9c5c9
AS
6585}
6586
4c4b4cd2 6587/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6588 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6589 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6590 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6591 structures. */
14f9c5c9
AS
6592
6593int
ebf56fd3 6594ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6595{
d2e4a39e 6596 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6597
dddc0e16
JB
6598 if (name != NULL && strcmp (name, "RETVAL") == 0)
6599 {
6600 /* This happens in functions with "out" or "in out" parameters
6601 which are passed by copy. For such functions, GNAT describes
6602 the function's return type as being a struct where the return
6603 value is in a field called RETVAL, and where the other "out"
6604 or "in out" parameters are fields of that struct. This is not
6605 a wrapper. */
6606 return 0;
6607 }
6608
d2e4a39e 6609 return (name != NULL
dda83cd7
SM
6610 && (startswith (name, "PARENT")
6611 || strcmp (name, "REP") == 0
6612 || startswith (name, "_parent")
6613 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6614}
6615
4c4b4cd2
PH
6616/* True iff field number FIELD_NUM of structure or union type TYPE
6617 is a variant wrapper. Assumes TYPE is a structure type with at least
6618 FIELD_NUM+1 fields. */
14f9c5c9
AS
6619
6620int
ebf56fd3 6621ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6622{
8ecb59f8
TT
6623 /* Only Ada types are eligible. */
6624 if (!ADA_TYPE_P (type))
6625 return 0;
6626
940da03e 6627 struct type *field_type = type->field (field_num).type ();
5b4ee69b 6628
78134374
SM
6629 return (field_type->code () == TYPE_CODE_UNION
6630 || (is_dynamic_field (type, field_num)
6631 && (TYPE_TARGET_TYPE (field_type)->code ()
c3e5cd34 6632 == TYPE_CODE_UNION)));
14f9c5c9
AS
6633}
6634
6635/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6636 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6637 returns the type of the controlling discriminant for the variant.
6638 May return NULL if the type could not be found. */
14f9c5c9 6639
d2e4a39e 6640struct type *
ebf56fd3 6641ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6642{
a121b7c1 6643 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6644
988f6b3d 6645 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
6646}
6647
4c4b4cd2 6648/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6649 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6650 represents a 'when others' clause; otherwise 0. */
14f9c5c9 6651
de93309a 6652static int
ebf56fd3 6653ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6654{
d2e4a39e 6655 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6656
14f9c5c9
AS
6657 return (name != NULL && name[0] == 'O');
6658}
6659
6660/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6661 returns the name of the discriminant controlling the variant.
6662 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6663
a121b7c1 6664const char *
ebf56fd3 6665ada_variant_discrim_name (struct type *type0)
14f9c5c9 6666{
5f9febe0 6667 static std::string result;
d2e4a39e
AS
6668 struct type *type;
6669 const char *name;
6670 const char *discrim_end;
6671 const char *discrim_start;
14f9c5c9 6672
78134374 6673 if (type0->code () == TYPE_CODE_PTR)
14f9c5c9
AS
6674 type = TYPE_TARGET_TYPE (type0);
6675 else
6676 type = type0;
6677
6678 name = ada_type_name (type);
6679
6680 if (name == NULL || name[0] == '\000')
6681 return "";
6682
6683 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6684 discrim_end -= 1)
6685 {
61012eef 6686 if (startswith (discrim_end, "___XVN"))
dda83cd7 6687 break;
14f9c5c9
AS
6688 }
6689 if (discrim_end == name)
6690 return "";
6691
d2e4a39e 6692 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6693 discrim_start -= 1)
6694 {
d2e4a39e 6695 if (discrim_start == name + 1)
dda83cd7 6696 return "";
76a01679 6697 if ((discrim_start > name + 3
dda83cd7
SM
6698 && startswith (discrim_start - 3, "___"))
6699 || discrim_start[-1] == '.')
6700 break;
14f9c5c9
AS
6701 }
6702
5f9febe0
TT
6703 result = std::string (discrim_start, discrim_end - discrim_start);
6704 return result.c_str ();
14f9c5c9
AS
6705}
6706
4c4b4cd2
PH
6707/* Scan STR for a subtype-encoded number, beginning at position K.
6708 Put the position of the character just past the number scanned in
6709 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6710 Return 1 if there was a valid number at the given position, and 0
6711 otherwise. A "subtype-encoded" number consists of the absolute value
6712 in decimal, followed by the letter 'm' to indicate a negative number.
6713 Assumes 0m does not occur. */
14f9c5c9
AS
6714
6715int
d2e4a39e 6716ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6717{
6718 ULONGEST RU;
6719
d2e4a39e 6720 if (!isdigit (str[k]))
14f9c5c9
AS
6721 return 0;
6722
4c4b4cd2 6723 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6724 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6725 LONGEST. */
14f9c5c9
AS
6726 RU = 0;
6727 while (isdigit (str[k]))
6728 {
d2e4a39e 6729 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6730 k += 1;
6731 }
6732
d2e4a39e 6733 if (str[k] == 'm')
14f9c5c9
AS
6734 {
6735 if (R != NULL)
dda83cd7 6736 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6737 k += 1;
6738 }
6739 else if (R != NULL)
6740 *R = (LONGEST) RU;
6741
4c4b4cd2 6742 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6743 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6744 number representable as a LONGEST (although either would probably work
6745 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6746 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6747
6748 if (new_k != NULL)
6749 *new_k = k;
6750 return 1;
6751}
6752
4c4b4cd2
PH
6753/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6754 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6755 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6756
de93309a 6757static int
ebf56fd3 6758ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6759{
d2e4a39e 6760 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6761 int p;
6762
6763 p = 0;
6764 while (1)
6765 {
d2e4a39e 6766 switch (name[p])
dda83cd7
SM
6767 {
6768 case '\0':
6769 return 0;
6770 case 'S':
6771 {
6772 LONGEST W;
6773
6774 if (!ada_scan_number (name, p + 1, &W, &p))
6775 return 0;
6776 if (val == W)
6777 return 1;
6778 break;
6779 }
6780 case 'R':
6781 {
6782 LONGEST L, U;
6783
6784 if (!ada_scan_number (name, p + 1, &L, &p)
6785 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6786 return 0;
6787 if (val >= L && val <= U)
6788 return 1;
6789 break;
6790 }
6791 case 'O':
6792 return 1;
6793 default:
6794 return 0;
6795 }
4c4b4cd2
PH
6796 }
6797}
6798
0963b4bd 6799/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6800
6801/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6802 ARG_TYPE, extract and return the value of one of its (non-static)
6803 fields. FIELDNO says which field. Differs from value_primitive_field
6804 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6805
5eb68a39 6806struct value *
d2e4a39e 6807ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
dda83cd7 6808 struct type *arg_type)
14f9c5c9 6809{
14f9c5c9
AS
6810 struct type *type;
6811
61ee279c 6812 arg_type = ada_check_typedef (arg_type);
940da03e 6813 type = arg_type->field (fieldno).type ();
14f9c5c9 6814
4504bbde
TT
6815 /* Handle packed fields. It might be that the field is not packed
6816 relative to its containing structure, but the structure itself is
6817 packed; in this case we must take the bit-field path. */
6818 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
14f9c5c9
AS
6819 {
6820 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6821 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6822
0fd88904 6823 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
dda83cd7
SM
6824 offset + bit_pos / 8,
6825 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6826 }
6827 else
6828 return value_primitive_field (arg1, offset, fieldno, arg_type);
6829}
6830
52ce6436
PH
6831/* Find field with name NAME in object of type TYPE. If found,
6832 set the following for each argument that is non-null:
6833 - *FIELD_TYPE_P to the field's type;
6834 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6835 an object of that type;
6836 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6837 - *BIT_SIZE_P to its size in bits if the field is packed, and
6838 0 otherwise;
6839 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6840 fields up to but not including the desired field, or by the total
6841 number of fields if not found. A NULL value of NAME never
6842 matches; the function just counts visible fields in this case.
6843
828d5846
XR
6844 Notice that we need to handle when a tagged record hierarchy
6845 has some components with the same name, like in this scenario:
6846
6847 type Top_T is tagged record
dda83cd7
SM
6848 N : Integer := 1;
6849 U : Integer := 974;
6850 A : Integer := 48;
828d5846
XR
6851 end record;
6852
6853 type Middle_T is new Top.Top_T with record
dda83cd7
SM
6854 N : Character := 'a';
6855 C : Integer := 3;
828d5846
XR
6856 end record;
6857
6858 type Bottom_T is new Middle.Middle_T with record
dda83cd7
SM
6859 N : Float := 4.0;
6860 C : Character := '5';
6861 X : Integer := 6;
6862 A : Character := 'J';
828d5846
XR
6863 end record;
6864
6865 Let's say we now have a variable declared and initialized as follow:
6866
6867 TC : Top_A := new Bottom_T;
6868
6869 And then we use this variable to call this function
6870
6871 procedure Assign (Obj: in out Top_T; TV : Integer);
6872
6873 as follow:
6874
6875 Assign (Top_T (B), 12);
6876
6877 Now, we're in the debugger, and we're inside that procedure
6878 then and we want to print the value of obj.c:
6879
6880 Usually, the tagged record or one of the parent type owns the
6881 component to print and there's no issue but in this particular
6882 case, what does it mean to ask for Obj.C? Since the actual
6883 type for object is type Bottom_T, it could mean two things: type
6884 component C from the Middle_T view, but also component C from
6885 Bottom_T. So in that "undefined" case, when the component is
6886 not found in the non-resolved type (which includes all the
6887 components of the parent type), then resolve it and see if we
6888 get better luck once expanded.
6889
6890 In the case of homonyms in the derived tagged type, we don't
6891 guaranty anything, and pick the one that's easiest for us
6892 to program.
6893
0963b4bd 6894 Returns 1 if found, 0 otherwise. */
52ce6436 6895
4c4b4cd2 6896static int
0d5cff50 6897find_struct_field (const char *name, struct type *type, int offset,
dda83cd7
SM
6898 struct type **field_type_p,
6899 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
52ce6436 6900 int *index_p)
4c4b4cd2
PH
6901{
6902 int i;
828d5846 6903 int parent_offset = -1;
4c4b4cd2 6904
61ee279c 6905 type = ada_check_typedef (type);
76a01679 6906
52ce6436
PH
6907 if (field_type_p != NULL)
6908 *field_type_p = NULL;
6909 if (byte_offset_p != NULL)
d5d6fca5 6910 *byte_offset_p = 0;
52ce6436
PH
6911 if (bit_offset_p != NULL)
6912 *bit_offset_p = 0;
6913 if (bit_size_p != NULL)
6914 *bit_size_p = 0;
6915
1f704f76 6916 for (i = 0; i < type->num_fields (); i += 1)
4c4b4cd2
PH
6917 {
6918 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6919 int fld_offset = offset + bit_pos / 8;
0d5cff50 6920 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6921
4c4b4cd2 6922 if (t_field_name == NULL)
dda83cd7 6923 continue;
4c4b4cd2 6924
828d5846 6925 else if (ada_is_parent_field (type, i))
dda83cd7 6926 {
828d5846
XR
6927 /* This is a field pointing us to the parent type of a tagged
6928 type. As hinted in this function's documentation, we give
6929 preference to fields in the current record first, so what
6930 we do here is just record the index of this field before
6931 we skip it. If it turns out we couldn't find our field
6932 in the current record, then we'll get back to it and search
6933 inside it whether the field might exist in the parent. */
6934
dda83cd7
SM
6935 parent_offset = i;
6936 continue;
6937 }
828d5846 6938
52ce6436 6939 else if (name != NULL && field_name_match (t_field_name, name))
dda83cd7
SM
6940 {
6941 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6942
52ce6436 6943 if (field_type_p != NULL)
940da03e 6944 *field_type_p = type->field (i).type ();
52ce6436
PH
6945 if (byte_offset_p != NULL)
6946 *byte_offset_p = fld_offset;
6947 if (bit_offset_p != NULL)
6948 *bit_offset_p = bit_pos % 8;
6949 if (bit_size_p != NULL)
6950 *bit_size_p = bit_size;
dda83cd7
SM
6951 return 1;
6952 }
4c4b4cd2 6953 else if (ada_is_wrapper_field (type, i))
dda83cd7 6954 {
940da03e 6955 if (find_struct_field (name, type->field (i).type (), fld_offset,
52ce6436
PH
6956 field_type_p, byte_offset_p, bit_offset_p,
6957 bit_size_p, index_p))
dda83cd7
SM
6958 return 1;
6959 }
4c4b4cd2 6960 else if (ada_is_variant_part (type, i))
dda83cd7 6961 {
52ce6436
PH
6962 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6963 fixed type?? */
dda83cd7
SM
6964 int j;
6965 struct type *field_type
940da03e 6966 = ada_check_typedef (type->field (i).type ());
4c4b4cd2 6967
dda83cd7
SM
6968 for (j = 0; j < field_type->num_fields (); j += 1)
6969 {
6970 if (find_struct_field (name, field_type->field (j).type (),
6971 fld_offset
6972 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6973 field_type_p, byte_offset_p,
6974 bit_offset_p, bit_size_p, index_p))
6975 return 1;
6976 }
6977 }
52ce6436
PH
6978 else if (index_p != NULL)
6979 *index_p += 1;
4c4b4cd2 6980 }
828d5846
XR
6981
6982 /* Field not found so far. If this is a tagged type which
6983 has a parent, try finding that field in the parent now. */
6984
6985 if (parent_offset != -1)
6986 {
6987 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
6988 int fld_offset = offset + bit_pos / 8;
6989
940da03e 6990 if (find_struct_field (name, type->field (parent_offset).type (),
dda83cd7
SM
6991 fld_offset, field_type_p, byte_offset_p,
6992 bit_offset_p, bit_size_p, index_p))
6993 return 1;
828d5846
XR
6994 }
6995
4c4b4cd2
PH
6996 return 0;
6997}
6998
0963b4bd 6999/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7000
52ce6436
PH
7001static int
7002num_visible_fields (struct type *type)
7003{
7004 int n;
5b4ee69b 7005
52ce6436
PH
7006 n = 0;
7007 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7008 return n;
7009}
14f9c5c9 7010
4c4b4cd2 7011/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7012 and search in it assuming it has (class) type TYPE.
7013 If found, return value, else return NULL.
7014
828d5846
XR
7015 Searches recursively through wrapper fields (e.g., '_parent').
7016
7017 In the case of homonyms in the tagged types, please refer to the
7018 long explanation in find_struct_field's function documentation. */
14f9c5c9 7019
4c4b4cd2 7020static struct value *
108d56a4 7021ada_search_struct_field (const char *name, struct value *arg, int offset,
dda83cd7 7022 struct type *type)
14f9c5c9
AS
7023{
7024 int i;
828d5846 7025 int parent_offset = -1;
14f9c5c9 7026
5b4ee69b 7027 type = ada_check_typedef (type);
1f704f76 7028 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7029 {
0d5cff50 7030 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7031
7032 if (t_field_name == NULL)
dda83cd7 7033 continue;
14f9c5c9 7034
828d5846 7035 else if (ada_is_parent_field (type, i))
dda83cd7 7036 {
828d5846
XR
7037 /* This is a field pointing us to the parent type of a tagged
7038 type. As hinted in this function's documentation, we give
7039 preference to fields in the current record first, so what
7040 we do here is just record the index of this field before
7041 we skip it. If it turns out we couldn't find our field
7042 in the current record, then we'll get back to it and search
7043 inside it whether the field might exist in the parent. */
7044
dda83cd7
SM
7045 parent_offset = i;
7046 continue;
7047 }
828d5846 7048
14f9c5c9 7049 else if (field_name_match (t_field_name, name))
dda83cd7 7050 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7051
7052 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7053 {
7054 struct value *v = /* Do not let indent join lines here. */
7055 ada_search_struct_field (name, arg,
7056 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7057 type->field (i).type ());
5b4ee69b 7058
dda83cd7
SM
7059 if (v != NULL)
7060 return v;
7061 }
14f9c5c9
AS
7062
7063 else if (ada_is_variant_part (type, i))
dda83cd7 7064 {
0963b4bd 7065 /* PNH: Do we ever get here? See find_struct_field. */
dda83cd7
SM
7066 int j;
7067 struct type *field_type = ada_check_typedef (type->field (i).type ());
7068 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
4c4b4cd2 7069
dda83cd7
SM
7070 for (j = 0; j < field_type->num_fields (); j += 1)
7071 {
7072 struct value *v = ada_search_struct_field /* Force line
0963b4bd 7073 break. */
dda83cd7
SM
7074 (name, arg,
7075 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7076 field_type->field (j).type ());
5b4ee69b 7077
dda83cd7
SM
7078 if (v != NULL)
7079 return v;
7080 }
7081 }
14f9c5c9 7082 }
828d5846
XR
7083
7084 /* Field not found so far. If this is a tagged type which
7085 has a parent, try finding that field in the parent now. */
7086
7087 if (parent_offset != -1)
7088 {
7089 struct value *v = ada_search_struct_field (
7090 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
940da03e 7091 type->field (parent_offset).type ());
828d5846
XR
7092
7093 if (v != NULL)
dda83cd7 7094 return v;
828d5846
XR
7095 }
7096
14f9c5c9
AS
7097 return NULL;
7098}
d2e4a39e 7099
52ce6436
PH
7100static struct value *ada_index_struct_field_1 (int *, struct value *,
7101 int, struct type *);
7102
7103
7104/* Return field #INDEX in ARG, where the index is that returned by
7105 * find_struct_field through its INDEX_P argument. Adjust the address
7106 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7107 * If found, return value, else return NULL. */
52ce6436
PH
7108
7109static struct value *
7110ada_index_struct_field (int index, struct value *arg, int offset,
7111 struct type *type)
7112{
7113 return ada_index_struct_field_1 (&index, arg, offset, type);
7114}
7115
7116
7117/* Auxiliary function for ada_index_struct_field. Like
7118 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7119 * *INDEX_P. */
52ce6436
PH
7120
7121static struct value *
7122ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7123 struct type *type)
7124{
7125 int i;
7126 type = ada_check_typedef (type);
7127
1f704f76 7128 for (i = 0; i < type->num_fields (); i += 1)
52ce6436
PH
7129 {
7130 if (TYPE_FIELD_NAME (type, i) == NULL)
dda83cd7 7131 continue;
52ce6436 7132 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7133 {
7134 struct value *v = /* Do not let indent join lines here. */
7135 ada_index_struct_field_1 (index_p, arg,
52ce6436 7136 offset + TYPE_FIELD_BITPOS (type, i) / 8,
940da03e 7137 type->field (i).type ());
5b4ee69b 7138
dda83cd7
SM
7139 if (v != NULL)
7140 return v;
7141 }
52ce6436
PH
7142
7143 else if (ada_is_variant_part (type, i))
dda83cd7 7144 {
52ce6436 7145 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7146 find_struct_field. */
52ce6436 7147 error (_("Cannot assign this kind of variant record"));
dda83cd7 7148 }
52ce6436 7149 else if (*index_p == 0)
dda83cd7 7150 return ada_value_primitive_field (arg, offset, i, type);
52ce6436
PH
7151 else
7152 *index_p -= 1;
7153 }
7154 return NULL;
7155}
7156
3b4de39c 7157/* Return a string representation of type TYPE. */
99bbb428 7158
3b4de39c 7159static std::string
99bbb428
PA
7160type_as_string (struct type *type)
7161{
d7e74731 7162 string_file tmp_stream;
99bbb428 7163
d7e74731 7164 type_print (type, "", &tmp_stream, -1);
99bbb428 7165
d7e74731 7166 return std::move (tmp_stream.string ());
99bbb428
PA
7167}
7168
14f9c5c9 7169/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7170 If DISPP is non-null, add its byte displacement from the beginning of a
7171 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7172 work for packed fields).
7173
7174 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7175 followed by "___".
14f9c5c9 7176
0963b4bd 7177 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7178 be a (pointer or reference)+ to a struct or union, and the
7179 ultimate target type will be searched.
14f9c5c9
AS
7180
7181 Looks recursively into variant clauses and parent types.
7182
828d5846
XR
7183 In the case of homonyms in the tagged types, please refer to the
7184 long explanation in find_struct_field's function documentation.
7185
4c4b4cd2
PH
7186 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7187 TYPE is not a type of the right kind. */
14f9c5c9 7188
4c4b4cd2 7189static struct type *
a121b7c1 7190ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
dda83cd7 7191 int noerr)
14f9c5c9
AS
7192{
7193 int i;
828d5846 7194 int parent_offset = -1;
14f9c5c9
AS
7195
7196 if (name == NULL)
7197 goto BadName;
7198
76a01679 7199 if (refok && type != NULL)
4c4b4cd2
PH
7200 while (1)
7201 {
dda83cd7
SM
7202 type = ada_check_typedef (type);
7203 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7204 break;
7205 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7206 }
14f9c5c9 7207
76a01679 7208 if (type == NULL
78134374
SM
7209 || (type->code () != TYPE_CODE_STRUCT
7210 && type->code () != TYPE_CODE_UNION))
14f9c5c9 7211 {
4c4b4cd2 7212 if (noerr)
dda83cd7 7213 return NULL;
99bbb428 7214
3b4de39c
PA
7215 error (_("Type %s is not a structure or union type"),
7216 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7217 }
7218
7219 type = to_static_fixed_type (type);
7220
1f704f76 7221 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7222 {
0d5cff50 7223 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7224 struct type *t;
d2e4a39e 7225
14f9c5c9 7226 if (t_field_name == NULL)
dda83cd7 7227 continue;
14f9c5c9 7228
828d5846 7229 else if (ada_is_parent_field (type, i))
dda83cd7 7230 {
828d5846
XR
7231 /* This is a field pointing us to the parent type of a tagged
7232 type. As hinted in this function's documentation, we give
7233 preference to fields in the current record first, so what
7234 we do here is just record the index of this field before
7235 we skip it. If it turns out we couldn't find our field
7236 in the current record, then we'll get back to it and search
7237 inside it whether the field might exist in the parent. */
7238
dda83cd7
SM
7239 parent_offset = i;
7240 continue;
7241 }
828d5846 7242
14f9c5c9 7243 else if (field_name_match (t_field_name, name))
940da03e 7244 return type->field (i).type ();
14f9c5c9
AS
7245
7246 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7247 {
7248 t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7249 0, 1);
7250 if (t != NULL)
988f6b3d 7251 return t;
dda83cd7 7252 }
14f9c5c9
AS
7253
7254 else if (ada_is_variant_part (type, i))
dda83cd7
SM
7255 {
7256 int j;
7257 struct type *field_type = ada_check_typedef (type->field (i).type ());
4c4b4cd2 7258
dda83cd7
SM
7259 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7260 {
b1f33ddd 7261 /* FIXME pnh 2008/01/26: We check for a field that is
dda83cd7 7262 NOT wrapped in a struct, since the compiler sometimes
b1f33ddd 7263 generates these for unchecked variant types. Revisit
dda83cd7 7264 if the compiler changes this practice. */
0d5cff50 7265 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7266
b1f33ddd
JB
7267 if (v_field_name != NULL
7268 && field_name_match (v_field_name, name))
940da03e 7269 t = field_type->field (j).type ();
b1f33ddd 7270 else
940da03e 7271 t = ada_lookup_struct_elt_type (field_type->field (j).type (),
988f6b3d 7272 name, 0, 1);
b1f33ddd 7273
dda83cd7 7274 if (t != NULL)
988f6b3d 7275 return t;
dda83cd7
SM
7276 }
7277 }
14f9c5c9
AS
7278
7279 }
7280
828d5846
XR
7281 /* Field not found so far. If this is a tagged type which
7282 has a parent, try finding that field in the parent now. */
7283
7284 if (parent_offset != -1)
7285 {
dda83cd7 7286 struct type *t;
828d5846 7287
dda83cd7
SM
7288 t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7289 name, 0, 1);
7290 if (t != NULL)
828d5846
XR
7291 return t;
7292 }
7293
14f9c5c9 7294BadName:
d2e4a39e 7295 if (!noerr)
14f9c5c9 7296 {
2b2798cc 7297 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7298
7299 error (_("Type %s has no component named %s"),
3b4de39c 7300 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7301 }
7302
7303 return NULL;
7304}
7305
b1f33ddd
JB
7306/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7307 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7308 represents an unchecked union (that is, the variant part of a
0963b4bd 7309 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7310
7311static int
7312is_unchecked_variant (struct type *var_type, struct type *outer_type)
7313{
a121b7c1 7314 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7315
988f6b3d 7316 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7317}
7318
7319
14f9c5c9 7320/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
d8af9068 7321 within OUTER, determine which variant clause (field number in VAR_TYPE,
4c4b4cd2 7322 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7323
d2e4a39e 7324int
d8af9068 7325ada_which_variant_applies (struct type *var_type, struct value *outer)
14f9c5c9
AS
7326{
7327 int others_clause;
7328 int i;
a121b7c1 7329 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816 7330 struct value *discrim;
14f9c5c9
AS
7331 LONGEST discrim_val;
7332
012370f6
TT
7333 /* Using plain value_from_contents_and_address here causes problems
7334 because we will end up trying to resolve a type that is currently
7335 being constructed. */
0c281816
JB
7336 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7337 if (discrim == NULL)
14f9c5c9 7338 return -1;
0c281816 7339 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7340
7341 others_clause = -1;
1f704f76 7342 for (i = 0; i < var_type->num_fields (); i += 1)
14f9c5c9
AS
7343 {
7344 if (ada_is_others_clause (var_type, i))
dda83cd7 7345 others_clause = i;
14f9c5c9 7346 else if (ada_in_variant (discrim_val, var_type, i))
dda83cd7 7347 return i;
14f9c5c9
AS
7348 }
7349
7350 return others_clause;
7351}
d2e4a39e 7352\f
14f9c5c9
AS
7353
7354
dda83cd7 7355 /* Dynamic-Sized Records */
14f9c5c9
AS
7356
7357/* Strategy: The type ostensibly attached to a value with dynamic size
7358 (i.e., a size that is not statically recorded in the debugging
7359 data) does not accurately reflect the size or layout of the value.
7360 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7361 conventional types that are constructed on the fly. */
14f9c5c9
AS
7362
7363/* There is a subtle and tricky problem here. In general, we cannot
7364 determine the size of dynamic records without its data. However,
7365 the 'struct value' data structure, which GDB uses to represent
7366 quantities in the inferior process (the target), requires the size
7367 of the type at the time of its allocation in order to reserve space
7368 for GDB's internal copy of the data. That's why the
7369 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7370 rather than struct value*s.
14f9c5c9
AS
7371
7372 However, GDB's internal history variables ($1, $2, etc.) are
7373 struct value*s containing internal copies of the data that are not, in
7374 general, the same as the data at their corresponding addresses in
7375 the target. Fortunately, the types we give to these values are all
7376 conventional, fixed-size types (as per the strategy described
7377 above), so that we don't usually have to perform the
7378 'to_fixed_xxx_type' conversions to look at their values.
7379 Unfortunately, there is one exception: if one of the internal
7380 history variables is an array whose elements are unconstrained
7381 records, then we will need to create distinct fixed types for each
7382 element selected. */
7383
7384/* The upshot of all of this is that many routines take a (type, host
7385 address, target address) triple as arguments to represent a value.
7386 The host address, if non-null, is supposed to contain an internal
7387 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7388 target at the target address. */
14f9c5c9
AS
7389
7390/* Assuming that VAL0 represents a pointer value, the result of
7391 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7392 dynamic-sized types. */
14f9c5c9 7393
d2e4a39e
AS
7394struct value *
7395ada_value_ind (struct value *val0)
14f9c5c9 7396{
c48db5ca 7397 struct value *val = value_ind (val0);
5b4ee69b 7398
b50d69b5
JG
7399 if (ada_is_tagged_type (value_type (val), 0))
7400 val = ada_tag_value_at_base_address (val);
7401
4c4b4cd2 7402 return ada_to_fixed_value (val);
14f9c5c9
AS
7403}
7404
7405/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7406 qualifiers on VAL0. */
7407
d2e4a39e
AS
7408static struct value *
7409ada_coerce_ref (struct value *val0)
7410{
78134374 7411 if (value_type (val0)->code () == TYPE_CODE_REF)
d2e4a39e
AS
7412 {
7413 struct value *val = val0;
5b4ee69b 7414
994b9211 7415 val = coerce_ref (val);
b50d69b5
JG
7416
7417 if (ada_is_tagged_type (value_type (val), 0))
7418 val = ada_tag_value_at_base_address (val);
7419
4c4b4cd2 7420 return ada_to_fixed_value (val);
d2e4a39e
AS
7421 }
7422 else
14f9c5c9
AS
7423 return val0;
7424}
7425
4c4b4cd2 7426/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7427
7428static unsigned int
ebf56fd3 7429field_alignment (struct type *type, int f)
14f9c5c9 7430{
d2e4a39e 7431 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7432 int len;
14f9c5c9
AS
7433 int align_offset;
7434
64a1bf19
JB
7435 /* The field name should never be null, unless the debugging information
7436 is somehow malformed. In this case, we assume the field does not
7437 require any alignment. */
7438 if (name == NULL)
7439 return 1;
7440
7441 len = strlen (name);
7442
4c4b4cd2
PH
7443 if (!isdigit (name[len - 1]))
7444 return 1;
14f9c5c9 7445
d2e4a39e 7446 if (isdigit (name[len - 2]))
14f9c5c9
AS
7447 align_offset = len - 2;
7448 else
7449 align_offset = len - 1;
7450
61012eef 7451 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7452 return TARGET_CHAR_BIT;
7453
4c4b4cd2
PH
7454 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7455}
7456
852dff6c 7457/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7458
852dff6c
JB
7459static struct symbol *
7460ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7461{
7462 struct symbol *sym;
7463
7464 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7465 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7466 return sym;
7467
4186eb54
KS
7468 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7469 return sym;
14f9c5c9
AS
7470}
7471
dddfab26
UW
7472/* Find a type named NAME. Ignores ambiguity. This routine will look
7473 solely for types defined by debug info, it will not search the GDB
7474 primitive types. */
4c4b4cd2 7475
852dff6c 7476static struct type *
ebf56fd3 7477ada_find_any_type (const char *name)
14f9c5c9 7478{
852dff6c 7479 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7480
14f9c5c9 7481 if (sym != NULL)
dddfab26 7482 return SYMBOL_TYPE (sym);
14f9c5c9 7483
dddfab26 7484 return NULL;
14f9c5c9
AS
7485}
7486
739593e0
JB
7487/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7488 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7489 symbol, in which case it is returned. Otherwise, this looks for
7490 symbols whose name is that of NAME_SYM suffixed with "___XR".
7491 Return symbol if found, and NULL otherwise. */
4c4b4cd2 7492
c0e70c62
TT
7493static bool
7494ada_is_renaming_symbol (struct symbol *name_sym)
aeb5907d 7495{
987012b8 7496 const char *name = name_sym->linkage_name ();
c0e70c62 7497 return strstr (name, "___XR") != NULL;
4c4b4cd2
PH
7498}
7499
14f9c5c9 7500/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7501 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7502 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7503 otherwise return 0. */
7504
14f9c5c9 7505int
d2e4a39e 7506ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7507{
7508 if (type1 == NULL)
7509 return 1;
7510 else if (type0 == NULL)
7511 return 0;
78134374 7512 else if (type1->code () == TYPE_CODE_VOID)
14f9c5c9 7513 return 1;
78134374 7514 else if (type0->code () == TYPE_CODE_VOID)
14f9c5c9 7515 return 0;
7d93a1e0 7516 else if (type1->name () == NULL && type0->name () != NULL)
4c4b4cd2 7517 return 1;
ad82864c 7518 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7519 return 1;
4c4b4cd2 7520 else if (ada_is_array_descriptor_type (type0)
dda83cd7 7521 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7522 return 1;
aeb5907d
JB
7523 else
7524 {
7d93a1e0
SM
7525 const char *type0_name = type0->name ();
7526 const char *type1_name = type1->name ();
aeb5907d
JB
7527
7528 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7529 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7530 return 1;
7531 }
14f9c5c9
AS
7532 return 0;
7533}
7534
e86ca25f
TT
7535/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7536 null. */
4c4b4cd2 7537
0d5cff50 7538const char *
d2e4a39e 7539ada_type_name (struct type *type)
14f9c5c9 7540{
d2e4a39e 7541 if (type == NULL)
14f9c5c9 7542 return NULL;
7d93a1e0 7543 return type->name ();
14f9c5c9
AS
7544}
7545
b4ba55a1
JB
7546/* Search the list of "descriptive" types associated to TYPE for a type
7547 whose name is NAME. */
7548
7549static struct type *
7550find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7551{
931e5bc3 7552 struct type *result, *tmp;
b4ba55a1 7553
c6044dd1
JB
7554 if (ada_ignore_descriptive_types_p)
7555 return NULL;
7556
b4ba55a1
JB
7557 /* If there no descriptive-type info, then there is no parallel type
7558 to be found. */
7559 if (!HAVE_GNAT_AUX_INFO (type))
7560 return NULL;
7561
7562 result = TYPE_DESCRIPTIVE_TYPE (type);
7563 while (result != NULL)
7564 {
0d5cff50 7565 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7566
7567 if (result_name == NULL)
dda83cd7
SM
7568 {
7569 warning (_("unexpected null name on descriptive type"));
7570 return NULL;
7571 }
b4ba55a1
JB
7572
7573 /* If the names match, stop. */
7574 if (strcmp (result_name, name) == 0)
7575 break;
7576
7577 /* Otherwise, look at the next item on the list, if any. */
7578 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7579 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7580 else
7581 tmp = NULL;
7582
7583 /* If not found either, try after having resolved the typedef. */
7584 if (tmp != NULL)
7585 result = tmp;
b4ba55a1 7586 else
931e5bc3 7587 {
f168693b 7588 result = check_typedef (result);
931e5bc3
JG
7589 if (HAVE_GNAT_AUX_INFO (result))
7590 result = TYPE_DESCRIPTIVE_TYPE (result);
7591 else
7592 result = NULL;
7593 }
b4ba55a1
JB
7594 }
7595
7596 /* If we didn't find a match, see whether this is a packed array. With
7597 older compilers, the descriptive type information is either absent or
7598 irrelevant when it comes to packed arrays so the above lookup fails.
7599 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7600 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7601 return ada_find_any_type (name);
7602
7603 return result;
7604}
7605
7606/* Find a parallel type to TYPE with the specified NAME, using the
7607 descriptive type taken from the debugging information, if available,
7608 and otherwise using the (slower) name-based method. */
7609
7610static struct type *
7611ada_find_parallel_type_with_name (struct type *type, const char *name)
7612{
7613 struct type *result = NULL;
7614
7615 if (HAVE_GNAT_AUX_INFO (type))
7616 result = find_parallel_type_by_descriptive_type (type, name);
7617 else
7618 result = ada_find_any_type (name);
7619
7620 return result;
7621}
7622
7623/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7624 SUFFIX to the name of TYPE. */
14f9c5c9 7625
d2e4a39e 7626struct type *
ebf56fd3 7627ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7628{
0d5cff50 7629 char *name;
fe978cb0 7630 const char *type_name = ada_type_name (type);
14f9c5c9 7631 int len;
d2e4a39e 7632
fe978cb0 7633 if (type_name == NULL)
14f9c5c9
AS
7634 return NULL;
7635
fe978cb0 7636 len = strlen (type_name);
14f9c5c9 7637
b4ba55a1 7638 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7639
fe978cb0 7640 strcpy (name, type_name);
14f9c5c9
AS
7641 strcpy (name + len, suffix);
7642
b4ba55a1 7643 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7644}
7645
14f9c5c9 7646/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7647 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7648
d2e4a39e
AS
7649static struct type *
7650dynamic_template_type (struct type *type)
14f9c5c9 7651{
61ee279c 7652 type = ada_check_typedef (type);
14f9c5c9 7653
78134374 7654 if (type == NULL || type->code () != TYPE_CODE_STRUCT
d2e4a39e 7655 || ada_type_name (type) == NULL)
14f9c5c9 7656 return NULL;
d2e4a39e 7657 else
14f9c5c9
AS
7658 {
7659 int len = strlen (ada_type_name (type));
5b4ee69b 7660
4c4b4cd2 7661 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
dda83cd7 7662 return type;
14f9c5c9 7663 else
dda83cd7 7664 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7665 }
7666}
7667
7668/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7669 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7670
d2e4a39e
AS
7671static int
7672is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7673{
7674 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7675
d2e4a39e 7676 return name != NULL
940da03e 7677 && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
14f9c5c9
AS
7678 && strstr (name, "___XVL") != NULL;
7679}
7680
4c4b4cd2
PH
7681/* The index of the variant field of TYPE, or -1 if TYPE does not
7682 represent a variant record type. */
14f9c5c9 7683
d2e4a39e 7684static int
4c4b4cd2 7685variant_field_index (struct type *type)
14f9c5c9
AS
7686{
7687 int f;
7688
78134374 7689 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
4c4b4cd2
PH
7690 return -1;
7691
1f704f76 7692 for (f = 0; f < type->num_fields (); f += 1)
4c4b4cd2
PH
7693 {
7694 if (ada_is_variant_part (type, f))
dda83cd7 7695 return f;
4c4b4cd2
PH
7696 }
7697 return -1;
14f9c5c9
AS
7698}
7699
4c4b4cd2
PH
7700/* A record type with no fields. */
7701
d2e4a39e 7702static struct type *
fe978cb0 7703empty_record (struct type *templ)
14f9c5c9 7704{
fe978cb0 7705 struct type *type = alloc_type_copy (templ);
5b4ee69b 7706
67607e24 7707 type->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7708 INIT_NONE_SPECIFIC (type);
d0e39ea2 7709 type->set_name ("<empty>");
14f9c5c9
AS
7710 TYPE_LENGTH (type) = 0;
7711 return type;
7712}
7713
7714/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7715 the value of type TYPE at VALADDR or ADDRESS (see comments at
7716 the beginning of this section) VAL according to GNAT conventions.
7717 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7718 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7719 an outer-level type (i.e., as opposed to a branch of a variant.) A
7720 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7721 of the variant.
14f9c5c9 7722
4c4b4cd2
PH
7723 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7724 length are not statically known are discarded. As a consequence,
7725 VALADDR, ADDRESS and DVAL0 are ignored.
7726
7727 NOTE: Limitations: For now, we assume that dynamic fields and
7728 variants occupy whole numbers of bytes. However, they need not be
7729 byte-aligned. */
7730
7731struct type *
10a2c479 7732ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7733 const gdb_byte *valaddr,
dda83cd7
SM
7734 CORE_ADDR address, struct value *dval0,
7735 int keep_dynamic_fields)
14f9c5c9 7736{
d2e4a39e
AS
7737 struct value *mark = value_mark ();
7738 struct value *dval;
7739 struct type *rtype;
14f9c5c9 7740 int nfields, bit_len;
4c4b4cd2 7741 int variant_field;
14f9c5c9 7742 long off;
d94e4f4f 7743 int fld_bit_len;
14f9c5c9
AS
7744 int f;
7745
4c4b4cd2
PH
7746 /* Compute the number of fields in this record type that are going
7747 to be processed: unless keep_dynamic_fields, this includes only
7748 fields whose position and length are static will be processed. */
7749 if (keep_dynamic_fields)
1f704f76 7750 nfields = type->num_fields ();
4c4b4cd2
PH
7751 else
7752 {
7753 nfields = 0;
1f704f76 7754 while (nfields < type->num_fields ()
dda83cd7
SM
7755 && !ada_is_variant_part (type, nfields)
7756 && !is_dynamic_field (type, nfields))
7757 nfields++;
4c4b4cd2
PH
7758 }
7759
e9bb382b 7760 rtype = alloc_type_copy (type);
67607e24 7761 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7762 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 7763 rtype->set_num_fields (nfields);
3cabb6b0
SM
7764 rtype->set_fields
7765 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
d0e39ea2 7766 rtype->set_name (ada_type_name (type));
9cdd0d12 7767 rtype->set_is_fixed_instance (true);
14f9c5c9 7768
d2e4a39e
AS
7769 off = 0;
7770 bit_len = 0;
4c4b4cd2
PH
7771 variant_field = -1;
7772
14f9c5c9
AS
7773 for (f = 0; f < nfields; f += 1)
7774 {
a89febbd 7775 off = align_up (off, field_alignment (type, f))
6c038f32 7776 + TYPE_FIELD_BITPOS (type, f);
ceacbf6e 7777 SET_FIELD_BITPOS (rtype->field (f), off);
d2e4a39e 7778 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7779
d2e4a39e 7780 if (ada_is_variant_part (type, f))
dda83cd7
SM
7781 {
7782 variant_field = f;
7783 fld_bit_len = 0;
7784 }
14f9c5c9 7785 else if (is_dynamic_field (type, f))
dda83cd7 7786 {
284614f0
JB
7787 const gdb_byte *field_valaddr = valaddr;
7788 CORE_ADDR field_address = address;
7789 struct type *field_type =
940da03e 7790 TYPE_TARGET_TYPE (type->field (f).type ());
284614f0 7791
dda83cd7 7792 if (dval0 == NULL)
b5304971
JG
7793 {
7794 /* rtype's length is computed based on the run-time
7795 value of discriminants. If the discriminants are not
7796 initialized, the type size may be completely bogus and
0963b4bd 7797 GDB may fail to allocate a value for it. So check the
b5304971 7798 size first before creating the value. */
c1b5a1a6 7799 ada_ensure_varsize_limit (rtype);
012370f6
TT
7800 /* Using plain value_from_contents_and_address here
7801 causes problems because we will end up trying to
7802 resolve a type that is currently being
7803 constructed. */
7804 dval = value_from_contents_and_address_unresolved (rtype,
7805 valaddr,
7806 address);
9f1f738a 7807 rtype = value_type (dval);
b5304971 7808 }
dda83cd7
SM
7809 else
7810 dval = dval0;
4c4b4cd2 7811
284614f0
JB
7812 /* If the type referenced by this field is an aligner type, we need
7813 to unwrap that aligner type, because its size might not be set.
7814 Keeping the aligner type would cause us to compute the wrong
7815 size for this field, impacting the offset of the all the fields
7816 that follow this one. */
7817 if (ada_is_aligner_type (field_type))
7818 {
7819 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7820
7821 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7822 field_address = cond_offset_target (field_address, field_offset);
7823 field_type = ada_aligned_type (field_type);
7824 }
7825
7826 field_valaddr = cond_offset_host (field_valaddr,
7827 off / TARGET_CHAR_BIT);
7828 field_address = cond_offset_target (field_address,
7829 off / TARGET_CHAR_BIT);
7830
7831 /* Get the fixed type of the field. Note that, in this case,
7832 we do not want to get the real type out of the tag: if
7833 the current field is the parent part of a tagged record,
7834 we will get the tag of the object. Clearly wrong: the real
7835 type of the parent is not the real type of the child. We
7836 would end up in an infinite loop. */
7837 field_type = ada_get_base_type (field_type);
7838 field_type = ada_to_fixed_type (field_type, field_valaddr,
7839 field_address, dval, 0);
27f2a97b
JB
7840 /* If the field size is already larger than the maximum
7841 object size, then the record itself will necessarily
7842 be larger than the maximum object size. We need to make
7843 this check now, because the size might be so ridiculously
7844 large (due to an uninitialized variable in the inferior)
7845 that it would cause an overflow when adding it to the
7846 record size. */
c1b5a1a6 7847 ada_ensure_varsize_limit (field_type);
284614f0 7848
5d14b6e5 7849 rtype->field (f).set_type (field_type);
dda83cd7 7850 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7851 /* The multiplication can potentially overflow. But because
7852 the field length has been size-checked just above, and
7853 assuming that the maximum size is a reasonable value,
7854 an overflow should not happen in practice. So rather than
7855 adding overflow recovery code to this already complex code,
7856 we just assume that it's not going to happen. */
dda83cd7
SM
7857 fld_bit_len =
7858 TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7859 }
14f9c5c9 7860 else
dda83cd7 7861 {
5ded5331
JB
7862 /* Note: If this field's type is a typedef, it is important
7863 to preserve the typedef layer.
7864
7865 Otherwise, we might be transforming a typedef to a fat
7866 pointer (encoding a pointer to an unconstrained array),
7867 into a basic fat pointer (encoding an unconstrained
7868 array). As both types are implemented using the same
7869 structure, the typedef is the only clue which allows us
7870 to distinguish between the two options. Stripping it
7871 would prevent us from printing this field appropriately. */
dda83cd7
SM
7872 rtype->field (f).set_type (type->field (f).type ());
7873 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7874 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7875 fld_bit_len =
7876 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7877 else
5ded5331 7878 {
940da03e 7879 struct type *field_type = type->field (f).type ();
5ded5331
JB
7880
7881 /* We need to be careful of typedefs when computing
7882 the length of our field. If this is a typedef,
7883 get the length of the target type, not the length
7884 of the typedef. */
78134374 7885 if (field_type->code () == TYPE_CODE_TYPEDEF)
5ded5331
JB
7886 field_type = ada_typedef_target_type (field_type);
7887
dda83cd7
SM
7888 fld_bit_len =
7889 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
5ded5331 7890 }
dda83cd7 7891 }
14f9c5c9 7892 if (off + fld_bit_len > bit_len)
dda83cd7 7893 bit_len = off + fld_bit_len;
d94e4f4f 7894 off += fld_bit_len;
4c4b4cd2 7895 TYPE_LENGTH (rtype) =
dda83cd7 7896 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7897 }
4c4b4cd2
PH
7898
7899 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7900 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7901 the record. This can happen in the presence of representation
7902 clauses. */
7903 if (variant_field >= 0)
7904 {
7905 struct type *branch_type;
7906
7907 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7908
7909 if (dval0 == NULL)
9f1f738a 7910 {
012370f6
TT
7911 /* Using plain value_from_contents_and_address here causes
7912 problems because we will end up trying to resolve a type
7913 that is currently being constructed. */
7914 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7915 address);
9f1f738a
SA
7916 rtype = value_type (dval);
7917 }
4c4b4cd2 7918 else
dda83cd7 7919 dval = dval0;
4c4b4cd2
PH
7920
7921 branch_type =
dda83cd7
SM
7922 to_fixed_variant_branch_type
7923 (type->field (variant_field).type (),
7924 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7925 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
4c4b4cd2 7926 if (branch_type == NULL)
dda83cd7
SM
7927 {
7928 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7929 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 7930 rtype->set_num_fields (rtype->num_fields () - 1);
dda83cd7 7931 }
4c4b4cd2 7932 else
dda83cd7
SM
7933 {
7934 rtype->field (variant_field).set_type (branch_type);
7935 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7936 fld_bit_len =
7937 TYPE_LENGTH (rtype->field (variant_field).type ()) *
7938 TARGET_CHAR_BIT;
7939 if (off + fld_bit_len > bit_len)
7940 bit_len = off + fld_bit_len;
7941 TYPE_LENGTH (rtype) =
7942 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7943 }
4c4b4cd2
PH
7944 }
7945
714e53ab
PH
7946 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7947 should contain the alignment of that record, which should be a strictly
7948 positive value. If null or negative, then something is wrong, most
7949 probably in the debug info. In that case, we don't round up the size
0963b4bd 7950 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7951 the current RTYPE length might be good enough for our purposes. */
7952 if (TYPE_LENGTH (type) <= 0)
7953 {
7d93a1e0 7954 if (rtype->name ())
cc1defb1 7955 warning (_("Invalid type size for `%s' detected: %s."),
7d93a1e0 7956 rtype->name (), pulongest (TYPE_LENGTH (type)));
323e0a4a 7957 else
cc1defb1
KS
7958 warning (_("Invalid type size for <unnamed> detected: %s."),
7959 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
7960 }
7961 else
7962 {
a89febbd
TT
7963 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
7964 TYPE_LENGTH (type));
714e53ab 7965 }
14f9c5c9
AS
7966
7967 value_free_to_mark (mark);
d2e4a39e 7968 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7969 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7970 return rtype;
7971}
7972
4c4b4cd2
PH
7973/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7974 of 1. */
14f9c5c9 7975
d2e4a39e 7976static struct type *
fc1a4b47 7977template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 7978 CORE_ADDR address, struct value *dval0)
4c4b4cd2
PH
7979{
7980 return ada_template_to_fixed_record_type_1 (type, valaddr,
dda83cd7 7981 address, dval0, 1);
4c4b4cd2
PH
7982}
7983
7984/* An ordinary record type in which ___XVL-convention fields and
7985 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7986 static approximations, containing all possible fields. Uses
7987 no runtime values. Useless for use in values, but that's OK,
7988 since the results are used only for type determinations. Works on both
7989 structs and unions. Representation note: to save space, we memorize
7990 the result of this function in the TYPE_TARGET_TYPE of the
7991 template type. */
7992
7993static struct type *
7994template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7995{
7996 struct type *type;
7997 int nfields;
7998 int f;
7999
9e195661 8000 /* No need no do anything if the input type is already fixed. */
22c4c60c 8001 if (type0->is_fixed_instance ())
9e195661
PMR
8002 return type0;
8003
8004 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8005 if (TYPE_TARGET_TYPE (type0) != NULL)
8006 return TYPE_TARGET_TYPE (type0);
8007
9e195661 8008 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8009 type = type0;
1f704f76 8010 nfields = type0->num_fields ();
9e195661
PMR
8011
8012 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8013 recompute all over next time. */
8014 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8015
8016 for (f = 0; f < nfields; f += 1)
8017 {
940da03e 8018 struct type *field_type = type0->field (f).type ();
4c4b4cd2 8019 struct type *new_type;
14f9c5c9 8020
4c4b4cd2 8021 if (is_dynamic_field (type0, f))
460efde1
JB
8022 {
8023 field_type = ada_check_typedef (field_type);
dda83cd7 8024 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
460efde1 8025 }
14f9c5c9 8026 else
dda83cd7 8027 new_type = static_unwrap_type (field_type);
9e195661
PMR
8028
8029 if (new_type != field_type)
8030 {
8031 /* Clone TYPE0 only the first time we get a new field type. */
8032 if (type == type0)
8033 {
8034 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
78134374 8035 type->set_code (type0->code ());
8ecb59f8 8036 INIT_NONE_SPECIFIC (type);
5e33d5f4 8037 type->set_num_fields (nfields);
3cabb6b0
SM
8038
8039 field *fields =
8040 ((struct field *)
8041 TYPE_ALLOC (type, nfields * sizeof (struct field)));
80fc5e77 8042 memcpy (fields, type0->fields (),
9e195661 8043 sizeof (struct field) * nfields);
3cabb6b0
SM
8044 type->set_fields (fields);
8045
d0e39ea2 8046 type->set_name (ada_type_name (type0));
9cdd0d12 8047 type->set_is_fixed_instance (true);
9e195661
PMR
8048 TYPE_LENGTH (type) = 0;
8049 }
5d14b6e5 8050 type->field (f).set_type (new_type);
9e195661
PMR
8051 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8052 }
14f9c5c9 8053 }
9e195661 8054
14f9c5c9
AS
8055 return type;
8056}
8057
4c4b4cd2 8058/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8059 whose address in memory is ADDRESS, returns a revision of TYPE,
8060 which should be a non-dynamic-sized record, in which the variant
8061 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8062 for discriminant values in DVAL0, which can be NULL if the record
8063 contains the necessary discriminant values. */
8064
d2e4a39e 8065static struct type *
fc1a4b47 8066to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
dda83cd7 8067 CORE_ADDR address, struct value *dval0)
14f9c5c9 8068{
d2e4a39e 8069 struct value *mark = value_mark ();
4c4b4cd2 8070 struct value *dval;
d2e4a39e 8071 struct type *rtype;
14f9c5c9 8072 struct type *branch_type;
1f704f76 8073 int nfields = type->num_fields ();
4c4b4cd2 8074 int variant_field = variant_field_index (type);
14f9c5c9 8075
4c4b4cd2 8076 if (variant_field == -1)
14f9c5c9
AS
8077 return type;
8078
4c4b4cd2 8079 if (dval0 == NULL)
9f1f738a
SA
8080 {
8081 dval = value_from_contents_and_address (type, valaddr, address);
8082 type = value_type (dval);
8083 }
4c4b4cd2
PH
8084 else
8085 dval = dval0;
8086
e9bb382b 8087 rtype = alloc_type_copy (type);
67607e24 8088 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8089 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8090 rtype->set_num_fields (nfields);
3cabb6b0
SM
8091
8092 field *fields =
d2e4a39e 8093 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
80fc5e77 8094 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
3cabb6b0
SM
8095 rtype->set_fields (fields);
8096
d0e39ea2 8097 rtype->set_name (ada_type_name (type));
9cdd0d12 8098 rtype->set_is_fixed_instance (true);
14f9c5c9
AS
8099 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8100
4c4b4cd2 8101 branch_type = to_fixed_variant_branch_type
940da03e 8102 (type->field (variant_field).type (),
d2e4a39e 8103 cond_offset_host (valaddr,
dda83cd7
SM
8104 TYPE_FIELD_BITPOS (type, variant_field)
8105 / TARGET_CHAR_BIT),
d2e4a39e 8106 cond_offset_target (address,
dda83cd7
SM
8107 TYPE_FIELD_BITPOS (type, variant_field)
8108 / TARGET_CHAR_BIT), dval);
d2e4a39e 8109 if (branch_type == NULL)
14f9c5c9 8110 {
4c4b4cd2 8111 int f;
5b4ee69b 8112
4c4b4cd2 8113 for (f = variant_field + 1; f < nfields; f += 1)
dda83cd7 8114 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8115 rtype->set_num_fields (rtype->num_fields () - 1);
14f9c5c9
AS
8116 }
8117 else
8118 {
5d14b6e5 8119 rtype->field (variant_field).set_type (branch_type);
4c4b4cd2
PH
8120 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8121 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8122 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8123 }
940da03e 8124 TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
d2e4a39e 8125
4c4b4cd2 8126 value_free_to_mark (mark);
14f9c5c9
AS
8127 return rtype;
8128}
8129
8130/* An ordinary record type (with fixed-length fields) that describes
8131 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8132 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8133 should be in DVAL, a record value; it may be NULL if the object
8134 at ADDR itself contains any necessary discriminant values.
8135 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8136 values from the record are needed. Except in the case that DVAL,
8137 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8138 unchecked) is replaced by a particular branch of the variant.
8139
8140 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8141 is questionable and may be removed. It can arise during the
8142 processing of an unconstrained-array-of-record type where all the
8143 variant branches have exactly the same size. This is because in
8144 such cases, the compiler does not bother to use the XVS convention
8145 when encoding the record. I am currently dubious of this
8146 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8147
d2e4a39e 8148static struct type *
fc1a4b47 8149to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
dda83cd7 8150 CORE_ADDR address, struct value *dval)
14f9c5c9 8151{
d2e4a39e 8152 struct type *templ_type;
14f9c5c9 8153
22c4c60c 8154 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8155 return type0;
8156
d2e4a39e 8157 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8158
8159 if (templ_type != NULL)
8160 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8161 else if (variant_field_index (type0) >= 0)
8162 {
8163 if (dval == NULL && valaddr == NULL && address == 0)
dda83cd7 8164 return type0;
4c4b4cd2 8165 return to_record_with_fixed_variant_part (type0, valaddr, address,
dda83cd7 8166 dval);
4c4b4cd2 8167 }
14f9c5c9
AS
8168 else
8169 {
9cdd0d12 8170 type0->set_is_fixed_instance (true);
14f9c5c9
AS
8171 return type0;
8172 }
8173
8174}
8175
8176/* An ordinary record type (with fixed-length fields) that describes
8177 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8178 union type. Any necessary discriminants' values should be in DVAL,
8179 a record value. That is, this routine selects the appropriate
8180 branch of the union at ADDR according to the discriminant value
b1f33ddd 8181 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8182 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8183
d2e4a39e 8184static struct type *
fc1a4b47 8185to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
dda83cd7 8186 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8187{
8188 int which;
d2e4a39e
AS
8189 struct type *templ_type;
8190 struct type *var_type;
14f9c5c9 8191
78134374 8192 if (var_type0->code () == TYPE_CODE_PTR)
14f9c5c9 8193 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8194 else
14f9c5c9
AS
8195 var_type = var_type0;
8196
8197 templ_type = ada_find_parallel_type (var_type, "___XVU");
8198
8199 if (templ_type != NULL)
8200 var_type = templ_type;
8201
b1f33ddd
JB
8202 if (is_unchecked_variant (var_type, value_type (dval)))
8203 return var_type0;
d8af9068 8204 which = ada_which_variant_applies (var_type, dval);
14f9c5c9
AS
8205
8206 if (which < 0)
e9bb382b 8207 return empty_record (var_type);
14f9c5c9 8208 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8209 return to_fixed_record_type
940da03e 8210 (TYPE_TARGET_TYPE (var_type->field (which).type ()),
d2e4a39e 8211 valaddr, address, dval);
940da03e 8212 else if (variant_field_index (var_type->field (which).type ()) >= 0)
d2e4a39e
AS
8213 return
8214 to_fixed_record_type
940da03e 8215 (var_type->field (which).type (), valaddr, address, dval);
14f9c5c9 8216 else
940da03e 8217 return var_type->field (which).type ();
14f9c5c9
AS
8218}
8219
8908fca5
JB
8220/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8221 ENCODING_TYPE, a type following the GNAT conventions for discrete
8222 type encodings, only carries redundant information. */
8223
8224static int
8225ada_is_redundant_range_encoding (struct type *range_type,
8226 struct type *encoding_type)
8227{
108d56a4 8228 const char *bounds_str;
8908fca5
JB
8229 int n;
8230 LONGEST lo, hi;
8231
78134374 8232 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8908fca5 8233
78134374
SM
8234 if (get_base_type (range_type)->code ()
8235 != get_base_type (encoding_type)->code ())
005e2509
JB
8236 {
8237 /* The compiler probably used a simple base type to describe
8238 the range type instead of the range's actual base type,
8239 expecting us to get the real base type from the encoding
8240 anyway. In this situation, the encoding cannot be ignored
8241 as redundant. */
8242 return 0;
8243 }
8244
8908fca5
JB
8245 if (is_dynamic_type (range_type))
8246 return 0;
8247
7d93a1e0 8248 if (encoding_type->name () == NULL)
8908fca5
JB
8249 return 0;
8250
7d93a1e0 8251 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8908fca5
JB
8252 if (bounds_str == NULL)
8253 return 0;
8254
8255 n = 8; /* Skip "___XDLU_". */
8256 if (!ada_scan_number (bounds_str, n, &lo, &n))
8257 return 0;
5537ddd0 8258 if (range_type->bounds ()->low.const_val () != lo)
8908fca5
JB
8259 return 0;
8260
8261 n += 2; /* Skip the "__" separator between the two bounds. */
8262 if (!ada_scan_number (bounds_str, n, &hi, &n))
8263 return 0;
5537ddd0 8264 if (range_type->bounds ()->high.const_val () != hi)
8908fca5
JB
8265 return 0;
8266
8267 return 1;
8268}
8269
8270/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8271 a type following the GNAT encoding for describing array type
8272 indices, only carries redundant information. */
8273
8274static int
8275ada_is_redundant_index_type_desc (struct type *array_type,
8276 struct type *desc_type)
8277{
8278 struct type *this_layer = check_typedef (array_type);
8279 int i;
8280
1f704f76 8281 for (i = 0; i < desc_type->num_fields (); i++)
8908fca5 8282 {
3d967001 8283 if (!ada_is_redundant_range_encoding (this_layer->index_type (),
940da03e 8284 desc_type->field (i).type ()))
8908fca5
JB
8285 return 0;
8286 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8287 }
8288
8289 return 1;
8290}
8291
14f9c5c9
AS
8292/* Assuming that TYPE0 is an array type describing the type of a value
8293 at ADDR, and that DVAL describes a record containing any
8294 discriminants used in TYPE0, returns a type for the value that
8295 contains no dynamic components (that is, no components whose sizes
8296 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8297 true, gives an error message if the resulting type's size is over
4c4b4cd2 8298 varsize_limit. */
14f9c5c9 8299
d2e4a39e
AS
8300static struct type *
8301to_fixed_array_type (struct type *type0, struct value *dval,
dda83cd7 8302 int ignore_too_big)
14f9c5c9 8303{
d2e4a39e
AS
8304 struct type *index_type_desc;
8305 struct type *result;
ad82864c 8306 int constrained_packed_array_p;
931e5bc3 8307 static const char *xa_suffix = "___XA";
14f9c5c9 8308
b0dd7688 8309 type0 = ada_check_typedef (type0);
22c4c60c 8310 if (type0->is_fixed_instance ())
4c4b4cd2 8311 return type0;
14f9c5c9 8312
ad82864c
JB
8313 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8314 if (constrained_packed_array_p)
75fd6a26
TT
8315 {
8316 type0 = decode_constrained_packed_array_type (type0);
8317 if (type0 == nullptr)
8318 error (_("could not decode constrained packed array type"));
8319 }
284614f0 8320
931e5bc3
JG
8321 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8322
8323 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8324 encoding suffixed with 'P' may still be generated. If so,
8325 it should be used to find the XA type. */
8326
8327 if (index_type_desc == NULL)
8328 {
1da0522e 8329 const char *type_name = ada_type_name (type0);
931e5bc3 8330
1da0522e 8331 if (type_name != NULL)
931e5bc3 8332 {
1da0522e 8333 const int len = strlen (type_name);
931e5bc3
JG
8334 char *name = (char *) alloca (len + strlen (xa_suffix));
8335
1da0522e 8336 if (type_name[len - 1] == 'P')
931e5bc3 8337 {
1da0522e 8338 strcpy (name, type_name);
931e5bc3
JG
8339 strcpy (name + len - 1, xa_suffix);
8340 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8341 }
8342 }
8343 }
8344
28c85d6c 8345 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8346 if (index_type_desc != NULL
8347 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8348 {
8349 /* Ignore this ___XA parallel type, as it does not bring any
8350 useful information. This allows us to avoid creating fixed
8351 versions of the array's index types, which would be identical
8352 to the original ones. This, in turn, can also help avoid
8353 the creation of fixed versions of the array itself. */
8354 index_type_desc = NULL;
8355 }
8356
14f9c5c9
AS
8357 if (index_type_desc == NULL)
8358 {
61ee279c 8359 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8360
14f9c5c9 8361 /* NOTE: elt_type---the fixed version of elt_type0---should never
dda83cd7
SM
8362 depend on the contents of the array in properly constructed
8363 debugging data. */
529cad9c 8364 /* Create a fixed version of the array element type.
dda83cd7
SM
8365 We're not providing the address of an element here,
8366 and thus the actual object value cannot be inspected to do
8367 the conversion. This should not be a problem, since arrays of
8368 unconstrained objects are not allowed. In particular, all
8369 the elements of an array of a tagged type should all be of
8370 the same type specified in the debugging info. No need to
8371 consult the object tag. */
1ed6ede0 8372 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8373
284614f0
JB
8374 /* Make sure we always create a new array type when dealing with
8375 packed array types, since we're going to fix-up the array
8376 type length and element bitsize a little further down. */
ad82864c 8377 if (elt_type0 == elt_type && !constrained_packed_array_p)
dda83cd7 8378 result = type0;
14f9c5c9 8379 else
dda83cd7
SM
8380 result = create_array_type (alloc_type_copy (type0),
8381 elt_type, type0->index_type ());
14f9c5c9
AS
8382 }
8383 else
8384 {
8385 int i;
8386 struct type *elt_type0;
8387
8388 elt_type0 = type0;
1f704f76 8389 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
dda83cd7 8390 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8391
8392 /* NOTE: result---the fixed version of elt_type0---should never
dda83cd7
SM
8393 depend on the contents of the array in properly constructed
8394 debugging data. */
529cad9c 8395 /* Create a fixed version of the array element type.
dda83cd7
SM
8396 We're not providing the address of an element here,
8397 and thus the actual object value cannot be inspected to do
8398 the conversion. This should not be a problem, since arrays of
8399 unconstrained objects are not allowed. In particular, all
8400 the elements of an array of a tagged type should all be of
8401 the same type specified in the debugging info. No need to
8402 consult the object tag. */
1ed6ede0 8403 result =
dda83cd7 8404 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8405
8406 elt_type0 = type0;
1f704f76 8407 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
dda83cd7
SM
8408 {
8409 struct type *range_type =
8410 to_fixed_range_type (index_type_desc->field (i).type (), dval);
5b4ee69b 8411
dda83cd7
SM
8412 result = create_array_type (alloc_type_copy (elt_type0),
8413 result, range_type);
1ce677a4 8414 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
dda83cd7 8415 }
d2e4a39e 8416 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
dda83cd7 8417 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8418 }
8419
2e6fda7d
JB
8420 /* We want to preserve the type name. This can be useful when
8421 trying to get the type name of a value that has already been
8422 printed (for instance, if the user did "print VAR; whatis $". */
7d93a1e0 8423 result->set_name (type0->name ());
2e6fda7d 8424
ad82864c 8425 if (constrained_packed_array_p)
284614f0
JB
8426 {
8427 /* So far, the resulting type has been created as if the original
8428 type was a regular (non-packed) array type. As a result, the
8429 bitsize of the array elements needs to be set again, and the array
8430 length needs to be recomputed based on that bitsize. */
8431 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8432 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8433
8434 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8435 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8436 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
dda83cd7 8437 TYPE_LENGTH (result)++;
284614f0
JB
8438 }
8439
9cdd0d12 8440 result->set_is_fixed_instance (true);
14f9c5c9 8441 return result;
d2e4a39e 8442}
14f9c5c9
AS
8443
8444
8445/* A standard type (containing no dynamically sized components)
8446 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8447 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8448 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8449 ADDRESS or in VALADDR contains these discriminants.
8450
1ed6ede0
JB
8451 If CHECK_TAG is not null, in the case of tagged types, this function
8452 attempts to locate the object's tag and use it to compute the actual
8453 type. However, when ADDRESS is null, we cannot use it to determine the
8454 location of the tag, and therefore compute the tagged type's actual type.
8455 So we return the tagged type without consulting the tag. */
529cad9c 8456
f192137b
JB
8457static struct type *
8458ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
dda83cd7 8459 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8460{
61ee279c 8461 type = ada_check_typedef (type);
8ecb59f8
TT
8462
8463 /* Only un-fixed types need to be handled here. */
8464 if (!HAVE_GNAT_AUX_INFO (type))
8465 return type;
8466
78134374 8467 switch (type->code ())
d2e4a39e
AS
8468 {
8469 default:
14f9c5c9 8470 return type;
d2e4a39e 8471 case TYPE_CODE_STRUCT:
4c4b4cd2 8472 {
dda83cd7
SM
8473 struct type *static_type = to_static_fixed_type (type);
8474 struct type *fixed_record_type =
8475 to_fixed_record_type (type, valaddr, address, NULL);
8476
8477 /* If STATIC_TYPE is a tagged type and we know the object's address,
8478 then we can determine its tag, and compute the object's actual
8479 type from there. Note that we have to use the fixed record
8480 type (the parent part of the record may have dynamic fields
8481 and the way the location of _tag is expressed may depend on
8482 them). */
8483
8484 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8485 {
b50d69b5
JG
8486 struct value *tag =
8487 value_tag_from_contents_and_address
8488 (fixed_record_type,
8489 valaddr,
8490 address);
8491 struct type *real_type = type_from_tag (tag);
8492 struct value *obj =
8493 value_from_contents_and_address (fixed_record_type,
8494 valaddr,
8495 address);
dda83cd7
SM
8496 fixed_record_type = value_type (obj);
8497 if (real_type != NULL)
8498 return to_fixed_record_type
b50d69b5
JG
8499 (real_type, NULL,
8500 value_address (ada_tag_value_at_base_address (obj)), NULL);
dda83cd7
SM
8501 }
8502
8503 /* Check to see if there is a parallel ___XVZ variable.
8504 If there is, then it provides the actual size of our type. */
8505 else if (ada_type_name (fixed_record_type) != NULL)
8506 {
8507 const char *name = ada_type_name (fixed_record_type);
8508 char *xvz_name
224c3ddb 8509 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 8510 bool xvz_found = false;
dda83cd7 8511 LONGEST size;
4af88198 8512
dda83cd7 8513 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 8514 try
eccab96d
JB
8515 {
8516 xvz_found = get_int_var_value (xvz_name, size);
8517 }
230d2906 8518 catch (const gdb_exception_error &except)
eccab96d
JB
8519 {
8520 /* We found the variable, but somehow failed to read
8521 its value. Rethrow the same error, but with a little
8522 bit more information, to help the user understand
8523 what went wrong (Eg: the variable might have been
8524 optimized out). */
8525 throw_error (except.error,
8526 _("unable to read value of %s (%s)"),
3d6e9d23 8527 xvz_name, except.what ());
eccab96d 8528 }
eccab96d 8529
dda83cd7
SM
8530 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8531 {
8532 fixed_record_type = copy_type (fixed_record_type);
8533 TYPE_LENGTH (fixed_record_type) = size;
8534
8535 /* The FIXED_RECORD_TYPE may have be a stub. We have
8536 observed this when the debugging info is STABS, and
8537 apparently it is something that is hard to fix.
8538
8539 In practice, we don't need the actual type definition
8540 at all, because the presence of the XVZ variable allows us
8541 to assume that there must be a XVS type as well, which we
8542 should be able to use later, when we need the actual type
8543 definition.
8544
8545 In the meantime, pretend that the "fixed" type we are
8546 returning is NOT a stub, because this can cause trouble
8547 when using this type to create new types targeting it.
8548 Indeed, the associated creation routines often check
8549 whether the target type is a stub and will try to replace
8550 it, thus using a type with the wrong size. This, in turn,
8551 might cause the new type to have the wrong size too.
8552 Consider the case of an array, for instance, where the size
8553 of the array is computed from the number of elements in
8554 our array multiplied by the size of its element. */
b4b73759 8555 fixed_record_type->set_is_stub (false);
dda83cd7
SM
8556 }
8557 }
8558 return fixed_record_type;
4c4b4cd2 8559 }
d2e4a39e 8560 case TYPE_CODE_ARRAY:
4c4b4cd2 8561 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8562 case TYPE_CODE_UNION:
8563 if (dval == NULL)
dda83cd7 8564 return type;
d2e4a39e 8565 else
dda83cd7 8566 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8567 }
14f9c5c9
AS
8568}
8569
f192137b
JB
8570/* The same as ada_to_fixed_type_1, except that it preserves the type
8571 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8572
8573 The typedef layer needs be preserved in order to differentiate between
8574 arrays and array pointers when both types are implemented using the same
8575 fat pointer. In the array pointer case, the pointer is encoded as
8576 a typedef of the pointer type. For instance, considering:
8577
8578 type String_Access is access String;
8579 S1 : String_Access := null;
8580
8581 To the debugger, S1 is defined as a typedef of type String. But
8582 to the user, it is a pointer. So if the user tries to print S1,
8583 we should not dereference the array, but print the array address
8584 instead.
8585
8586 If we didn't preserve the typedef layer, we would lose the fact that
8587 the type is to be presented as a pointer (needs de-reference before
8588 being printed). And we would also use the source-level type name. */
f192137b
JB
8589
8590struct type *
8591ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 8592 CORE_ADDR address, struct value *dval, int check_tag)
f192137b
JB
8593
8594{
8595 struct type *fixed_type =
8596 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8597
96dbd2c1
JB
8598 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8599 then preserve the typedef layer.
8600
8601 Implementation note: We can only check the main-type portion of
8602 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8603 from TYPE now returns a type that has the same instance flags
8604 as TYPE. For instance, if TYPE is a "typedef const", and its
8605 target type is a "struct", then the typedef elimination will return
8606 a "const" version of the target type. See check_typedef for more
8607 details about how the typedef layer elimination is done.
8608
8609 brobecker/2010-11-19: It seems to me that the only case where it is
8610 useful to preserve the typedef layer is when dealing with fat pointers.
8611 Perhaps, we could add a check for that and preserve the typedef layer
85102364 8612 only in that situation. But this seems unnecessary so far, probably
96dbd2c1
JB
8613 because we call check_typedef/ada_check_typedef pretty much everywhere.
8614 */
78134374 8615 if (type->code () == TYPE_CODE_TYPEDEF
720d1a40 8616 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8617 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8618 return type;
8619
8620 return fixed_type;
8621}
8622
14f9c5c9 8623/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8624 TYPE0, but based on no runtime data. */
14f9c5c9 8625
d2e4a39e
AS
8626static struct type *
8627to_static_fixed_type (struct type *type0)
14f9c5c9 8628{
d2e4a39e 8629 struct type *type;
14f9c5c9
AS
8630
8631 if (type0 == NULL)
8632 return NULL;
8633
22c4c60c 8634 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8635 return type0;
8636
61ee279c 8637 type0 = ada_check_typedef (type0);
d2e4a39e 8638
78134374 8639 switch (type0->code ())
14f9c5c9
AS
8640 {
8641 default:
8642 return type0;
8643 case TYPE_CODE_STRUCT:
8644 type = dynamic_template_type (type0);
d2e4a39e 8645 if (type != NULL)
dda83cd7 8646 return template_to_static_fixed_type (type);
4c4b4cd2 8647 else
dda83cd7 8648 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8649 case TYPE_CODE_UNION:
8650 type = ada_find_parallel_type (type0, "___XVU");
8651 if (type != NULL)
dda83cd7 8652 return template_to_static_fixed_type (type);
4c4b4cd2 8653 else
dda83cd7 8654 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8655 }
8656}
8657
4c4b4cd2
PH
8658/* A static approximation of TYPE with all type wrappers removed. */
8659
d2e4a39e
AS
8660static struct type *
8661static_unwrap_type (struct type *type)
14f9c5c9
AS
8662{
8663 if (ada_is_aligner_type (type))
8664 {
940da03e 8665 struct type *type1 = ada_check_typedef (type)->field (0).type ();
14f9c5c9 8666 if (ada_type_name (type1) == NULL)
d0e39ea2 8667 type1->set_name (ada_type_name (type));
14f9c5c9
AS
8668
8669 return static_unwrap_type (type1);
8670 }
d2e4a39e 8671 else
14f9c5c9 8672 {
d2e4a39e 8673 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8674
d2e4a39e 8675 if (raw_real_type == type)
dda83cd7 8676 return type;
14f9c5c9 8677 else
dda83cd7 8678 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8679 }
8680}
8681
8682/* In some cases, incomplete and private types require
4c4b4cd2 8683 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8684 type Foo;
8685 type FooP is access Foo;
8686 V: FooP;
8687 type Foo is array ...;
4c4b4cd2 8688 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8689 cross-references to such types, we instead substitute for FooP a
8690 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8691 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8692
8693/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8694 exists, otherwise TYPE. */
8695
d2e4a39e 8696struct type *
61ee279c 8697ada_check_typedef (struct type *type)
14f9c5c9 8698{
727e3d2e
JB
8699 if (type == NULL)
8700 return NULL;
8701
736ade86
XR
8702 /* If our type is an access to an unconstrained array, which is encoded
8703 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
8704 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8705 what allows us to distinguish between fat pointers that represent
8706 array types, and fat pointers that represent array access types
8707 (in both cases, the compiler implements them as fat pointers). */
736ade86 8708 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
8709 return type;
8710
f168693b 8711 type = check_typedef (type);
78134374 8712 if (type == NULL || type->code () != TYPE_CODE_ENUM
e46d3488 8713 || !type->is_stub ()
7d93a1e0 8714 || type->name () == NULL)
14f9c5c9 8715 return type;
d2e4a39e 8716 else
14f9c5c9 8717 {
7d93a1e0 8718 const char *name = type->name ();
d2e4a39e 8719 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8720
05e522ef 8721 if (type1 == NULL)
dda83cd7 8722 return type;
05e522ef
JB
8723
8724 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8725 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8726 types, only for the typedef-to-array types). If that's the case,
8727 strip the typedef layer. */
78134374 8728 if (type1->code () == TYPE_CODE_TYPEDEF)
3a867c22
JB
8729 type1 = ada_check_typedef (type1);
8730
8731 return type1;
14f9c5c9
AS
8732 }
8733}
8734
8735/* A value representing the data at VALADDR/ADDRESS as described by
8736 type TYPE0, but with a standard (static-sized) type that correctly
8737 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8738 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8739 creation of struct values]. */
14f9c5c9 8740
4c4b4cd2
PH
8741static struct value *
8742ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
dda83cd7 8743 struct value *val0)
14f9c5c9 8744{
1ed6ede0 8745 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8746
14f9c5c9
AS
8747 if (type == type0 && val0 != NULL)
8748 return val0;
cc0e770c
JB
8749
8750 if (VALUE_LVAL (val0) != lval_memory)
8751 {
8752 /* Our value does not live in memory; it could be a convenience
8753 variable, for instance. Create a not_lval value using val0's
8754 contents. */
8755 return value_from_contents (type, value_contents (val0));
8756 }
8757
8758 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
8759}
8760
8761/* A value representing VAL, but with a standard (static-sized) type
8762 that correctly describes it. Does not necessarily create a new
8763 value. */
8764
0c3acc09 8765struct value *
4c4b4cd2
PH
8766ada_to_fixed_value (struct value *val)
8767{
c48db5ca 8768 val = unwrap_value (val);
d8ce9127 8769 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 8770 return val;
14f9c5c9 8771}
d2e4a39e 8772\f
14f9c5c9 8773
14f9c5c9
AS
8774/* Attributes */
8775
4c4b4cd2
PH
8776/* Table mapping attribute numbers to names.
8777 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8778
27087b7f 8779static const char * const attribute_names[] = {
14f9c5c9
AS
8780 "<?>",
8781
d2e4a39e 8782 "first",
14f9c5c9
AS
8783 "last",
8784 "length",
8785 "image",
14f9c5c9
AS
8786 "max",
8787 "min",
4c4b4cd2
PH
8788 "modulus",
8789 "pos",
8790 "size",
8791 "tag",
14f9c5c9 8792 "val",
14f9c5c9
AS
8793 0
8794};
8795
de93309a 8796static const char *
4c4b4cd2 8797ada_attribute_name (enum exp_opcode n)
14f9c5c9 8798{
4c4b4cd2
PH
8799 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8800 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8801 else
8802 return attribute_names[0];
8803}
8804
4c4b4cd2 8805/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8806
4c4b4cd2
PH
8807static LONGEST
8808pos_atr (struct value *arg)
14f9c5c9 8809{
24209737
PH
8810 struct value *val = coerce_ref (arg);
8811 struct type *type = value_type (val);
14f9c5c9 8812
d2e4a39e 8813 if (!discrete_type_p (type))
323e0a4a 8814 error (_("'POS only defined on discrete types"));
14f9c5c9 8815
6244c119
SM
8816 gdb::optional<LONGEST> result = discrete_position (type, value_as_long (val));
8817 if (!result.has_value ())
aa715135 8818 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 8819
6244c119 8820 return *result;
4c4b4cd2
PH
8821}
8822
8823static struct value *
3cb382c9 8824value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8825{
3cb382c9 8826 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8827}
8828
4c4b4cd2 8829/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8830
d2e4a39e 8831static struct value *
53a47a3e 8832val_atr (struct type *type, LONGEST val)
14f9c5c9 8833{
53a47a3e 8834 gdb_assert (discrete_type_p (type));
0bc2354b
TT
8835 if (type->code () == TYPE_CODE_RANGE)
8836 type = TYPE_TARGET_TYPE (type);
78134374 8837 if (type->code () == TYPE_CODE_ENUM)
14f9c5c9 8838 {
53a47a3e 8839 if (val < 0 || val >= type->num_fields ())
dda83cd7 8840 error (_("argument to 'VAL out of range"));
53a47a3e 8841 val = TYPE_FIELD_ENUMVAL (type, val);
14f9c5c9 8842 }
53a47a3e
TT
8843 return value_from_longest (type, val);
8844}
8845
8846static struct value *
3848abd6 8847ada_val_atr (enum noside noside, struct type *type, struct value *arg)
53a47a3e 8848{
3848abd6
TT
8849 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8850 return value_zero (type, not_lval);
8851
53a47a3e
TT
8852 if (!discrete_type_p (type))
8853 error (_("'VAL only defined on discrete types"));
8854 if (!integer_type_p (value_type (arg)))
8855 error (_("'VAL requires integral argument"));
8856
8857 return val_atr (type, value_as_long (arg));
14f9c5c9 8858}
14f9c5c9 8859\f
d2e4a39e 8860
dda83cd7 8861 /* Evaluation */
14f9c5c9 8862
4c4b4cd2
PH
8863/* True if TYPE appears to be an Ada character type.
8864 [At the moment, this is true only for Character and Wide_Character;
8865 It is a heuristic test that could stand improvement]. */
14f9c5c9 8866
fc913e53 8867bool
d2e4a39e 8868ada_is_character_type (struct type *type)
14f9c5c9 8869{
7b9f71f2
JB
8870 const char *name;
8871
8872 /* If the type code says it's a character, then assume it really is,
8873 and don't check any further. */
78134374 8874 if (type->code () == TYPE_CODE_CHAR)
fc913e53 8875 return true;
7b9f71f2
JB
8876
8877 /* Otherwise, assume it's a character type iff it is a discrete type
8878 with a known character type name. */
8879 name = ada_type_name (type);
8880 return (name != NULL
dda83cd7
SM
8881 && (type->code () == TYPE_CODE_INT
8882 || type->code () == TYPE_CODE_RANGE)
8883 && (strcmp (name, "character") == 0
8884 || strcmp (name, "wide_character") == 0
8885 || strcmp (name, "wide_wide_character") == 0
8886 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8887}
8888
4c4b4cd2 8889/* True if TYPE appears to be an Ada string type. */
14f9c5c9 8890
fc913e53 8891bool
ebf56fd3 8892ada_is_string_type (struct type *type)
14f9c5c9 8893{
61ee279c 8894 type = ada_check_typedef (type);
d2e4a39e 8895 if (type != NULL
78134374 8896 && type->code () != TYPE_CODE_PTR
76a01679 8897 && (ada_is_simple_array_type (type)
dda83cd7 8898 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8899 && ada_array_arity (type) == 1)
8900 {
8901 struct type *elttype = ada_array_element_type (type, 1);
8902
8903 return ada_is_character_type (elttype);
8904 }
d2e4a39e 8905 else
fc913e53 8906 return false;
14f9c5c9
AS
8907}
8908
5bf03f13
JB
8909/* The compiler sometimes provides a parallel XVS type for a given
8910 PAD type. Normally, it is safe to follow the PAD type directly,
8911 but older versions of the compiler have a bug that causes the offset
8912 of its "F" field to be wrong. Following that field in that case
8913 would lead to incorrect results, but this can be worked around
8914 by ignoring the PAD type and using the associated XVS type instead.
8915
8916 Set to True if the debugger should trust the contents of PAD types.
8917 Otherwise, ignore the PAD type if there is a parallel XVS type. */
491144b5 8918static bool trust_pad_over_xvs = true;
14f9c5c9
AS
8919
8920/* True if TYPE is a struct type introduced by the compiler to force the
8921 alignment of a value. Such types have a single field with a
4c4b4cd2 8922 distinctive name. */
14f9c5c9
AS
8923
8924int
ebf56fd3 8925ada_is_aligner_type (struct type *type)
14f9c5c9 8926{
61ee279c 8927 type = ada_check_typedef (type);
714e53ab 8928
5bf03f13 8929 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8930 return 0;
8931
78134374 8932 return (type->code () == TYPE_CODE_STRUCT
dda83cd7
SM
8933 && type->num_fields () == 1
8934 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8935}
8936
8937/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8938 the parallel type. */
14f9c5c9 8939
d2e4a39e
AS
8940struct type *
8941ada_get_base_type (struct type *raw_type)
14f9c5c9 8942{
d2e4a39e
AS
8943 struct type *real_type_namer;
8944 struct type *raw_real_type;
14f9c5c9 8945
78134374 8946 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
8947 return raw_type;
8948
284614f0
JB
8949 if (ada_is_aligner_type (raw_type))
8950 /* The encoding specifies that we should always use the aligner type.
8951 So, even if this aligner type has an associated XVS type, we should
8952 simply ignore it.
8953
8954 According to the compiler gurus, an XVS type parallel to an aligner
8955 type may exist because of a stabs limitation. In stabs, aligner
8956 types are empty because the field has a variable-sized type, and
8957 thus cannot actually be used as an aligner type. As a result,
8958 we need the associated parallel XVS type to decode the type.
8959 Since the policy in the compiler is to not change the internal
8960 representation based on the debugging info format, we sometimes
8961 end up having a redundant XVS type parallel to the aligner type. */
8962 return raw_type;
8963
14f9c5c9 8964 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8965 if (real_type_namer == NULL
78134374 8966 || real_type_namer->code () != TYPE_CODE_STRUCT
1f704f76 8967 || real_type_namer->num_fields () != 1)
14f9c5c9
AS
8968 return raw_type;
8969
940da03e 8970 if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
f80d3ff2
JB
8971 {
8972 /* This is an older encoding form where the base type needs to be
85102364 8973 looked up by name. We prefer the newer encoding because it is
f80d3ff2
JB
8974 more efficient. */
8975 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8976 if (raw_real_type == NULL)
8977 return raw_type;
8978 else
8979 return raw_real_type;
8980 }
8981
8982 /* The field in our XVS type is a reference to the base type. */
940da03e 8983 return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
d2e4a39e 8984}
14f9c5c9 8985
4c4b4cd2 8986/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8987
d2e4a39e
AS
8988struct type *
8989ada_aligned_type (struct type *type)
14f9c5c9
AS
8990{
8991 if (ada_is_aligner_type (type))
940da03e 8992 return ada_aligned_type (type->field (0).type ());
14f9c5c9
AS
8993 else
8994 return ada_get_base_type (type);
8995}
8996
8997
8998/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8999 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9000
fc1a4b47
AC
9001const gdb_byte *
9002ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9003{
d2e4a39e 9004 if (ada_is_aligner_type (type))
940da03e 9005 return ada_aligned_value_addr (type->field (0).type (),
dda83cd7
SM
9006 valaddr +
9007 TYPE_FIELD_BITPOS (type,
9008 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9009 else
9010 return valaddr;
9011}
9012
4c4b4cd2
PH
9013
9014
14f9c5c9 9015/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9016 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9017const char *
9018ada_enum_name (const char *name)
14f9c5c9 9019{
5f9febe0 9020 static std::string storage;
e6a959d6 9021 const char *tmp;
14f9c5c9 9022
4c4b4cd2
PH
9023 /* First, unqualify the enumeration name:
9024 1. Search for the last '.' character. If we find one, then skip
177b42fe 9025 all the preceding characters, the unqualified name starts
76a01679 9026 right after that dot.
4c4b4cd2 9027 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9028 translates dots into "__". Search forward for double underscores,
9029 but stop searching when we hit an overloading suffix, which is
9030 of the form "__" followed by digits. */
4c4b4cd2 9031
c3e5cd34
PH
9032 tmp = strrchr (name, '.');
9033 if (tmp != NULL)
4c4b4cd2
PH
9034 name = tmp + 1;
9035 else
14f9c5c9 9036 {
4c4b4cd2 9037 while ((tmp = strstr (name, "__")) != NULL)
dda83cd7
SM
9038 {
9039 if (isdigit (tmp[2]))
9040 break;
9041 else
9042 name = tmp + 2;
9043 }
14f9c5c9
AS
9044 }
9045
9046 if (name[0] == 'Q')
9047 {
14f9c5c9 9048 int v;
5b4ee69b 9049
14f9c5c9 9050 if (name[1] == 'U' || name[1] == 'W')
dda83cd7
SM
9051 {
9052 if (sscanf (name + 2, "%x", &v) != 1)
9053 return name;
9054 }
272560b5
TT
9055 else if (((name[1] >= '0' && name[1] <= '9')
9056 || (name[1] >= 'a' && name[1] <= 'z'))
9057 && name[2] == '\0')
9058 {
5f9febe0
TT
9059 storage = string_printf ("'%c'", name[1]);
9060 return storage.c_str ();
272560b5 9061 }
14f9c5c9 9062 else
dda83cd7 9063 return name;
14f9c5c9
AS
9064
9065 if (isascii (v) && isprint (v))
5f9febe0 9066 storage = string_printf ("'%c'", v);
14f9c5c9 9067 else if (name[1] == 'U')
5f9febe0 9068 storage = string_printf ("[\"%02x\"]", v);
14f9c5c9 9069 else
5f9febe0 9070 storage = string_printf ("[\"%04x\"]", v);
14f9c5c9 9071
5f9febe0 9072 return storage.c_str ();
14f9c5c9 9073 }
d2e4a39e 9074 else
4c4b4cd2 9075 {
c3e5cd34
PH
9076 tmp = strstr (name, "__");
9077 if (tmp == NULL)
9078 tmp = strstr (name, "$");
9079 if (tmp != NULL)
dda83cd7 9080 {
5f9febe0
TT
9081 storage = std::string (name, tmp - name);
9082 return storage.c_str ();
dda83cd7 9083 }
4c4b4cd2
PH
9084
9085 return name;
9086 }
14f9c5c9
AS
9087}
9088
14f9c5c9
AS
9089/* Evaluate the subexpression of EXP starting at *POS as for
9090 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9091 expression. */
14f9c5c9 9092
d2e4a39e
AS
9093static struct value *
9094evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9095{
fe1fe7ea 9096 return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9097}
9098
9099/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9100 value it wraps. */
14f9c5c9 9101
d2e4a39e
AS
9102static struct value *
9103unwrap_value (struct value *val)
14f9c5c9 9104{
df407dfe 9105 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9106
14f9c5c9
AS
9107 if (ada_is_aligner_type (type))
9108 {
de4d072f 9109 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9110 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9111
14f9c5c9 9112 if (ada_type_name (val_type) == NULL)
d0e39ea2 9113 val_type->set_name (ada_type_name (type));
14f9c5c9
AS
9114
9115 return unwrap_value (v);
9116 }
d2e4a39e 9117 else
14f9c5c9 9118 {
d2e4a39e 9119 struct type *raw_real_type =
dda83cd7 9120 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9121
5bf03f13
JB
9122 /* If there is no parallel XVS or XVE type, then the value is
9123 already unwrapped. Return it without further modification. */
9124 if ((type == raw_real_type)
9125 && ada_find_parallel_type (type, "___XVE") == NULL)
9126 return val;
14f9c5c9 9127
d2e4a39e 9128 return
dda83cd7
SM
9129 coerce_unspec_val_to_type
9130 (val, ada_to_fixed_type (raw_real_type, 0,
9131 value_address (val),
9132 NULL, 1));
14f9c5c9
AS
9133 }
9134}
d2e4a39e 9135
d99dcf51
JB
9136/* Given two array types T1 and T2, return nonzero iff both arrays
9137 contain the same number of elements. */
9138
9139static int
9140ada_same_array_size_p (struct type *t1, struct type *t2)
9141{
9142 LONGEST lo1, hi1, lo2, hi2;
9143
9144 /* Get the array bounds in order to verify that the size of
9145 the two arrays match. */
9146 if (!get_array_bounds (t1, &lo1, &hi1)
9147 || !get_array_bounds (t2, &lo2, &hi2))
9148 error (_("unable to determine array bounds"));
9149
9150 /* To make things easier for size comparison, normalize a bit
9151 the case of empty arrays by making sure that the difference
9152 between upper bound and lower bound is always -1. */
9153 if (lo1 > hi1)
9154 hi1 = lo1 - 1;
9155 if (lo2 > hi2)
9156 hi2 = lo2 - 1;
9157
9158 return (hi1 - lo1 == hi2 - lo2);
9159}
9160
9161/* Assuming that VAL is an array of integrals, and TYPE represents
9162 an array with the same number of elements, but with wider integral
9163 elements, return an array "casted" to TYPE. In practice, this
9164 means that the returned array is built by casting each element
9165 of the original array into TYPE's (wider) element type. */
9166
9167static struct value *
9168ada_promote_array_of_integrals (struct type *type, struct value *val)
9169{
9170 struct type *elt_type = TYPE_TARGET_TYPE (type);
9171 LONGEST lo, hi;
9172 struct value *res;
9173 LONGEST i;
9174
9175 /* Verify that both val and type are arrays of scalars, and
9176 that the size of val's elements is smaller than the size
9177 of type's element. */
78134374 9178 gdb_assert (type->code () == TYPE_CODE_ARRAY);
d99dcf51 9179 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
78134374 9180 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
d99dcf51
JB
9181 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9182 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9183 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9184
9185 if (!get_array_bounds (type, &lo, &hi))
9186 error (_("unable to determine array bounds"));
9187
9188 res = allocate_value (type);
9189
9190 /* Promote each array element. */
9191 for (i = 0; i < hi - lo + 1; i++)
9192 {
9193 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9194
9195 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9196 value_contents_all (elt), TYPE_LENGTH (elt_type));
9197 }
9198
9199 return res;
9200}
9201
4c4b4cd2
PH
9202/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9203 return the converted value. */
9204
d2e4a39e
AS
9205static struct value *
9206coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9207{
df407dfe 9208 struct type *type2 = value_type (val);
5b4ee69b 9209
14f9c5c9
AS
9210 if (type == type2)
9211 return val;
9212
61ee279c
PH
9213 type2 = ada_check_typedef (type2);
9214 type = ada_check_typedef (type);
14f9c5c9 9215
78134374
SM
9216 if (type2->code () == TYPE_CODE_PTR
9217 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9
AS
9218 {
9219 val = ada_value_ind (val);
df407dfe 9220 type2 = value_type (val);
14f9c5c9
AS
9221 }
9222
78134374
SM
9223 if (type2->code () == TYPE_CODE_ARRAY
9224 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9 9225 {
d99dcf51
JB
9226 if (!ada_same_array_size_p (type, type2))
9227 error (_("cannot assign arrays of different length"));
9228
9229 if (is_integral_type (TYPE_TARGET_TYPE (type))
9230 && is_integral_type (TYPE_TARGET_TYPE (type2))
9231 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9232 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9233 {
9234 /* Allow implicit promotion of the array elements to
9235 a wider type. */
9236 return ada_promote_array_of_integrals (type, val);
9237 }
9238
9239 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
dda83cd7
SM
9240 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9241 error (_("Incompatible types in assignment"));
04624583 9242 deprecated_set_value_type (val, type);
14f9c5c9 9243 }
d2e4a39e 9244 return val;
14f9c5c9
AS
9245}
9246
4c4b4cd2
PH
9247static struct value *
9248ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9249{
9250 struct value *val;
9251 struct type *type1, *type2;
9252 LONGEST v, v1, v2;
9253
994b9211
AC
9254 arg1 = coerce_ref (arg1);
9255 arg2 = coerce_ref (arg2);
18af8284
JB
9256 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9257 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9258
78134374
SM
9259 if (type1->code () != TYPE_CODE_INT
9260 || type2->code () != TYPE_CODE_INT)
4c4b4cd2
PH
9261 return value_binop (arg1, arg2, op);
9262
76a01679 9263 switch (op)
4c4b4cd2
PH
9264 {
9265 case BINOP_MOD:
9266 case BINOP_DIV:
9267 case BINOP_REM:
9268 break;
9269 default:
9270 return value_binop (arg1, arg2, op);
9271 }
9272
9273 v2 = value_as_long (arg2);
9274 if (v2 == 0)
323e0a4a 9275 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2 9276
c6d940a9 9277 if (type1->is_unsigned () || op == BINOP_MOD)
4c4b4cd2
PH
9278 return value_binop (arg1, arg2, op);
9279
9280 v1 = value_as_long (arg1);
9281 switch (op)
9282 {
9283 case BINOP_DIV:
9284 v = v1 / v2;
76a01679 9285 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
dda83cd7 9286 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9287 break;
9288 case BINOP_REM:
9289 v = v1 % v2;
76a01679 9290 if (v * v1 < 0)
dda83cd7 9291 v -= v2;
4c4b4cd2
PH
9292 break;
9293 default:
9294 /* Should not reach this point. */
9295 v = 0;
9296 }
9297
9298 val = allocate_value (type1);
990a07ab 9299 store_unsigned_integer (value_contents_raw (val),
dda83cd7 9300 TYPE_LENGTH (value_type (val)),
34877895 9301 type_byte_order (type1), v);
4c4b4cd2
PH
9302 return val;
9303}
9304
9305static int
9306ada_value_equal (struct value *arg1, struct value *arg2)
9307{
df407dfe
AC
9308 if (ada_is_direct_array_type (value_type (arg1))
9309 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9310 {
79e8fcaa
JB
9311 struct type *arg1_type, *arg2_type;
9312
f58b38bf 9313 /* Automatically dereference any array reference before
dda83cd7 9314 we attempt to perform the comparison. */
f58b38bf
JB
9315 arg1 = ada_coerce_ref (arg1);
9316 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9317
4c4b4cd2
PH
9318 arg1 = ada_coerce_to_simple_array (arg1);
9319 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9320
9321 arg1_type = ada_check_typedef (value_type (arg1));
9322 arg2_type = ada_check_typedef (value_type (arg2));
9323
78134374 9324 if (arg1_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
9325 || arg2_type->code () != TYPE_CODE_ARRAY)
9326 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9327 /* FIXME: The following works only for types whose
dda83cd7
SM
9328 representations use all bits (no padding or undefined bits)
9329 and do not have user-defined equality. */
79e8fcaa
JB
9330 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9331 && memcmp (value_contents (arg1), value_contents (arg2),
9332 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9333 }
9334 return value_equal (arg1, arg2);
9335}
9336
52ce6436
PH
9337/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9338 component of LHS (a simple array or a record), updating *POS past
9339 the expression, assuming that LHS is contained in CONTAINER. Does
9340 not modify the inferior's memory, nor does it modify LHS (unless
9341 LHS == CONTAINER). */
9342
9343static void
9344assign_component (struct value *container, struct value *lhs, LONGEST index,
9345 struct expression *exp, int *pos)
9346{
9347 struct value *mark = value_mark ();
9348 struct value *elt;
0e2da9f0 9349 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9350
78134374 9351 if (lhs_type->code () == TYPE_CODE_ARRAY)
52ce6436 9352 {
22601c15
UW
9353 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9354 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9355
52ce6436
PH
9356 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9357 }
9358 else
9359 {
9360 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9361 elt = ada_to_fixed_value (elt);
52ce6436
PH
9362 }
9363
9364 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9365 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9366 else
9367 value_assign_to_component (container, elt,
9368 ada_evaluate_subexp (NULL, exp, pos,
9369 EVAL_NORMAL));
9370
9371 value_free_to_mark (mark);
9372}
9373
9374/* Assuming that LHS represents an lvalue having a record or array
9375 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9376 of that aggregate's value to LHS, advancing *POS past the
9377 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9378 lvalue containing LHS (possibly LHS itself). Does not modify
9379 the inferior's memory, nor does it modify the contents of
0963b4bd 9380 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9381
9382static struct value *
9383assign_aggregate (struct value *container,
9384 struct value *lhs, struct expression *exp,
9385 int *pos, enum noside noside)
9386{
9387 struct type *lhs_type;
9388 int n = exp->elts[*pos+1].longconst;
9389 LONGEST low_index, high_index;
52ce6436 9390 int i;
52ce6436
PH
9391
9392 *pos += 3;
9393 if (noside != EVAL_NORMAL)
9394 {
52ce6436
PH
9395 for (i = 0; i < n; i += 1)
9396 ada_evaluate_subexp (NULL, exp, pos, noside);
9397 return container;
9398 }
9399
9400 container = ada_coerce_ref (container);
9401 if (ada_is_direct_array_type (value_type (container)))
9402 container = ada_coerce_to_simple_array (container);
9403 lhs = ada_coerce_ref (lhs);
9404 if (!deprecated_value_modifiable (lhs))
9405 error (_("Left operand of assignment is not a modifiable lvalue."));
9406
0e2da9f0 9407 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9408 if (ada_is_direct_array_type (lhs_type))
9409 {
9410 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 9411 lhs_type = check_typedef (value_type (lhs));
cf88be68
SM
9412 low_index = lhs_type->bounds ()->low.const_val ();
9413 high_index = lhs_type->bounds ()->high.const_val ();
52ce6436 9414 }
78134374 9415 else if (lhs_type->code () == TYPE_CODE_STRUCT)
52ce6436
PH
9416 {
9417 low_index = 0;
9418 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9419 }
9420 else
9421 error (_("Left-hand side must be array or record."));
9422
cf608cc4 9423 std::vector<LONGEST> indices (4);
52ce6436
PH
9424 indices[0] = indices[1] = low_index - 1;
9425 indices[2] = indices[3] = high_index + 1;
52ce6436
PH
9426
9427 for (i = 0; i < n; i += 1)
9428 {
9429 switch (exp->elts[*pos].opcode)
9430 {
1fbf5ada 9431 case OP_CHOICES:
cf608cc4 9432 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
1fbf5ada
JB
9433 low_index, high_index);
9434 break;
9435 case OP_POSITIONAL:
9436 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436 9437 low_index, high_index);
1fbf5ada
JB
9438 break;
9439 case OP_OTHERS:
9440 if (i != n-1)
9441 error (_("Misplaced 'others' clause"));
cf608cc4
TT
9442 aggregate_assign_others (container, lhs, exp, pos, indices,
9443 low_index, high_index);
1fbf5ada
JB
9444 break;
9445 default:
9446 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9447 }
9448 }
9449
9450 return container;
9451}
9452
9453/* Assign into the component of LHS indexed by the OP_POSITIONAL
9454 construct at *POS, updating *POS past the construct, given that
cf608cc4
TT
9455 the positions are relative to lower bound LOW, where HIGH is the
9456 upper bound. Record the position in INDICES. CONTAINER is as for
0963b4bd 9457 assign_aggregate. */
52ce6436
PH
9458static void
9459aggregate_assign_positional (struct value *container,
9460 struct value *lhs, struct expression *exp,
cf608cc4
TT
9461 int *pos, std::vector<LONGEST> &indices,
9462 LONGEST low, LONGEST high)
52ce6436
PH
9463{
9464 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9465
9466 if (ind - 1 == high)
e1d5a0d2 9467 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9468 if (ind <= high)
9469 {
cf608cc4 9470 add_component_interval (ind, ind, indices);
52ce6436
PH
9471 *pos += 3;
9472 assign_component (container, lhs, ind, exp, pos);
9473 }
9474 else
9475 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9476}
9477
9478/* Assign into the components of LHS indexed by the OP_CHOICES
9479 construct at *POS, updating *POS past the construct, given that
9480 the allowable indices are LOW..HIGH. Record the indices assigned
cf608cc4 9481 to in INDICES. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9482static void
9483aggregate_assign_from_choices (struct value *container,
9484 struct value *lhs, struct expression *exp,
cf608cc4
TT
9485 int *pos, std::vector<LONGEST> &indices,
9486 LONGEST low, LONGEST high)
52ce6436
PH
9487{
9488 int j;
9489 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9490 int choice_pos, expr_pc;
9491 int is_array = ada_is_direct_array_type (value_type (lhs));
9492
9493 choice_pos = *pos += 3;
9494
9495 for (j = 0; j < n_choices; j += 1)
9496 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9497 expr_pc = *pos;
9498 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9499
9500 for (j = 0; j < n_choices; j += 1)
9501 {
9502 LONGEST lower, upper;
9503 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9504
52ce6436
PH
9505 if (op == OP_DISCRETE_RANGE)
9506 {
9507 choice_pos += 1;
9508 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9509 EVAL_NORMAL));
9510 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9511 EVAL_NORMAL));
9512 }
9513 else if (is_array)
9514 {
9515 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9516 EVAL_NORMAL));
9517 upper = lower;
9518 }
9519 else
9520 {
9521 int ind;
0d5cff50 9522 const char *name;
5b4ee69b 9523
52ce6436
PH
9524 switch (op)
9525 {
9526 case OP_NAME:
9527 name = &exp->elts[choice_pos + 2].string;
9528 break;
9529 case OP_VAR_VALUE:
987012b8 9530 name = exp->elts[choice_pos + 2].symbol->natural_name ();
52ce6436
PH
9531 break;
9532 default:
9533 error (_("Invalid record component association."));
9534 }
9535 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9536 ind = 0;
9537 if (! find_struct_field (name, value_type (lhs), 0,
9538 NULL, NULL, NULL, NULL, &ind))
9539 error (_("Unknown component name: %s."), name);
9540 lower = upper = ind;
9541 }
9542
9543 if (lower <= upper && (lower < low || upper > high))
9544 error (_("Index in component association out of bounds."));
9545
cf608cc4 9546 add_component_interval (lower, upper, indices);
52ce6436
PH
9547 while (lower <= upper)
9548 {
9549 int pos1;
5b4ee69b 9550
52ce6436
PH
9551 pos1 = expr_pc;
9552 assign_component (container, lhs, lower, exp, &pos1);
9553 lower += 1;
9554 }
9555 }
9556}
9557
9558/* Assign the value of the expression in the OP_OTHERS construct in
9559 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9560 have not been previously assigned. The index intervals already assigned
cf608cc4
TT
9561 are in INDICES. Updates *POS to after the OP_OTHERS clause.
9562 CONTAINER is as for assign_aggregate. */
52ce6436
PH
9563static void
9564aggregate_assign_others (struct value *container,
9565 struct value *lhs, struct expression *exp,
cf608cc4 9566 int *pos, std::vector<LONGEST> &indices,
52ce6436
PH
9567 LONGEST low, LONGEST high)
9568{
9569 int i;
5ce64950 9570 int expr_pc = *pos + 1;
52ce6436 9571
cf608cc4 9572 int num_indices = indices.size ();
52ce6436
PH
9573 for (i = 0; i < num_indices - 2; i += 2)
9574 {
9575 LONGEST ind;
5b4ee69b 9576
52ce6436
PH
9577 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9578 {
5ce64950 9579 int localpos;
5b4ee69b 9580
5ce64950
MS
9581 localpos = expr_pc;
9582 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9583 }
9584 }
9585 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9586}
9587
cf608cc4
TT
9588/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9589 [ INDICES[0] .. INDICES[1] ],... The resulting intervals do not
9590 overlap. */
52ce6436
PH
9591static void
9592add_component_interval (LONGEST low, LONGEST high,
cf608cc4 9593 std::vector<LONGEST> &indices)
52ce6436
PH
9594{
9595 int i, j;
5b4ee69b 9596
cf608cc4
TT
9597 int size = indices.size ();
9598 for (i = 0; i < size; i += 2) {
52ce6436
PH
9599 if (high >= indices[i] && low <= indices[i + 1])
9600 {
9601 int kh;
5b4ee69b 9602
cf608cc4 9603 for (kh = i + 2; kh < size; kh += 2)
52ce6436
PH
9604 if (high < indices[kh])
9605 break;
9606 if (low < indices[i])
9607 indices[i] = low;
9608 indices[i + 1] = indices[kh - 1];
9609 if (high > indices[i + 1])
9610 indices[i + 1] = high;
cf608cc4
TT
9611 memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
9612 indices.resize (kh - i - 2);
52ce6436
PH
9613 return;
9614 }
9615 else if (high < indices[i])
9616 break;
9617 }
9618
cf608cc4 9619 indices.resize (indices.size () + 2);
d4813f10 9620 for (j = indices.size () - 1; j >= i + 2; j -= 1)
52ce6436
PH
9621 indices[j] = indices[j - 2];
9622 indices[i] = low;
9623 indices[i + 1] = high;
9624}
9625
6e48bd2c
JB
9626/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9627 is different. */
9628
9629static struct value *
b7e22850 9630ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
9631{
9632 if (type == ada_check_typedef (value_type (arg2)))
9633 return arg2;
9634
6e48bd2c
JB
9635 return value_cast (type, arg2);
9636}
9637
284614f0
JB
9638/* Evaluating Ada expressions, and printing their result.
9639 ------------------------------------------------------
9640
21649b50
JB
9641 1. Introduction:
9642 ----------------
9643
284614f0
JB
9644 We usually evaluate an Ada expression in order to print its value.
9645 We also evaluate an expression in order to print its type, which
9646 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9647 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9648 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9649 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9650 similar.
9651
9652 Evaluating expressions is a little more complicated for Ada entities
9653 than it is for entities in languages such as C. The main reason for
9654 this is that Ada provides types whose definition might be dynamic.
9655 One example of such types is variant records. Or another example
9656 would be an array whose bounds can only be known at run time.
9657
9658 The following description is a general guide as to what should be
9659 done (and what should NOT be done) in order to evaluate an expression
9660 involving such types, and when. This does not cover how the semantic
9661 information is encoded by GNAT as this is covered separatly. For the
9662 document used as the reference for the GNAT encoding, see exp_dbug.ads
9663 in the GNAT sources.
9664
9665 Ideally, we should embed each part of this description next to its
9666 associated code. Unfortunately, the amount of code is so vast right
9667 now that it's hard to see whether the code handling a particular
9668 situation might be duplicated or not. One day, when the code is
9669 cleaned up, this guide might become redundant with the comments
9670 inserted in the code, and we might want to remove it.
9671
21649b50
JB
9672 2. ``Fixing'' an Entity, the Simple Case:
9673 -----------------------------------------
9674
284614f0
JB
9675 When evaluating Ada expressions, the tricky issue is that they may
9676 reference entities whose type contents and size are not statically
9677 known. Consider for instance a variant record:
9678
9679 type Rec (Empty : Boolean := True) is record
dda83cd7
SM
9680 case Empty is
9681 when True => null;
9682 when False => Value : Integer;
9683 end case;
284614f0
JB
9684 end record;
9685 Yes : Rec := (Empty => False, Value => 1);
9686 No : Rec := (empty => True);
9687
9688 The size and contents of that record depends on the value of the
9689 descriminant (Rec.Empty). At this point, neither the debugging
9690 information nor the associated type structure in GDB are able to
9691 express such dynamic types. So what the debugger does is to create
9692 "fixed" versions of the type that applies to the specific object.
30baf67b 9693 We also informally refer to this operation as "fixing" an object,
284614f0
JB
9694 which means creating its associated fixed type.
9695
9696 Example: when printing the value of variable "Yes" above, its fixed
9697 type would look like this:
9698
9699 type Rec is record
dda83cd7
SM
9700 Empty : Boolean;
9701 Value : Integer;
284614f0
JB
9702 end record;
9703
9704 On the other hand, if we printed the value of "No", its fixed type
9705 would become:
9706
9707 type Rec is record
dda83cd7 9708 Empty : Boolean;
284614f0
JB
9709 end record;
9710
9711 Things become a little more complicated when trying to fix an entity
9712 with a dynamic type that directly contains another dynamic type,
9713 such as an array of variant records, for instance. There are
9714 two possible cases: Arrays, and records.
9715
21649b50
JB
9716 3. ``Fixing'' Arrays:
9717 ---------------------
9718
9719 The type structure in GDB describes an array in terms of its bounds,
9720 and the type of its elements. By design, all elements in the array
9721 have the same type and we cannot represent an array of variant elements
9722 using the current type structure in GDB. When fixing an array,
9723 we cannot fix the array element, as we would potentially need one
9724 fixed type per element of the array. As a result, the best we can do
9725 when fixing an array is to produce an array whose bounds and size
9726 are correct (allowing us to read it from memory), but without having
9727 touched its element type. Fixing each element will be done later,
9728 when (if) necessary.
9729
9730 Arrays are a little simpler to handle than records, because the same
9731 amount of memory is allocated for each element of the array, even if
1b536f04 9732 the amount of space actually used by each element differs from element
21649b50 9733 to element. Consider for instance the following array of type Rec:
284614f0
JB
9734
9735 type Rec_Array is array (1 .. 2) of Rec;
9736
1b536f04
JB
9737 The actual amount of memory occupied by each element might be different
9738 from element to element, depending on the value of their discriminant.
21649b50 9739 But the amount of space reserved for each element in the array remains
1b536f04 9740 fixed regardless. So we simply need to compute that size using
21649b50
JB
9741 the debugging information available, from which we can then determine
9742 the array size (we multiply the number of elements of the array by
9743 the size of each element).
9744
9745 The simplest case is when we have an array of a constrained element
9746 type. For instance, consider the following type declarations:
9747
dda83cd7
SM
9748 type Bounded_String (Max_Size : Integer) is
9749 Length : Integer;
9750 Buffer : String (1 .. Max_Size);
9751 end record;
9752 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
21649b50
JB
9753
9754 In this case, the compiler describes the array as an array of
9755 variable-size elements (identified by its XVS suffix) for which
9756 the size can be read in the parallel XVZ variable.
9757
9758 In the case of an array of an unconstrained element type, the compiler
9759 wraps the array element inside a private PAD type. This type should not
9760 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9761 that we also use the adjective "aligner" in our code to designate
9762 these wrapper types.
9763
1b536f04 9764 In some cases, the size allocated for each element is statically
21649b50
JB
9765 known. In that case, the PAD type already has the correct size,
9766 and the array element should remain unfixed.
9767
9768 But there are cases when this size is not statically known.
9769 For instance, assuming that "Five" is an integer variable:
284614f0 9770
dda83cd7
SM
9771 type Dynamic is array (1 .. Five) of Integer;
9772 type Wrapper (Has_Length : Boolean := False) is record
9773 Data : Dynamic;
9774 case Has_Length is
9775 when True => Length : Integer;
9776 when False => null;
9777 end case;
9778 end record;
9779 type Wrapper_Array is array (1 .. 2) of Wrapper;
284614f0 9780
dda83cd7
SM
9781 Hello : Wrapper_Array := (others => (Has_Length => True,
9782 Data => (others => 17),
9783 Length => 1));
284614f0
JB
9784
9785
9786 The debugging info would describe variable Hello as being an
9787 array of a PAD type. The size of that PAD type is not statically
9788 known, but can be determined using a parallel XVZ variable.
9789 In that case, a copy of the PAD type with the correct size should
9790 be used for the fixed array.
9791
21649b50
JB
9792 3. ``Fixing'' record type objects:
9793 ----------------------------------
9794
9795 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9796 record types. In this case, in order to compute the associated
9797 fixed type, we need to determine the size and offset of each of
9798 its components. This, in turn, requires us to compute the fixed
9799 type of each of these components.
9800
9801 Consider for instance the example:
9802
dda83cd7
SM
9803 type Bounded_String (Max_Size : Natural) is record
9804 Str : String (1 .. Max_Size);
9805 Length : Natural;
9806 end record;
9807 My_String : Bounded_String (Max_Size => 10);
284614f0
JB
9808
9809 In that case, the position of field "Length" depends on the size
9810 of field Str, which itself depends on the value of the Max_Size
21649b50 9811 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9812 we need to fix the type of field Str. Therefore, fixing a variant
9813 record requires us to fix each of its components.
9814
9815 However, if a component does not have a dynamic size, the component
9816 should not be fixed. In particular, fields that use a PAD type
9817 should not fixed. Here is an example where this might happen
9818 (assuming type Rec above):
9819
9820 type Container (Big : Boolean) is record
dda83cd7
SM
9821 First : Rec;
9822 After : Integer;
9823 case Big is
9824 when True => Another : Integer;
9825 when False => null;
9826 end case;
284614f0
JB
9827 end record;
9828 My_Container : Container := (Big => False,
dda83cd7
SM
9829 First => (Empty => True),
9830 After => 42);
284614f0
JB
9831
9832 In that example, the compiler creates a PAD type for component First,
9833 whose size is constant, and then positions the component After just
9834 right after it. The offset of component After is therefore constant
9835 in this case.
9836
9837 The debugger computes the position of each field based on an algorithm
9838 that uses, among other things, the actual position and size of the field
21649b50
JB
9839 preceding it. Let's now imagine that the user is trying to print
9840 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9841 end up computing the offset of field After based on the size of the
9842 fixed version of field First. And since in our example First has
9843 only one actual field, the size of the fixed type is actually smaller
9844 than the amount of space allocated to that field, and thus we would
9845 compute the wrong offset of field After.
9846
21649b50
JB
9847 To make things more complicated, we need to watch out for dynamic
9848 components of variant records (identified by the ___XVL suffix in
9849 the component name). Even if the target type is a PAD type, the size
9850 of that type might not be statically known. So the PAD type needs
9851 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9852 we might end up with the wrong size for our component. This can be
9853 observed with the following type declarations:
284614f0 9854
dda83cd7
SM
9855 type Octal is new Integer range 0 .. 7;
9856 type Octal_Array is array (Positive range <>) of Octal;
9857 pragma Pack (Octal_Array);
284614f0 9858
dda83cd7
SM
9859 type Octal_Buffer (Size : Positive) is record
9860 Buffer : Octal_Array (1 .. Size);
9861 Length : Integer;
9862 end record;
284614f0
JB
9863
9864 In that case, Buffer is a PAD type whose size is unset and needs
9865 to be computed by fixing the unwrapped type.
9866
21649b50
JB
9867 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9868 ----------------------------------------------------------
9869
9870 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9871 thus far, be actually fixed?
9872
9873 The answer is: Only when referencing that element. For instance
9874 when selecting one component of a record, this specific component
9875 should be fixed at that point in time. Or when printing the value
9876 of a record, each component should be fixed before its value gets
9877 printed. Similarly for arrays, the element of the array should be
9878 fixed when printing each element of the array, or when extracting
9879 one element out of that array. On the other hand, fixing should
9880 not be performed on the elements when taking a slice of an array!
9881
31432a67 9882 Note that one of the side effects of miscomputing the offset and
284614f0
JB
9883 size of each field is that we end up also miscomputing the size
9884 of the containing type. This can have adverse results when computing
9885 the value of an entity. GDB fetches the value of an entity based
9886 on the size of its type, and thus a wrong size causes GDB to fetch
9887 the wrong amount of memory. In the case where the computed size is
9888 too small, GDB fetches too little data to print the value of our
31432a67 9889 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
9890 past the buffer containing the data =:-o. */
9891
ced9779b
JB
9892/* Evaluate a subexpression of EXP, at index *POS, and return a value
9893 for that subexpression cast to TO_TYPE. Advance *POS over the
9894 subexpression. */
9895
9896static value *
9897ada_evaluate_subexp_for_cast (expression *exp, int *pos,
9898 enum noside noside, struct type *to_type)
9899{
9900 int pc = *pos;
9901
9902 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
9903 || exp->elts[pc].opcode == OP_VAR_VALUE)
9904 {
9905 (*pos) += 4;
9906
9907 value *val;
9908 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
dda83cd7
SM
9909 {
9910 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9911 return value_zero (to_type, not_lval);
9912
9913 val = evaluate_var_msym_value (noside,
9914 exp->elts[pc + 1].objfile,
9915 exp->elts[pc + 2].msymbol);
9916 }
ced9779b 9917 else
dda83cd7
SM
9918 val = evaluate_var_value (noside,
9919 exp->elts[pc + 1].block,
9920 exp->elts[pc + 2].symbol);
ced9779b
JB
9921
9922 if (noside == EVAL_SKIP)
dda83cd7 9923 return eval_skip_value (exp);
ced9779b
JB
9924
9925 val = ada_value_cast (to_type, val);
9926
9927 /* Follow the Ada language semantics that do not allow taking
9928 an address of the result of a cast (view conversion in Ada). */
9929 if (VALUE_LVAL (val) == lval_memory)
dda83cd7
SM
9930 {
9931 if (value_lazy (val))
9932 value_fetch_lazy (val);
9933 VALUE_LVAL (val) = not_lval;
9934 }
ced9779b
JB
9935 return val;
9936 }
9937
9938 value *val = evaluate_subexp (to_type, exp, pos, noside);
9939 if (noside == EVAL_SKIP)
9940 return eval_skip_value (exp);
9941 return ada_value_cast (to_type, val);
9942}
9943
62d4bd94
TT
9944/* A helper function for TERNOP_IN_RANGE. */
9945
9946static value *
9947eval_ternop_in_range (struct type *expect_type, struct expression *exp,
9948 enum noside noside,
9949 value *arg1, value *arg2, value *arg3)
9950{
9951 if (noside == EVAL_SKIP)
9952 return eval_skip_value (exp);
9953
9954 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9955 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9956 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
9957 return
9958 value_from_longest (type,
9959 (value_less (arg1, arg3)
9960 || value_equal (arg1, arg3))
9961 && (value_less (arg2, arg1)
9962 || value_equal (arg2, arg1)));
9963}
9964
82390ab8
TT
9965/* A helper function for UNOP_NEG. */
9966
9967static value *
9968ada_unop_neg (struct type *expect_type,
9969 struct expression *exp,
9970 enum noside noside, enum exp_opcode op,
9971 struct value *arg1)
9972{
9973 if (noside == EVAL_SKIP)
9974 return eval_skip_value (exp);
9975 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9976 return value_neg (arg1);
9977}
9978
7efc87ff
TT
9979/* A helper function for UNOP_IN_RANGE. */
9980
9981static value *
9982ada_unop_in_range (struct type *expect_type,
9983 struct expression *exp,
9984 enum noside noside, enum exp_opcode op,
9985 struct value *arg1, struct type *type)
9986{
9987 if (noside == EVAL_SKIP)
9988 return eval_skip_value (exp);
9989
9990 struct value *arg2, *arg3;
9991 switch (type->code ())
9992 {
9993 default:
9994 lim_warning (_("Membership test incompletely implemented; "
9995 "always returns true"));
9996 type = language_bool_type (exp->language_defn, exp->gdbarch);
9997 return value_from_longest (type, (LONGEST) 1);
9998
9999 case TYPE_CODE_RANGE:
10000 arg2 = value_from_longest (type,
10001 type->bounds ()->low.const_val ());
10002 arg3 = value_from_longest (type,
10003 type->bounds ()->high.const_val ());
10004 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10005 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10006 type = language_bool_type (exp->language_defn, exp->gdbarch);
10007 return
10008 value_from_longest (type,
10009 (value_less (arg1, arg3)
10010 || value_equal (arg1, arg3))
10011 && (value_less (arg2, arg1)
10012 || value_equal (arg2, arg1)));
10013 }
10014}
10015
020dbabe
TT
10016/* A helper function for OP_ATR_TAG. */
10017
10018static value *
10019ada_atr_tag (struct type *expect_type,
10020 struct expression *exp,
10021 enum noside noside, enum exp_opcode op,
10022 struct value *arg1)
10023{
10024 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10025 return value_zero (ada_tag_type (arg1), not_lval);
10026
10027 return ada_value_tag (arg1);
10028}
10029
68c75735
TT
10030/* A helper function for OP_ATR_SIZE. */
10031
10032static value *
10033ada_atr_size (struct type *expect_type,
10034 struct expression *exp,
10035 enum noside noside, enum exp_opcode op,
10036 struct value *arg1)
10037{
10038 struct type *type = value_type (arg1);
10039
10040 /* If the argument is a reference, then dereference its type, since
10041 the user is really asking for the size of the actual object,
10042 not the size of the pointer. */
10043 if (type->code () == TYPE_CODE_REF)
10044 type = TYPE_TARGET_TYPE (type);
10045
10046 if (noside == EVAL_SKIP)
10047 return eval_skip_value (exp);
10048 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10049 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10050 else
10051 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10052 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10053}
10054
d05e24e6
TT
10055/* A helper function for UNOP_ABS. */
10056
10057static value *
10058ada_abs (struct type *expect_type,
10059 struct expression *exp,
10060 enum noside noside, enum exp_opcode op,
10061 struct value *arg1)
10062{
10063 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10064 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10065 return value_neg (arg1);
10066 else
10067 return arg1;
10068}
10069
faa1dfd7
TT
10070/* A helper function for BINOP_MUL. */
10071
10072static value *
10073ada_mult_binop (struct type *expect_type,
10074 struct expression *exp,
10075 enum noside noside, enum exp_opcode op,
10076 struct value *arg1, struct value *arg2)
10077{
10078 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10079 {
10080 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10081 return value_zero (value_type (arg1), not_lval);
10082 }
10083 else
10084 {
10085 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10086 return ada_value_binop (arg1, arg2, op);
10087 }
10088}
10089
214b13ac
TT
10090/* A helper function for BINOP_EQUAL and BINOP_NOTEQUAL. */
10091
10092static value *
10093ada_equal_binop (struct type *expect_type,
10094 struct expression *exp,
10095 enum noside noside, enum exp_opcode op,
10096 struct value *arg1, struct value *arg2)
10097{
10098 int tem;
10099 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10100 tem = 0;
10101 else
10102 {
10103 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10104 tem = ada_value_equal (arg1, arg2);
10105 }
10106 if (op == BINOP_NOTEQUAL)
10107 tem = !tem;
10108 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
10109 return value_from_longest (type, (LONGEST) tem);
10110}
10111
5ce19db8
TT
10112/* A helper function for TERNOP_SLICE. */
10113
10114static value *
10115ada_ternop_slice (struct expression *exp,
10116 enum noside noside,
10117 struct value *array, struct value *low_bound_val,
10118 struct value *high_bound_val)
10119{
10120 LONGEST low_bound;
10121 LONGEST high_bound;
10122
10123 low_bound_val = coerce_ref (low_bound_val);
10124 high_bound_val = coerce_ref (high_bound_val);
10125 low_bound = value_as_long (low_bound_val);
10126 high_bound = value_as_long (high_bound_val);
10127
10128 /* If this is a reference to an aligner type, then remove all
10129 the aligners. */
10130 if (value_type (array)->code () == TYPE_CODE_REF
10131 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10132 TYPE_TARGET_TYPE (value_type (array)) =
10133 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10134
10135 if (ada_is_any_packed_array_type (value_type (array)))
10136 error (_("cannot slice a packed array"));
10137
10138 /* If this is a reference to an array or an array lvalue,
10139 convert to a pointer. */
10140 if (value_type (array)->code () == TYPE_CODE_REF
10141 || (value_type (array)->code () == TYPE_CODE_ARRAY
10142 && VALUE_LVAL (array) == lval_memory))
10143 array = value_addr (array);
10144
10145 if (noside == EVAL_AVOID_SIDE_EFFECTS
10146 && ada_is_array_descriptor_type (ada_check_typedef
10147 (value_type (array))))
10148 return empty_array (ada_type_of_array (array, 0), low_bound,
10149 high_bound);
10150
10151 array = ada_coerce_to_simple_array_ptr (array);
10152
10153 /* If we have more than one level of pointer indirection,
10154 dereference the value until we get only one level. */
10155 while (value_type (array)->code () == TYPE_CODE_PTR
10156 && (TYPE_TARGET_TYPE (value_type (array))->code ()
10157 == TYPE_CODE_PTR))
10158 array = value_ind (array);
10159
10160 /* Make sure we really do have an array type before going further,
10161 to avoid a SEGV when trying to get the index type or the target
10162 type later down the road if the debug info generated by
10163 the compiler is incorrect or incomplete. */
10164 if (!ada_is_simple_array_type (value_type (array)))
10165 error (_("cannot take slice of non-array"));
10166
10167 if (ada_check_typedef (value_type (array))->code ()
10168 == TYPE_CODE_PTR)
10169 {
10170 struct type *type0 = ada_check_typedef (value_type (array));
10171
10172 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10173 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10174 else
10175 {
10176 struct type *arr_type0 =
10177 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10178
10179 return ada_value_slice_from_ptr (array, arr_type0,
10180 longest_to_int (low_bound),
10181 longest_to_int (high_bound));
10182 }
10183 }
10184 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10185 return array;
10186 else if (high_bound < low_bound)
10187 return empty_array (value_type (array), low_bound, high_bound);
10188 else
10189 return ada_value_slice (array, longest_to_int (low_bound),
10190 longest_to_int (high_bound));
10191}
10192
b467efaa
TT
10193/* A helper function for BINOP_IN_BOUNDS. */
10194
10195static value *
10196ada_binop_in_bounds (struct expression *exp, enum noside noside,
10197 struct value *arg1, struct value *arg2, int n)
10198{
10199 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10200 {
10201 struct type *type = language_bool_type (exp->language_defn,
10202 exp->gdbarch);
10203 return value_zero (type, not_lval);
10204 }
10205
10206 struct type *type = ada_index_type (value_type (arg2), n, "range");
10207 if (!type)
10208 type = value_type (arg1);
10209
10210 value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
10211 arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
10212
10213 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10214 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10215 type = language_bool_type (exp->language_defn, exp->gdbarch);
10216 return value_from_longest (type,
10217 (value_less (arg1, arg3)
10218 || value_equal (arg1, arg3))
10219 && (value_less (arg2, arg1)
10220 || value_equal (arg2, arg1)));
10221}
10222
b84564fc
TT
10223/* A helper function for some attribute operations. */
10224
10225static value *
10226ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
10227 struct value *arg1, struct type *type_arg, int tem)
10228{
10229 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10230 {
10231 if (type_arg == NULL)
10232 type_arg = value_type (arg1);
10233
10234 if (ada_is_constrained_packed_array_type (type_arg))
10235 type_arg = decode_constrained_packed_array_type (type_arg);
10236
10237 if (!discrete_type_p (type_arg))
10238 {
10239 switch (op)
10240 {
10241 default: /* Should never happen. */
10242 error (_("unexpected attribute encountered"));
10243 case OP_ATR_FIRST:
10244 case OP_ATR_LAST:
10245 type_arg = ada_index_type (type_arg, tem,
10246 ada_attribute_name (op));
10247 break;
10248 case OP_ATR_LENGTH:
10249 type_arg = builtin_type (exp->gdbarch)->builtin_int;
10250 break;
10251 }
10252 }
10253
10254 return value_zero (type_arg, not_lval);
10255 }
10256 else if (type_arg == NULL)
10257 {
10258 arg1 = ada_coerce_ref (arg1);
10259
10260 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10261 arg1 = ada_coerce_to_simple_array (arg1);
10262
10263 struct type *type;
10264 if (op == OP_ATR_LENGTH)
10265 type = builtin_type (exp->gdbarch)->builtin_int;
10266 else
10267 {
10268 type = ada_index_type (value_type (arg1), tem,
10269 ada_attribute_name (op));
10270 if (type == NULL)
10271 type = builtin_type (exp->gdbarch)->builtin_int;
10272 }
10273
10274 switch (op)
10275 {
10276 default: /* Should never happen. */
10277 error (_("unexpected attribute encountered"));
10278 case OP_ATR_FIRST:
10279 return value_from_longest
10280 (type, ada_array_bound (arg1, tem, 0));
10281 case OP_ATR_LAST:
10282 return value_from_longest
10283 (type, ada_array_bound (arg1, tem, 1));
10284 case OP_ATR_LENGTH:
10285 return value_from_longest
10286 (type, ada_array_length (arg1, tem));
10287 }
10288 }
10289 else if (discrete_type_p (type_arg))
10290 {
10291 struct type *range_type;
10292 const char *name = ada_type_name (type_arg);
10293
10294 range_type = NULL;
10295 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10296 range_type = to_fixed_range_type (type_arg, NULL);
10297 if (range_type == NULL)
10298 range_type = type_arg;
10299 switch (op)
10300 {
10301 default:
10302 error (_("unexpected attribute encountered"));
10303 case OP_ATR_FIRST:
10304 return value_from_longest
10305 (range_type, ada_discrete_type_low_bound (range_type));
10306 case OP_ATR_LAST:
10307 return value_from_longest
10308 (range_type, ada_discrete_type_high_bound (range_type));
10309 case OP_ATR_LENGTH:
10310 error (_("the 'length attribute applies only to array types"));
10311 }
10312 }
10313 else if (type_arg->code () == TYPE_CODE_FLT)
10314 error (_("unimplemented type attribute"));
10315 else
10316 {
10317 LONGEST low, high;
10318
10319 if (ada_is_constrained_packed_array_type (type_arg))
10320 type_arg = decode_constrained_packed_array_type (type_arg);
10321
10322 struct type *type;
10323 if (op == OP_ATR_LENGTH)
10324 type = builtin_type (exp->gdbarch)->builtin_int;
10325 else
10326 {
10327 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10328 if (type == NULL)
10329 type = builtin_type (exp->gdbarch)->builtin_int;
10330 }
10331
10332 switch (op)
10333 {
10334 default:
10335 error (_("unexpected attribute encountered"));
10336 case OP_ATR_FIRST:
10337 low = ada_array_bound_from_type (type_arg, tem, 0);
10338 return value_from_longest (type, low);
10339 case OP_ATR_LAST:
10340 high = ada_array_bound_from_type (type_arg, tem, 1);
10341 return value_from_longest (type, high);
10342 case OP_ATR_LENGTH:
10343 low = ada_array_bound_from_type (type_arg, tem, 0);
10344 high = ada_array_bound_from_type (type_arg, tem, 1);
10345 return value_from_longest (type, high - low + 1);
10346 }
10347 }
10348}
10349
38dc70cf
TT
10350/* A helper function for OP_ATR_MIN and OP_ATR_MAX. */
10351
10352static struct value *
10353ada_binop_minmax (struct type *expect_type,
10354 struct expression *exp,
10355 enum noside noside, enum exp_opcode op,
10356 struct value *arg1, struct value *arg2)
10357{
10358 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10359 return value_zero (value_type (arg1), not_lval);
10360 else
10361 {
10362 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10363 return value_binop (arg1, arg2,
10364 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10365 }
10366}
10367
dd5fd283
TT
10368/* A helper function for BINOP_EXP. */
10369
10370static struct value *
10371ada_binop_exp (struct type *expect_type,
10372 struct expression *exp,
10373 enum noside noside, enum exp_opcode op,
10374 struct value *arg1, struct value *arg2)
10375{
10376 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10377 return value_zero (value_type (arg1), not_lval);
10378 else
10379 {
10380 /* For integer exponentiation operations,
10381 only promote the first argument. */
10382 if (is_integral_type (value_type (arg2)))
10383 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10384 else
10385 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10386
10387 return value_binop (arg1, arg2, op);
10388 }
10389}
10390
03070ee9
TT
10391namespace expr
10392{
10393
10394value *
10395ada_wrapped_operation::evaluate (struct type *expect_type,
10396 struct expression *exp,
10397 enum noside noside)
10398{
10399 value *result = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
10400 if (noside == EVAL_NORMAL)
10401 result = unwrap_value (result);
10402
10403 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
10404 then we need to perform the conversion manually, because
10405 evaluate_subexp_standard doesn't do it. This conversion is
10406 necessary in Ada because the different kinds of float/fixed
10407 types in Ada have different representations.
10408
10409 Similarly, we need to perform the conversion from OP_LONG
10410 ourselves. */
10411 if ((opcode () == OP_FLOAT || opcode () == OP_LONG) && expect_type != NULL)
10412 result = ada_value_cast (expect_type, result);
10413
10414 return result;
10415}
10416
42fecb61
TT
10417value *
10418ada_string_operation::evaluate (struct type *expect_type,
10419 struct expression *exp,
10420 enum noside noside)
10421{
10422 value *result = string_operation::evaluate (expect_type, exp, noside);
10423 /* The result type will have code OP_STRING, bashed there from
10424 OP_ARRAY. Bash it back. */
10425 if (value_type (result)->code () == TYPE_CODE_STRING)
10426 value_type (result)->set_code (TYPE_CODE_ARRAY);
10427 return result;
10428}
10429
cc6bd32e
TT
10430value *
10431ada_qual_operation::evaluate (struct type *expect_type,
10432 struct expression *exp,
10433 enum noside noside)
10434{
10435 struct type *type = std::get<1> (m_storage);
10436 return std::get<0> (m_storage)->evaluate (type, exp, noside);
10437}
10438
fc715eb2
TT
10439value *
10440ada_ternop_range_operation::evaluate (struct type *expect_type,
10441 struct expression *exp,
10442 enum noside noside)
10443{
10444 value *arg0 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
10445 value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
10446 value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
10447 return eval_ternop_in_range (expect_type, exp, noside, arg0, arg1, arg2);
10448}
10449
03070ee9
TT
10450}
10451
284614f0
JB
10452/* Implement the evaluate_exp routine in the exp_descriptor structure
10453 for the Ada language. */
10454
52ce6436 10455static struct value *
ebf56fd3 10456ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
dda83cd7 10457 int *pos, enum noside noside)
14f9c5c9
AS
10458{
10459 enum exp_opcode op;
b5385fc0 10460 int tem;
14f9c5c9 10461 int pc;
5ec18f2b 10462 int preeval_pos;
14f9c5c9
AS
10463 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10464 struct type *type;
52ce6436 10465 int nargs, oplen;
d2e4a39e 10466 struct value **argvec;
14f9c5c9 10467
d2e4a39e
AS
10468 pc = *pos;
10469 *pos += 1;
14f9c5c9
AS
10470 op = exp->elts[pc].opcode;
10471
d2e4a39e 10472 switch (op)
14f9c5c9
AS
10473 {
10474 default:
10475 *pos -= 1;
6e48bd2c 10476 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10477
10478 if (noside == EVAL_NORMAL)
10479 arg1 = unwrap_value (arg1);
6e48bd2c 10480
edd079d9 10481 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
dda83cd7
SM
10482 then we need to perform the conversion manually, because
10483 evaluate_subexp_standard doesn't do it. This conversion is
10484 necessary in Ada because the different kinds of float/fixed
10485 types in Ada have different representations.
6e48bd2c 10486
dda83cd7
SM
10487 Similarly, we need to perform the conversion from OP_LONG
10488 ourselves. */
edd079d9 10489 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
dda83cd7 10490 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10491
10492 return arg1;
4c4b4cd2
PH
10493
10494 case OP_STRING:
10495 {
dda83cd7
SM
10496 struct value *result;
10497
10498 *pos -= 1;
10499 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10500 /* The result type will have code OP_STRING, bashed there from
10501 OP_ARRAY. Bash it back. */
10502 if (value_type (result)->code () == TYPE_CODE_STRING)
10503 value_type (result)->set_code (TYPE_CODE_ARRAY);
10504 return result;
4c4b4cd2 10505 }
14f9c5c9
AS
10506
10507 case UNOP_CAST:
10508 (*pos) += 2;
10509 type = exp->elts[pc + 1].type;
ced9779b 10510 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10511
4c4b4cd2
PH
10512 case UNOP_QUAL:
10513 (*pos) += 2;
10514 type = exp->elts[pc + 1].type;
10515 return ada_evaluate_subexp (type, exp, pos, noside);
10516
14f9c5c9 10517 case BINOP_ASSIGN:
fe1fe7ea 10518 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
52ce6436
PH
10519 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10520 {
10521 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10522 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10523 return arg1;
10524 return ada_value_assign (arg1, arg1);
10525 }
003f3813 10526 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
dda83cd7
SM
10527 except if the lhs of our assignment is a convenience variable.
10528 In the case of assigning to a convenience variable, the lhs
10529 should be exactly the result of the evaluation of the rhs. */
003f3813
JB
10530 type = value_type (arg1);
10531 if (VALUE_LVAL (arg1) == lval_internalvar)
dda83cd7 10532 type = NULL;
003f3813 10533 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10534 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10535 return arg1;
f411722c
TT
10536 if (VALUE_LVAL (arg1) == lval_internalvar)
10537 {
10538 /* Nothing. */
10539 }
d2e4a39e 10540 else
dda83cd7 10541 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10542 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10543
10544 case BINOP_ADD:
10545 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10546 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10547 if (noside == EVAL_SKIP)
dda83cd7 10548 goto nosideret;
78134374 10549 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10550 return (value_from_longest
10551 (value_type (arg1),
10552 value_as_long (arg1) + value_as_long (arg2)));
78134374 10553 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10554 return (value_from_longest
10555 (value_type (arg2),
10556 value_as_long (arg1) + value_as_long (arg2)));
b49180ac
TT
10557 /* Preserve the original type for use by the range case below.
10558 We cannot cast the result to a reference type, so if ARG1 is
10559 a reference type, find its underlying type. */
b7789565 10560 type = value_type (arg1);
78134374 10561 while (type->code () == TYPE_CODE_REF)
dda83cd7 10562 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10563 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10564 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10565 /* We need to special-case the result of adding to a range.
10566 This is done for the benefit of "ptype". gdb's Ada support
10567 historically used the LHS to set the result type here, so
10568 preserve this behavior. */
10569 if (type->code () == TYPE_CODE_RANGE)
10570 arg1 = value_cast (type, arg1);
10571 return arg1;
14f9c5c9
AS
10572
10573 case BINOP_SUB:
10574 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10575 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10576 if (noside == EVAL_SKIP)
dda83cd7 10577 goto nosideret;
78134374 10578 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10579 return (value_from_longest
10580 (value_type (arg1),
10581 value_as_long (arg1) - value_as_long (arg2)));
78134374 10582 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10583 return (value_from_longest
10584 (value_type (arg2),
10585 value_as_long (arg1) - value_as_long (arg2)));
b49180ac
TT
10586 /* Preserve the original type for use by the range case below.
10587 We cannot cast the result to a reference type, so if ARG1 is
10588 a reference type, find its underlying type. */
b7789565 10589 type = value_type (arg1);
78134374 10590 while (type->code () == TYPE_CODE_REF)
dda83cd7 10591 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10592 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10593 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10594 /* We need to special-case the result of adding to a range.
10595 This is done for the benefit of "ptype". gdb's Ada support
10596 historically used the LHS to set the result type here, so
10597 preserve this behavior. */
10598 if (type->code () == TYPE_CODE_RANGE)
10599 arg1 = value_cast (type, arg1);
10600 return arg1;
14f9c5c9
AS
10601
10602 case BINOP_MUL:
10603 case BINOP_DIV:
e1578042
JB
10604 case BINOP_REM:
10605 case BINOP_MOD:
fe1fe7ea
SM
10606 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10607 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10608 if (noside == EVAL_SKIP)
dda83cd7 10609 goto nosideret;
faa1dfd7
TT
10610 return ada_mult_binop (expect_type, exp, noside, op,
10611 arg1, arg2);
4c4b4cd2 10612
4c4b4cd2
PH
10613 case BINOP_EQUAL:
10614 case BINOP_NOTEQUAL:
fe1fe7ea 10615 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
df407dfe 10616 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10617 if (noside == EVAL_SKIP)
dda83cd7 10618 goto nosideret;
214b13ac 10619 return ada_equal_binop (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
10620
10621 case UNOP_NEG:
fe1fe7ea 10622 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
82390ab8 10623 return ada_unop_neg (expect_type, exp, noside, op, arg1);
4c4b4cd2 10624
2330c6c6
JB
10625 case BINOP_LOGICAL_AND:
10626 case BINOP_LOGICAL_OR:
10627 case UNOP_LOGICAL_NOT:
000d5124 10628 {
dda83cd7 10629 struct value *val;
000d5124 10630
dda83cd7
SM
10631 *pos -= 1;
10632 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1 10633 type = language_bool_type (exp->language_defn, exp->gdbarch);
dda83cd7 10634 return value_cast (type, val);
000d5124 10635 }
2330c6c6
JB
10636
10637 case BINOP_BITWISE_AND:
10638 case BINOP_BITWISE_IOR:
10639 case BINOP_BITWISE_XOR:
000d5124 10640 {
dda83cd7 10641 struct value *val;
000d5124 10642
fe1fe7ea
SM
10643 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10644 *pos = pc;
dda83cd7 10645 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
000d5124 10646
dda83cd7 10647 return value_cast (value_type (arg1), val);
000d5124 10648 }
2330c6c6 10649
14f9c5c9
AS
10650 case OP_VAR_VALUE:
10651 *pos -= 1;
6799def4 10652
14f9c5c9 10653 if (noside == EVAL_SKIP)
dda83cd7
SM
10654 {
10655 *pos += 4;
10656 goto nosideret;
10657 }
da5c522f
JB
10658
10659 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7
SM
10660 /* Only encountered when an unresolved symbol occurs in a
10661 context other than a function call, in which case, it is
10662 invalid. */
10663 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10664 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10665
10666 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10667 {
10668 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10669 /* Check to see if this is a tagged type. We also need to handle
10670 the case where the type is a reference to a tagged type, but
10671 we have to be careful to exclude pointers to tagged types.
10672 The latter should be shown as usual (as a pointer), whereas
10673 a reference should mostly be transparent to the user. */
10674 if (ada_is_tagged_type (type, 0)
10675 || (type->code () == TYPE_CODE_REF
10676 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10677 {
10678 /* Tagged types are a little special in the fact that the real
10679 type is dynamic and can only be determined by inspecting the
10680 object's tag. This means that we need to get the object's
10681 value first (EVAL_NORMAL) and then extract the actual object
10682 type from its tag.
10683
10684 Note that we cannot skip the final step where we extract
10685 the object type from its tag, because the EVAL_NORMAL phase
10686 results in dynamic components being resolved into fixed ones.
10687 This can cause problems when trying to print the type
10688 description of tagged types whose parent has a dynamic size:
10689 We use the type name of the "_parent" component in order
10690 to print the name of the ancestor type in the type description.
10691 If that component had a dynamic size, the resolution into
10692 a fixed type would result in the loss of that type name,
10693 thus preventing us from printing the name of the ancestor
10694 type in the type description. */
fe1fe7ea 10695 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
0d72a7c3 10696
78134374 10697 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10698 {
10699 struct type *actual_type;
10700
10701 actual_type = type_from_tag (ada_value_tag (arg1));
10702 if (actual_type == NULL)
10703 /* If, for some reason, we were unable to determine
10704 the actual type from the tag, then use the static
10705 approximation that we just computed as a fallback.
10706 This can happen if the debugging information is
10707 incomplete, for instance. */
10708 actual_type = type;
10709 return value_zero (actual_type, not_lval);
10710 }
10711 else
10712 {
10713 /* In the case of a ref, ada_coerce_ref takes care
10714 of determining the actual type. But the evaluation
10715 should return a ref as it should be valid to ask
10716 for its address; so rebuild a ref after coerce. */
10717 arg1 = ada_coerce_ref (arg1);
a65cfae5 10718 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10719 }
10720 }
0c1f74cf 10721
84754697
JB
10722 /* Records and unions for which GNAT encodings have been
10723 generated need to be statically fixed as well.
10724 Otherwise, non-static fixing produces a type where
10725 all dynamic properties are removed, which prevents "ptype"
10726 from being able to completely describe the type.
10727 For instance, a case statement in a variant record would be
10728 replaced by the relevant components based on the actual
10729 value of the discriminants. */
78134374 10730 if ((type->code () == TYPE_CODE_STRUCT
84754697 10731 && dynamic_template_type (type) != NULL)
78134374 10732 || (type->code () == TYPE_CODE_UNION
84754697
JB
10733 && ada_find_parallel_type (type, "___XVU") != NULL))
10734 {
10735 *pos += 4;
10736 return value_zero (to_static_fixed_type (type), not_lval);
10737 }
dda83cd7 10738 }
da5c522f
JB
10739
10740 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10741 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10742
10743 case OP_FUNCALL:
10744 (*pos) += 2;
10745
10746 /* Allocate arg vector, including space for the function to be
dda83cd7 10747 called in argvec[0] and a terminating NULL. */
4c4b4cd2 10748 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10749 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10750
10751 if (exp->elts[*pos].opcode == OP_VAR_VALUE
dda83cd7
SM
10752 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10753 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10754 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2 10755 else
dda83cd7
SM
10756 {
10757 for (tem = 0; tem <= nargs; tem += 1)
fe1fe7ea
SM
10758 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10759 argvec[tem] = 0;
4c4b4cd2 10760
dda83cd7
SM
10761 if (noside == EVAL_SKIP)
10762 goto nosideret;
10763 }
4c4b4cd2 10764
ad82864c
JB
10765 if (ada_is_constrained_packed_array_type
10766 (desc_base_type (value_type (argvec[0]))))
dda83cd7 10767 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 10768 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
dda83cd7
SM
10769 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10770 /* This is a packed array that has already been fixed, and
284614f0
JB
10771 therefore already coerced to a simple array. Nothing further
10772 to do. */
dda83cd7 10773 ;
78134374 10774 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
10775 {
10776 /* Make sure we dereference references so that all the code below
10777 feels like it's really handling the referenced value. Wrapping
10778 types (for alignment) may be there, so make sure we strip them as
10779 well. */
10780 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10781 }
78134374 10782 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
10783 && VALUE_LVAL (argvec[0]) == lval_memory)
10784 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10785
df407dfe 10786 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10787
10788 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10789 them. So, if this is an array typedef (encoding use for array
10790 access types encoded as fat pointers), strip it now. */
78134374 10791 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
10792 type = ada_typedef_target_type (type);
10793
78134374 10794 if (type->code () == TYPE_CODE_PTR)
dda83cd7
SM
10795 {
10796 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10797 {
10798 case TYPE_CODE_FUNC:
10799 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10800 break;
10801 case TYPE_CODE_ARRAY:
10802 break;
10803 case TYPE_CODE_STRUCT:
10804 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10805 argvec[0] = ada_value_ind (argvec[0]);
10806 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10807 break;
10808 default:
10809 error (_("cannot subscript or call something of type `%s'"),
10810 ada_type_name (value_type (argvec[0])));
10811 break;
10812 }
10813 }
4c4b4cd2 10814
78134374 10815 switch (type->code ())
dda83cd7
SM
10816 {
10817 case TYPE_CODE_FUNC:
10818 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10819 {
7022349d
PA
10820 if (TYPE_TARGET_TYPE (type) == NULL)
10821 error_call_unknown_return_type (NULL);
10822 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10823 }
e71585ff
PA
10824 return call_function_by_hand (argvec[0], NULL,
10825 gdb::make_array_view (argvec + 1,
10826 nargs));
c8ea1972
PH
10827 case TYPE_CODE_INTERNAL_FUNCTION:
10828 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10829 /* We don't know anything about what the internal
10830 function might return, but we have to return
10831 something. */
10832 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10833 not_lval);
10834 else
10835 return call_internal_function (exp->gdbarch, exp->language_defn,
10836 argvec[0], nargs, argvec + 1);
10837
dda83cd7
SM
10838 case TYPE_CODE_STRUCT:
10839 {
10840 int arity;
10841
10842 arity = ada_array_arity (type);
10843 type = ada_array_element_type (type, nargs);
10844 if (type == NULL)
10845 error (_("cannot subscript or call a record"));
10846 if (arity != nargs)
10847 error (_("wrong number of subscripts; expecting %d"), arity);
10848 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10849 return value_zero (ada_aligned_type (type), lval_memory);
10850 return
10851 unwrap_value (ada_value_subscript
10852 (argvec[0], nargs, argvec + 1));
10853 }
10854 case TYPE_CODE_ARRAY:
10855 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10856 {
10857 type = ada_array_element_type (type, nargs);
10858 if (type == NULL)
10859 error (_("element type of array unknown"));
10860 else
10861 return value_zero (ada_aligned_type (type), lval_memory);
10862 }
10863 return
10864 unwrap_value (ada_value_subscript
10865 (ada_coerce_to_simple_array (argvec[0]),
10866 nargs, argvec + 1));
10867 case TYPE_CODE_PTR: /* Pointer to array */
10868 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10869 {
deede10c 10870 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
dda83cd7
SM
10871 type = ada_array_element_type (type, nargs);
10872 if (type == NULL)
10873 error (_("element type of array unknown"));
10874 else
10875 return value_zero (ada_aligned_type (type), lval_memory);
10876 }
10877 return
10878 unwrap_value (ada_value_ptr_subscript (argvec[0],
deede10c 10879 nargs, argvec + 1));
4c4b4cd2 10880
dda83cd7
SM
10881 default:
10882 error (_("Attempt to index or call something other than an "
e1d5a0d2 10883 "array or function"));
dda83cd7 10884 }
4c4b4cd2
PH
10885
10886 case TERNOP_SLICE:
10887 {
fe1fe7ea
SM
10888 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10889 struct value *low_bound_val
10890 = evaluate_subexp (nullptr, exp, pos, noside);
10891 struct value *high_bound_val
10892 = evaluate_subexp (nullptr, exp, pos, noside);
dda83cd7
SM
10893
10894 if (noside == EVAL_SKIP)
10895 goto nosideret;
10896
5ce19db8
TT
10897 return ada_ternop_slice (exp, noside, array, low_bound_val,
10898 high_bound_val);
4c4b4cd2 10899 }
14f9c5c9 10900
4c4b4cd2
PH
10901 case UNOP_IN_RANGE:
10902 (*pos) += 2;
fe1fe7ea 10903 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
8008e265 10904 type = check_typedef (exp->elts[pc + 1].type);
7efc87ff 10905 return ada_unop_in_range (expect_type, exp, noside, op, arg1, type);
4c4b4cd2
PH
10906
10907 case BINOP_IN_BOUNDS:
14f9c5c9 10908 (*pos) += 2;
fe1fe7ea
SM
10909 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10910 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10911
4c4b4cd2 10912 if (noside == EVAL_SKIP)
dda83cd7 10913 goto nosideret;
14f9c5c9 10914
4c4b4cd2 10915 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10916
b467efaa 10917 return ada_binop_in_bounds (exp, noside, arg1, arg2, tem);
4c4b4cd2
PH
10918
10919 case TERNOP_IN_RANGE:
fe1fe7ea
SM
10920 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10921 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10922 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10923
62d4bd94 10924 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
4c4b4cd2
PH
10925
10926 case OP_ATR_FIRST:
10927 case OP_ATR_LAST:
10928 case OP_ATR_LENGTH:
10929 {
dda83cd7 10930 struct type *type_arg;
5b4ee69b 10931
dda83cd7
SM
10932 if (exp->elts[*pos].opcode == OP_TYPE)
10933 {
fe1fe7ea
SM
10934 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10935 arg1 = NULL;
dda83cd7
SM
10936 type_arg = check_typedef (exp->elts[pc + 2].type);
10937 }
10938 else
10939 {
fe1fe7ea
SM
10940 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10941 type_arg = NULL;
dda83cd7 10942 }
76a01679 10943
dda83cd7
SM
10944 if (exp->elts[*pos].opcode != OP_LONG)
10945 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10946 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10947 *pos += 4;
76a01679 10948
dda83cd7
SM
10949 if (noside == EVAL_SKIP)
10950 goto nosideret;
1eea4ebd 10951
b84564fc 10952 return ada_unop_atr (exp, noside, op, arg1, type_arg, tem);
14f9c5c9
AS
10953 }
10954
4c4b4cd2 10955 case OP_ATR_TAG:
fe1fe7ea 10956 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10957 if (noside == EVAL_SKIP)
dda83cd7 10958 goto nosideret;
020dbabe 10959 return ada_atr_tag (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
10960
10961 case OP_ATR_MIN:
10962 case OP_ATR_MAX:
fe1fe7ea
SM
10963 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10964 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10965 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10966 if (noside == EVAL_SKIP)
dda83cd7 10967 goto nosideret;
38dc70cf 10968 return ada_binop_minmax (expect_type, exp, noside, op, arg1, arg2);
14f9c5c9 10969
4c4b4cd2
PH
10970 case OP_ATR_MODULUS:
10971 {
dda83cd7 10972 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10973
fe1fe7ea
SM
10974 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10975 if (noside == EVAL_SKIP)
dda83cd7 10976 goto nosideret;
4c4b4cd2 10977
dda83cd7
SM
10978 if (!ada_is_modular_type (type_arg))
10979 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10980
dda83cd7
SM
10981 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10982 ada_modulus (type_arg));
4c4b4cd2
PH
10983 }
10984
10985
10986 case OP_ATR_POS:
fe1fe7ea
SM
10987 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10988 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10989 if (noside == EVAL_SKIP)
dda83cd7 10990 goto nosideret;
3cb382c9
UW
10991 type = builtin_type (exp->gdbarch)->builtin_int;
10992 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10993 return value_zero (type, not_lval);
14f9c5c9 10994 else
3cb382c9 10995 return value_pos_atr (type, arg1);
14f9c5c9 10996
4c4b4cd2 10997 case OP_ATR_SIZE:
fe1fe7ea 10998 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
68c75735 10999 return ada_atr_size (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
11000
11001 case OP_ATR_VAL:
fe1fe7ea
SM
11002 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11003 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11004 type = exp->elts[pc + 2].type;
14f9c5c9 11005 if (noside == EVAL_SKIP)
dda83cd7 11006 goto nosideret;
3848abd6 11007 return ada_val_atr (noside, type, arg1);
4c4b4cd2
PH
11008
11009 case BINOP_EXP:
fe1fe7ea
SM
11010 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11011 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11012 if (noside == EVAL_SKIP)
dda83cd7 11013 goto nosideret;
dd5fd283 11014 return ada_binop_exp (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
11015
11016 case UNOP_PLUS:
fe1fe7ea 11017 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11018 if (noside == EVAL_SKIP)
dda83cd7 11019 goto nosideret;
4c4b4cd2 11020 else
dda83cd7 11021 return arg1;
4c4b4cd2
PH
11022
11023 case UNOP_ABS:
fe1fe7ea 11024 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11025 if (noside == EVAL_SKIP)
dda83cd7 11026 goto nosideret;
d05e24e6 11027 return ada_abs (expect_type, exp, noside, op, arg1);
14f9c5c9
AS
11028
11029 case UNOP_IND:
5ec18f2b 11030 preeval_pos = *pos;
fe1fe7ea 11031 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11032 if (noside == EVAL_SKIP)
dda83cd7 11033 goto nosideret;
df407dfe 11034 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11035 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11036 {
11037 if (ada_is_array_descriptor_type (type))
11038 /* GDB allows dereferencing GNAT array descriptors. */
11039 {
11040 struct type *arrType = ada_type_of_array (arg1, 0);
11041
11042 if (arrType == NULL)
11043 error (_("Attempt to dereference null array pointer."));
11044 return value_at_lazy (arrType, 0);
11045 }
11046 else if (type->code () == TYPE_CODE_PTR
11047 || type->code () == TYPE_CODE_REF
11048 /* In C you can dereference an array to get the 1st elt. */
11049 || type->code () == TYPE_CODE_ARRAY)
11050 {
11051 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11052 only be determined by inspecting the object's tag.
11053 This means that we need to evaluate completely the
11054 expression in order to get its type. */
5ec18f2b 11055
78134374
SM
11056 if ((type->code () == TYPE_CODE_REF
11057 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
11058 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11059 {
fe1fe7ea
SM
11060 arg1
11061 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11062 type = value_type (ada_value_ind (arg1));
11063 }
11064 else
11065 {
11066 type = to_static_fixed_type
11067 (ada_aligned_type
11068 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11069 }
c1b5a1a6 11070 ada_ensure_varsize_limit (type);
dda83cd7
SM
11071 return value_zero (type, lval_memory);
11072 }
11073 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11074 {
11075 /* GDB allows dereferencing an int. */
11076 if (expect_type == NULL)
11077 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11078 lval_memory);
11079 else
11080 {
11081 expect_type =
11082 to_static_fixed_type (ada_aligned_type (expect_type));
11083 return value_zero (expect_type, lval_memory);
11084 }
11085 }
dda83cd7
SM
11086 else
11087 error (_("Attempt to take contents of a non-pointer value."));
11088 }
0963b4bd 11089 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11090 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11091
78134374 11092 if (type->code () == TYPE_CODE_INT)
dda83cd7
SM
11093 /* GDB allows dereferencing an int. If we were given
11094 the expect_type, then use that as the target type.
11095 Otherwise, assume that the target type is an int. */
11096 {
11097 if (expect_type != NULL)
96967637
JB
11098 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11099 arg1));
11100 else
11101 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11102 (CORE_ADDR) value_as_address (arg1));
dda83cd7 11103 }
6b0d7253 11104
4c4b4cd2 11105 if (ada_is_array_descriptor_type (type))
dda83cd7
SM
11106 /* GDB allows dereferencing GNAT array descriptors. */
11107 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11108 else
dda83cd7 11109 return ada_value_ind (arg1);
14f9c5c9
AS
11110
11111 case STRUCTOP_STRUCT:
11112 tem = longest_to_int (exp->elts[pc + 1].longconst);
11113 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11114 preeval_pos = *pos;
fe1fe7ea 11115 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11116 if (noside == EVAL_SKIP)
dda83cd7 11117 goto nosideret;
14f9c5c9 11118 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11119 {
11120 struct type *type1 = value_type (arg1);
5b4ee69b 11121
dda83cd7
SM
11122 if (ada_is_tagged_type (type1, 1))
11123 {
11124 type = ada_lookup_struct_elt_type (type1,
11125 &exp->elts[pc + 2].string,
11126 1, 1);
5ec18f2b
JG
11127
11128 /* If the field is not found, check if it exists in the
11129 extension of this object's type. This means that we
11130 need to evaluate completely the expression. */
11131
dda83cd7 11132 if (type == NULL)
5ec18f2b 11133 {
fe1fe7ea
SM
11134 arg1
11135 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11136 arg1 = ada_value_struct_elt (arg1,
11137 &exp->elts[pc + 2].string,
11138 0);
11139 arg1 = unwrap_value (arg1);
11140 type = value_type (ada_to_fixed_value (arg1));
11141 }
dda83cd7
SM
11142 }
11143 else
11144 type =
11145 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11146 0);
11147
11148 return value_zero (ada_aligned_type (type), lval_memory);
11149 }
14f9c5c9 11150 else
a579cd9a
MW
11151 {
11152 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11153 arg1 = unwrap_value (arg1);
11154 return ada_to_fixed_value (arg1);
11155 }
284614f0 11156
14f9c5c9 11157 case OP_TYPE:
4c4b4cd2 11158 /* The value is not supposed to be used. This is here to make it
dda83cd7 11159 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11160 (*pos) += 2;
11161 if (noside == EVAL_SKIP)
dda83cd7 11162 goto nosideret;
14f9c5c9 11163 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 11164 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11165 else
dda83cd7 11166 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11167
11168 case OP_AGGREGATE:
11169 case OP_CHOICES:
11170 case OP_OTHERS:
11171 case OP_DISCRETE_RANGE:
11172 case OP_POSITIONAL:
11173 case OP_NAME:
11174 if (noside == EVAL_NORMAL)
11175 switch (op)
11176 {
11177 case OP_NAME:
11178 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11179 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11180 case OP_AGGREGATE:
11181 error (_("Aggregates only allowed on the right of an assignment"));
11182 default:
0963b4bd
MS
11183 internal_error (__FILE__, __LINE__,
11184 _("aggregate apparently mangled"));
52ce6436
PH
11185 }
11186
11187 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11188 *pos += oplen - 1;
11189 for (tem = 0; tem < nargs; tem += 1)
11190 ada_evaluate_subexp (NULL, exp, pos, noside);
11191 goto nosideret;
14f9c5c9
AS
11192 }
11193
11194nosideret:
ced9779b 11195 return eval_skip_value (exp);
14f9c5c9 11196}
14f9c5c9 11197\f
d2e4a39e 11198
4c4b4cd2
PH
11199/* Return non-zero iff TYPE represents a System.Address type. */
11200
11201int
11202ada_is_system_address_type (struct type *type)
11203{
7d93a1e0 11204 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11205}
11206
14f9c5c9 11207\f
d2e4a39e 11208
dda83cd7 11209 /* Range types */
14f9c5c9
AS
11210
11211/* Scan STR beginning at position K for a discriminant name, and
11212 return the value of that discriminant field of DVAL in *PX. If
11213 PNEW_K is not null, put the position of the character beyond the
11214 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11215 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11216
11217static int
108d56a4 11218scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
dda83cd7 11219 int *pnew_k)
14f9c5c9 11220{
5f9febe0 11221 static std::string storage;
5da1a4d3 11222 const char *pstart, *pend, *bound;
d2e4a39e 11223 struct value *bound_val;
14f9c5c9
AS
11224
11225 if (dval == NULL || str == NULL || str[k] == '\0')
11226 return 0;
11227
5da1a4d3
SM
11228 pstart = str + k;
11229 pend = strstr (pstart, "__");
14f9c5c9
AS
11230 if (pend == NULL)
11231 {
5da1a4d3 11232 bound = pstart;
14f9c5c9
AS
11233 k += strlen (bound);
11234 }
d2e4a39e 11235 else
14f9c5c9 11236 {
5da1a4d3
SM
11237 int len = pend - pstart;
11238
11239 /* Strip __ and beyond. */
5f9febe0
TT
11240 storage = std::string (pstart, len);
11241 bound = storage.c_str ();
d2e4a39e 11242 k = pend - str;
14f9c5c9 11243 }
d2e4a39e 11244
df407dfe 11245 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11246 if (bound_val == NULL)
11247 return 0;
11248
11249 *px = value_as_long (bound_val);
11250 if (pnew_k != NULL)
11251 *pnew_k = k;
11252 return 1;
11253}
11254
25a1127b
TT
11255/* Value of variable named NAME. Only exact matches are considered.
11256 If no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11257 otherwise causes an error with message ERR_MSG. */
11258
d2e4a39e 11259static struct value *
edb0c9cb 11260get_var_value (const char *name, const char *err_msg)
14f9c5c9 11261{
25a1127b
TT
11262 std::string quoted_name = add_angle_brackets (name);
11263
11264 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
14f9c5c9 11265
d1183b06
TT
11266 std::vector<struct block_symbol> syms
11267 = ada_lookup_symbol_list_worker (lookup_name,
11268 get_selected_block (0),
11269 VAR_DOMAIN, 1);
14f9c5c9 11270
d1183b06 11271 if (syms.size () != 1)
14f9c5c9
AS
11272 {
11273 if (err_msg == NULL)
dda83cd7 11274 return 0;
14f9c5c9 11275 else
dda83cd7 11276 error (("%s"), err_msg);
14f9c5c9
AS
11277 }
11278
54d343a2 11279 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11280}
d2e4a39e 11281
edb0c9cb
PA
11282/* Value of integer variable named NAME in the current environment.
11283 If no such variable is found, returns false. Otherwise, sets VALUE
11284 to the variable's value and returns true. */
4c4b4cd2 11285
edb0c9cb
PA
11286bool
11287get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11288{
4c4b4cd2 11289 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11290
14f9c5c9 11291 if (var_val == 0)
edb0c9cb
PA
11292 return false;
11293
11294 value = value_as_long (var_val);
11295 return true;
14f9c5c9 11296}
d2e4a39e 11297
14f9c5c9
AS
11298
11299/* Return a range type whose base type is that of the range type named
11300 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11301 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11302 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11303 corresponding range type from debug information; fall back to using it
11304 if symbol lookup fails. If a new type must be created, allocate it
11305 like ORIG_TYPE was. The bounds information, in general, is encoded
11306 in NAME, the base type given in the named range type. */
14f9c5c9 11307
d2e4a39e 11308static struct type *
28c85d6c 11309to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11310{
0d5cff50 11311 const char *name;
14f9c5c9 11312 struct type *base_type;
108d56a4 11313 const char *subtype_info;
14f9c5c9 11314
28c85d6c 11315 gdb_assert (raw_type != NULL);
7d93a1e0 11316 gdb_assert (raw_type->name () != NULL);
dddfab26 11317
78134374 11318 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11319 base_type = TYPE_TARGET_TYPE (raw_type);
11320 else
11321 base_type = raw_type;
11322
7d93a1e0 11323 name = raw_type->name ();
14f9c5c9
AS
11324 subtype_info = strstr (name, "___XD");
11325 if (subtype_info == NULL)
690cc4eb 11326 {
43bbcdc2
PH
11327 LONGEST L = ada_discrete_type_low_bound (raw_type);
11328 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11329
690cc4eb
PH
11330 if (L < INT_MIN || U > INT_MAX)
11331 return raw_type;
11332 else
0c9c3474
SA
11333 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11334 L, U);
690cc4eb 11335 }
14f9c5c9
AS
11336 else
11337 {
14f9c5c9
AS
11338 int prefix_len = subtype_info - name;
11339 LONGEST L, U;
11340 struct type *type;
108d56a4 11341 const char *bounds_str;
14f9c5c9
AS
11342 int n;
11343
14f9c5c9
AS
11344 subtype_info += 5;
11345 bounds_str = strchr (subtype_info, '_');
11346 n = 1;
11347
d2e4a39e 11348 if (*subtype_info == 'L')
dda83cd7
SM
11349 {
11350 if (!ada_scan_number (bounds_str, n, &L, &n)
11351 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11352 return raw_type;
11353 if (bounds_str[n] == '_')
11354 n += 2;
11355 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11356 n += 1;
11357 subtype_info += 1;
11358 }
d2e4a39e 11359 else
dda83cd7 11360 {
5f9febe0
TT
11361 std::string name_buf = std::string (name, prefix_len) + "___L";
11362 if (!get_int_var_value (name_buf.c_str (), L))
dda83cd7
SM
11363 {
11364 lim_warning (_("Unknown lower bound, using 1."));
11365 L = 1;
11366 }
11367 }
14f9c5c9 11368
d2e4a39e 11369 if (*subtype_info == 'U')
dda83cd7
SM
11370 {
11371 if (!ada_scan_number (bounds_str, n, &U, &n)
11372 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11373 return raw_type;
11374 }
d2e4a39e 11375 else
dda83cd7 11376 {
5f9febe0
TT
11377 std::string name_buf = std::string (name, prefix_len) + "___U";
11378 if (!get_int_var_value (name_buf.c_str (), U))
dda83cd7
SM
11379 {
11380 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11381 U = L;
11382 }
11383 }
14f9c5c9 11384
0c9c3474
SA
11385 type = create_static_range_type (alloc_type_copy (raw_type),
11386 base_type, L, U);
f5a91472 11387 /* create_static_range_type alters the resulting type's length
dda83cd7
SM
11388 to match the size of the base_type, which is not what we want.
11389 Set it back to the original range type's length. */
f5a91472 11390 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11391 type->set_name (name);
14f9c5c9
AS
11392 return type;
11393 }
11394}
11395
4c4b4cd2
PH
11396/* True iff NAME is the name of a range type. */
11397
14f9c5c9 11398int
d2e4a39e 11399ada_is_range_type_name (const char *name)
14f9c5c9
AS
11400{
11401 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11402}
14f9c5c9 11403\f
d2e4a39e 11404
dda83cd7 11405 /* Modular types */
4c4b4cd2
PH
11406
11407/* True iff TYPE is an Ada modular type. */
14f9c5c9 11408
14f9c5c9 11409int
d2e4a39e 11410ada_is_modular_type (struct type *type)
14f9c5c9 11411{
18af8284 11412 struct type *subranged_type = get_base_type (type);
14f9c5c9 11413
78134374 11414 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
dda83cd7
SM
11415 && subranged_type->code () == TYPE_CODE_INT
11416 && subranged_type->is_unsigned ());
14f9c5c9
AS
11417}
11418
4c4b4cd2
PH
11419/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11420
61ee279c 11421ULONGEST
0056e4d5 11422ada_modulus (struct type *type)
14f9c5c9 11423{
5e500d33
SM
11424 const dynamic_prop &high = type->bounds ()->high;
11425
11426 if (high.kind () == PROP_CONST)
11427 return (ULONGEST) high.const_val () + 1;
11428
11429 /* If TYPE is unresolved, the high bound might be a location list. Return
11430 0, for lack of a better value to return. */
11431 return 0;
14f9c5c9 11432}
d2e4a39e 11433\f
f7f9143b
JB
11434
11435/* Ada exception catchpoint support:
11436 ---------------------------------
11437
11438 We support 3 kinds of exception catchpoints:
11439 . catchpoints on Ada exceptions
11440 . catchpoints on unhandled Ada exceptions
11441 . catchpoints on failed assertions
11442
11443 Exceptions raised during failed assertions, or unhandled exceptions
11444 could perfectly be caught with the general catchpoint on Ada exceptions.
11445 However, we can easily differentiate these two special cases, and having
11446 the option to distinguish these two cases from the rest can be useful
11447 to zero-in on certain situations.
11448
11449 Exception catchpoints are a specialized form of breakpoint,
11450 since they rely on inserting breakpoints inside known routines
11451 of the GNAT runtime. The implementation therefore uses a standard
11452 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11453 of breakpoint_ops.
11454
0259addd
JB
11455 Support in the runtime for exception catchpoints have been changed
11456 a few times already, and these changes affect the implementation
11457 of these catchpoints. In order to be able to support several
11458 variants of the runtime, we use a sniffer that will determine
28010a5d 11459 the runtime variant used by the program being debugged. */
f7f9143b 11460
82eacd52
JB
11461/* Ada's standard exceptions.
11462
11463 The Ada 83 standard also defined Numeric_Error. But there so many
11464 situations where it was unclear from the Ada 83 Reference Manual
11465 (RM) whether Constraint_Error or Numeric_Error should be raised,
11466 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11467 Interpretation saying that anytime the RM says that Numeric_Error
11468 should be raised, the implementation may raise Constraint_Error.
11469 Ada 95 went one step further and pretty much removed Numeric_Error
11470 from the list of standard exceptions (it made it a renaming of
11471 Constraint_Error, to help preserve compatibility when compiling
11472 an Ada83 compiler). As such, we do not include Numeric_Error from
11473 this list of standard exceptions. */
3d0b0fa3 11474
27087b7f 11475static const char * const standard_exc[] = {
3d0b0fa3
JB
11476 "constraint_error",
11477 "program_error",
11478 "storage_error",
11479 "tasking_error"
11480};
11481
0259addd
JB
11482typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11483
11484/* A structure that describes how to support exception catchpoints
11485 for a given executable. */
11486
11487struct exception_support_info
11488{
11489 /* The name of the symbol to break on in order to insert
11490 a catchpoint on exceptions. */
11491 const char *catch_exception_sym;
11492
11493 /* The name of the symbol to break on in order to insert
11494 a catchpoint on unhandled exceptions. */
11495 const char *catch_exception_unhandled_sym;
11496
11497 /* The name of the symbol to break on in order to insert
11498 a catchpoint on failed assertions. */
11499 const char *catch_assert_sym;
11500
9f757bf7
XR
11501 /* The name of the symbol to break on in order to insert
11502 a catchpoint on exception handling. */
11503 const char *catch_handlers_sym;
11504
0259addd
JB
11505 /* Assuming that the inferior just triggered an unhandled exception
11506 catchpoint, this function is responsible for returning the address
11507 in inferior memory where the name of that exception is stored.
11508 Return zero if the address could not be computed. */
11509 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11510};
11511
11512static CORE_ADDR ada_unhandled_exception_name_addr (void);
11513static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11514
11515/* The following exception support info structure describes how to
11516 implement exception catchpoints with the latest version of the
ca683e3a 11517 Ada runtime (as of 2019-08-??). */
0259addd
JB
11518
11519static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11520{
11521 "__gnat_debug_raise_exception", /* catch_exception_sym */
11522 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11523 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11524 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11525 ada_unhandled_exception_name_addr
11526};
11527
11528/* The following exception support info structure describes how to
11529 implement exception catchpoints with an earlier version of the
11530 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11531
11532static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11533{
11534 "__gnat_debug_raise_exception", /* catch_exception_sym */
11535 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11536 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11537 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11538 ada_unhandled_exception_name_addr
11539};
11540
11541/* The following exception support info structure describes how to
11542 implement exception catchpoints with a slightly older version
11543 of the Ada runtime. */
11544
11545static const struct exception_support_info exception_support_info_fallback =
11546{
11547 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11548 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11549 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11550 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11551 ada_unhandled_exception_name_addr_from_raise
11552};
11553
f17011e0
JB
11554/* Return nonzero if we can detect the exception support routines
11555 described in EINFO.
11556
11557 This function errors out if an abnormal situation is detected
11558 (for instance, if we find the exception support routines, but
11559 that support is found to be incomplete). */
11560
11561static int
11562ada_has_this_exception_support (const struct exception_support_info *einfo)
11563{
11564 struct symbol *sym;
11565
11566 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11567 that should be compiled with debugging information. As a result, we
11568 expect to find that symbol in the symtabs. */
11569
11570 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11571 if (sym == NULL)
a6af7abe
JB
11572 {
11573 /* Perhaps we did not find our symbol because the Ada runtime was
11574 compiled without debugging info, or simply stripped of it.
11575 It happens on some GNU/Linux distributions for instance, where
11576 users have to install a separate debug package in order to get
11577 the runtime's debugging info. In that situation, let the user
11578 know why we cannot insert an Ada exception catchpoint.
11579
11580 Note: Just for the purpose of inserting our Ada exception
11581 catchpoint, we could rely purely on the associated minimal symbol.
11582 But we would be operating in degraded mode anyway, since we are
11583 still lacking the debugging info needed later on to extract
11584 the name of the exception being raised (this name is printed in
11585 the catchpoint message, and is also used when trying to catch
11586 a specific exception). We do not handle this case for now. */
3b7344d5 11587 struct bound_minimal_symbol msym
1c8e84b0
JB
11588 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11589
3b7344d5 11590 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11591 error (_("Your Ada runtime appears to be missing some debugging "
11592 "information.\nCannot insert Ada exception catchpoint "
11593 "in this configuration."));
11594
11595 return 0;
11596 }
f17011e0
JB
11597
11598 /* Make sure that the symbol we found corresponds to a function. */
11599
11600 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11601 {
11602 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11603 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11604 return 0;
11605 }
11606
11607 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11608 if (sym == NULL)
11609 {
11610 struct bound_minimal_symbol msym
11611 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11612
11613 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11614 error (_("Your Ada runtime appears to be missing some debugging "
11615 "information.\nCannot insert Ada exception catchpoint "
11616 "in this configuration."));
11617
11618 return 0;
11619 }
11620
11621 /* Make sure that the symbol we found corresponds to a function. */
11622
11623 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11624 {
11625 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11626 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11627 return 0;
11628 }
f17011e0
JB
11629
11630 return 1;
11631}
11632
0259addd
JB
11633/* Inspect the Ada runtime and determine which exception info structure
11634 should be used to provide support for exception catchpoints.
11635
3eecfa55
JB
11636 This function will always set the per-inferior exception_info,
11637 or raise an error. */
0259addd
JB
11638
11639static void
11640ada_exception_support_info_sniffer (void)
11641{
3eecfa55 11642 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11643
11644 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11645 if (data->exception_info != NULL)
0259addd
JB
11646 return;
11647
11648 /* Check the latest (default) exception support info. */
f17011e0 11649 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11650 {
3eecfa55 11651 data->exception_info = &default_exception_support_info;
0259addd
JB
11652 return;
11653 }
11654
ca683e3a
AO
11655 /* Try the v0 exception suport info. */
11656 if (ada_has_this_exception_support (&exception_support_info_v0))
11657 {
11658 data->exception_info = &exception_support_info_v0;
11659 return;
11660 }
11661
0259addd 11662 /* Try our fallback exception suport info. */
f17011e0 11663 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11664 {
3eecfa55 11665 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11666 return;
11667 }
11668
11669 /* Sometimes, it is normal for us to not be able to find the routine
11670 we are looking for. This happens when the program is linked with
11671 the shared version of the GNAT runtime, and the program has not been
11672 started yet. Inform the user of these two possible causes if
11673 applicable. */
11674
ccefe4c4 11675 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11676 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11677
11678 /* If the symbol does not exist, then check that the program is
11679 already started, to make sure that shared libraries have been
11680 loaded. If it is not started, this may mean that the symbol is
11681 in a shared library. */
11682
e99b03dc 11683 if (inferior_ptid.pid () == 0)
0259addd
JB
11684 error (_("Unable to insert catchpoint. Try to start the program first."));
11685
11686 /* At this point, we know that we are debugging an Ada program and
11687 that the inferior has been started, but we still are not able to
0963b4bd 11688 find the run-time symbols. That can mean that we are in
0259addd
JB
11689 configurable run time mode, or that a-except as been optimized
11690 out by the linker... In any case, at this point it is not worth
11691 supporting this feature. */
11692
7dda8cff 11693 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11694}
11695
f7f9143b
JB
11696/* True iff FRAME is very likely to be that of a function that is
11697 part of the runtime system. This is all very heuristic, but is
11698 intended to be used as advice as to what frames are uninteresting
11699 to most users. */
11700
11701static int
11702is_known_support_routine (struct frame_info *frame)
11703{
692465f1 11704 enum language func_lang;
f7f9143b 11705 int i;
f35a17b5 11706 const char *fullname;
f7f9143b 11707
4ed6b5be
JB
11708 /* If this code does not have any debugging information (no symtab),
11709 This cannot be any user code. */
f7f9143b 11710
51abb421 11711 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11712 if (sal.symtab == NULL)
11713 return 1;
11714
4ed6b5be
JB
11715 /* If there is a symtab, but the associated source file cannot be
11716 located, then assume this is not user code: Selecting a frame
11717 for which we cannot display the code would not be very helpful
11718 for the user. This should also take care of case such as VxWorks
11719 where the kernel has some debugging info provided for a few units. */
f7f9143b 11720
f35a17b5
JK
11721 fullname = symtab_to_fullname (sal.symtab);
11722 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11723 return 1;
11724
85102364 11725 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
11726 We also check the name of the objfile against the name of some
11727 known system libraries that sometimes come with debugging info
11728 too. */
11729
f7f9143b
JB
11730 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11731 {
11732 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11733 if (re_exec (lbasename (sal.symtab->filename)))
dda83cd7 11734 return 1;
eb822aa6 11735 if (SYMTAB_OBJFILE (sal.symtab) != NULL
dda83cd7
SM
11736 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11737 return 1;
f7f9143b
JB
11738 }
11739
4ed6b5be 11740 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11741
c6dc63a1
TT
11742 gdb::unique_xmalloc_ptr<char> func_name
11743 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
11744 if (func_name == NULL)
11745 return 1;
11746
11747 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11748 {
11749 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
11750 if (re_exec (func_name.get ()))
11751 return 1;
f7f9143b
JB
11752 }
11753
11754 return 0;
11755}
11756
11757/* Find the first frame that contains debugging information and that is not
11758 part of the Ada run-time, starting from FI and moving upward. */
11759
0ef643c8 11760void
f7f9143b
JB
11761ada_find_printable_frame (struct frame_info *fi)
11762{
11763 for (; fi != NULL; fi = get_prev_frame (fi))
11764 {
11765 if (!is_known_support_routine (fi))
dda83cd7
SM
11766 {
11767 select_frame (fi);
11768 break;
11769 }
f7f9143b
JB
11770 }
11771
11772}
11773
11774/* Assuming that the inferior just triggered an unhandled exception
11775 catchpoint, return the address in inferior memory where the name
11776 of the exception is stored.
11777
11778 Return zero if the address could not be computed. */
11779
11780static CORE_ADDR
11781ada_unhandled_exception_name_addr (void)
0259addd
JB
11782{
11783 return parse_and_eval_address ("e.full_name");
11784}
11785
11786/* Same as ada_unhandled_exception_name_addr, except that this function
11787 should be used when the inferior uses an older version of the runtime,
11788 where the exception name needs to be extracted from a specific frame
11789 several frames up in the callstack. */
11790
11791static CORE_ADDR
11792ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11793{
11794 int frame_level;
11795 struct frame_info *fi;
3eecfa55 11796 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
11797
11798 /* To determine the name of this exception, we need to select
11799 the frame corresponding to RAISE_SYM_NAME. This frame is
11800 at least 3 levels up, so we simply skip the first 3 frames
11801 without checking the name of their associated function. */
11802 fi = get_current_frame ();
11803 for (frame_level = 0; frame_level < 3; frame_level += 1)
11804 if (fi != NULL)
11805 fi = get_prev_frame (fi);
11806
11807 while (fi != NULL)
11808 {
692465f1
JB
11809 enum language func_lang;
11810
c6dc63a1
TT
11811 gdb::unique_xmalloc_ptr<char> func_name
11812 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
11813 if (func_name != NULL)
11814 {
dda83cd7 11815 if (strcmp (func_name.get (),
55b87a52
KS
11816 data->exception_info->catch_exception_sym) == 0)
11817 break; /* We found the frame we were looking for... */
55b87a52 11818 }
fb44b1a7 11819 fi = get_prev_frame (fi);
f7f9143b
JB
11820 }
11821
11822 if (fi == NULL)
11823 return 0;
11824
11825 select_frame (fi);
11826 return parse_and_eval_address ("id.full_name");
11827}
11828
11829/* Assuming the inferior just triggered an Ada exception catchpoint
11830 (of any type), return the address in inferior memory where the name
11831 of the exception is stored, if applicable.
11832
45db7c09
PA
11833 Assumes the selected frame is the current frame.
11834
f7f9143b
JB
11835 Return zero if the address could not be computed, or if not relevant. */
11836
11837static CORE_ADDR
761269c8 11838ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
dda83cd7 11839 struct breakpoint *b)
f7f9143b 11840{
3eecfa55
JB
11841 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11842
f7f9143b
JB
11843 switch (ex)
11844 {
761269c8 11845 case ada_catch_exception:
dda83cd7
SM
11846 return (parse_and_eval_address ("e.full_name"));
11847 break;
f7f9143b 11848
761269c8 11849 case ada_catch_exception_unhandled:
dda83cd7
SM
11850 return data->exception_info->unhandled_exception_name_addr ();
11851 break;
9f757bf7
XR
11852
11853 case ada_catch_handlers:
dda83cd7 11854 return 0; /* The runtimes does not provide access to the exception
9f757bf7 11855 name. */
dda83cd7 11856 break;
9f757bf7 11857
761269c8 11858 case ada_catch_assert:
dda83cd7
SM
11859 return 0; /* Exception name is not relevant in this case. */
11860 break;
f7f9143b
JB
11861
11862 default:
dda83cd7
SM
11863 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11864 break;
f7f9143b
JB
11865 }
11866
11867 return 0; /* Should never be reached. */
11868}
11869
e547c119
JB
11870/* Assuming the inferior is stopped at an exception catchpoint,
11871 return the message which was associated to the exception, if
11872 available. Return NULL if the message could not be retrieved.
11873
e547c119
JB
11874 Note: The exception message can be associated to an exception
11875 either through the use of the Raise_Exception function, or
11876 more simply (Ada 2005 and later), via:
11877
11878 raise Exception_Name with "exception message";
11879
11880 */
11881
6f46ac85 11882static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11883ada_exception_message_1 (void)
11884{
11885 struct value *e_msg_val;
e547c119 11886 int e_msg_len;
e547c119
JB
11887
11888 /* For runtimes that support this feature, the exception message
11889 is passed as an unbounded string argument called "message". */
11890 e_msg_val = parse_and_eval ("message");
11891 if (e_msg_val == NULL)
11892 return NULL; /* Exception message not supported. */
11893
11894 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11895 gdb_assert (e_msg_val != NULL);
11896 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11897
11898 /* If the message string is empty, then treat it as if there was
11899 no exception message. */
11900 if (e_msg_len <= 0)
11901 return NULL;
11902
15f3b077
TT
11903 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11904 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11905 e_msg_len);
11906 e_msg.get ()[e_msg_len] = '\0';
11907
11908 return e_msg;
e547c119
JB
11909}
11910
11911/* Same as ada_exception_message_1, except that all exceptions are
11912 contained here (returning NULL instead). */
11913
6f46ac85 11914static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11915ada_exception_message (void)
11916{
6f46ac85 11917 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 11918
a70b8144 11919 try
e547c119
JB
11920 {
11921 e_msg = ada_exception_message_1 ();
11922 }
230d2906 11923 catch (const gdb_exception_error &e)
e547c119 11924 {
6f46ac85 11925 e_msg.reset (nullptr);
e547c119 11926 }
e547c119
JB
11927
11928 return e_msg;
11929}
11930
f7f9143b
JB
11931/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11932 any error that ada_exception_name_addr_1 might cause to be thrown.
11933 When an error is intercepted, a warning with the error message is printed,
11934 and zero is returned. */
11935
11936static CORE_ADDR
761269c8 11937ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
dda83cd7 11938 struct breakpoint *b)
f7f9143b 11939{
f7f9143b
JB
11940 CORE_ADDR result = 0;
11941
a70b8144 11942 try
f7f9143b
JB
11943 {
11944 result = ada_exception_name_addr_1 (ex, b);
11945 }
11946
230d2906 11947 catch (const gdb_exception_error &e)
f7f9143b 11948 {
3d6e9d23 11949 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
11950 return 0;
11951 }
11952
11953 return result;
11954}
11955
cb7de75e 11956static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
11957 (const char *excep_string,
11958 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
11959
11960/* Ada catchpoints.
11961
11962 In the case of catchpoints on Ada exceptions, the catchpoint will
11963 stop the target on every exception the program throws. When a user
11964 specifies the name of a specific exception, we translate this
11965 request into a condition expression (in text form), and then parse
11966 it into an expression stored in each of the catchpoint's locations.
11967 We then use this condition to check whether the exception that was
11968 raised is the one the user is interested in. If not, then the
11969 target is resumed again. We store the name of the requested
11970 exception, in order to be able to re-set the condition expression
11971 when symbols change. */
11972
11973/* An instance of this type is used to represent an Ada catchpoint
5625a286 11974 breakpoint location. */
28010a5d 11975
5625a286 11976class ada_catchpoint_location : public bp_location
28010a5d 11977{
5625a286 11978public:
5f486660 11979 ada_catchpoint_location (breakpoint *owner)
f06f1252 11980 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 11981 {}
28010a5d
PA
11982
11983 /* The condition that checks whether the exception that was raised
11984 is the specific exception the user specified on catchpoint
11985 creation. */
4d01a485 11986 expression_up excep_cond_expr;
28010a5d
PA
11987};
11988
c1fc2657 11989/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 11990
c1fc2657 11991struct ada_catchpoint : public breakpoint
28010a5d 11992{
37f6a7f4
TT
11993 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
11994 : m_kind (kind)
11995 {
11996 }
11997
28010a5d 11998 /* The name of the specific exception the user specified. */
bc18fbb5 11999 std::string excep_string;
37f6a7f4
TT
12000
12001 /* What kind of catchpoint this is. */
12002 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
12003};
12004
12005/* Parse the exception condition string in the context of each of the
12006 catchpoint's locations, and store them for later evaluation. */
12007
12008static void
9f757bf7 12009create_excep_cond_exprs (struct ada_catchpoint *c,
dda83cd7 12010 enum ada_exception_catchpoint_kind ex)
28010a5d 12011{
fccf9de1
TT
12012 struct bp_location *bl;
12013
28010a5d 12014 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12015 if (c->excep_string.empty ())
28010a5d
PA
12016 return;
12017
12018 /* Same if there are no locations... */
c1fc2657 12019 if (c->loc == NULL)
28010a5d
PA
12020 return;
12021
fccf9de1
TT
12022 /* Compute the condition expression in text form, from the specific
12023 expection we want to catch. */
12024 std::string cond_string
12025 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 12026
fccf9de1
TT
12027 /* Iterate over all the catchpoint's locations, and parse an
12028 expression for each. */
12029 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
12030 {
12031 struct ada_catchpoint_location *ada_loc
fccf9de1 12032 = (struct ada_catchpoint_location *) bl;
4d01a485 12033 expression_up exp;
28010a5d 12034
fccf9de1 12035 if (!bl->shlib_disabled)
28010a5d 12036 {
bbc13ae3 12037 const char *s;
28010a5d 12038
cb7de75e 12039 s = cond_string.c_str ();
a70b8144 12040 try
28010a5d 12041 {
fccf9de1
TT
12042 exp = parse_exp_1 (&s, bl->address,
12043 block_for_pc (bl->address),
036e657b 12044 0);
28010a5d 12045 }
230d2906 12046 catch (const gdb_exception_error &e)
849f2b52
JB
12047 {
12048 warning (_("failed to reevaluate internal exception condition "
12049 "for catchpoint %d: %s"),
3d6e9d23 12050 c->number, e.what ());
849f2b52 12051 }
28010a5d
PA
12052 }
12053
b22e99fd 12054 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12055 }
28010a5d
PA
12056}
12057
28010a5d
PA
12058/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12059 structure for all exception catchpoint kinds. */
12060
12061static struct bp_location *
37f6a7f4 12062allocate_location_exception (struct breakpoint *self)
28010a5d 12063{
5f486660 12064 return new ada_catchpoint_location (self);
28010a5d
PA
12065}
12066
12067/* Implement the RE_SET method in the breakpoint_ops structure for all
12068 exception catchpoint kinds. */
12069
12070static void
37f6a7f4 12071re_set_exception (struct breakpoint *b)
28010a5d
PA
12072{
12073 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12074
12075 /* Call the base class's method. This updates the catchpoint's
12076 locations. */
2060206e 12077 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12078
12079 /* Reparse the exception conditional expressions. One for each
12080 location. */
37f6a7f4 12081 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12082}
12083
12084/* Returns true if we should stop for this breakpoint hit. If the
12085 user specified a specific exception, we only want to cause a stop
12086 if the program thrown that exception. */
12087
12088static int
12089should_stop_exception (const struct bp_location *bl)
12090{
12091 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12092 const struct ada_catchpoint_location *ada_loc
12093 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12094 int stop;
12095
37f6a7f4
TT
12096 struct internalvar *var = lookup_internalvar ("_ada_exception");
12097 if (c->m_kind == ada_catch_assert)
12098 clear_internalvar (var);
12099 else
12100 {
12101 try
12102 {
12103 const char *expr;
12104
12105 if (c->m_kind == ada_catch_handlers)
12106 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12107 ".all.occurrence.id");
12108 else
12109 expr = "e";
12110
12111 struct value *exc = parse_and_eval (expr);
12112 set_internalvar (var, exc);
12113 }
12114 catch (const gdb_exception_error &ex)
12115 {
12116 clear_internalvar (var);
12117 }
12118 }
12119
28010a5d 12120 /* With no specific exception, should always stop. */
bc18fbb5 12121 if (c->excep_string.empty ())
28010a5d
PA
12122 return 1;
12123
12124 if (ada_loc->excep_cond_expr == NULL)
12125 {
12126 /* We will have a NULL expression if back when we were creating
12127 the expressions, this location's had failed to parse. */
12128 return 1;
12129 }
12130
12131 stop = 1;
a70b8144 12132 try
28010a5d
PA
12133 {
12134 struct value *mark;
12135
12136 mark = value_mark ();
4d01a485 12137 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12138 value_free_to_mark (mark);
12139 }
230d2906 12140 catch (const gdb_exception &ex)
492d29ea
PA
12141 {
12142 exception_fprintf (gdb_stderr, ex,
12143 _("Error in testing exception condition:\n"));
12144 }
492d29ea 12145
28010a5d
PA
12146 return stop;
12147}
12148
12149/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12150 for all exception catchpoint kinds. */
12151
12152static void
37f6a7f4 12153check_status_exception (bpstat bs)
28010a5d 12154{
b6433ede 12155 bs->stop = should_stop_exception (bs->bp_location_at.get ());
28010a5d
PA
12156}
12157
f7f9143b
JB
12158/* Implement the PRINT_IT method in the breakpoint_ops structure
12159 for all exception catchpoint kinds. */
12160
12161static enum print_stop_action
37f6a7f4 12162print_it_exception (bpstat bs)
f7f9143b 12163{
79a45e25 12164 struct ui_out *uiout = current_uiout;
348d480f
PA
12165 struct breakpoint *b = bs->breakpoint_at;
12166
956a9fb9 12167 annotate_catchpoint (b->number);
f7f9143b 12168
112e8700 12169 if (uiout->is_mi_like_p ())
f7f9143b 12170 {
112e8700 12171 uiout->field_string ("reason",
956a9fb9 12172 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12173 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12174 }
12175
112e8700
SM
12176 uiout->text (b->disposition == disp_del
12177 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12178 uiout->field_signed ("bkptno", b->number);
112e8700 12179 uiout->text (", ");
f7f9143b 12180
45db7c09
PA
12181 /* ada_exception_name_addr relies on the selected frame being the
12182 current frame. Need to do this here because this function may be
12183 called more than once when printing a stop, and below, we'll
12184 select the first frame past the Ada run-time (see
12185 ada_find_printable_frame). */
12186 select_frame (get_current_frame ());
12187
37f6a7f4
TT
12188 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12189 switch (c->m_kind)
f7f9143b 12190 {
761269c8
JB
12191 case ada_catch_exception:
12192 case ada_catch_exception_unhandled:
9f757bf7 12193 case ada_catch_handlers:
956a9fb9 12194 {
37f6a7f4 12195 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12196 char exception_name[256];
12197
12198 if (addr != 0)
12199 {
c714b426
PA
12200 read_memory (addr, (gdb_byte *) exception_name,
12201 sizeof (exception_name) - 1);
956a9fb9
JB
12202 exception_name [sizeof (exception_name) - 1] = '\0';
12203 }
12204 else
12205 {
12206 /* For some reason, we were unable to read the exception
12207 name. This could happen if the Runtime was compiled
12208 without debugging info, for instance. In that case,
12209 just replace the exception name by the generic string
12210 "exception" - it will read as "an exception" in the
12211 notification we are about to print. */
967cff16 12212 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12213 }
12214 /* In the case of unhandled exception breakpoints, we print
12215 the exception name as "unhandled EXCEPTION_NAME", to make
12216 it clearer to the user which kind of catchpoint just got
12217 hit. We used ui_out_text to make sure that this extra
12218 info does not pollute the exception name in the MI case. */
37f6a7f4 12219 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12220 uiout->text ("unhandled ");
12221 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12222 }
12223 break;
761269c8 12224 case ada_catch_assert:
956a9fb9
JB
12225 /* In this case, the name of the exception is not really
12226 important. Just print "failed assertion" to make it clearer
12227 that his program just hit an assertion-failure catchpoint.
12228 We used ui_out_text because this info does not belong in
12229 the MI output. */
112e8700 12230 uiout->text ("failed assertion");
956a9fb9 12231 break;
f7f9143b 12232 }
e547c119 12233
6f46ac85 12234 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12235 if (exception_message != NULL)
12236 {
e547c119 12237 uiout->text (" (");
6f46ac85 12238 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12239 uiout->text (")");
e547c119
JB
12240 }
12241
112e8700 12242 uiout->text (" at ");
956a9fb9 12243 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12244
12245 return PRINT_SRC_AND_LOC;
12246}
12247
12248/* Implement the PRINT_ONE method in the breakpoint_ops structure
12249 for all exception catchpoint kinds. */
12250
12251static void
37f6a7f4 12252print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12253{
79a45e25 12254 struct ui_out *uiout = current_uiout;
28010a5d 12255 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12256 struct value_print_options opts;
12257
12258 get_user_print_options (&opts);
f06f1252 12259
79a45b7d 12260 if (opts.addressprint)
f06f1252 12261 uiout->field_skip ("addr");
f7f9143b
JB
12262
12263 annotate_field (5);
37f6a7f4 12264 switch (c->m_kind)
f7f9143b 12265 {
761269c8 12266 case ada_catch_exception:
dda83cd7
SM
12267 if (!c->excep_string.empty ())
12268 {
bc18fbb5
TT
12269 std::string msg = string_printf (_("`%s' Ada exception"),
12270 c->excep_string.c_str ());
28010a5d 12271
dda83cd7
SM
12272 uiout->field_string ("what", msg);
12273 }
12274 else
12275 uiout->field_string ("what", "all Ada exceptions");
12276
12277 break;
f7f9143b 12278
761269c8 12279 case ada_catch_exception_unhandled:
dda83cd7
SM
12280 uiout->field_string ("what", "unhandled Ada exceptions");
12281 break;
f7f9143b 12282
9f757bf7 12283 case ada_catch_handlers:
dda83cd7
SM
12284 if (!c->excep_string.empty ())
12285 {
9f757bf7
XR
12286 uiout->field_fmt ("what",
12287 _("`%s' Ada exception handlers"),
bc18fbb5 12288 c->excep_string.c_str ());
dda83cd7
SM
12289 }
12290 else
9f757bf7 12291 uiout->field_string ("what", "all Ada exceptions handlers");
dda83cd7 12292 break;
9f757bf7 12293
761269c8 12294 case ada_catch_assert:
dda83cd7
SM
12295 uiout->field_string ("what", "failed Ada assertions");
12296 break;
f7f9143b
JB
12297
12298 default:
dda83cd7
SM
12299 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12300 break;
f7f9143b
JB
12301 }
12302}
12303
12304/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12305 for all exception catchpoint kinds. */
12306
12307static void
37f6a7f4 12308print_mention_exception (struct breakpoint *b)
f7f9143b 12309{
28010a5d 12310 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12311 struct ui_out *uiout = current_uiout;
28010a5d 12312
112e8700 12313 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
dda83cd7 12314 : _("Catchpoint "));
381befee 12315 uiout->field_signed ("bkptno", b->number);
112e8700 12316 uiout->text (": ");
00eb2c4a 12317
37f6a7f4 12318 switch (c->m_kind)
f7f9143b 12319 {
761269c8 12320 case ada_catch_exception:
dda83cd7 12321 if (!c->excep_string.empty ())
00eb2c4a 12322 {
862d101a 12323 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12324 c->excep_string.c_str ());
862d101a 12325 uiout->text (info.c_str ());
00eb2c4a 12326 }
dda83cd7
SM
12327 else
12328 uiout->text (_("all Ada exceptions"));
12329 break;
f7f9143b 12330
761269c8 12331 case ada_catch_exception_unhandled:
dda83cd7
SM
12332 uiout->text (_("unhandled Ada exceptions"));
12333 break;
9f757bf7
XR
12334
12335 case ada_catch_handlers:
dda83cd7 12336 if (!c->excep_string.empty ())
9f757bf7
XR
12337 {
12338 std::string info
12339 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12340 c->excep_string.c_str ());
9f757bf7
XR
12341 uiout->text (info.c_str ());
12342 }
dda83cd7
SM
12343 else
12344 uiout->text (_("all Ada exceptions handlers"));
12345 break;
9f757bf7 12346
761269c8 12347 case ada_catch_assert:
dda83cd7
SM
12348 uiout->text (_("failed Ada assertions"));
12349 break;
f7f9143b
JB
12350
12351 default:
dda83cd7
SM
12352 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12353 break;
f7f9143b
JB
12354 }
12355}
12356
6149aea9
PA
12357/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12358 for all exception catchpoint kinds. */
12359
12360static void
37f6a7f4 12361print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12362{
28010a5d
PA
12363 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12364
37f6a7f4 12365 switch (c->m_kind)
6149aea9 12366 {
761269c8 12367 case ada_catch_exception:
6149aea9 12368 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12369 if (!c->excep_string.empty ())
12370 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12371 break;
12372
761269c8 12373 case ada_catch_exception_unhandled:
78076abc 12374 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12375 break;
12376
9f757bf7
XR
12377 case ada_catch_handlers:
12378 fprintf_filtered (fp, "catch handlers");
12379 break;
12380
761269c8 12381 case ada_catch_assert:
6149aea9
PA
12382 fprintf_filtered (fp, "catch assert");
12383 break;
12384
12385 default:
12386 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12387 }
d9b3f62e 12388 print_recreate_thread (b, fp);
6149aea9
PA
12389}
12390
37f6a7f4 12391/* Virtual tables for various breakpoint types. */
2060206e 12392static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12393static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12394static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12395static struct breakpoint_ops catch_handlers_breakpoint_ops;
12396
f06f1252
TT
12397/* See ada-lang.h. */
12398
12399bool
12400is_ada_exception_catchpoint (breakpoint *bp)
12401{
12402 return (bp->ops == &catch_exception_breakpoint_ops
12403 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12404 || bp->ops == &catch_assert_breakpoint_ops
12405 || bp->ops == &catch_handlers_breakpoint_ops);
12406}
12407
f7f9143b
JB
12408/* Split the arguments specified in a "catch exception" command.
12409 Set EX to the appropriate catchpoint type.
28010a5d 12410 Set EXCEP_STRING to the name of the specific exception if
5845583d 12411 specified by the user.
9f757bf7
XR
12412 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12413 "catch handlers" command. False otherwise.
5845583d
JB
12414 If a condition is found at the end of the arguments, the condition
12415 expression is stored in COND_STRING (memory must be deallocated
12416 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12417
12418static void
a121b7c1 12419catch_ada_exception_command_split (const char *args,
9f757bf7 12420 bool is_catch_handlers_cmd,
dda83cd7 12421 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12422 std::string *excep_string,
12423 std::string *cond_string)
f7f9143b 12424{
bc18fbb5 12425 std::string exception_name;
f7f9143b 12426
bc18fbb5
TT
12427 exception_name = extract_arg (&args);
12428 if (exception_name == "if")
5845583d
JB
12429 {
12430 /* This is not an exception name; this is the start of a condition
12431 expression for a catchpoint on all exceptions. So, "un-get"
12432 this token, and set exception_name to NULL. */
bc18fbb5 12433 exception_name.clear ();
5845583d
JB
12434 args -= 2;
12435 }
f7f9143b 12436
5845583d 12437 /* Check to see if we have a condition. */
f7f9143b 12438
f1735a53 12439 args = skip_spaces (args);
61012eef 12440 if (startswith (args, "if")
5845583d
JB
12441 && (isspace (args[2]) || args[2] == '\0'))
12442 {
12443 args += 2;
f1735a53 12444 args = skip_spaces (args);
5845583d
JB
12445
12446 if (args[0] == '\0')
dda83cd7 12447 error (_("Condition missing after `if' keyword"));
bc18fbb5 12448 *cond_string = args;
5845583d
JB
12449
12450 args += strlen (args);
12451 }
12452
12453 /* Check that we do not have any more arguments. Anything else
12454 is unexpected. */
f7f9143b
JB
12455
12456 if (args[0] != '\0')
12457 error (_("Junk at end of expression"));
12458
9f757bf7
XR
12459 if (is_catch_handlers_cmd)
12460 {
12461 /* Catch handling of exceptions. */
12462 *ex = ada_catch_handlers;
12463 *excep_string = exception_name;
12464 }
bc18fbb5 12465 else if (exception_name.empty ())
f7f9143b
JB
12466 {
12467 /* Catch all exceptions. */
761269c8 12468 *ex = ada_catch_exception;
bc18fbb5 12469 excep_string->clear ();
f7f9143b 12470 }
bc18fbb5 12471 else if (exception_name == "unhandled")
f7f9143b
JB
12472 {
12473 /* Catch unhandled exceptions. */
761269c8 12474 *ex = ada_catch_exception_unhandled;
bc18fbb5 12475 excep_string->clear ();
f7f9143b
JB
12476 }
12477 else
12478 {
12479 /* Catch a specific exception. */
761269c8 12480 *ex = ada_catch_exception;
28010a5d 12481 *excep_string = exception_name;
f7f9143b
JB
12482 }
12483}
12484
12485/* Return the name of the symbol on which we should break in order to
12486 implement a catchpoint of the EX kind. */
12487
12488static const char *
761269c8 12489ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12490{
3eecfa55
JB
12491 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12492
12493 gdb_assert (data->exception_info != NULL);
0259addd 12494
f7f9143b
JB
12495 switch (ex)
12496 {
761269c8 12497 case ada_catch_exception:
dda83cd7
SM
12498 return (data->exception_info->catch_exception_sym);
12499 break;
761269c8 12500 case ada_catch_exception_unhandled:
dda83cd7
SM
12501 return (data->exception_info->catch_exception_unhandled_sym);
12502 break;
761269c8 12503 case ada_catch_assert:
dda83cd7
SM
12504 return (data->exception_info->catch_assert_sym);
12505 break;
9f757bf7 12506 case ada_catch_handlers:
dda83cd7
SM
12507 return (data->exception_info->catch_handlers_sym);
12508 break;
f7f9143b 12509 default:
dda83cd7
SM
12510 internal_error (__FILE__, __LINE__,
12511 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12512 }
12513}
12514
12515/* Return the breakpoint ops "virtual table" used for catchpoints
12516 of the EX kind. */
12517
c0a91b2b 12518static const struct breakpoint_ops *
761269c8 12519ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12520{
12521 switch (ex)
12522 {
761269c8 12523 case ada_catch_exception:
dda83cd7
SM
12524 return (&catch_exception_breakpoint_ops);
12525 break;
761269c8 12526 case ada_catch_exception_unhandled:
dda83cd7
SM
12527 return (&catch_exception_unhandled_breakpoint_ops);
12528 break;
761269c8 12529 case ada_catch_assert:
dda83cd7
SM
12530 return (&catch_assert_breakpoint_ops);
12531 break;
9f757bf7 12532 case ada_catch_handlers:
dda83cd7
SM
12533 return (&catch_handlers_breakpoint_ops);
12534 break;
f7f9143b 12535 default:
dda83cd7
SM
12536 internal_error (__FILE__, __LINE__,
12537 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12538 }
12539}
12540
12541/* Return the condition that will be used to match the current exception
12542 being raised with the exception that the user wants to catch. This
12543 assumes that this condition is used when the inferior just triggered
12544 an exception catchpoint.
cb7de75e 12545 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12546
cb7de75e 12547static std::string
9f757bf7 12548ada_exception_catchpoint_cond_string (const char *excep_string,
dda83cd7 12549 enum ada_exception_catchpoint_kind ex)
f7f9143b 12550{
3d0b0fa3 12551 int i;
fccf9de1 12552 bool is_standard_exc = false;
cb7de75e 12553 std::string result;
9f757bf7
XR
12554
12555 if (ex == ada_catch_handlers)
12556 {
12557 /* For exception handlers catchpoints, the condition string does
dda83cd7 12558 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12559 result = ("long_integer (GNAT_GCC_exception_Access"
12560 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12561 }
12562 else
fccf9de1 12563 result = "long_integer (e)";
3d0b0fa3 12564
0963b4bd 12565 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12566 runtime units that have been compiled without debugging info; if
28010a5d 12567 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12568 exception (e.g. "constraint_error") then, during the evaluation
12569 of the condition expression, the symbol lookup on this name would
0963b4bd 12570 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12571 may then be set only on user-defined exceptions which have the
12572 same not-fully-qualified name (e.g. my_package.constraint_error).
12573
12574 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12575 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12576 exception constraint_error" is rewritten into "catch exception
12577 standard.constraint_error".
12578
85102364 12579 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12580 the inferior program, then the only way to specify this exception as a
12581 breakpoint condition is to use its fully-qualified named:
fccf9de1 12582 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12583
12584 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12585 {
28010a5d 12586 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12587 {
fccf9de1 12588 is_standard_exc = true;
9f757bf7 12589 break;
3d0b0fa3
JB
12590 }
12591 }
9f757bf7 12592
fccf9de1
TT
12593 result += " = ";
12594
12595 if (is_standard_exc)
12596 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12597 else
12598 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12599
9f757bf7 12600 return result;
f7f9143b
JB
12601}
12602
12603/* Return the symtab_and_line that should be used to insert an exception
12604 catchpoint of the TYPE kind.
12605
28010a5d
PA
12606 ADDR_STRING returns the name of the function where the real
12607 breakpoint that implements the catchpoints is set, depending on the
12608 type of catchpoint we need to create. */
f7f9143b
JB
12609
12610static struct symtab_and_line
bc18fbb5 12611ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12612 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12613{
12614 const char *sym_name;
12615 struct symbol *sym;
f7f9143b 12616
0259addd
JB
12617 /* First, find out which exception support info to use. */
12618 ada_exception_support_info_sniffer ();
12619
12620 /* Then lookup the function on which we will break in order to catch
f7f9143b 12621 the Ada exceptions requested by the user. */
f7f9143b
JB
12622 sym_name = ada_exception_sym_name (ex);
12623 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12624
57aff202
JB
12625 if (sym == NULL)
12626 error (_("Catchpoint symbol not found: %s"), sym_name);
12627
12628 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12629 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12630
12631 /* Set ADDR_STRING. */
cc12f4a8 12632 *addr_string = sym_name;
f7f9143b 12633
f7f9143b 12634 /* Set OPS. */
4b9eee8c 12635 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12636
f17011e0 12637 return find_function_start_sal (sym, 1);
f7f9143b
JB
12638}
12639
b4a5b78b 12640/* Create an Ada exception catchpoint.
f7f9143b 12641
b4a5b78b 12642 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12643
bc18fbb5 12644 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12645 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12646 of the exception to which this catchpoint applies.
2df4d1d5 12647
bc18fbb5 12648 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12649
b4a5b78b
JB
12650 TEMPFLAG, if nonzero, means that the underlying breakpoint
12651 should be temporary.
28010a5d 12652
b4a5b78b 12653 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12654
349774ef 12655void
28010a5d 12656create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12657 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12658 const std::string &excep_string,
56ecd069 12659 const std::string &cond_string,
28010a5d 12660 int tempflag,
349774ef 12661 int disabled,
28010a5d
PA
12662 int from_tty)
12663{
cc12f4a8 12664 std::string addr_string;
b4a5b78b 12665 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12666 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12667
37f6a7f4 12668 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12669 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12670 ops, tempflag, disabled, from_tty);
28010a5d 12671 c->excep_string = excep_string;
9f757bf7 12672 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069 12673 if (!cond_string.empty ())
733d554a 12674 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
b270e6f9 12675 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12676}
12677
9ac4176b
PA
12678/* Implement the "catch exception" command. */
12679
12680static void
eb4c3f4a 12681catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12682 struct cmd_list_element *command)
12683{
a121b7c1 12684 const char *arg = arg_entry;
9ac4176b
PA
12685 struct gdbarch *gdbarch = get_current_arch ();
12686 int tempflag;
761269c8 12687 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12688 std::string excep_string;
56ecd069 12689 std::string cond_string;
9ac4176b
PA
12690
12691 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12692
12693 if (!arg)
12694 arg = "";
9f757bf7 12695 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12696 &cond_string);
9f757bf7
XR
12697 create_ada_exception_catchpoint (gdbarch, ex_kind,
12698 excep_string, cond_string,
12699 tempflag, 1 /* enabled */,
12700 from_tty);
12701}
12702
12703/* Implement the "catch handlers" command. */
12704
12705static void
12706catch_ada_handlers_command (const char *arg_entry, int from_tty,
12707 struct cmd_list_element *command)
12708{
12709 const char *arg = arg_entry;
12710 struct gdbarch *gdbarch = get_current_arch ();
12711 int tempflag;
12712 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12713 std::string excep_string;
56ecd069 12714 std::string cond_string;
9f757bf7
XR
12715
12716 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12717
12718 if (!arg)
12719 arg = "";
12720 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 12721 &cond_string);
b4a5b78b
JB
12722 create_ada_exception_catchpoint (gdbarch, ex_kind,
12723 excep_string, cond_string,
349774ef
JB
12724 tempflag, 1 /* enabled */,
12725 from_tty);
9ac4176b
PA
12726}
12727
71bed2db
TT
12728/* Completion function for the Ada "catch" commands. */
12729
12730static void
12731catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12732 const char *text, const char *word)
12733{
12734 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12735
12736 for (const ada_exc_info &info : exceptions)
12737 {
12738 if (startswith (info.name, word))
b02f78f9 12739 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
12740 }
12741}
12742
b4a5b78b 12743/* Split the arguments specified in a "catch assert" command.
5845583d 12744
b4a5b78b
JB
12745 ARGS contains the command's arguments (or the empty string if
12746 no arguments were passed).
5845583d
JB
12747
12748 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12749 (the memory needs to be deallocated after use). */
5845583d 12750
b4a5b78b 12751static void
56ecd069 12752catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 12753{
f1735a53 12754 args = skip_spaces (args);
f7f9143b 12755
5845583d 12756 /* Check whether a condition was provided. */
61012eef 12757 if (startswith (args, "if")
5845583d 12758 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12759 {
5845583d 12760 args += 2;
f1735a53 12761 args = skip_spaces (args);
5845583d 12762 if (args[0] == '\0')
dda83cd7 12763 error (_("condition missing after `if' keyword"));
56ecd069 12764 cond_string.assign (args);
f7f9143b
JB
12765 }
12766
5845583d
JB
12767 /* Otherwise, there should be no other argument at the end of
12768 the command. */
12769 else if (args[0] != '\0')
12770 error (_("Junk at end of arguments."));
f7f9143b
JB
12771}
12772
9ac4176b
PA
12773/* Implement the "catch assert" command. */
12774
12775static void
eb4c3f4a 12776catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12777 struct cmd_list_element *command)
12778{
a121b7c1 12779 const char *arg = arg_entry;
9ac4176b
PA
12780 struct gdbarch *gdbarch = get_current_arch ();
12781 int tempflag;
56ecd069 12782 std::string cond_string;
9ac4176b
PA
12783
12784 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12785
12786 if (!arg)
12787 arg = "";
56ecd069 12788 catch_ada_assert_command_split (arg, cond_string);
761269c8 12789 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 12790 "", cond_string,
349774ef
JB
12791 tempflag, 1 /* enabled */,
12792 from_tty);
9ac4176b 12793}
778865d3
JB
12794
12795/* Return non-zero if the symbol SYM is an Ada exception object. */
12796
12797static int
12798ada_is_exception_sym (struct symbol *sym)
12799{
7d93a1e0 12800 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
12801
12802 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
dda83cd7
SM
12803 && SYMBOL_CLASS (sym) != LOC_BLOCK
12804 && SYMBOL_CLASS (sym) != LOC_CONST
12805 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12806 && type_name != NULL && strcmp (type_name, "exception") == 0);
778865d3
JB
12807}
12808
12809/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12810 Ada exception object. This matches all exceptions except the ones
12811 defined by the Ada language. */
12812
12813static int
12814ada_is_non_standard_exception_sym (struct symbol *sym)
12815{
12816 int i;
12817
12818 if (!ada_is_exception_sym (sym))
12819 return 0;
12820
12821 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 12822 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
12823 return 0; /* A standard exception. */
12824
12825 /* Numeric_Error is also a standard exception, so exclude it.
12826 See the STANDARD_EXC description for more details as to why
12827 this exception is not listed in that array. */
987012b8 12828 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
12829 return 0;
12830
12831 return 1;
12832}
12833
ab816a27 12834/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
12835 objects.
12836
12837 The comparison is determined first by exception name, and then
12838 by exception address. */
12839
ab816a27 12840bool
cc536b21 12841ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 12842{
778865d3
JB
12843 int result;
12844
ab816a27
TT
12845 result = strcmp (name, other.name);
12846 if (result < 0)
12847 return true;
12848 if (result == 0 && addr < other.addr)
12849 return true;
12850 return false;
12851}
778865d3 12852
ab816a27 12853bool
cc536b21 12854ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
12855{
12856 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
12857}
12858
12859/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12860 routine, but keeping the first SKIP elements untouched.
12861
12862 All duplicates are also removed. */
12863
12864static void
ab816a27 12865sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
12866 int skip)
12867{
ab816a27
TT
12868 std::sort (exceptions->begin () + skip, exceptions->end ());
12869 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12870 exceptions->end ());
778865d3
JB
12871}
12872
778865d3
JB
12873/* Add all exceptions defined by the Ada standard whose name match
12874 a regular expression.
12875
12876 If PREG is not NULL, then this regexp_t object is used to
12877 perform the symbol name matching. Otherwise, no name-based
12878 filtering is performed.
12879
12880 EXCEPTIONS is a vector of exceptions to which matching exceptions
12881 gets pushed. */
12882
12883static void
2d7cc5c7 12884ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 12885 std::vector<ada_exc_info> *exceptions)
778865d3
JB
12886{
12887 int i;
12888
12889 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12890 {
12891 if (preg == NULL
2d7cc5c7 12892 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
12893 {
12894 struct bound_minimal_symbol msymbol
12895 = ada_lookup_simple_minsym (standard_exc[i]);
12896
12897 if (msymbol.minsym != NULL)
12898 {
12899 struct ada_exc_info info
77e371c0 12900 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 12901
ab816a27 12902 exceptions->push_back (info);
778865d3
JB
12903 }
12904 }
12905 }
12906}
12907
12908/* Add all Ada exceptions defined locally and accessible from the given
12909 FRAME.
12910
12911 If PREG is not NULL, then this regexp_t object is used to
12912 perform the symbol name matching. Otherwise, no name-based
12913 filtering is performed.
12914
12915 EXCEPTIONS is a vector of exceptions to which matching exceptions
12916 gets pushed. */
12917
12918static void
2d7cc5c7
PA
12919ada_add_exceptions_from_frame (compiled_regex *preg,
12920 struct frame_info *frame,
ab816a27 12921 std::vector<ada_exc_info> *exceptions)
778865d3 12922{
3977b71f 12923 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12924
12925 while (block != 0)
12926 {
12927 struct block_iterator iter;
12928 struct symbol *sym;
12929
12930 ALL_BLOCK_SYMBOLS (block, iter, sym)
12931 {
12932 switch (SYMBOL_CLASS (sym))
12933 {
12934 case LOC_TYPEDEF:
12935 case LOC_BLOCK:
12936 case LOC_CONST:
12937 break;
12938 default:
12939 if (ada_is_exception_sym (sym))
12940 {
987012b8 12941 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
12942 SYMBOL_VALUE_ADDRESS (sym)};
12943
ab816a27 12944 exceptions->push_back (info);
778865d3
JB
12945 }
12946 }
12947 }
12948 if (BLOCK_FUNCTION (block) != NULL)
12949 break;
12950 block = BLOCK_SUPERBLOCK (block);
12951 }
12952}
12953
14bc53a8
PA
12954/* Return true if NAME matches PREG or if PREG is NULL. */
12955
12956static bool
2d7cc5c7 12957name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
12958{
12959 return (preg == NULL
f945dedf 12960 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
12961}
12962
778865d3
JB
12963/* Add all exceptions defined globally whose name name match
12964 a regular expression, excluding standard exceptions.
12965
12966 The reason we exclude standard exceptions is that they need
12967 to be handled separately: Standard exceptions are defined inside
12968 a runtime unit which is normally not compiled with debugging info,
12969 and thus usually do not show up in our symbol search. However,
12970 if the unit was in fact built with debugging info, we need to
12971 exclude them because they would duplicate the entry we found
12972 during the special loop that specifically searches for those
12973 standard exceptions.
12974
12975 If PREG is not NULL, then this regexp_t object is used to
12976 perform the symbol name matching. Otherwise, no name-based
12977 filtering is performed.
12978
12979 EXCEPTIONS is a vector of exceptions to which matching exceptions
12980 gets pushed. */
12981
12982static void
2d7cc5c7 12983ada_add_global_exceptions (compiled_regex *preg,
ab816a27 12984 std::vector<ada_exc_info> *exceptions)
778865d3 12985{
14bc53a8
PA
12986 /* In Ada, the symbol "search name" is a linkage name, whereas the
12987 regular expression used to do the matching refers to the natural
12988 name. So match against the decoded name. */
12989 expand_symtabs_matching (NULL,
b5ec771e 12990 lookup_name_info::match_any (),
14bc53a8
PA
12991 [&] (const char *search_name)
12992 {
f945dedf
CB
12993 std::string decoded = ada_decode (search_name);
12994 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
12995 },
12996 NULL,
12997 VARIABLES_DOMAIN);
778865d3 12998
2030c079 12999 for (objfile *objfile : current_program_space->objfiles ())
778865d3 13000 {
b669c953 13001 for (compunit_symtab *s : objfile->compunits ())
778865d3 13002 {
d8aeb77f
TT
13003 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13004 int i;
778865d3 13005
d8aeb77f
TT
13006 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13007 {
582942f4 13008 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
13009 struct block_iterator iter;
13010 struct symbol *sym;
778865d3 13011
d8aeb77f
TT
13012 ALL_BLOCK_SYMBOLS (b, iter, sym)
13013 if (ada_is_non_standard_exception_sym (sym)
987012b8 13014 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
13015 {
13016 struct ada_exc_info info
987012b8 13017 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
13018
13019 exceptions->push_back (info);
13020 }
13021 }
778865d3
JB
13022 }
13023 }
13024}
13025
13026/* Implements ada_exceptions_list with the regular expression passed
13027 as a regex_t, rather than a string.
13028
13029 If not NULL, PREG is used to filter out exceptions whose names
13030 do not match. Otherwise, all exceptions are listed. */
13031
ab816a27 13032static std::vector<ada_exc_info>
2d7cc5c7 13033ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13034{
ab816a27 13035 std::vector<ada_exc_info> result;
778865d3
JB
13036 int prev_len;
13037
13038 /* First, list the known standard exceptions. These exceptions
13039 need to be handled separately, as they are usually defined in
13040 runtime units that have been compiled without debugging info. */
13041
13042 ada_add_standard_exceptions (preg, &result);
13043
13044 /* Next, find all exceptions whose scope is local and accessible
13045 from the currently selected frame. */
13046
13047 if (has_stack_frames ())
13048 {
ab816a27 13049 prev_len = result.size ();
778865d3
JB
13050 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13051 &result);
ab816a27 13052 if (result.size () > prev_len)
778865d3
JB
13053 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13054 }
13055
13056 /* Add all exceptions whose scope is global. */
13057
ab816a27 13058 prev_len = result.size ();
778865d3 13059 ada_add_global_exceptions (preg, &result);
ab816a27 13060 if (result.size () > prev_len)
778865d3
JB
13061 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13062
778865d3
JB
13063 return result;
13064}
13065
13066/* Return a vector of ada_exc_info.
13067
13068 If REGEXP is NULL, all exceptions are included in the result.
13069 Otherwise, it should contain a valid regular expression,
13070 and only the exceptions whose names match that regular expression
13071 are included in the result.
13072
13073 The exceptions are sorted in the following order:
13074 - Standard exceptions (defined by the Ada language), in
13075 alphabetical order;
13076 - Exceptions only visible from the current frame, in
13077 alphabetical order;
13078 - Exceptions whose scope is global, in alphabetical order. */
13079
ab816a27 13080std::vector<ada_exc_info>
778865d3
JB
13081ada_exceptions_list (const char *regexp)
13082{
2d7cc5c7
PA
13083 if (regexp == NULL)
13084 return ada_exceptions_list_1 (NULL);
778865d3 13085
2d7cc5c7
PA
13086 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13087 return ada_exceptions_list_1 (&reg);
778865d3
JB
13088}
13089
13090/* Implement the "info exceptions" command. */
13091
13092static void
1d12d88f 13093info_exceptions_command (const char *regexp, int from_tty)
778865d3 13094{
778865d3 13095 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13096
ab816a27 13097 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13098
13099 if (regexp != NULL)
13100 printf_filtered
13101 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13102 else
13103 printf_filtered (_("All defined Ada exceptions:\n"));
13104
ab816a27
TT
13105 for (const ada_exc_info &info : exceptions)
13106 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13107}
13108
dda83cd7 13109 /* Operators */
4c4b4cd2
PH
13110/* Information about operators given special treatment in functions
13111 below. */
13112/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13113
13114#define ADA_OPERATORS \
13115 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13116 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13117 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13118 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13119 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13120 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13121 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13122 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13123 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13124 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13125 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13126 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13127 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13128 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13129 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13130 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13131 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13132 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13133 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13134
13135static void
554794dc
SDJ
13136ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13137 int *argsp)
4c4b4cd2
PH
13138{
13139 switch (exp->elts[pc - 1].opcode)
13140 {
76a01679 13141 default:
4c4b4cd2
PH
13142 operator_length_standard (exp, pc, oplenp, argsp);
13143 break;
13144
13145#define OP_DEFN(op, len, args, binop) \
13146 case op: *oplenp = len; *argsp = args; break;
13147 ADA_OPERATORS;
13148#undef OP_DEFN
52ce6436
PH
13149
13150 case OP_AGGREGATE:
13151 *oplenp = 3;
13152 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13153 break;
13154
13155 case OP_CHOICES:
13156 *oplenp = 3;
13157 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13158 break;
4c4b4cd2
PH
13159 }
13160}
13161
c0201579
JK
13162/* Implementation of the exp_descriptor method operator_check. */
13163
13164static int
13165ada_operator_check (struct expression *exp, int pos,
13166 int (*objfile_func) (struct objfile *objfile, void *data),
13167 void *data)
13168{
13169 const union exp_element *const elts = exp->elts;
13170 struct type *type = NULL;
13171
13172 switch (elts[pos].opcode)
13173 {
13174 case UNOP_IN_RANGE:
13175 case UNOP_QUAL:
13176 type = elts[pos + 1].type;
13177 break;
13178
13179 default:
13180 return operator_check_standard (exp, pos, objfile_func, data);
13181 }
13182
13183 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13184
6ac37371
SM
13185 if (type != nullptr && type->objfile_owner () != nullptr
13186 && objfile_func (type->objfile_owner (), data))
c0201579
JK
13187 return 1;
13188
13189 return 0;
13190}
13191
4c4b4cd2
PH
13192/* As for operator_length, but assumes PC is pointing at the first
13193 element of the operator, and gives meaningful results only for the
52ce6436 13194 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13195
13196static void
76a01679 13197ada_forward_operator_length (struct expression *exp, int pc,
dda83cd7 13198 int *oplenp, int *argsp)
4c4b4cd2 13199{
76a01679 13200 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13201 {
13202 default:
13203 *oplenp = *argsp = 0;
13204 break;
52ce6436 13205
4c4b4cd2
PH
13206#define OP_DEFN(op, len, args, binop) \
13207 case op: *oplenp = len; *argsp = args; break;
13208 ADA_OPERATORS;
13209#undef OP_DEFN
52ce6436
PH
13210
13211 case OP_AGGREGATE:
13212 *oplenp = 3;
13213 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13214 break;
13215
13216 case OP_CHOICES:
13217 *oplenp = 3;
13218 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13219 break;
13220
13221 case OP_STRING:
13222 case OP_NAME:
13223 {
13224 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13225
52ce6436
PH
13226 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13227 *argsp = 0;
13228 break;
13229 }
4c4b4cd2
PH
13230 }
13231}
13232
13233static int
13234ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13235{
13236 enum exp_opcode op = exp->elts[elt].opcode;
13237 int oplen, nargs;
13238 int pc = elt;
13239 int i;
76a01679 13240
4c4b4cd2
PH
13241 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13242
76a01679 13243 switch (op)
4c4b4cd2 13244 {
76a01679 13245 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13246 case OP_ATR_FIRST:
13247 case OP_ATR_LAST:
13248 case OP_ATR_LENGTH:
13249 case OP_ATR_IMAGE:
13250 case OP_ATR_MAX:
13251 case OP_ATR_MIN:
13252 case OP_ATR_MODULUS:
13253 case OP_ATR_POS:
13254 case OP_ATR_SIZE:
13255 case OP_ATR_TAG:
13256 case OP_ATR_VAL:
13257 break;
13258
13259 case UNOP_IN_RANGE:
13260 case UNOP_QUAL:
323e0a4a
AC
13261 /* XXX: gdb_sprint_host_address, type_sprint */
13262 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13263 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13264 fprintf_filtered (stream, " (");
13265 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13266 fprintf_filtered (stream, ")");
13267 break;
13268 case BINOP_IN_BOUNDS:
52ce6436
PH
13269 fprintf_filtered (stream, " (%d)",
13270 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13271 break;
13272 case TERNOP_IN_RANGE:
13273 break;
13274
52ce6436
PH
13275 case OP_AGGREGATE:
13276 case OP_OTHERS:
13277 case OP_DISCRETE_RANGE:
13278 case OP_POSITIONAL:
13279 case OP_CHOICES:
13280 break;
13281
13282 case OP_NAME:
13283 case OP_STRING:
13284 {
13285 char *name = &exp->elts[elt + 2].string;
13286 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13287
52ce6436
PH
13288 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13289 break;
13290 }
13291
4c4b4cd2
PH
13292 default:
13293 return dump_subexp_body_standard (exp, stream, elt);
13294 }
13295
13296 elt += oplen;
13297 for (i = 0; i < nargs; i += 1)
13298 elt = dump_subexp (exp, stream, elt);
13299
13300 return elt;
13301}
13302
13303/* The Ada extension of print_subexp (q.v.). */
13304
76a01679
JB
13305static void
13306ada_print_subexp (struct expression *exp, int *pos,
dda83cd7 13307 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13308{
52ce6436 13309 int oplen, nargs, i;
4c4b4cd2
PH
13310 int pc = *pos;
13311 enum exp_opcode op = exp->elts[pc].opcode;
13312
13313 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13314
52ce6436 13315 *pos += oplen;
4c4b4cd2
PH
13316 switch (op)
13317 {
13318 default:
52ce6436 13319 *pos -= oplen;
4c4b4cd2
PH
13320 print_subexp_standard (exp, pos, stream, prec);
13321 return;
13322
13323 case OP_VAR_VALUE:
987012b8 13324 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13325 return;
13326
13327 case BINOP_IN_BOUNDS:
323e0a4a 13328 /* XXX: sprint_subexp */
4c4b4cd2 13329 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13330 fputs_filtered (" in ", stream);
4c4b4cd2 13331 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13332 fputs_filtered ("'range", stream);
4c4b4cd2 13333 if (exp->elts[pc + 1].longconst > 1)
dda83cd7
SM
13334 fprintf_filtered (stream, "(%ld)",
13335 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13336 return;
13337
13338 case TERNOP_IN_RANGE:
4c4b4cd2 13339 if (prec >= PREC_EQUAL)
dda83cd7 13340 fputs_filtered ("(", stream);
323e0a4a 13341 /* XXX: sprint_subexp */
4c4b4cd2 13342 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13343 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13344 print_subexp (exp, pos, stream, PREC_EQUAL);
13345 fputs_filtered (" .. ", stream);
13346 print_subexp (exp, pos, stream, PREC_EQUAL);
13347 if (prec >= PREC_EQUAL)
dda83cd7 13348 fputs_filtered (")", stream);
76a01679 13349 return;
4c4b4cd2
PH
13350
13351 case OP_ATR_FIRST:
13352 case OP_ATR_LAST:
13353 case OP_ATR_LENGTH:
13354 case OP_ATR_IMAGE:
13355 case OP_ATR_MAX:
13356 case OP_ATR_MIN:
13357 case OP_ATR_MODULUS:
13358 case OP_ATR_POS:
13359 case OP_ATR_SIZE:
13360 case OP_ATR_TAG:
13361 case OP_ATR_VAL:
4c4b4cd2 13362 if (exp->elts[*pos].opcode == OP_TYPE)
dda83cd7
SM
13363 {
13364 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13365 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
79d43c61 13366 &type_print_raw_options);
dda83cd7
SM
13367 *pos += 3;
13368 }
4c4b4cd2 13369 else
dda83cd7 13370 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13371 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13372 if (nargs > 1)
dda83cd7
SM
13373 {
13374 int tem;
13375
13376 for (tem = 1; tem < nargs; tem += 1)
13377 {
13378 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13379 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13380 }
13381 fputs_filtered (")", stream);
13382 }
4c4b4cd2 13383 return;
14f9c5c9 13384
4c4b4cd2 13385 case UNOP_QUAL:
4c4b4cd2
PH
13386 type_print (exp->elts[pc + 1].type, "", stream, 0);
13387 fputs_filtered ("'(", stream);
13388 print_subexp (exp, pos, stream, PREC_PREFIX);
13389 fputs_filtered (")", stream);
13390 return;
14f9c5c9 13391
4c4b4cd2 13392 case UNOP_IN_RANGE:
323e0a4a 13393 /* XXX: sprint_subexp */
4c4b4cd2 13394 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13395 fputs_filtered (" in ", stream);
79d43c61
TT
13396 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13397 &type_print_raw_options);
4c4b4cd2 13398 return;
52ce6436
PH
13399
13400 case OP_DISCRETE_RANGE:
13401 print_subexp (exp, pos, stream, PREC_SUFFIX);
13402 fputs_filtered ("..", stream);
13403 print_subexp (exp, pos, stream, PREC_SUFFIX);
13404 return;
13405
13406 case OP_OTHERS:
13407 fputs_filtered ("others => ", stream);
13408 print_subexp (exp, pos, stream, PREC_SUFFIX);
13409 return;
13410
13411 case OP_CHOICES:
13412 for (i = 0; i < nargs-1; i += 1)
13413 {
13414 if (i > 0)
13415 fputs_filtered ("|", stream);
13416 print_subexp (exp, pos, stream, PREC_SUFFIX);
13417 }
13418 fputs_filtered (" => ", stream);
13419 print_subexp (exp, pos, stream, PREC_SUFFIX);
13420 return;
13421
13422 case OP_POSITIONAL:
13423 print_subexp (exp, pos, stream, PREC_SUFFIX);
13424 return;
13425
13426 case OP_AGGREGATE:
13427 fputs_filtered ("(", stream);
13428 for (i = 0; i < nargs; i += 1)
13429 {
13430 if (i > 0)
13431 fputs_filtered (", ", stream);
13432 print_subexp (exp, pos, stream, PREC_SUFFIX);
13433 }
13434 fputs_filtered (")", stream);
13435 return;
4c4b4cd2
PH
13436 }
13437}
14f9c5c9
AS
13438
13439/* Table mapping opcodes into strings for printing operators
13440 and precedences of the operators. */
13441
d2e4a39e
AS
13442static const struct op_print ada_op_print_tab[] = {
13443 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13444 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13445 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13446 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13447 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13448 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13449 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13450 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13451 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13452 {">=", BINOP_GEQ, PREC_ORDER, 0},
13453 {">", BINOP_GTR, PREC_ORDER, 0},
13454 {"<", BINOP_LESS, PREC_ORDER, 0},
13455 {">>", BINOP_RSH, PREC_SHIFT, 0},
13456 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13457 {"+", BINOP_ADD, PREC_ADD, 0},
13458 {"-", BINOP_SUB, PREC_ADD, 0},
13459 {"&", BINOP_CONCAT, PREC_ADD, 0},
13460 {"*", BINOP_MUL, PREC_MUL, 0},
13461 {"/", BINOP_DIV, PREC_MUL, 0},
13462 {"rem", BINOP_REM, PREC_MUL, 0},
13463 {"mod", BINOP_MOD, PREC_MUL, 0},
13464 {"**", BINOP_EXP, PREC_REPEAT, 0},
13465 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13466 {"-", UNOP_NEG, PREC_PREFIX, 0},
13467 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13468 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13469 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13470 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13471 {".all", UNOP_IND, PREC_SUFFIX, 1},
13472 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13473 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13474 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9 13475};
6c038f32
PH
13476\f
13477 /* Language vector */
13478
6c038f32
PH
13479static const struct exp_descriptor ada_exp_descriptor = {
13480 ada_print_subexp,
13481 ada_operator_length,
c0201579 13482 ada_operator_check,
6c038f32
PH
13483 ada_dump_subexp_body,
13484 ada_evaluate_subexp
13485};
13486
b5ec771e
PA
13487/* symbol_name_matcher_ftype adapter for wild_match. */
13488
13489static bool
13490do_wild_match (const char *symbol_search_name,
13491 const lookup_name_info &lookup_name,
a207cff2 13492 completion_match_result *comp_match_res)
b5ec771e
PA
13493{
13494 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13495}
13496
13497/* symbol_name_matcher_ftype adapter for full_match. */
13498
13499static bool
13500do_full_match (const char *symbol_search_name,
13501 const lookup_name_info &lookup_name,
a207cff2 13502 completion_match_result *comp_match_res)
b5ec771e 13503{
959d6a67
TT
13504 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13505
13506 /* If both symbols start with "_ada_", just let the loop below
13507 handle the comparison. However, if only the symbol name starts
13508 with "_ada_", skip the prefix and let the match proceed as
13509 usual. */
13510 if (startswith (symbol_search_name, "_ada_")
13511 && !startswith (lname, "_ada"))
86b44259
TT
13512 symbol_search_name += 5;
13513
86b44259
TT
13514 int uscore_count = 0;
13515 while (*lname != '\0')
13516 {
13517 if (*symbol_search_name != *lname)
13518 {
13519 if (*symbol_search_name == 'B' && uscore_count == 2
13520 && symbol_search_name[1] == '_')
13521 {
13522 symbol_search_name += 2;
13523 while (isdigit (*symbol_search_name))
13524 ++symbol_search_name;
13525 if (symbol_search_name[0] == '_'
13526 && symbol_search_name[1] == '_')
13527 {
13528 symbol_search_name += 2;
13529 continue;
13530 }
13531 }
13532 return false;
13533 }
13534
13535 if (*symbol_search_name == '_')
13536 ++uscore_count;
13537 else
13538 uscore_count = 0;
13539
13540 ++symbol_search_name;
13541 ++lname;
13542 }
13543
13544 return is_name_suffix (symbol_search_name);
b5ec771e
PA
13545}
13546
a2cd4f14
JB
13547/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13548
13549static bool
13550do_exact_match (const char *symbol_search_name,
13551 const lookup_name_info &lookup_name,
13552 completion_match_result *comp_match_res)
13553{
13554 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13555}
13556
b5ec771e
PA
13557/* Build the Ada lookup name for LOOKUP_NAME. */
13558
13559ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13560{
e0802d59 13561 gdb::string_view user_name = lookup_name.name ();
b5ec771e 13562
6a780b67 13563 if (!user_name.empty () && user_name[0] == '<')
b5ec771e
PA
13564 {
13565 if (user_name.back () == '>')
e0802d59 13566 m_encoded_name
5ac58899 13567 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
b5ec771e 13568 else
e0802d59 13569 m_encoded_name
5ac58899 13570 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
b5ec771e
PA
13571 m_encoded_p = true;
13572 m_verbatim_p = true;
13573 m_wild_match_p = false;
13574 m_standard_p = false;
13575 }
13576 else
13577 {
13578 m_verbatim_p = false;
13579
e0802d59 13580 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13581
13582 if (!m_encoded_p)
13583 {
e0802d59 13584 const char *folded = ada_fold_name (user_name);
5c4258f4
TT
13585 m_encoded_name = ada_encode_1 (folded, false);
13586 if (m_encoded_name.empty ())
5ac58899 13587 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13588 }
13589 else
5ac58899 13590 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13591
13592 /* Handle the 'package Standard' special case. See description
13593 of m_standard_p. */
13594 if (startswith (m_encoded_name.c_str (), "standard__"))
13595 {
13596 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13597 m_standard_p = true;
13598 }
13599 else
13600 m_standard_p = false;
74ccd7f5 13601
b5ec771e
PA
13602 /* If the name contains a ".", then the user is entering a fully
13603 qualified entity name, and the match must not be done in wild
13604 mode. Similarly, if the user wants to complete what looks
13605 like an encoded name, the match must not be done in wild
13606 mode. Also, in the standard__ special case always do
13607 non-wild matching. */
13608 m_wild_match_p
13609 = (lookup_name.match_type () != symbol_name_match_type::FULL
13610 && !m_encoded_p
13611 && !m_standard_p
13612 && user_name.find ('.') == std::string::npos);
13613 }
13614}
13615
13616/* symbol_name_matcher_ftype method for Ada. This only handles
13617 completion mode. */
13618
13619static bool
13620ada_symbol_name_matches (const char *symbol_search_name,
13621 const lookup_name_info &lookup_name,
a207cff2 13622 completion_match_result *comp_match_res)
74ccd7f5 13623{
b5ec771e
PA
13624 return lookup_name.ada ().matches (symbol_search_name,
13625 lookup_name.match_type (),
a207cff2 13626 comp_match_res);
b5ec771e
PA
13627}
13628
de63c46b
PA
13629/* A name matcher that matches the symbol name exactly, with
13630 strcmp. */
13631
13632static bool
13633literal_symbol_name_matcher (const char *symbol_search_name,
13634 const lookup_name_info &lookup_name,
13635 completion_match_result *comp_match_res)
13636{
e0802d59 13637 gdb::string_view name_view = lookup_name.name ();
de63c46b 13638
e0802d59
TT
13639 if (lookup_name.completion_mode ()
13640 ? (strncmp (symbol_search_name, name_view.data (),
13641 name_view.size ()) == 0)
13642 : symbol_search_name == name_view)
de63c46b
PA
13643 {
13644 if (comp_match_res != NULL)
13645 comp_match_res->set_match (symbol_search_name);
13646 return true;
13647 }
13648 else
13649 return false;
13650}
13651
c9debfb9 13652/* Implement the "get_symbol_name_matcher" language_defn method for
b5ec771e
PA
13653 Ada. */
13654
13655static symbol_name_matcher_ftype *
13656ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13657{
de63c46b
PA
13658 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13659 return literal_symbol_name_matcher;
13660
b5ec771e
PA
13661 if (lookup_name.completion_mode ())
13662 return ada_symbol_name_matches;
74ccd7f5 13663 else
b5ec771e
PA
13664 {
13665 if (lookup_name.ada ().wild_match_p ())
13666 return do_wild_match;
a2cd4f14
JB
13667 else if (lookup_name.ada ().verbatim_p ())
13668 return do_exact_match;
b5ec771e
PA
13669 else
13670 return do_full_match;
13671 }
74ccd7f5
JB
13672}
13673
0874fd07
AB
13674/* Class representing the Ada language. */
13675
13676class ada_language : public language_defn
13677{
13678public:
13679 ada_language ()
0e25e767 13680 : language_defn (language_ada)
0874fd07 13681 { /* Nothing. */ }
5bd40f2a 13682
6f7664a9
AB
13683 /* See language.h. */
13684
13685 const char *name () const override
13686 { return "ada"; }
13687
13688 /* See language.h. */
13689
13690 const char *natural_name () const override
13691 { return "Ada"; }
13692
e171d6f1
AB
13693 /* See language.h. */
13694
13695 const std::vector<const char *> &filename_extensions () const override
13696 {
13697 static const std::vector<const char *> extensions
13698 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13699 return extensions;
13700 }
13701
5bd40f2a
AB
13702 /* Print an array element index using the Ada syntax. */
13703
13704 void print_array_index (struct type *index_type,
13705 LONGEST index,
13706 struct ui_file *stream,
13707 const value_print_options *options) const override
13708 {
13709 struct value *index_value = val_atr (index_type, index);
13710
00c696a6 13711 value_print (index_value, stream, options);
5bd40f2a
AB
13712 fprintf_filtered (stream, " => ");
13713 }
15e5fd35
AB
13714
13715 /* Implement the "read_var_value" language_defn method for Ada. */
13716
13717 struct value *read_var_value (struct symbol *var,
13718 const struct block *var_block,
13719 struct frame_info *frame) const override
13720 {
13721 /* The only case where default_read_var_value is not sufficient
13722 is when VAR is a renaming... */
13723 if (frame != nullptr)
13724 {
13725 const struct block *frame_block = get_frame_block (frame, NULL);
13726 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13727 return ada_read_renaming_var_value (var, frame_block);
13728 }
13729
13730 /* This is a typical case where we expect the default_read_var_value
13731 function to work. */
13732 return language_defn::read_var_value (var, var_block, frame);
13733 }
1fb314aa
AB
13734
13735 /* See language.h. */
13736 void language_arch_info (struct gdbarch *gdbarch,
13737 struct language_arch_info *lai) const override
13738 {
13739 const struct builtin_type *builtin = builtin_type (gdbarch);
13740
7bea47f0
AB
13741 /* Helper function to allow shorter lines below. */
13742 auto add = [&] (struct type *t)
13743 {
13744 lai->add_primitive_type (t);
13745 };
13746
13747 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13748 0, "integer"));
13749 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13750 0, "long_integer"));
13751 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13752 0, "short_integer"));
13753 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13754 0, "character");
13755 lai->set_string_char_type (char_type);
13756 add (char_type);
13757 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13758 "float", gdbarch_float_format (gdbarch)));
13759 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13760 "long_float", gdbarch_double_format (gdbarch)));
13761 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13762 0, "long_long_integer"));
13763 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13764 "long_long_float",
13765 gdbarch_long_double_format (gdbarch)));
13766 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13767 0, "natural"));
13768 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13769 0, "positive"));
13770 add (builtin->builtin_void);
13771
13772 struct type *system_addr_ptr
1fb314aa
AB
13773 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13774 "void"));
7bea47f0
AB
13775 system_addr_ptr->set_name ("system__address");
13776 add (system_addr_ptr);
1fb314aa
AB
13777
13778 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13779 type. This is a signed integral type whose size is the same as
13780 the size of addresses. */
7bea47f0
AB
13781 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
13782 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13783 "storage_offset"));
1fb314aa 13784
7bea47f0 13785 lai->set_bool_type (builtin->builtin_bool);
1fb314aa 13786 }
4009ee92
AB
13787
13788 /* See language.h. */
13789
13790 bool iterate_over_symbols
13791 (const struct block *block, const lookup_name_info &name,
13792 domain_enum domain,
13793 gdb::function_view<symbol_found_callback_ftype> callback) const override
13794 {
d1183b06
TT
13795 std::vector<struct block_symbol> results
13796 = ada_lookup_symbol_list_worker (name, block, domain, 0);
4009ee92
AB
13797 for (block_symbol &sym : results)
13798 {
13799 if (!callback (&sym))
13800 return false;
13801 }
13802
13803 return true;
13804 }
6f827019
AB
13805
13806 /* See language.h. */
13807 bool sniff_from_mangled_name (const char *mangled,
13808 char **out) const override
13809 {
13810 std::string demangled = ada_decode (mangled);
13811
13812 *out = NULL;
13813
13814 if (demangled != mangled && demangled[0] != '<')
13815 {
13816 /* Set the gsymbol language to Ada, but still return 0.
13817 Two reasons for that:
13818
13819 1. For Ada, we prefer computing the symbol's decoded name
13820 on the fly rather than pre-compute it, in order to save
13821 memory (Ada projects are typically very large).
13822
13823 2. There are some areas in the definition of the GNAT
13824 encoding where, with a bit of bad luck, we might be able
13825 to decode a non-Ada symbol, generating an incorrect
13826 demangled name (Eg: names ending with "TB" for instance
13827 are identified as task bodies and so stripped from
13828 the decoded name returned).
13829
13830 Returning true, here, but not setting *DEMANGLED, helps us get
13831 a little bit of the best of both worlds. Because we're last,
13832 we should not affect any of the other languages that were
13833 able to demangle the symbol before us; we get to correctly
13834 tag Ada symbols as such; and even if we incorrectly tagged a
13835 non-Ada symbol, which should be rare, any routing through the
13836 Ada language should be transparent (Ada tries to behave much
13837 like C/C++ with non-Ada symbols). */
13838 return true;
13839 }
13840
13841 return false;
13842 }
fbfb0a46
AB
13843
13844 /* See language.h. */
13845
5399db93 13846 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d
AB
13847 {
13848 return ada_la_decode (mangled, options);
13849 }
13850
13851 /* See language.h. */
13852
fbfb0a46
AB
13853 void print_type (struct type *type, const char *varstring,
13854 struct ui_file *stream, int show, int level,
13855 const struct type_print_options *flags) const override
13856 {
13857 ada_print_type (type, varstring, stream, show, level, flags);
13858 }
c9debfb9 13859
53fc67f8
AB
13860 /* See language.h. */
13861
13862 const char *word_break_characters (void) const override
13863 {
13864 return ada_completer_word_break_characters;
13865 }
13866
7e56227d
AB
13867 /* See language.h. */
13868
13869 void collect_symbol_completion_matches (completion_tracker &tracker,
13870 complete_symbol_mode mode,
13871 symbol_name_match_type name_match_type,
13872 const char *text, const char *word,
13873 enum type_code code) const override
13874 {
13875 struct symbol *sym;
13876 const struct block *b, *surrounding_static_block = 0;
13877 struct block_iterator iter;
13878
13879 gdb_assert (code == TYPE_CODE_UNDEF);
13880
13881 lookup_name_info lookup_name (text, name_match_type, true);
13882
13883 /* First, look at the partial symtab symbols. */
13884 expand_symtabs_matching (NULL,
13885 lookup_name,
13886 NULL,
13887 NULL,
13888 ALL_DOMAIN);
13889
13890 /* At this point scan through the misc symbol vectors and add each
13891 symbol you find to the list. Eventually we want to ignore
13892 anything that isn't a text symbol (everything else will be
13893 handled by the psymtab code above). */
13894
13895 for (objfile *objfile : current_program_space->objfiles ())
13896 {
13897 for (minimal_symbol *msymbol : objfile->msymbols ())
13898 {
13899 QUIT;
13900
13901 if (completion_skip_symbol (mode, msymbol))
13902 continue;
13903
13904 language symbol_language = msymbol->language ();
13905
13906 /* Ada minimal symbols won't have their language set to Ada. If
13907 we let completion_list_add_name compare using the
13908 default/C-like matcher, then when completing e.g., symbols in a
13909 package named "pck", we'd match internal Ada symbols like
13910 "pckS", which are invalid in an Ada expression, unless you wrap
13911 them in '<' '>' to request a verbatim match.
13912
13913 Unfortunately, some Ada encoded names successfully demangle as
13914 C++ symbols (using an old mangling scheme), such as "name__2Xn"
13915 -> "Xn::name(void)" and thus some Ada minimal symbols end up
13916 with the wrong language set. Paper over that issue here. */
13917 if (symbol_language == language_auto
13918 || symbol_language == language_cplus)
13919 symbol_language = language_ada;
13920
13921 completion_list_add_name (tracker,
13922 symbol_language,
13923 msymbol->linkage_name (),
13924 lookup_name, text, word);
13925 }
13926 }
13927
13928 /* Search upwards from currently selected frame (so that we can
13929 complete on local vars. */
13930
13931 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13932 {
13933 if (!BLOCK_SUPERBLOCK (b))
13934 surrounding_static_block = b; /* For elmin of dups */
13935
13936 ALL_BLOCK_SYMBOLS (b, iter, sym)
13937 {
13938 if (completion_skip_symbol (mode, sym))
13939 continue;
13940
13941 completion_list_add_name (tracker,
13942 sym->language (),
13943 sym->linkage_name (),
13944 lookup_name, text, word);
13945 }
13946 }
13947
13948 /* Go through the symtabs and check the externs and statics for
13949 symbols which match. */
13950
13951 for (objfile *objfile : current_program_space->objfiles ())
13952 {
13953 for (compunit_symtab *s : objfile->compunits ())
13954 {
13955 QUIT;
13956 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
13957 ALL_BLOCK_SYMBOLS (b, iter, sym)
13958 {
13959 if (completion_skip_symbol (mode, sym))
13960 continue;
13961
13962 completion_list_add_name (tracker,
13963 sym->language (),
13964 sym->linkage_name (),
13965 lookup_name, text, word);
13966 }
13967 }
13968 }
13969
13970 for (objfile *objfile : current_program_space->objfiles ())
13971 {
13972 for (compunit_symtab *s : objfile->compunits ())
13973 {
13974 QUIT;
13975 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
13976 /* Don't do this block twice. */
13977 if (b == surrounding_static_block)
13978 continue;
13979 ALL_BLOCK_SYMBOLS (b, iter, sym)
13980 {
13981 if (completion_skip_symbol (mode, sym))
13982 continue;
13983
13984 completion_list_add_name (tracker,
13985 sym->language (),
13986 sym->linkage_name (),
13987 lookup_name, text, word);
13988 }
13989 }
13990 }
13991 }
13992
f16a9f57
AB
13993 /* See language.h. */
13994
13995 gdb::unique_xmalloc_ptr<char> watch_location_expression
13996 (struct type *type, CORE_ADDR addr) const override
13997 {
13998 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
13999 std::string name = type_to_string (type);
14000 return gdb::unique_xmalloc_ptr<char>
14001 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
14002 }
14003
a1d1fa3e
AB
14004 /* See language.h. */
14005
14006 void value_print (struct value *val, struct ui_file *stream,
14007 const struct value_print_options *options) const override
14008 {
14009 return ada_value_print (val, stream, options);
14010 }
14011
ebe2334e
AB
14012 /* See language.h. */
14013
14014 void value_print_inner
14015 (struct value *val, struct ui_file *stream, int recurse,
14016 const struct value_print_options *options) const override
14017 {
14018 return ada_value_print_inner (val, stream, recurse, options);
14019 }
14020
a78a19b1
AB
14021 /* See language.h. */
14022
14023 struct block_symbol lookup_symbol_nonlocal
14024 (const char *name, const struct block *block,
14025 const domain_enum domain) const override
14026 {
14027 struct block_symbol sym;
14028
14029 sym = ada_lookup_symbol (name, block_static_block (block), domain);
14030 if (sym.symbol != NULL)
14031 return sym;
14032
14033 /* If we haven't found a match at this point, try the primitive
14034 types. In other languages, this search is performed before
14035 searching for global symbols in order to short-circuit that
14036 global-symbol search if it happens that the name corresponds
14037 to a primitive type. But we cannot do the same in Ada, because
14038 it is perfectly legitimate for a program to declare a type which
14039 has the same name as a standard type. If looking up a type in
14040 that situation, we have traditionally ignored the primitive type
14041 in favor of user-defined types. This is why, unlike most other
14042 languages, we search the primitive types this late and only after
14043 having searched the global symbols without success. */
14044
14045 if (domain == VAR_DOMAIN)
14046 {
14047 struct gdbarch *gdbarch;
14048
14049 if (block == NULL)
14050 gdbarch = target_gdbarch ();
14051 else
14052 gdbarch = block_gdbarch (block);
14053 sym.symbol
14054 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
14055 if (sym.symbol != NULL)
14056 return sym;
14057 }
14058
14059 return {};
14060 }
14061
87afa652
AB
14062 /* See language.h. */
14063
14064 int parser (struct parser_state *ps) const override
14065 {
14066 warnings_issued = 0;
14067 return ada_parse (ps);
14068 }
14069
1bf9c363
AB
14070 /* See language.h.
14071
14072 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14073 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14074 namespace) and converts operators that are user-defined into
14075 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
14076 a preferred result type [at the moment, only type void has any
14077 effect---causing procedures to be preferred over functions in calls].
14078 A null CONTEXT_TYPE indicates that a non-void return type is
14079 preferred. May change (expand) *EXP. */
14080
c5c41205
TT
14081 void post_parser (expression_up *expp, struct parser_state *ps)
14082 const override
1bf9c363
AB
14083 {
14084 struct type *context_type = NULL;
14085 int pc = 0;
14086
c5c41205 14087 if (ps->void_context_p)
1bf9c363
AB
14088 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14089
c5c41205
TT
14090 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
14091 ps->block_tracker);
1bf9c363
AB
14092 }
14093
ec8cec5b
AB
14094 /* See language.h. */
14095
14096 void emitchar (int ch, struct type *chtype,
14097 struct ui_file *stream, int quoter) const override
14098 {
14099 ada_emit_char (ch, chtype, stream, quoter, 1);
14100 }
14101
52b50f2c
AB
14102 /* See language.h. */
14103
14104 void printchar (int ch, struct type *chtype,
14105 struct ui_file *stream) const override
14106 {
14107 ada_printchar (ch, chtype, stream);
14108 }
14109
d711ee67
AB
14110 /* See language.h. */
14111
14112 void printstr (struct ui_file *stream, struct type *elttype,
14113 const gdb_byte *string, unsigned int length,
14114 const char *encoding, int force_ellipses,
14115 const struct value_print_options *options) const override
14116 {
14117 ada_printstr (stream, elttype, string, length, encoding,
14118 force_ellipses, options);
14119 }
14120
4ffc13fb
AB
14121 /* See language.h. */
14122
14123 void print_typedef (struct type *type, struct symbol *new_symbol,
14124 struct ui_file *stream) const override
14125 {
14126 ada_print_typedef (type, new_symbol, stream);
14127 }
14128
39e7ecca
AB
14129 /* See language.h. */
14130
14131 bool is_string_type_p (struct type *type) const override
14132 {
14133 return ada_is_string_type (type);
14134 }
14135
22e3f3ed
AB
14136 /* See language.h. */
14137
14138 const char *struct_too_deep_ellipsis () const override
14139 { return "(...)"; }
39e7ecca 14140
67bd3fd5
AB
14141 /* See language.h. */
14142
14143 bool c_style_arrays_p () const override
14144 { return false; }
14145
d3355e4d
AB
14146 /* See language.h. */
14147
14148 bool store_sym_names_in_linkage_form_p () const override
14149 { return true; }
14150
b63a3f3f
AB
14151 /* See language.h. */
14152
14153 const struct lang_varobj_ops *varobj_ops () const override
14154 { return &ada_varobj_ops; }
14155
5aba6ebe
AB
14156 /* See language.h. */
14157
14158 const struct exp_descriptor *expression_ops () const override
14159 { return &ada_exp_descriptor; }
14160
b7c6e27d
AB
14161 /* See language.h. */
14162
14163 const struct op_print *opcode_print_table () const override
14164 { return ada_op_print_tab; }
14165
c9debfb9
AB
14166protected:
14167 /* See language.h. */
14168
14169 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14170 (const lookup_name_info &lookup_name) const override
14171 {
14172 return ada_get_symbol_name_matcher (lookup_name);
14173 }
0874fd07
AB
14174};
14175
14176/* Single instance of the Ada language class. */
14177
14178static ada_language ada_language_defn;
14179
5bf03f13
JB
14180/* Command-list for the "set/show ada" prefix command. */
14181static struct cmd_list_element *set_ada_list;
14182static struct cmd_list_element *show_ada_list;
14183
2060206e
PA
14184static void
14185initialize_ada_catchpoint_ops (void)
14186{
14187 struct breakpoint_ops *ops;
14188
14189 initialize_breakpoint_ops ();
14190
14191 ops = &catch_exception_breakpoint_ops;
14192 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14193 ops->allocate_location = allocate_location_exception;
14194 ops->re_set = re_set_exception;
14195 ops->check_status = check_status_exception;
14196 ops->print_it = print_it_exception;
14197 ops->print_one = print_one_exception;
14198 ops->print_mention = print_mention_exception;
14199 ops->print_recreate = print_recreate_exception;
2060206e
PA
14200
14201 ops = &catch_exception_unhandled_breakpoint_ops;
14202 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14203 ops->allocate_location = allocate_location_exception;
14204 ops->re_set = re_set_exception;
14205 ops->check_status = check_status_exception;
14206 ops->print_it = print_it_exception;
14207 ops->print_one = print_one_exception;
14208 ops->print_mention = print_mention_exception;
14209 ops->print_recreate = print_recreate_exception;
2060206e
PA
14210
14211 ops = &catch_assert_breakpoint_ops;
14212 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14213 ops->allocate_location = allocate_location_exception;
14214 ops->re_set = re_set_exception;
14215 ops->check_status = check_status_exception;
14216 ops->print_it = print_it_exception;
14217 ops->print_one = print_one_exception;
14218 ops->print_mention = print_mention_exception;
14219 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14220
14221 ops = &catch_handlers_breakpoint_ops;
14222 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14223 ops->allocate_location = allocate_location_exception;
14224 ops->re_set = re_set_exception;
14225 ops->check_status = check_status_exception;
14226 ops->print_it = print_it_exception;
14227 ops->print_one = print_one_exception;
14228 ops->print_mention = print_mention_exception;
14229 ops->print_recreate = print_recreate_exception;
2060206e
PA
14230}
14231
3d9434b5
JB
14232/* This module's 'new_objfile' observer. */
14233
14234static void
14235ada_new_objfile_observer (struct objfile *objfile)
14236{
14237 ada_clear_symbol_cache ();
14238}
14239
14240/* This module's 'free_objfile' observer. */
14241
14242static void
14243ada_free_objfile_observer (struct objfile *objfile)
14244{
14245 ada_clear_symbol_cache ();
14246}
14247
6c265988 14248void _initialize_ada_language ();
d2e4a39e 14249void
6c265988 14250_initialize_ada_language ()
14f9c5c9 14251{
2060206e
PA
14252 initialize_ada_catchpoint_ops ();
14253
0743fc83
TT
14254 add_basic_prefix_cmd ("ada", no_class,
14255 _("Prefix command for changing Ada-specific settings."),
14256 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14257
0743fc83
TT
14258 add_show_prefix_cmd ("ada", no_class,
14259 _("Generic command for showing Ada-specific settings."),
14260 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14261
14262 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
dda83cd7 14263 &trust_pad_over_xvs, _("\
590042fc
PW
14264Enable or disable an optimization trusting PAD types over XVS types."), _("\
14265Show whether an optimization trusting PAD types over XVS types is activated."),
dda83cd7 14266 _("\
5bf03f13
JB
14267This is related to the encoding used by the GNAT compiler. The debugger\n\
14268should normally trust the contents of PAD types, but certain older versions\n\
14269of GNAT have a bug that sometimes causes the information in the PAD type\n\
14270to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14271work around this bug. It is always safe to turn this option \"off\", but\n\
14272this incurs a slight performance penalty, so it is recommended to NOT change\n\
14273this option to \"off\" unless necessary."),
dda83cd7 14274 NULL, NULL, &set_ada_list, &show_ada_list);
5bf03f13 14275
d72413e6
PMR
14276 add_setshow_boolean_cmd ("print-signatures", class_vars,
14277 &print_signatures, _("\
14278Enable or disable the output of formal and return types for functions in the \
590042fc 14279overloads selection menu."), _("\
d72413e6 14280Show whether the output of formal and return types for functions in the \
590042fc 14281overloads selection menu is activated."),
d72413e6
PMR
14282 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14283
9ac4176b
PA
14284 add_catch_command ("exception", _("\
14285Catch Ada exceptions, when raised.\n\
9bf7038b 14286Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14287Without any argument, stop when any Ada exception is raised.\n\
14288If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14289being raised does not have a handler (and will therefore lead to the task's\n\
14290termination).\n\
14291Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14292raised is the same as ARG.\n\
14293CONDITION is a boolean expression that is evaluated to see whether the\n\
14294exception should cause a stop."),
9ac4176b 14295 catch_ada_exception_command,
71bed2db 14296 catch_ada_completer,
9ac4176b
PA
14297 CATCH_PERMANENT,
14298 CATCH_TEMPORARY);
9f757bf7
XR
14299
14300 add_catch_command ("handlers", _("\
14301Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14302Usage: catch handlers [ARG] [if CONDITION]\n\
14303Without any argument, stop when any Ada exception is handled.\n\
14304With an argument, catch only exceptions with the given name.\n\
14305CONDITION is a boolean expression that is evaluated to see whether the\n\
14306exception should cause a stop."),
9f757bf7 14307 catch_ada_handlers_command,
dda83cd7 14308 catch_ada_completer,
9f757bf7
XR
14309 CATCH_PERMANENT,
14310 CATCH_TEMPORARY);
9ac4176b
PA
14311 add_catch_command ("assert", _("\
14312Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14313Usage: catch assert [if CONDITION]\n\
14314CONDITION is a boolean expression that is evaluated to see whether the\n\
14315exception should cause a stop."),
9ac4176b 14316 catch_assert_command,
dda83cd7 14317 NULL,
9ac4176b
PA
14318 CATCH_PERMANENT,
14319 CATCH_TEMPORARY);
14320
6c038f32 14321 varsize_limit = 65536;
3fcded8f
JB
14322 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14323 &varsize_limit, _("\
14324Set the maximum number of bytes allowed in a variable-size object."), _("\
14325Show the maximum number of bytes allowed in a variable-size object."), _("\
14326Attempts to access an object whose size is not a compile-time constant\n\
14327and exceeds this limit will cause an error."),
14328 NULL, NULL, &setlist, &showlist);
6c038f32 14329
778865d3
JB
14330 add_info ("exceptions", info_exceptions_command,
14331 _("\
14332List all Ada exception names.\n\
9bf7038b 14333Usage: info exceptions [REGEXP]\n\
778865d3
JB
14334If a regular expression is passed as an argument, only those matching\n\
14335the regular expression are listed."));
14336
0743fc83
TT
14337 add_basic_prefix_cmd ("ada", class_maintenance,
14338 _("Set Ada maintenance-related variables."),
14339 &maint_set_ada_cmdlist, "maintenance set ada ",
14340 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14341
0743fc83
TT
14342 add_show_prefix_cmd ("ada", class_maintenance,
14343 _("Show Ada maintenance-related variables."),
14344 &maint_show_ada_cmdlist, "maintenance show ada ",
14345 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14346
14347 add_setshow_boolean_cmd
14348 ("ignore-descriptive-types", class_maintenance,
14349 &ada_ignore_descriptive_types_p,
14350 _("Set whether descriptive types generated by GNAT should be ignored."),
14351 _("Show whether descriptive types generated by GNAT should be ignored."),
14352 _("\
14353When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14354DWARF attribute."),
14355 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14356
459a2e4c
TT
14357 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14358 NULL, xcalloc, xfree);
6b69afc4 14359
3d9434b5 14360 /* The ada-lang observers. */
76727919
TT
14361 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14362 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14363 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14364}