Split out some Ada type resolution code
[deliverable/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
cd9a3148
TT
3417/* See ada-lang.h. */
3418
3419block_symbol
3420ada_find_operator_symbol (enum exp_opcode op, int parse_completion,
3421 int nargs, value *argvec[])
3422{
3423 if (possible_user_operator_p (op, argvec))
3424 {
3425 std::vector<struct block_symbol> candidates
3426 = ada_lookup_symbol_list (ada_decoded_op_name (op),
3427 NULL, VAR_DOMAIN);
3428
3429 int i = ada_resolve_function (candidates, argvec,
3430 nargs, ada_decoded_op_name (op), NULL,
3431 parse_completion);
3432 if (i >= 0)
3433 return candidates[i];
3434 }
3435 return {};
3436}
3437
3438/* See ada-lang.h. */
3439
3440block_symbol
3441ada_resolve_funcall (struct symbol *sym, const struct block *block,
3442 struct type *context_type,
3443 int parse_completion,
3444 int nargs, value *argvec[],
3445 innermost_block_tracker *tracker)
3446{
3447 std::vector<struct block_symbol> candidates
3448 = ada_lookup_symbol_list (sym->linkage_name (), block, VAR_DOMAIN);
3449
3450 int i;
3451 if (candidates.size () == 1)
3452 i = 0;
3453 else
3454 {
3455 i = ada_resolve_function
3456 (candidates,
3457 argvec, nargs,
3458 sym->linkage_name (),
3459 context_type, parse_completion);
3460 if (i < 0)
3461 error (_("Could not find a match for %s"), sym->print_name ());
3462 }
3463
3464 tracker->update (candidates[i]);
3465 return candidates[i];
3466}
3467
3468/* See ada-lang.h. */
3469
3470block_symbol
3471ada_resolve_variable (struct symbol *sym, const struct block *block,
3472 struct type *context_type,
3473 int parse_completion,
3474 int deprocedure_p,
3475 innermost_block_tracker *tracker)
3476{
3477 std::vector<struct block_symbol> candidates
3478 = ada_lookup_symbol_list (sym->linkage_name (), block, VAR_DOMAIN);
3479
3480 if (std::any_of (candidates.begin (),
3481 candidates.end (),
3482 [] (block_symbol &bsym)
3483 {
3484 switch (SYMBOL_CLASS (bsym.symbol))
3485 {
3486 case LOC_REGISTER:
3487 case LOC_ARG:
3488 case LOC_REF_ARG:
3489 case LOC_REGPARM_ADDR:
3490 case LOC_LOCAL:
3491 case LOC_COMPUTED:
3492 return true;
3493 default:
3494 return false;
3495 }
3496 }))
3497 {
3498 /* Types tend to get re-introduced locally, so if there
3499 are any local symbols that are not types, first filter
3500 out all types. */
3501 candidates.erase
3502 (std::remove_if
3503 (candidates.begin (),
3504 candidates.end (),
3505 [] (block_symbol &bsym)
3506 {
3507 return SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF;
3508 }),
3509 candidates.end ());
3510 }
3511
3512 int i;
3513 if (candidates.empty ())
3514 error (_("No definition found for %s"), sym->print_name ());
3515 else if (candidates.size () == 1)
3516 i = 0;
3517 else if (deprocedure_p && !is_nonfunction (candidates))
3518 {
3519 i = ada_resolve_function
3520 (candidates, NULL, 0,
3521 sym->linkage_name (),
3522 context_type, parse_completion);
3523 if (i < 0)
3524 error (_("Could not find a match for %s"), sym->print_name ());
3525 }
3526 else
3527 {
3528 printf_filtered (_("Multiple matches for %s\n"), sym->print_name ());
3529 user_select_syms (candidates.data (), candidates.size (), 1);
3530 i = 0;
3531 }
3532
3533 tracker->update (candidates[i]);
3534 return candidates[i];
3535}
3536
de93309a
SM
3537/* Resolve the operator of the subexpression beginning at
3538 position *POS of *EXPP. "Resolving" consists of replacing
3539 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3540 with their resolutions, replacing built-in operators with
3541 function calls to user-defined operators, where appropriate, and,
3542 when DEPROCEDURE_P is non-zero, converting function-valued variables
3543 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3544 are as in ada_resolve, above. */
14f9c5c9 3545
de93309a
SM
3546static struct value *
3547resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
dda83cd7 3548 struct type *context_type, int parse_completion,
de93309a 3549 innermost_block_tracker *tracker)
14f9c5c9 3550{
de93309a
SM
3551 int pc = *pos;
3552 int i;
3553 struct expression *exp; /* Convenience: == *expp. */
3554 enum exp_opcode op = (*expp)->elts[pc].opcode;
3555 struct value **argvec; /* Vector of operand types (alloca'ed). */
3556 int nargs; /* Number of operands. */
3557 int oplen;
19184910
TT
3558 /* If we're resolving an expression like ARRAY(ARG...), then we set
3559 this to the type of the array, so we can use the index types as
3560 the expected types for resolution. */
3561 struct type *array_type = nullptr;
3562 /* The arity of ARRAY_TYPE. */
3563 int array_arity = 0;
14f9c5c9 3564
de93309a
SM
3565 argvec = NULL;
3566 nargs = 0;
3567 exp = expp->get ();
4c4b4cd2 3568
de93309a
SM
3569 /* Pass one: resolve operands, saving their types and updating *pos,
3570 if needed. */
3571 switch (op)
3572 {
3573 case OP_FUNCALL:
3574 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
dda83cd7
SM
3575 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3576 *pos += 7;
de93309a 3577 else
dda83cd7
SM
3578 {
3579 *pos += 3;
19184910
TT
3580 struct value *lhs = resolve_subexp (expp, pos, 0, NULL,
3581 parse_completion, tracker);
3582 struct type *lhstype = ada_check_typedef (value_type (lhs));
3583 array_arity = ada_array_arity (lhstype);
3584 if (array_arity > 0)
3585 array_type = lhstype;
dda83cd7 3586 }
de93309a
SM
3587 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3588 break;
14f9c5c9 3589
de93309a
SM
3590 case UNOP_ADDR:
3591 *pos += 1;
3592 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3593 break;
3594
3595 case UNOP_QUAL:
3596 *pos += 3;
3597 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3598 parse_completion, tracker);
3599 break;
3600
3601 case OP_ATR_MODULUS:
3602 case OP_ATR_SIZE:
3603 case OP_ATR_TAG:
3604 case OP_ATR_FIRST:
3605 case OP_ATR_LAST:
3606 case OP_ATR_LENGTH:
3607 case OP_ATR_POS:
3608 case OP_ATR_VAL:
3609 case OP_ATR_MIN:
3610 case OP_ATR_MAX:
3611 case TERNOP_IN_RANGE:
3612 case BINOP_IN_BOUNDS:
3613 case UNOP_IN_RANGE:
3614 case OP_AGGREGATE:
3615 case OP_OTHERS:
3616 case OP_CHOICES:
3617 case OP_POSITIONAL:
3618 case OP_DISCRETE_RANGE:
3619 case OP_NAME:
3620 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3621 *pos += oplen;
3622 break;
3623
3624 case BINOP_ASSIGN:
3625 {
dda83cd7
SM
3626 struct value *arg1;
3627
3628 *pos += 1;
3629 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3630 if (arg1 == NULL)
3631 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3632 else
3633 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
de93309a 3634 tracker);
dda83cd7 3635 break;
de93309a
SM
3636 }
3637
3638 case UNOP_CAST:
3639 *pos += 3;
3640 nargs = 1;
3641 break;
3642
3643 case BINOP_ADD:
3644 case BINOP_SUB:
3645 case BINOP_MUL:
3646 case BINOP_DIV:
3647 case BINOP_REM:
3648 case BINOP_MOD:
3649 case BINOP_EXP:
3650 case BINOP_CONCAT:
3651 case BINOP_LOGICAL_AND:
3652 case BINOP_LOGICAL_OR:
3653 case BINOP_BITWISE_AND:
3654 case BINOP_BITWISE_IOR:
3655 case BINOP_BITWISE_XOR:
3656
3657 case BINOP_EQUAL:
3658 case BINOP_NOTEQUAL:
3659 case BINOP_LESS:
3660 case BINOP_GTR:
3661 case BINOP_LEQ:
3662 case BINOP_GEQ:
3663
3664 case BINOP_REPEAT:
3665 case BINOP_SUBSCRIPT:
3666 case BINOP_COMMA:
3667 *pos += 1;
3668 nargs = 2;
3669 break;
3670
3671 case UNOP_NEG:
3672 case UNOP_PLUS:
3673 case UNOP_LOGICAL_NOT:
3674 case UNOP_ABS:
3675 case UNOP_IND:
3676 *pos += 1;
3677 nargs = 1;
3678 break;
3679
3680 case OP_LONG:
3681 case OP_FLOAT:
3682 case OP_VAR_VALUE:
3683 case OP_VAR_MSYM_VALUE:
3684 *pos += 4;
3685 break;
3686
3687 case OP_TYPE:
3688 case OP_BOOL:
3689 case OP_LAST:
3690 case OP_INTERNALVAR:
3691 *pos += 3;
3692 break;
3693
3694 case UNOP_MEMVAL:
3695 *pos += 3;
3696 nargs = 1;
3697 break;
3698
3699 case OP_REGISTER:
3700 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3701 break;
3702
3703 case STRUCTOP_STRUCT:
3704 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3705 nargs = 1;
3706 break;
3707
3708 case TERNOP_SLICE:
3709 *pos += 1;
3710 nargs = 3;
3711 break;
3712
3713 case OP_STRING:
3714 break;
3715
3716 default:
3717 error (_("Unexpected operator during name resolution"));
14f9c5c9 3718 }
14f9c5c9 3719
de93309a
SM
3720 argvec = XALLOCAVEC (struct value *, nargs + 1);
3721 for (i = 0; i < nargs; i += 1)
19184910
TT
3722 {
3723 struct type *subtype = nullptr;
3724 if (i < array_arity)
3725 subtype = ada_index_type (array_type, i + 1, "array type");
3726 argvec[i] = resolve_subexp (expp, pos, 1, subtype, parse_completion,
3727 tracker);
3728 }
de93309a
SM
3729 argvec[i] = NULL;
3730 exp = expp->get ();
4c4b4cd2 3731
de93309a
SM
3732 /* Pass two: perform any resolution on principal operator. */
3733 switch (op)
14f9c5c9 3734 {
de93309a
SM
3735 default:
3736 break;
5b4ee69b 3737
de93309a
SM
3738 case OP_VAR_VALUE:
3739 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7 3740 {
cd9a3148
TT
3741 block_symbol resolved
3742 = ada_resolve_variable (exp->elts[pc + 2].symbol,
3743 exp->elts[pc + 1].block,
3744 context_type, parse_completion,
3745 deprocedure_p, tracker);
3746 exp->elts[pc + 1].block = resolved.block;
3747 exp->elts[pc + 2].symbol = resolved.symbol;
dda83cd7 3748 }
14f9c5c9 3749
de93309a 3750 if (deprocedure_p
dda83cd7
SM
3751 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3752 == TYPE_CODE_FUNC))
3753 {
3754 replace_operator_with_call (expp, pc, 0, 4,
3755 exp->elts[pc + 2].symbol,
3756 exp->elts[pc + 1].block);
3757 exp = expp->get ();
3758 }
de93309a
SM
3759 break;
3760
3761 case OP_FUNCALL:
3762 {
dda83cd7
SM
3763 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3764 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3765 {
cd9a3148
TT
3766 block_symbol resolved
3767 = ada_resolve_funcall (exp->elts[pc + 5].symbol,
3768 exp->elts[pc + 4].block,
3769 context_type, parse_completion,
3770 nargs, argvec,
3771 tracker);
3772 exp->elts[pc + 4].block = resolved.block;
3773 exp->elts[pc + 5].symbol = resolved.symbol;
dda83cd7 3774 }
de93309a
SM
3775 }
3776 break;
3777 case BINOP_ADD:
3778 case BINOP_SUB:
3779 case BINOP_MUL:
3780 case BINOP_DIV:
3781 case BINOP_REM:
3782 case BINOP_MOD:
3783 case BINOP_CONCAT:
3784 case BINOP_BITWISE_AND:
3785 case BINOP_BITWISE_IOR:
3786 case BINOP_BITWISE_XOR:
3787 case BINOP_EQUAL:
3788 case BINOP_NOTEQUAL:
3789 case BINOP_LESS:
3790 case BINOP_GTR:
3791 case BINOP_LEQ:
3792 case BINOP_GEQ:
3793 case BINOP_EXP:
3794 case UNOP_NEG:
3795 case UNOP_PLUS:
3796 case UNOP_LOGICAL_NOT:
3797 case UNOP_ABS:
cd9a3148
TT
3798 {
3799 block_symbol found = ada_find_operator_symbol (op, parse_completion,
3800 nargs, argvec);
3801 if (found.symbol == nullptr)
3802 break;
d72413e6 3803
cd9a3148
TT
3804 replace_operator_with_call (expp, pc, nargs, 1,
3805 found.symbol, found.block);
3806 exp = expp->get ();
3807 }
de93309a 3808 break;
d72413e6 3809
de93309a
SM
3810 case OP_TYPE:
3811 case OP_REGISTER:
3812 return NULL;
d72413e6 3813 }
d72413e6 3814
de93309a
SM
3815 *pos = pc;
3816 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3817 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3818 exp->elts[pc + 1].objfile,
3819 exp->elts[pc + 2].msymbol);
3820 else
3821 return evaluate_subexp_type (exp, pos);
3822}
14f9c5c9 3823
de93309a
SM
3824/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3825 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3826 a non-pointer. */
3827/* The term "match" here is rather loose. The match is heuristic and
3828 liberal. */
14f9c5c9 3829
de93309a
SM
3830static int
3831ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3832{
de93309a
SM
3833 ftype = ada_check_typedef (ftype);
3834 atype = ada_check_typedef (atype);
14f9c5c9 3835
78134374 3836 if (ftype->code () == TYPE_CODE_REF)
de93309a 3837 ftype = TYPE_TARGET_TYPE (ftype);
78134374 3838 if (atype->code () == TYPE_CODE_REF)
de93309a 3839 atype = TYPE_TARGET_TYPE (atype);
14f9c5c9 3840
78134374 3841 switch (ftype->code ())
14f9c5c9 3842 {
de93309a 3843 default:
78134374 3844 return ftype->code () == atype->code ();
de93309a 3845 case TYPE_CODE_PTR:
78134374 3846 if (atype->code () == TYPE_CODE_PTR)
dda83cd7
SM
3847 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3848 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3849 else
dda83cd7
SM
3850 return (may_deref
3851 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
de93309a
SM
3852 case TYPE_CODE_INT:
3853 case TYPE_CODE_ENUM:
3854 case TYPE_CODE_RANGE:
78134374 3855 switch (atype->code ())
dda83cd7
SM
3856 {
3857 case TYPE_CODE_INT:
3858 case TYPE_CODE_ENUM:
3859 case TYPE_CODE_RANGE:
3860 return 1;
3861 default:
3862 return 0;
3863 }
d2e4a39e 3864
de93309a 3865 case TYPE_CODE_ARRAY:
78134374 3866 return (atype->code () == TYPE_CODE_ARRAY
dda83cd7 3867 || ada_is_array_descriptor_type (atype));
14f9c5c9 3868
de93309a
SM
3869 case TYPE_CODE_STRUCT:
3870 if (ada_is_array_descriptor_type (ftype))
dda83cd7
SM
3871 return (atype->code () == TYPE_CODE_ARRAY
3872 || ada_is_array_descriptor_type (atype));
de93309a 3873 else
dda83cd7
SM
3874 return (atype->code () == TYPE_CODE_STRUCT
3875 && !ada_is_array_descriptor_type (atype));
14f9c5c9 3876
de93309a
SM
3877 case TYPE_CODE_UNION:
3878 case TYPE_CODE_FLT:
78134374 3879 return (atype->code () == ftype->code ());
de93309a 3880 }
14f9c5c9
AS
3881}
3882
de93309a
SM
3883/* Return non-zero if the formals of FUNC "sufficiently match" the
3884 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3885 may also be an enumeral, in which case it is treated as a 0-
3886 argument function. */
14f9c5c9 3887
de93309a
SM
3888static int
3889ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3890{
3891 int i;
3892 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3893
de93309a 3894 if (SYMBOL_CLASS (func) == LOC_CONST
78134374 3895 && func_type->code () == TYPE_CODE_ENUM)
de93309a 3896 return (n_actuals == 0);
78134374 3897 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
de93309a 3898 return 0;
14f9c5c9 3899
1f704f76 3900 if (func_type->num_fields () != n_actuals)
de93309a 3901 return 0;
14f9c5c9 3902
de93309a
SM
3903 for (i = 0; i < n_actuals; i += 1)
3904 {
3905 if (actuals[i] == NULL)
dda83cd7 3906 return 0;
de93309a 3907 else
dda83cd7
SM
3908 {
3909 struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3910 struct type *atype = ada_check_typedef (value_type (actuals[i]));
14f9c5c9 3911
dda83cd7
SM
3912 if (!ada_type_match (ftype, atype, 1))
3913 return 0;
3914 }
de93309a
SM
3915 }
3916 return 1;
3917}
d2e4a39e 3918
de93309a
SM
3919/* False iff function type FUNC_TYPE definitely does not produce a value
3920 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3921 FUNC_TYPE is not a valid function type with a non-null return type
3922 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
14f9c5c9 3923
de93309a
SM
3924static int
3925return_match (struct type *func_type, struct type *context_type)
3926{
3927 struct type *return_type;
d2e4a39e 3928
de93309a
SM
3929 if (func_type == NULL)
3930 return 1;
14f9c5c9 3931
78134374 3932 if (func_type->code () == TYPE_CODE_FUNC)
de93309a
SM
3933 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3934 else
3935 return_type = get_base_type (func_type);
3936 if (return_type == NULL)
3937 return 1;
76a01679 3938
de93309a 3939 context_type = get_base_type (context_type);
14f9c5c9 3940
78134374 3941 if (return_type->code () == TYPE_CODE_ENUM)
de93309a
SM
3942 return context_type == NULL || return_type == context_type;
3943 else if (context_type == NULL)
78134374 3944 return return_type->code () != TYPE_CODE_VOID;
de93309a 3945 else
78134374 3946 return return_type->code () == context_type->code ();
de93309a 3947}
14f9c5c9 3948
14f9c5c9 3949
1bfa81ac 3950/* Returns the index in SYMS that contains the symbol for the
de93309a
SM
3951 function (if any) that matches the types of the NARGS arguments in
3952 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3953 that returns that type, then eliminate matches that don't. If
3954 CONTEXT_TYPE is void and there is at least one match that does not
3955 return void, eliminate all matches that do.
14f9c5c9 3956
de93309a
SM
3957 Asks the user if there is more than one match remaining. Returns -1
3958 if there is no such symbol or none is selected. NAME is used
3959 solely for messages. May re-arrange and modify SYMS in
3960 the process; the index returned is for the modified vector. */
14f9c5c9 3961
de93309a 3962static int
d1183b06
TT
3963ada_resolve_function (std::vector<struct block_symbol> &syms,
3964 struct value **args, int nargs,
dda83cd7 3965 const char *name, struct type *context_type,
de93309a
SM
3966 int parse_completion)
3967{
3968 int fallback;
3969 int k;
3970 int m; /* Number of hits */
14f9c5c9 3971
de93309a
SM
3972 m = 0;
3973 /* In the first pass of the loop, we only accept functions matching
3974 context_type. If none are found, we add a second pass of the loop
3975 where every function is accepted. */
3976 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3977 {
d1183b06 3978 for (k = 0; k < syms.size (); k += 1)
dda83cd7
SM
3979 {
3980 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
5b4ee69b 3981
dda83cd7
SM
3982 if (ada_args_match (syms[k].symbol, args, nargs)
3983 && (fallback || return_match (type, context_type)))
3984 {
3985 syms[m] = syms[k];
3986 m += 1;
3987 }
3988 }
14f9c5c9
AS
3989 }
3990
de93309a
SM
3991 /* If we got multiple matches, ask the user which one to use. Don't do this
3992 interactive thing during completion, though, as the purpose of the
3993 completion is providing a list of all possible matches. Prompting the
3994 user to filter it down would be completely unexpected in this case. */
3995 if (m == 0)
3996 return -1;
3997 else if (m > 1 && !parse_completion)
3998 {
3999 printf_filtered (_("Multiple matches for %s\n"), name);
d1183b06 4000 user_select_syms (syms.data (), m, 1);
de93309a
SM
4001 return 0;
4002 }
4003 return 0;
14f9c5c9
AS
4004}
4005
4c4b4cd2
PH
4006/* Replace the operator of length OPLEN at position PC in *EXPP with a call
4007 on the function identified by SYM and BLOCK, and taking NARGS
4008 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
4009
4010static void
e9d9f57e 4011replace_operator_with_call (expression_up *expp, int pc, int nargs,
dda83cd7
SM
4012 int oplen, struct symbol *sym,
4013 const struct block *block)
14f9c5c9 4014{
00158a68
TT
4015 /* We want to add 6 more elements (3 for funcall, 4 for function
4016 symbol, -OPLEN for operator being replaced) to the
4017 expression. */
e9d9f57e 4018 struct expression *exp = expp->get ();
00158a68 4019 int save_nelts = exp->nelts;
f51f9f1d
TV
4020 int extra_elts = 7 - oplen;
4021 exp->nelts += extra_elts;
14f9c5c9 4022
f51f9f1d
TV
4023 if (extra_elts > 0)
4024 exp->resize (exp->nelts);
00158a68
TT
4025 memmove (exp->elts + pc + 7, exp->elts + pc + oplen,
4026 EXP_ELEM_TO_BYTES (save_nelts - pc - oplen));
f51f9f1d
TV
4027 if (extra_elts < 0)
4028 exp->resize (exp->nelts);
14f9c5c9 4029
00158a68
TT
4030 exp->elts[pc].opcode = exp->elts[pc + 2].opcode = OP_FUNCALL;
4031 exp->elts[pc + 1].longconst = (LONGEST) nargs;
14f9c5c9 4032
00158a68
TT
4033 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
4034 exp->elts[pc + 4].block = block;
4035 exp->elts[pc + 5].symbol = sym;
d2e4a39e 4036}
14f9c5c9
AS
4037
4038/* Type-class predicates */
4039
4c4b4cd2
PH
4040/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4041 or FLOAT). */
14f9c5c9
AS
4042
4043static int
d2e4a39e 4044numeric_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_FLT:
4054 return 1;
4055 case TYPE_CODE_RANGE:
4056 return (type == TYPE_TARGET_TYPE (type)
4057 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4058 default:
4059 return 0;
4060 }
d2e4a39e 4061 }
14f9c5c9
AS
4062}
4063
4c4b4cd2 4064/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4065
4066static int
d2e4a39e 4067integer_type_p (struct type *type)
14f9c5c9
AS
4068{
4069 if (type == NULL)
4070 return 0;
d2e4a39e
AS
4071 else
4072 {
78134374 4073 switch (type->code ())
dda83cd7
SM
4074 {
4075 case TYPE_CODE_INT:
4076 return 1;
4077 case TYPE_CODE_RANGE:
4078 return (type == TYPE_TARGET_TYPE (type)
4079 || integer_type_p (TYPE_TARGET_TYPE (type)));
4080 default:
4081 return 0;
4082 }
d2e4a39e 4083 }
14f9c5c9
AS
4084}
4085
4c4b4cd2 4086/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4087
4088static int
d2e4a39e 4089scalar_type_p (struct type *type)
14f9c5c9
AS
4090{
4091 if (type == NULL)
4092 return 0;
d2e4a39e
AS
4093 else
4094 {
78134374 4095 switch (type->code ())
dda83cd7
SM
4096 {
4097 case TYPE_CODE_INT:
4098 case TYPE_CODE_RANGE:
4099 case TYPE_CODE_ENUM:
4100 case TYPE_CODE_FLT:
4101 return 1;
4102 default:
4103 return 0;
4104 }
d2e4a39e 4105 }
14f9c5c9
AS
4106}
4107
4c4b4cd2 4108/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4109
4110static int
d2e4a39e 4111discrete_type_p (struct type *type)
14f9c5c9
AS
4112{
4113 if (type == NULL)
4114 return 0;
d2e4a39e
AS
4115 else
4116 {
78134374 4117 switch (type->code ())
dda83cd7
SM
4118 {
4119 case TYPE_CODE_INT:
4120 case TYPE_CODE_RANGE:
4121 case TYPE_CODE_ENUM:
4122 case TYPE_CODE_BOOL:
4123 return 1;
4124 default:
4125 return 0;
4126 }
d2e4a39e 4127 }
14f9c5c9
AS
4128}
4129
4c4b4cd2
PH
4130/* Returns non-zero if OP with operands in the vector ARGS could be
4131 a user-defined function. Errs on the side of pre-defined operators
4132 (i.e., result 0). */
14f9c5c9
AS
4133
4134static int
d2e4a39e 4135possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4136{
76a01679 4137 struct type *type0 =
df407dfe 4138 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4139 struct type *type1 =
df407dfe 4140 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4141
4c4b4cd2
PH
4142 if (type0 == NULL)
4143 return 0;
4144
14f9c5c9
AS
4145 switch (op)
4146 {
4147 default:
4148 return 0;
4149
4150 case BINOP_ADD:
4151 case BINOP_SUB:
4152 case BINOP_MUL:
4153 case BINOP_DIV:
d2e4a39e 4154 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4155
4156 case BINOP_REM:
4157 case BINOP_MOD:
4158 case BINOP_BITWISE_AND:
4159 case BINOP_BITWISE_IOR:
4160 case BINOP_BITWISE_XOR:
d2e4a39e 4161 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4162
4163 case BINOP_EQUAL:
4164 case BINOP_NOTEQUAL:
4165 case BINOP_LESS:
4166 case BINOP_GTR:
4167 case BINOP_LEQ:
4168 case BINOP_GEQ:
d2e4a39e 4169 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4170
4171 case BINOP_CONCAT:
ee90b9ab 4172 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4173
4174 case BINOP_EXP:
d2e4a39e 4175 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4176
4177 case UNOP_NEG:
4178 case UNOP_PLUS:
4179 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4180 case UNOP_ABS:
4181 return (!numeric_type_p (type0));
14f9c5c9
AS
4182
4183 }
4184}
4185\f
dda83cd7 4186 /* Renaming */
14f9c5c9 4187
aeb5907d
JB
4188/* NOTES:
4189
4190 1. In the following, we assume that a renaming type's name may
4191 have an ___XD suffix. It would be nice if this went away at some
4192 point.
4193 2. We handle both the (old) purely type-based representation of
4194 renamings and the (new) variable-based encoding. At some point,
4195 it is devoutly to be hoped that the former goes away
4196 (FIXME: hilfinger-2007-07-09).
4197 3. Subprogram renamings are not implemented, although the XRS
4198 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4199
4200/* If SYM encodes a renaming,
4201
4202 <renaming> renames <renamed entity>,
4203
4204 sets *LEN to the length of the renamed entity's name,
4205 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4206 the string describing the subcomponent selected from the renamed
0963b4bd 4207 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4208 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4209 are undefined). Otherwise, returns a value indicating the category
4210 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4211 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4212 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4213 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4214 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4215 may be NULL, in which case they are not assigned.
4216
4217 [Currently, however, GCC does not generate subprogram renamings.] */
4218
4219enum ada_renaming_category
4220ada_parse_renaming (struct symbol *sym,
4221 const char **renamed_entity, int *len,
4222 const char **renaming_expr)
4223{
4224 enum ada_renaming_category kind;
4225 const char *info;
4226 const char *suffix;
4227
4228 if (sym == NULL)
4229 return ADA_NOT_RENAMING;
4230 switch (SYMBOL_CLASS (sym))
14f9c5c9 4231 {
aeb5907d
JB
4232 default:
4233 return ADA_NOT_RENAMING;
aeb5907d
JB
4234 case LOC_LOCAL:
4235 case LOC_STATIC:
4236 case LOC_COMPUTED:
4237 case LOC_OPTIMIZED_OUT:
987012b8 4238 info = strstr (sym->linkage_name (), "___XR");
aeb5907d
JB
4239 if (info == NULL)
4240 return ADA_NOT_RENAMING;
4241 switch (info[5])
4242 {
4243 case '_':
4244 kind = ADA_OBJECT_RENAMING;
4245 info += 6;
4246 break;
4247 case 'E':
4248 kind = ADA_EXCEPTION_RENAMING;
4249 info += 7;
4250 break;
4251 case 'P':
4252 kind = ADA_PACKAGE_RENAMING;
4253 info += 7;
4254 break;
4255 case 'S':
4256 kind = ADA_SUBPROGRAM_RENAMING;
4257 info += 7;
4258 break;
4259 default:
4260 return ADA_NOT_RENAMING;
4261 }
14f9c5c9 4262 }
4c4b4cd2 4263
de93309a
SM
4264 if (renamed_entity != NULL)
4265 *renamed_entity = info;
4266 suffix = strstr (info, "___XE");
4267 if (suffix == NULL || suffix == info)
4268 return ADA_NOT_RENAMING;
4269 if (len != NULL)
4270 *len = strlen (info) - strlen (suffix);
4271 suffix += 5;
4272 if (renaming_expr != NULL)
4273 *renaming_expr = suffix;
4274 return kind;
4275}
4276
4277/* Compute the value of the given RENAMING_SYM, which is expected to
4278 be a symbol encoding a renaming expression. BLOCK is the block
4279 used to evaluate the renaming. */
4280
4281static struct value *
4282ada_read_renaming_var_value (struct symbol *renaming_sym,
4283 const struct block *block)
4284{
4285 const char *sym_name;
4286
987012b8 4287 sym_name = renaming_sym->linkage_name ();
de93309a
SM
4288 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4289 return evaluate_expression (expr.get ());
4290}
4291\f
4292
dda83cd7 4293 /* Evaluation: Function Calls */
de93309a
SM
4294
4295/* Return an lvalue containing the value VAL. This is the identity on
4296 lvalues, and otherwise has the side-effect of allocating memory
4297 in the inferior where a copy of the value contents is copied. */
4298
4299static struct value *
4300ensure_lval (struct value *val)
4301{
4302 if (VALUE_LVAL (val) == not_lval
4303 || VALUE_LVAL (val) == lval_internalvar)
4304 {
4305 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4306 const CORE_ADDR addr =
dda83cd7 4307 value_as_long (value_allocate_space_in_inferior (len));
de93309a
SM
4308
4309 VALUE_LVAL (val) = lval_memory;
4310 set_value_address (val, addr);
4311 write_memory (addr, value_contents (val), len);
4312 }
4313
4314 return val;
4315}
4316
4317/* Given ARG, a value of type (pointer or reference to a)*
4318 structure/union, extract the component named NAME from the ultimate
4319 target structure/union and return it as a value with its
4320 appropriate type.
4321
4322 The routine searches for NAME among all members of the structure itself
4323 and (recursively) among all members of any wrapper members
4324 (e.g., '_parent').
4325
4326 If NO_ERR, then simply return NULL in case of error, rather than
4327 calling error. */
4328
4329static struct value *
4330ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4331{
4332 struct type *t, *t1;
4333 struct value *v;
4334 int check_tag;
4335
4336 v = NULL;
4337 t1 = t = ada_check_typedef (value_type (arg));
78134374 4338 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4339 {
4340 t1 = TYPE_TARGET_TYPE (t);
4341 if (t1 == NULL)
4342 goto BadValue;
4343 t1 = ada_check_typedef (t1);
78134374 4344 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4345 {
4346 arg = coerce_ref (arg);
4347 t = t1;
4348 }
de93309a
SM
4349 }
4350
78134374 4351 while (t->code () == TYPE_CODE_PTR)
de93309a
SM
4352 {
4353 t1 = TYPE_TARGET_TYPE (t);
4354 if (t1 == NULL)
4355 goto BadValue;
4356 t1 = ada_check_typedef (t1);
78134374 4357 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4358 {
4359 arg = value_ind (arg);
4360 t = t1;
4361 }
de93309a 4362 else
dda83cd7 4363 break;
de93309a 4364 }
aeb5907d 4365
78134374 4366 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
de93309a 4367 goto BadValue;
52ce6436 4368
de93309a
SM
4369 if (t1 == t)
4370 v = ada_search_struct_field (name, arg, 0, t);
4371 else
4372 {
4373 int bit_offset, bit_size, byte_offset;
4374 struct type *field_type;
4375 CORE_ADDR address;
a5ee536b 4376
78134374 4377 if (t->code () == TYPE_CODE_PTR)
de93309a
SM
4378 address = value_address (ada_value_ind (arg));
4379 else
4380 address = value_address (ada_coerce_ref (arg));
d2e4a39e 4381
de93309a 4382 /* Check to see if this is a tagged type. We also need to handle
dda83cd7
SM
4383 the case where the type is a reference to a tagged type, but
4384 we have to be careful to exclude pointers to tagged types.
4385 The latter should be shown as usual (as a pointer), whereas
4386 a reference should mostly be transparent to the user. */
14f9c5c9 4387
de93309a 4388 if (ada_is_tagged_type (t1, 0)
dda83cd7
SM
4389 || (t1->code () == TYPE_CODE_REF
4390 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4391 {
4392 /* We first try to find the searched field in the current type.
de93309a 4393 If not found then let's look in the fixed type. */
14f9c5c9 4394
dda83cd7
SM
4395 if (!find_struct_field (name, t1, 0,
4396 &field_type, &byte_offset, &bit_offset,
4397 &bit_size, NULL))
de93309a
SM
4398 check_tag = 1;
4399 else
4400 check_tag = 0;
dda83cd7 4401 }
de93309a
SM
4402 else
4403 check_tag = 0;
c3e5cd34 4404
de93309a
SM
4405 /* Convert to fixed type in all cases, so that we have proper
4406 offsets to each field in unconstrained record types. */
4407 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4408 address, NULL, check_tag);
4409
24aa1b02
TT
4410 /* Resolve the dynamic type as well. */
4411 arg = value_from_contents_and_address (t1, nullptr, address);
4412 t1 = value_type (arg);
4413
de93309a 4414 if (find_struct_field (name, t1, 0,
dda83cd7
SM
4415 &field_type, &byte_offset, &bit_offset,
4416 &bit_size, NULL))
4417 {
4418 if (bit_size != 0)
4419 {
4420 if (t->code () == TYPE_CODE_REF)
4421 arg = ada_coerce_ref (arg);
4422 else
4423 arg = ada_value_ind (arg);
4424 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4425 bit_offset, bit_size,
4426 field_type);
4427 }
4428 else
4429 v = value_at_lazy (field_type, address + byte_offset);
4430 }
c3e5cd34 4431 }
14f9c5c9 4432
de93309a
SM
4433 if (v != NULL || no_err)
4434 return v;
4435 else
4436 error (_("There is no member named %s."), name);
4437
4438 BadValue:
4439 if (no_err)
4440 return NULL;
4441 else
4442 error (_("Attempt to extract a component of "
4443 "a value that is not a record."));
14f9c5c9
AS
4444}
4445
4446/* Return the value ACTUAL, converted to be an appropriate value for a
4447 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4448 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4449 values not residing in memory, updating it as needed. */
14f9c5c9 4450
a93c0eb6 4451struct value *
40bc484c 4452ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4453{
df407dfe 4454 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4455 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e 4456 struct type *formal_target =
78134374 4457 formal_type->code () == TYPE_CODE_PTR
61ee279c 4458 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e 4459 struct type *actual_target =
78134374 4460 actual_type->code () == TYPE_CODE_PTR
61ee279c 4461 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4462
4c4b4cd2 4463 if (ada_is_array_descriptor_type (formal_target)
78134374 4464 && actual_target->code () == TYPE_CODE_ARRAY)
40bc484c 4465 return make_array_descriptor (formal_type, actual);
78134374
SM
4466 else if (formal_type->code () == TYPE_CODE_PTR
4467 || formal_type->code () == TYPE_CODE_REF)
14f9c5c9 4468 {
a84a8a0d 4469 struct value *result;
5b4ee69b 4470
78134374 4471 if (formal_target->code () == TYPE_CODE_ARRAY
dda83cd7 4472 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4473 result = desc_data (actual);
78134374 4474 else if (formal_type->code () != TYPE_CODE_PTR)
dda83cd7
SM
4475 {
4476 if (VALUE_LVAL (actual) != lval_memory)
4477 {
4478 struct value *val;
4479
4480 actual_type = ada_check_typedef (value_type (actual));
4481 val = allocate_value (actual_type);
4482 memcpy ((char *) value_contents_raw (val),
4483 (char *) value_contents (actual),
4484 TYPE_LENGTH (actual_type));
4485 actual = ensure_lval (val);
4486 }
4487 result = value_addr (actual);
4488 }
a84a8a0d
JB
4489 else
4490 return actual;
b1af9e97 4491 return value_cast_pointers (formal_type, result, 0);
14f9c5c9 4492 }
78134374 4493 else if (actual_type->code () == TYPE_CODE_PTR)
14f9c5c9 4494 return ada_value_ind (actual);
8344af1e
JB
4495 else if (ada_is_aligner_type (formal_type))
4496 {
4497 /* We need to turn this parameter into an aligner type
4498 as well. */
4499 struct value *aligner = allocate_value (formal_type);
4500 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4501
4502 value_assign_to_component (aligner, component, actual);
4503 return aligner;
4504 }
14f9c5c9
AS
4505
4506 return actual;
4507}
4508
438c98a1
JB
4509/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4510 type TYPE. This is usually an inefficient no-op except on some targets
4511 (such as AVR) where the representation of a pointer and an address
4512 differs. */
4513
4514static CORE_ADDR
4515value_pointer (struct value *value, struct type *type)
4516{
438c98a1 4517 unsigned len = TYPE_LENGTH (type);
224c3ddb 4518 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4519 CORE_ADDR addr;
4520
4521 addr = value_address (value);
8ee511af 4522 gdbarch_address_to_pointer (type->arch (), type, buf, addr);
34877895 4523 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
438c98a1
JB
4524 return addr;
4525}
4526
14f9c5c9 4527
4c4b4cd2
PH
4528/* Push a descriptor of type TYPE for array value ARR on the stack at
4529 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4530 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4531 to-descriptor type rather than a descriptor type), a struct value *
4532 representing a pointer to this descriptor. */
14f9c5c9 4533
d2e4a39e 4534static struct value *
40bc484c 4535make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4536{
d2e4a39e
AS
4537 struct type *bounds_type = desc_bounds_type (type);
4538 struct type *desc_type = desc_base_type (type);
4539 struct value *descriptor = allocate_value (desc_type);
4540 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4541 int i;
d2e4a39e 4542
0963b4bd
MS
4543 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4544 i > 0; i -= 1)
14f9c5c9 4545 {
19f220c3
JK
4546 modify_field (value_type (bounds), value_contents_writeable (bounds),
4547 ada_array_bound (arr, i, 0),
4548 desc_bound_bitpos (bounds_type, i, 0),
4549 desc_bound_bitsize (bounds_type, i, 0));
4550 modify_field (value_type (bounds), value_contents_writeable (bounds),
4551 ada_array_bound (arr, i, 1),
4552 desc_bound_bitpos (bounds_type, i, 1),
4553 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4554 }
d2e4a39e 4555
40bc484c 4556 bounds = ensure_lval (bounds);
d2e4a39e 4557
19f220c3
JK
4558 modify_field (value_type (descriptor),
4559 value_contents_writeable (descriptor),
4560 value_pointer (ensure_lval (arr),
940da03e 4561 desc_type->field (0).type ()),
19f220c3
JK
4562 fat_pntr_data_bitpos (desc_type),
4563 fat_pntr_data_bitsize (desc_type));
4564
4565 modify_field (value_type (descriptor),
4566 value_contents_writeable (descriptor),
4567 value_pointer (bounds,
940da03e 4568 desc_type->field (1).type ()),
19f220c3
JK
4569 fat_pntr_bounds_bitpos (desc_type),
4570 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4571
40bc484c 4572 descriptor = ensure_lval (descriptor);
14f9c5c9 4573
78134374 4574 if (type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
4575 return value_addr (descriptor);
4576 else
4577 return descriptor;
4578}
14f9c5c9 4579\f
dda83cd7 4580 /* Symbol Cache Module */
3d9434b5 4581
3d9434b5 4582/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4583 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4584 on the type of entity being printed, the cache can make it as much
4585 as an order of magnitude faster than without it.
4586
4587 The descriptive type DWARF extension has significantly reduced
4588 the need for this cache, at least when DWARF is being used. However,
4589 even in this case, some expensive name-based symbol searches are still
4590 sometimes necessary - to find an XVZ variable, mostly. */
4591
ee01b665
JB
4592/* Return the symbol cache associated to the given program space PSPACE.
4593 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4594
ee01b665
JB
4595static struct ada_symbol_cache *
4596ada_get_symbol_cache (struct program_space *pspace)
4597{
4598 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4599
bdcccc56
TT
4600 if (pspace_data->sym_cache == nullptr)
4601 pspace_data->sym_cache.reset (new ada_symbol_cache);
ee01b665 4602
bdcccc56 4603 return pspace_data->sym_cache.get ();
ee01b665 4604}
3d9434b5
JB
4605
4606/* Clear all entries from the symbol cache. */
4607
4608static void
bdcccc56 4609ada_clear_symbol_cache ()
3d9434b5 4610{
bdcccc56
TT
4611 struct ada_pspace_data *pspace_data
4612 = get_ada_pspace_data (current_program_space);
ee01b665 4613
bdcccc56
TT
4614 if (pspace_data->sym_cache != nullptr)
4615 pspace_data->sym_cache.reset ();
3d9434b5
JB
4616}
4617
fe978cb0 4618/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4619 Return it if found, or NULL otherwise. */
4620
4621static struct cache_entry **
fe978cb0 4622find_entry (const char *name, domain_enum domain)
3d9434b5 4623{
ee01b665
JB
4624 struct ada_symbol_cache *sym_cache
4625 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4626 int h = msymbol_hash (name) % HASH_SIZE;
4627 struct cache_entry **e;
4628
ee01b665 4629 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4630 {
fe978cb0 4631 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
dda83cd7 4632 return e;
3d9434b5
JB
4633 }
4634 return NULL;
4635}
4636
fe978cb0 4637/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4638 Return 1 if found, 0 otherwise.
4639
4640 If an entry was found and SYM is not NULL, set *SYM to the entry's
4641 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4642
96d887e8 4643static int
fe978cb0 4644lookup_cached_symbol (const char *name, domain_enum domain,
dda83cd7 4645 struct symbol **sym, const struct block **block)
96d887e8 4646{
fe978cb0 4647 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4648
4649 if (e == NULL)
4650 return 0;
4651 if (sym != NULL)
4652 *sym = (*e)->sym;
4653 if (block != NULL)
4654 *block = (*e)->block;
4655 return 1;
96d887e8
PH
4656}
4657
3d9434b5 4658/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4659 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4660
96d887e8 4661static void
fe978cb0 4662cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
dda83cd7 4663 const struct block *block)
96d887e8 4664{
ee01b665
JB
4665 struct ada_symbol_cache *sym_cache
4666 = ada_get_symbol_cache (current_program_space);
3d9434b5 4667 int h;
3d9434b5
JB
4668 struct cache_entry *e;
4669
1994afbf
DE
4670 /* Symbols for builtin types don't have a block.
4671 For now don't cache such symbols. */
4672 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4673 return;
4674
3d9434b5
JB
4675 /* If the symbol is a local symbol, then do not cache it, as a search
4676 for that symbol depends on the context. To determine whether
4677 the symbol is local or not, we check the block where we found it
4678 against the global and static blocks of its associated symtab. */
4679 if (sym
08be3fe3 4680 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4681 GLOBAL_BLOCK) != block
08be3fe3 4682 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4683 STATIC_BLOCK) != block)
3d9434b5
JB
4684 return;
4685
4686 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4687 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4688 e->next = sym_cache->root[h];
4689 sym_cache->root[h] = e;
2ef5453b 4690 e->name = obstack_strdup (&sym_cache->cache_space, name);
3d9434b5 4691 e->sym = sym;
fe978cb0 4692 e->domain = domain;
3d9434b5 4693 e->block = block;
96d887e8 4694}
4c4b4cd2 4695\f
dda83cd7 4696 /* Symbol Lookup */
4c4b4cd2 4697
b5ec771e
PA
4698/* Return the symbol name match type that should be used used when
4699 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4700
4701 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4702 for Ada lookups. */
c0431670 4703
b5ec771e
PA
4704static symbol_name_match_type
4705name_match_type_from_name (const char *lookup_name)
c0431670 4706{
b5ec771e
PA
4707 return (strstr (lookup_name, "__") == NULL
4708 ? symbol_name_match_type::WILD
4709 : symbol_name_match_type::FULL);
c0431670
JB
4710}
4711
4c4b4cd2
PH
4712/* Return the result of a standard (literal, C-like) lookup of NAME in
4713 given DOMAIN, visible from lexical block BLOCK. */
4714
4715static struct symbol *
4716standard_lookup (const char *name, const struct block *block,
dda83cd7 4717 domain_enum domain)
4c4b4cd2 4718{
acbd605d 4719 /* Initialize it just to avoid a GCC false warning. */
6640a367 4720 struct block_symbol sym = {};
4c4b4cd2 4721
d12307c1
PMR
4722 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4723 return sym.symbol;
a2cd4f14 4724 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4725 cache_symbol (name, domain, sym.symbol, sym.block);
4726 return sym.symbol;
4c4b4cd2
PH
4727}
4728
4729
4730/* Non-zero iff there is at least one non-function/non-enumeral symbol
1bfa81ac 4731 in the symbol fields of SYMS. We treat enumerals as functions,
4c4b4cd2
PH
4732 since they contend in overloading in the same way. */
4733static int
d1183b06 4734is_nonfunction (const std::vector<struct block_symbol> &syms)
4c4b4cd2 4735{
d1183b06
TT
4736 for (const block_symbol &sym : syms)
4737 if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
4738 && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
4739 || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
14f9c5c9
AS
4740 return 1;
4741
4742 return 0;
4743}
4744
4745/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4746 struct types. Otherwise, they may not. */
14f9c5c9
AS
4747
4748static int
d2e4a39e 4749equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4750{
d2e4a39e 4751 if (type0 == type1)
14f9c5c9 4752 return 1;
d2e4a39e 4753 if (type0 == NULL || type1 == NULL
78134374 4754 || type0->code () != type1->code ())
14f9c5c9 4755 return 0;
78134374
SM
4756 if ((type0->code () == TYPE_CODE_STRUCT
4757 || type0->code () == TYPE_CODE_ENUM)
14f9c5c9 4758 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4759 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4760 return 1;
d2e4a39e 4761
14f9c5c9
AS
4762 return 0;
4763}
4764
4765/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4766 no more defined than that of SYM1. */
14f9c5c9
AS
4767
4768static int
d2e4a39e 4769lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4770{
4771 if (sym0 == sym1)
4772 return 1;
176620f1 4773 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4774 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4775 return 0;
4776
d2e4a39e 4777 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4778 {
4779 case LOC_UNDEF:
4780 return 1;
4781 case LOC_TYPEDEF:
4782 {
dda83cd7
SM
4783 struct type *type0 = SYMBOL_TYPE (sym0);
4784 struct type *type1 = SYMBOL_TYPE (sym1);
4785 const char *name0 = sym0->linkage_name ();
4786 const char *name1 = sym1->linkage_name ();
4787 int len0 = strlen (name0);
4788
4789 return
4790 type0->code () == type1->code ()
4791 && (equiv_types (type0, type1)
4792 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4793 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4794 }
4795 case LOC_CONST:
4796 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
dda83cd7 4797 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4b610737
TT
4798
4799 case LOC_STATIC:
4800 {
dda83cd7
SM
4801 const char *name0 = sym0->linkage_name ();
4802 const char *name1 = sym1->linkage_name ();
4803 return (strcmp (name0, name1) == 0
4804 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4b610737
TT
4805 }
4806
d2e4a39e
AS
4807 default:
4808 return 0;
14f9c5c9
AS
4809 }
4810}
4811
d1183b06
TT
4812/* Append (SYM,BLOCK) to the end of the array of struct block_symbol
4813 records in RESULT. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4814
4815static void
d1183b06 4816add_defn_to_vec (std::vector<struct block_symbol> &result,
dda83cd7
SM
4817 struct symbol *sym,
4818 const struct block *block)
14f9c5c9 4819{
529cad9c
PH
4820 /* Do not try to complete stub types, as the debugger is probably
4821 already scanning all symbols matching a certain name at the
4822 time when this function is called. Trying to replace the stub
4823 type by its associated full type will cause us to restart a scan
4824 which may lead to an infinite recursion. Instead, the client
4825 collecting the matching symbols will end up collecting several
4826 matches, with at least one of them complete. It can then filter
4827 out the stub ones if needed. */
4828
d1183b06 4829 for (int i = result.size () - 1; i >= 0; i -= 1)
4c4b4cd2 4830 {
d1183b06 4831 if (lesseq_defined_than (sym, result[i].symbol))
dda83cd7 4832 return;
d1183b06 4833 else if (lesseq_defined_than (result[i].symbol, sym))
dda83cd7 4834 {
d1183b06
TT
4835 result[i].symbol = sym;
4836 result[i].block = block;
dda83cd7
SM
4837 return;
4838 }
4c4b4cd2
PH
4839 }
4840
d1183b06
TT
4841 struct block_symbol info;
4842 info.symbol = sym;
4843 info.block = block;
4844 result.push_back (info);
4c4b4cd2
PH
4845}
4846
7c7b6655
TT
4847/* Return a bound minimal symbol matching NAME according to Ada
4848 decoding rules. Returns an invalid symbol if there is no such
4849 minimal symbol. Names prefixed with "standard__" are handled
4850 specially: "standard__" is first stripped off, and only static and
4851 global symbols are searched. */
4c4b4cd2 4852
7c7b6655 4853struct bound_minimal_symbol
96d887e8 4854ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4855{
7c7b6655 4856 struct bound_minimal_symbol result;
4c4b4cd2 4857
7c7b6655
TT
4858 memset (&result, 0, sizeof (result));
4859
b5ec771e
PA
4860 symbol_name_match_type match_type = name_match_type_from_name (name);
4861 lookup_name_info lookup_name (name, match_type);
4862
4863 symbol_name_matcher_ftype *match_name
4864 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4865
2030c079 4866 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4867 {
7932255d 4868 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf 4869 {
c9d95fa3 4870 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
5325b9bf
TT
4871 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4872 {
4873 result.minsym = msymbol;
4874 result.objfile = objfile;
4875 break;
4876 }
4877 }
4878 }
4c4b4cd2 4879
7c7b6655 4880 return result;
96d887e8 4881}
4c4b4cd2 4882
96d887e8
PH
4883/* For all subprograms that statically enclose the subprogram of the
4884 selected frame, add symbols matching identifier NAME in DOMAIN
1bfa81ac 4885 and their blocks to the list of data in RESULT, as for
48b78332
JB
4886 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4887 with a wildcard prefix. */
4c4b4cd2 4888
96d887e8 4889static void
d1183b06 4890add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
b5ec771e
PA
4891 const lookup_name_info &lookup_name,
4892 domain_enum domain)
96d887e8 4893{
96d887e8 4894}
14f9c5c9 4895
96d887e8
PH
4896/* True if TYPE is definitely an artificial type supplied to a symbol
4897 for which no debugging information was given in the symbol file. */
14f9c5c9 4898
96d887e8
PH
4899static int
4900is_nondebugging_type (struct type *type)
4901{
0d5cff50 4902 const char *name = ada_type_name (type);
5b4ee69b 4903
96d887e8
PH
4904 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4905}
4c4b4cd2 4906
8f17729f
JB
4907/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4908 that are deemed "identical" for practical purposes.
4909
4910 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4911 types and that their number of enumerals is identical (in other
1f704f76 4912 words, type1->num_fields () == type2->num_fields ()). */
8f17729f
JB
4913
4914static int
4915ada_identical_enum_types_p (struct type *type1, struct type *type2)
4916{
4917 int i;
4918
4919 /* The heuristic we use here is fairly conservative. We consider
4920 that 2 enumerate types are identical if they have the same
4921 number of enumerals and that all enumerals have the same
4922 underlying value and name. */
4923
4924 /* All enums in the type should have an identical underlying value. */
1f704f76 4925 for (i = 0; i < type1->num_fields (); i++)
14e75d8e 4926 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4927 return 0;
4928
4929 /* All enumerals should also have the same name (modulo any numerical
4930 suffix). */
1f704f76 4931 for (i = 0; i < type1->num_fields (); i++)
8f17729f 4932 {
0d5cff50
DE
4933 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4934 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4935 int len_1 = strlen (name_1);
4936 int len_2 = strlen (name_2);
4937
4938 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4939 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4940 if (len_1 != len_2
dda83cd7 4941 || strncmp (TYPE_FIELD_NAME (type1, i),
8f17729f
JB
4942 TYPE_FIELD_NAME (type2, i),
4943 len_1) != 0)
4944 return 0;
4945 }
4946
4947 return 1;
4948}
4949
4950/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4951 that are deemed "identical" for practical purposes. Sometimes,
4952 enumerals are not strictly identical, but their types are so similar
4953 that they can be considered identical.
4954
4955 For instance, consider the following code:
4956
4957 type Color is (Black, Red, Green, Blue, White);
4958 type RGB_Color is new Color range Red .. Blue;
4959
4960 Type RGB_Color is a subrange of an implicit type which is a copy
4961 of type Color. If we call that implicit type RGB_ColorB ("B" is
4962 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4963 As a result, when an expression references any of the enumeral
4964 by name (Eg. "print green"), the expression is technically
4965 ambiguous and the user should be asked to disambiguate. But
4966 doing so would only hinder the user, since it wouldn't matter
4967 what choice he makes, the outcome would always be the same.
4968 So, for practical purposes, we consider them as the same. */
4969
4970static int
54d343a2 4971symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
4972{
4973 int i;
4974
4975 /* Before performing a thorough comparison check of each type,
4976 we perform a series of inexpensive checks. We expect that these
4977 checks will quickly fail in the vast majority of cases, and thus
4978 help prevent the unnecessary use of a more expensive comparison.
4979 Said comparison also expects us to make some of these checks
4980 (see ada_identical_enum_types_p). */
4981
4982 /* Quick check: All symbols should have an enum type. */
54d343a2 4983 for (i = 0; i < syms.size (); i++)
78134374 4984 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
8f17729f
JB
4985 return 0;
4986
4987 /* Quick check: They should all have the same value. */
54d343a2 4988 for (i = 1; i < syms.size (); i++)
d12307c1 4989 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
4990 return 0;
4991
4992 /* Quick check: They should all have the same number of enumerals. */
54d343a2 4993 for (i = 1; i < syms.size (); i++)
1f704f76 4994 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
dda83cd7 4995 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
8f17729f
JB
4996 return 0;
4997
4998 /* All the sanity checks passed, so we might have a set of
4999 identical enumeration types. Perform a more complete
5000 comparison of the type of each symbol. */
54d343a2 5001 for (i = 1; i < syms.size (); i++)
d12307c1 5002 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
dda83cd7 5003 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5004 return 0;
5005
5006 return 1;
5007}
5008
54d343a2 5009/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
5010 duplicate other symbols in the list (The only case I know of where
5011 this happens is when object files containing stabs-in-ecoff are
5012 linked with files containing ordinary ecoff debugging symbols (or no
1bfa81ac 5013 debugging symbols)). Modifies SYMS to squeeze out deleted entries. */
4c4b4cd2 5014
d1183b06 5015static void
54d343a2 5016remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
5017{
5018 int i, j;
4c4b4cd2 5019
8f17729f
JB
5020 /* We should never be called with less than 2 symbols, as there
5021 cannot be any extra symbol in that case. But it's easy to
5022 handle, since we have nothing to do in that case. */
54d343a2 5023 if (syms->size () < 2)
d1183b06 5024 return;
8f17729f 5025
96d887e8 5026 i = 0;
54d343a2 5027 while (i < syms->size ())
96d887e8 5028 {
a35ddb44 5029 int remove_p = 0;
339c13b6
JB
5030
5031 /* If two symbols have the same name and one of them is a stub type,
dda83cd7 5032 the get rid of the stub. */
339c13b6 5033
e46d3488 5034 if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
dda83cd7
SM
5035 && (*syms)[i].symbol->linkage_name () != NULL)
5036 {
5037 for (j = 0; j < syms->size (); j++)
5038 {
5039 if (j != i
5040 && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
5041 && (*syms)[j].symbol->linkage_name () != NULL
5042 && strcmp ((*syms)[i].symbol->linkage_name (),
5043 (*syms)[j].symbol->linkage_name ()) == 0)
5044 remove_p = 1;
5045 }
5046 }
339c13b6
JB
5047
5048 /* Two symbols with the same name, same class and same address
dda83cd7 5049 should be identical. */
339c13b6 5050
987012b8 5051 else if ((*syms)[i].symbol->linkage_name () != NULL
dda83cd7
SM
5052 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5053 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5054 {
5055 for (j = 0; j < syms->size (); j += 1)
5056 {
5057 if (i != j
5058 && (*syms)[j].symbol->linkage_name () != NULL
5059 && strcmp ((*syms)[i].symbol->linkage_name (),
5060 (*syms)[j].symbol->linkage_name ()) == 0
5061 && SYMBOL_CLASS ((*syms)[i].symbol)
54d343a2 5062 == SYMBOL_CLASS ((*syms)[j].symbol)
dda83cd7
SM
5063 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5064 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5065 remove_p = 1;
5066 }
5067 }
339c13b6 5068
a35ddb44 5069 if (remove_p)
54d343a2 5070 syms->erase (syms->begin () + i);
1b788fb6
TT
5071 else
5072 i += 1;
14f9c5c9 5073 }
8f17729f
JB
5074
5075 /* If all the remaining symbols are identical enumerals, then
5076 just keep the first one and discard the rest.
5077
5078 Unlike what we did previously, we do not discard any entry
5079 unless they are ALL identical. This is because the symbol
5080 comparison is not a strict comparison, but rather a practical
5081 comparison. If all symbols are considered identical, then
5082 we can just go ahead and use the first one and discard the rest.
5083 But if we cannot reduce the list to a single element, we have
5084 to ask the user to disambiguate anyways. And if we have to
5085 present a multiple-choice menu, it's less confusing if the list
5086 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5087 if (symbols_are_identical_enums (*syms))
5088 syms->resize (1);
14f9c5c9
AS
5089}
5090
96d887e8
PH
5091/* Given a type that corresponds to a renaming entity, use the type name
5092 to extract the scope (package name or function name, fully qualified,
5093 and following the GNAT encoding convention) where this renaming has been
49d83361 5094 defined. */
4c4b4cd2 5095
49d83361 5096static std::string
96d887e8 5097xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5098{
96d887e8 5099 /* The renaming types adhere to the following convention:
0963b4bd 5100 <scope>__<rename>___<XR extension>.
96d887e8
PH
5101 So, to extract the scope, we search for the "___XR" extension,
5102 and then backtrack until we find the first "__". */
76a01679 5103
7d93a1e0 5104 const char *name = renaming_type->name ();
108d56a4
SM
5105 const char *suffix = strstr (name, "___XR");
5106 const char *last;
14f9c5c9 5107
96d887e8
PH
5108 /* Now, backtrack a bit until we find the first "__". Start looking
5109 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5110
96d887e8
PH
5111 for (last = suffix - 3; last > name; last--)
5112 if (last[0] == '_' && last[1] == '_')
5113 break;
76a01679 5114
96d887e8 5115 /* Make a copy of scope and return it. */
49d83361 5116 return std::string (name, last);
4c4b4cd2
PH
5117}
5118
96d887e8 5119/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5120
96d887e8
PH
5121static int
5122is_package_name (const char *name)
4c4b4cd2 5123{
96d887e8
PH
5124 /* Here, We take advantage of the fact that no symbols are generated
5125 for packages, while symbols are generated for each function.
5126 So the condition for NAME represent a package becomes equivalent
5127 to NAME not existing in our list of symbols. There is only one
5128 small complication with library-level functions (see below). */
4c4b4cd2 5129
96d887e8
PH
5130 /* If it is a function that has not been defined at library level,
5131 then we should be able to look it up in the symbols. */
5132 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5133 return 0;
14f9c5c9 5134
96d887e8
PH
5135 /* Library-level function names start with "_ada_". See if function
5136 "_ada_" followed by NAME can be found. */
14f9c5c9 5137
96d887e8 5138 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5139 functions names cannot contain "__" in them. */
96d887e8
PH
5140 if (strstr (name, "__") != NULL)
5141 return 0;
4c4b4cd2 5142
528e1572 5143 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5144
528e1572 5145 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5146}
14f9c5c9 5147
96d887e8 5148/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5149 not visible from FUNCTION_NAME. */
14f9c5c9 5150
96d887e8 5151static int
0d5cff50 5152old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5153{
aeb5907d
JB
5154 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5155 return 0;
5156
49d83361 5157 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5158
96d887e8 5159 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5160 if (is_package_name (scope.c_str ()))
5161 return 0;
14f9c5c9 5162
96d887e8
PH
5163 /* Check that the rename is in the current function scope by checking
5164 that its name starts with SCOPE. */
76a01679 5165
96d887e8
PH
5166 /* If the function name starts with "_ada_", it means that it is
5167 a library-level function. Strip this prefix before doing the
5168 comparison, as the encoding for the renaming does not contain
5169 this prefix. */
61012eef 5170 if (startswith (function_name, "_ada_"))
96d887e8 5171 function_name += 5;
f26caa11 5172
49d83361 5173 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5174}
5175
aeb5907d
JB
5176/* Remove entries from SYMS that corresponds to a renaming entity that
5177 is not visible from the function associated with CURRENT_BLOCK or
5178 that is superfluous due to the presence of more specific renaming
5179 information. Places surviving symbols in the initial entries of
d1183b06
TT
5180 SYMS.
5181
96d887e8 5182 Rationale:
aeb5907d
JB
5183 First, in cases where an object renaming is implemented as a
5184 reference variable, GNAT may produce both the actual reference
5185 variable and the renaming encoding. In this case, we discard the
5186 latter.
5187
5188 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5189 entity. Unfortunately, STABS currently does not support the definition
5190 of types that are local to a given lexical block, so all renamings types
5191 are emitted at library level. As a consequence, if an application
5192 contains two renaming entities using the same name, and a user tries to
5193 print the value of one of these entities, the result of the ada symbol
5194 lookup will also contain the wrong renaming type.
f26caa11 5195
96d887e8
PH
5196 This function partially covers for this limitation by attempting to
5197 remove from the SYMS list renaming symbols that should be visible
5198 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5199 method with the current information available. The implementation
5200 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5201
5202 - When the user tries to print a rename in a function while there
dda83cd7
SM
5203 is another rename entity defined in a package: Normally, the
5204 rename in the function has precedence over the rename in the
5205 package, so the latter should be removed from the list. This is
5206 currently not the case.
5207
96d887e8 5208 - This function will incorrectly remove valid renames if
dda83cd7
SM
5209 the CURRENT_BLOCK corresponds to a function which symbol name
5210 has been changed by an "Export" pragma. As a consequence,
5211 the user will be unable to print such rename entities. */
4c4b4cd2 5212
d1183b06 5213static void
54d343a2
TT
5214remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5215 const struct block *current_block)
4c4b4cd2
PH
5216{
5217 struct symbol *current_function;
0d5cff50 5218 const char *current_function_name;
4c4b4cd2 5219 int i;
aeb5907d
JB
5220 int is_new_style_renaming;
5221
5222 /* If there is both a renaming foo___XR... encoded as a variable and
5223 a simple variable foo in the same block, discard the latter.
0963b4bd 5224 First, zero out such symbols, then compress. */
aeb5907d 5225 is_new_style_renaming = 0;
54d343a2 5226 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5227 {
54d343a2
TT
5228 struct symbol *sym = (*syms)[i].symbol;
5229 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5230 const char *name;
5231 const char *suffix;
5232
5233 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5234 continue;
987012b8 5235 name = sym->linkage_name ();
aeb5907d
JB
5236 suffix = strstr (name, "___XR");
5237
5238 if (suffix != NULL)
5239 {
5240 int name_len = suffix - name;
5241 int j;
5b4ee69b 5242
aeb5907d 5243 is_new_style_renaming = 1;
54d343a2
TT
5244 for (j = 0; j < syms->size (); j += 1)
5245 if (i != j && (*syms)[j].symbol != NULL
987012b8 5246 && strncmp (name, (*syms)[j].symbol->linkage_name (),
aeb5907d 5247 name_len) == 0
54d343a2
TT
5248 && block == (*syms)[j].block)
5249 (*syms)[j].symbol = NULL;
aeb5907d
JB
5250 }
5251 }
5252 if (is_new_style_renaming)
5253 {
5254 int j, k;
5255
54d343a2
TT
5256 for (j = k = 0; j < syms->size (); j += 1)
5257 if ((*syms)[j].symbol != NULL)
aeb5907d 5258 {
54d343a2 5259 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5260 k += 1;
5261 }
d1183b06
TT
5262 syms->resize (k);
5263 return;
aeb5907d 5264 }
4c4b4cd2
PH
5265
5266 /* Extract the function name associated to CURRENT_BLOCK.
5267 Abort if unable to do so. */
76a01679 5268
4c4b4cd2 5269 if (current_block == NULL)
d1183b06 5270 return;
76a01679 5271
7f0df278 5272 current_function = block_linkage_function (current_block);
4c4b4cd2 5273 if (current_function == NULL)
d1183b06 5274 return;
4c4b4cd2 5275
987012b8 5276 current_function_name = current_function->linkage_name ();
4c4b4cd2 5277 if (current_function_name == NULL)
d1183b06 5278 return;
4c4b4cd2
PH
5279
5280 /* Check each of the symbols, and remove it from the list if it is
5281 a type corresponding to a renaming that is out of the scope of
5282 the current block. */
5283
5284 i = 0;
54d343a2 5285 while (i < syms->size ())
4c4b4cd2 5286 {
54d343a2 5287 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
dda83cd7
SM
5288 == ADA_OBJECT_RENAMING
5289 && old_renaming_is_invisible ((*syms)[i].symbol,
54d343a2
TT
5290 current_function_name))
5291 syms->erase (syms->begin () + i);
4c4b4cd2 5292 else
dda83cd7 5293 i += 1;
4c4b4cd2 5294 }
4c4b4cd2
PH
5295}
5296
d1183b06 5297/* Add to RESULT all symbols from BLOCK (and its super-blocks)
339c13b6
JB
5298 whose name and domain match NAME and DOMAIN respectively.
5299 If no match was found, then extend the search to "enclosing"
5300 routines (in other words, if we're inside a nested function,
5301 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5302 If WILD_MATCH_P is nonzero, perform the naming matching in
5303 "wild" mode (see function "wild_match" for more info).
339c13b6 5304
d1183b06 5305 Note: This function assumes that RESULT has 0 (zero) element in it. */
339c13b6
JB
5306
5307static void
d1183b06 5308ada_add_local_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5309 const lookup_name_info &lookup_name,
5310 const struct block *block, domain_enum domain)
339c13b6
JB
5311{
5312 int block_depth = 0;
5313
5314 while (block != NULL)
5315 {
5316 block_depth += 1;
d1183b06 5317 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
339c13b6
JB
5318
5319 /* If we found a non-function match, assume that's the one. */
d1183b06 5320 if (is_nonfunction (result))
dda83cd7 5321 return;
339c13b6
JB
5322
5323 block = BLOCK_SUPERBLOCK (block);
5324 }
5325
5326 /* If no luck so far, try to find NAME as a local symbol in some lexically
5327 enclosing subprogram. */
d1183b06
TT
5328 if (result.empty () && block_depth > 2)
5329 add_symbols_from_enclosing_procs (result, lookup_name, domain);
339c13b6
JB
5330}
5331
ccefe4c4 5332/* An object of this type is used as the user_data argument when
40658b94 5333 calling the map_matching_symbols method. */
ccefe4c4 5334
40658b94 5335struct match_data
ccefe4c4 5336{
1bfa81ac
TT
5337 explicit match_data (std::vector<struct block_symbol> *rp)
5338 : resultp (rp)
5339 {
5340 }
5341 DISABLE_COPY_AND_ASSIGN (match_data);
5342
5343 struct objfile *objfile = nullptr;
d1183b06 5344 std::vector<struct block_symbol> *resultp;
1bfa81ac 5345 struct symbol *arg_sym = nullptr;
1178743e 5346 bool found_sym = false;
ccefe4c4
TT
5347};
5348
199b4314
TT
5349/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5350 to a list of symbols. DATA is a pointer to a struct match_data *
1bfa81ac 5351 containing the vector that collects the symbol list, the file that SYM
40658b94
PH
5352 must come from, a flag indicating whether a non-argument symbol has
5353 been found in the current block, and the last argument symbol
5354 passed in SYM within the current block (if any). When SYM is null,
5355 marking the end of a block, the argument symbol is added if no
5356 other has been found. */
ccefe4c4 5357
199b4314
TT
5358static bool
5359aux_add_nonlocal_symbols (struct block_symbol *bsym,
5360 struct match_data *data)
ccefe4c4 5361{
199b4314
TT
5362 const struct block *block = bsym->block;
5363 struct symbol *sym = bsym->symbol;
5364
40658b94
PH
5365 if (sym == NULL)
5366 {
5367 if (!data->found_sym && data->arg_sym != NULL)
d1183b06 5368 add_defn_to_vec (*data->resultp,
40658b94
PH
5369 fixup_symbol_section (data->arg_sym, data->objfile),
5370 block);
1178743e 5371 data->found_sym = false;
40658b94
PH
5372 data->arg_sym = NULL;
5373 }
5374 else
5375 {
5376 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
199b4314 5377 return true;
40658b94
PH
5378 else if (SYMBOL_IS_ARGUMENT (sym))
5379 data->arg_sym = sym;
5380 else
5381 {
1178743e 5382 data->found_sym = true;
d1183b06 5383 add_defn_to_vec (*data->resultp,
40658b94
PH
5384 fixup_symbol_section (sym, data->objfile),
5385 block);
5386 }
5387 }
199b4314 5388 return true;
40658b94
PH
5389}
5390
b5ec771e
PA
5391/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5392 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
1bfa81ac 5393 symbols to RESULT. Return whether we found such symbols. */
22cee43f
PMR
5394
5395static int
d1183b06 5396ada_add_block_renamings (std::vector<struct block_symbol> &result,
22cee43f 5397 const struct block *block,
b5ec771e
PA
5398 const lookup_name_info &lookup_name,
5399 domain_enum domain)
22cee43f
PMR
5400{
5401 struct using_direct *renaming;
d1183b06 5402 int defns_mark = result.size ();
22cee43f 5403
b5ec771e
PA
5404 symbol_name_matcher_ftype *name_match
5405 = ada_get_symbol_name_matcher (lookup_name);
5406
22cee43f
PMR
5407 for (renaming = block_using (block);
5408 renaming != NULL;
5409 renaming = renaming->next)
5410 {
5411 const char *r_name;
22cee43f
PMR
5412
5413 /* Avoid infinite recursions: skip this renaming if we are actually
5414 already traversing it.
5415
5416 Currently, symbol lookup in Ada don't use the namespace machinery from
5417 C++/Fortran support: skip namespace imports that use them. */
5418 if (renaming->searched
5419 || (renaming->import_src != NULL
5420 && renaming->import_src[0] != '\0')
5421 || (renaming->import_dest != NULL
5422 && renaming->import_dest[0] != '\0'))
5423 continue;
5424 renaming->searched = 1;
5425
5426 /* TODO: here, we perform another name-based symbol lookup, which can
5427 pull its own multiple overloads. In theory, we should be able to do
5428 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5429 not a simple name. But in order to do this, we would need to enhance
5430 the DWARF reader to associate a symbol to this renaming, instead of a
5431 name. So, for now, we do something simpler: re-use the C++/Fortran
5432 namespace machinery. */
5433 r_name = (renaming->alias != NULL
5434 ? renaming->alias
5435 : renaming->declaration);
b5ec771e
PA
5436 if (name_match (r_name, lookup_name, NULL))
5437 {
5438 lookup_name_info decl_lookup_name (renaming->declaration,
5439 lookup_name.match_type ());
d1183b06 5440 ada_add_all_symbols (result, block, decl_lookup_name, domain,
b5ec771e
PA
5441 1, NULL);
5442 }
22cee43f
PMR
5443 renaming->searched = 0;
5444 }
d1183b06 5445 return result.size () != defns_mark;
22cee43f
PMR
5446}
5447
db230ce3
JB
5448/* Implements compare_names, but only applying the comparision using
5449 the given CASING. */
5b4ee69b 5450
40658b94 5451static int
db230ce3
JB
5452compare_names_with_case (const char *string1, const char *string2,
5453 enum case_sensitivity casing)
40658b94
PH
5454{
5455 while (*string1 != '\0' && *string2 != '\0')
5456 {
db230ce3
JB
5457 char c1, c2;
5458
40658b94
PH
5459 if (isspace (*string1) || isspace (*string2))
5460 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5461
5462 if (casing == case_sensitive_off)
5463 {
5464 c1 = tolower (*string1);
5465 c2 = tolower (*string2);
5466 }
5467 else
5468 {
5469 c1 = *string1;
5470 c2 = *string2;
5471 }
5472 if (c1 != c2)
40658b94 5473 break;
db230ce3 5474
40658b94
PH
5475 string1 += 1;
5476 string2 += 1;
5477 }
db230ce3 5478
40658b94
PH
5479 switch (*string1)
5480 {
5481 case '(':
5482 return strcmp_iw_ordered (string1, string2);
5483 case '_':
5484 if (*string2 == '\0')
5485 {
052874e8 5486 if (is_name_suffix (string1))
40658b94
PH
5487 return 0;
5488 else
1a1d5513 5489 return 1;
40658b94 5490 }
dbb8534f 5491 /* FALLTHROUGH */
40658b94
PH
5492 default:
5493 if (*string2 == '(')
5494 return strcmp_iw_ordered (string1, string2);
5495 else
db230ce3
JB
5496 {
5497 if (casing == case_sensitive_off)
5498 return tolower (*string1) - tolower (*string2);
5499 else
5500 return *string1 - *string2;
5501 }
40658b94 5502 }
ccefe4c4
TT
5503}
5504
db230ce3
JB
5505/* Compare STRING1 to STRING2, with results as for strcmp.
5506 Compatible with strcmp_iw_ordered in that...
5507
5508 strcmp_iw_ordered (STRING1, STRING2) <= 0
5509
5510 ... implies...
5511
5512 compare_names (STRING1, STRING2) <= 0
5513
5514 (they may differ as to what symbols compare equal). */
5515
5516static int
5517compare_names (const char *string1, const char *string2)
5518{
5519 int result;
5520
5521 /* Similar to what strcmp_iw_ordered does, we need to perform
5522 a case-insensitive comparison first, and only resort to
5523 a second, case-sensitive, comparison if the first one was
5524 not sufficient to differentiate the two strings. */
5525
5526 result = compare_names_with_case (string1, string2, case_sensitive_off);
5527 if (result == 0)
5528 result = compare_names_with_case (string1, string2, case_sensitive_on);
5529
5530 return result;
5531}
5532
b5ec771e
PA
5533/* Convenience function to get at the Ada encoded lookup name for
5534 LOOKUP_NAME, as a C string. */
5535
5536static const char *
5537ada_lookup_name (const lookup_name_info &lookup_name)
5538{
5539 return lookup_name.ada ().lookup_name ().c_str ();
5540}
5541
1bfa81ac 5542/* Add to RESULT all non-local symbols whose name and domain match
b5ec771e
PA
5543 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5544 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5545 symbols otherwise. */
339c13b6
JB
5546
5547static void
d1183b06 5548add_nonlocal_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5549 const lookup_name_info &lookup_name,
5550 domain_enum domain, int global)
339c13b6 5551{
1bfa81ac 5552 struct match_data data (&result);
339c13b6 5553
b5ec771e
PA
5554 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5555
199b4314
TT
5556 auto callback = [&] (struct block_symbol *bsym)
5557 {
5558 return aux_add_nonlocal_symbols (bsym, &data);
5559 };
5560
2030c079 5561 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5562 {
5563 data.objfile = objfile;
5564
1228719f
TT
5565 if (objfile->sf != nullptr)
5566 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5567 domain, global, callback,
5568 (is_wild_match
5569 ? NULL : compare_names));
22cee43f 5570
b669c953 5571 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5572 {
5573 const struct block *global_block
5574 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5575
d1183b06 5576 if (ada_add_block_renamings (result, global_block, lookup_name,
b5ec771e 5577 domain))
1178743e 5578 data.found_sym = true;
22cee43f 5579 }
40658b94
PH
5580 }
5581
d1183b06 5582 if (result.empty () && global && !is_wild_match)
40658b94 5583 {
b5ec771e 5584 const char *name = ada_lookup_name (lookup_name);
e0802d59
TT
5585 std::string bracket_name = std::string ("<_ada_") + name + '>';
5586 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
b5ec771e 5587
2030c079 5588 for (objfile *objfile : current_program_space->objfiles ())
dda83cd7 5589 {
40658b94 5590 data.objfile = objfile;
1228719f
TT
5591 if (objfile->sf != nullptr)
5592 objfile->sf->qf->map_matching_symbols (objfile, name1,
5593 domain, global, callback,
5594 compare_names);
40658b94
PH
5595 }
5596 }
339c13b6
JB
5597}
5598
b5ec771e
PA
5599/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5600 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
1bfa81ac 5601 returning the number of matches. Add these to RESULT.
4eeaa230 5602
22cee43f
PMR
5603 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5604 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5605 is the one match returned (no other matches in that or
d9680e73 5606 enclosing blocks is returned). If there are any matches in or
22cee43f 5607 surrounding BLOCK, then these alone are returned.
4eeaa230 5608
b5ec771e
PA
5609 Names prefixed with "standard__" are handled specially:
5610 "standard__" is first stripped off (by the lookup_name
5611 constructor), and only static and global symbols are searched.
14f9c5c9 5612
22cee43f
PMR
5613 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5614 to lookup global symbols. */
5615
5616static void
d1183b06 5617ada_add_all_symbols (std::vector<struct block_symbol> &result,
22cee43f 5618 const struct block *block,
b5ec771e 5619 const lookup_name_info &lookup_name,
22cee43f
PMR
5620 domain_enum domain,
5621 int full_search,
5622 int *made_global_lookup_p)
14f9c5c9
AS
5623{
5624 struct symbol *sym;
14f9c5c9 5625
22cee43f
PMR
5626 if (made_global_lookup_p)
5627 *made_global_lookup_p = 0;
339c13b6
JB
5628
5629 /* Special case: If the user specifies a symbol name inside package
5630 Standard, do a non-wild matching of the symbol name without
5631 the "standard__" prefix. This was primarily introduced in order
5632 to allow the user to specifically access the standard exceptions
5633 using, for instance, Standard.Constraint_Error when Constraint_Error
5634 is ambiguous (due to the user defining its own Constraint_Error
5635 entity inside its program). */
b5ec771e
PA
5636 if (lookup_name.ada ().standard_p ())
5637 block = NULL;
4c4b4cd2 5638
339c13b6 5639 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5640
4eeaa230
DE
5641 if (block != NULL)
5642 {
5643 if (full_search)
d1183b06 5644 ada_add_local_symbols (result, lookup_name, block, domain);
4eeaa230
DE
5645 else
5646 {
5647 /* In the !full_search case we're are being called by
4009ee92 5648 iterate_over_symbols, and we don't want to search
4eeaa230 5649 superblocks. */
d1183b06 5650 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
4eeaa230 5651 }
d1183b06 5652 if (!result.empty () || !full_search)
22cee43f 5653 return;
4eeaa230 5654 }
d2e4a39e 5655
339c13b6
JB
5656 /* No non-global symbols found. Check our cache to see if we have
5657 already performed this search before. If we have, then return
5658 the same result. */
5659
b5ec771e
PA
5660 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5661 domain, &sym, &block))
4c4b4cd2
PH
5662 {
5663 if (sym != NULL)
d1183b06 5664 add_defn_to_vec (result, sym, block);
22cee43f 5665 return;
4c4b4cd2 5666 }
14f9c5c9 5667
22cee43f
PMR
5668 if (made_global_lookup_p)
5669 *made_global_lookup_p = 1;
b1eedac9 5670
339c13b6
JB
5671 /* Search symbols from all global blocks. */
5672
d1183b06 5673 add_nonlocal_symbols (result, lookup_name, domain, 1);
d2e4a39e 5674
4c4b4cd2 5675 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5676 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5677
d1183b06
TT
5678 if (result.empty ())
5679 add_nonlocal_symbols (result, lookup_name, domain, 0);
22cee43f
PMR
5680}
5681
b5ec771e 5682/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
d1183b06
TT
5683 is non-zero, enclosing scope and in global scopes.
5684
5685 Returns (SYM,BLOCK) tuples, indicating the symbols found and the
5686 blocks and symbol tables (if any) in which they were found.
22cee43f
PMR
5687
5688 When full_search is non-zero, any non-function/non-enumeral
5689 symbol match within the nest of blocks whose innermost member is BLOCK,
5690 is the one match returned (no other matches in that or
5691 enclosing blocks is returned). If there are any matches in or
5692 surrounding BLOCK, then these alone are returned.
5693
5694 Names prefixed with "standard__" are handled specially: "standard__"
5695 is first stripped off, and only static and global symbols are searched. */
5696
d1183b06 5697static std::vector<struct block_symbol>
b5ec771e
PA
5698ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5699 const struct block *block,
22cee43f 5700 domain_enum domain,
22cee43f
PMR
5701 int full_search)
5702{
22cee43f 5703 int syms_from_global_search;
d1183b06 5704 std::vector<struct block_symbol> results;
22cee43f 5705
d1183b06 5706 ada_add_all_symbols (results, block, lookup_name,
b5ec771e 5707 domain, full_search, &syms_from_global_search);
14f9c5c9 5708
d1183b06 5709 remove_extra_symbols (&results);
4c4b4cd2 5710
d1183b06 5711 if (results.empty () && full_search && syms_from_global_search)
b5ec771e 5712 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5713
d1183b06 5714 if (results.size () == 1 && full_search && syms_from_global_search)
b5ec771e 5715 cache_symbol (ada_lookup_name (lookup_name), domain,
d1183b06 5716 results[0].symbol, results[0].block);
ec6a20c2 5717
d1183b06
TT
5718 remove_irrelevant_renamings (&results, block);
5719 return results;
14f9c5c9
AS
5720}
5721
b5ec771e 5722/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
d1183b06 5723 in global scopes, returning (SYM,BLOCK) tuples.
ec6a20c2 5724
4eeaa230
DE
5725 See ada_lookup_symbol_list_worker for further details. */
5726
d1183b06 5727std::vector<struct block_symbol>
b5ec771e 5728ada_lookup_symbol_list (const char *name, const struct block *block,
d1183b06 5729 domain_enum domain)
4eeaa230 5730{
b5ec771e
PA
5731 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5732 lookup_name_info lookup_name (name, name_match_type);
5733
d1183b06 5734 return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
4eeaa230
DE
5735}
5736
4e5c77fe
JB
5737/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5738 to 1, but choosing the first symbol found if there are multiple
5739 choices.
5740
5e2336be
JB
5741 The result is stored in *INFO, which must be non-NULL.
5742 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5743
5744void
5745ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5746 domain_enum domain,
d12307c1 5747 struct block_symbol *info)
14f9c5c9 5748{
b5ec771e
PA
5749 /* Since we already have an encoded name, wrap it in '<>' to force a
5750 verbatim match. Otherwise, if the name happens to not look like
5751 an encoded name (because it doesn't include a "__"),
5752 ada_lookup_name_info would re-encode/fold it again, and that
5753 would e.g., incorrectly lowercase object renaming names like
5754 "R28b" -> "r28b". */
12932e2c 5755 std::string verbatim = add_angle_brackets (name);
b5ec771e 5756
5e2336be 5757 gdb_assert (info != NULL);
65392b3e 5758 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
4e5c77fe 5759}
aeb5907d
JB
5760
5761/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5762 scope and in global scopes, or NULL if none. NAME is folded and
5763 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
65392b3e 5764 choosing the first symbol if there are multiple choices. */
4e5c77fe 5765
d12307c1 5766struct block_symbol
aeb5907d 5767ada_lookup_symbol (const char *name, const struct block *block0,
dda83cd7 5768 domain_enum domain)
aeb5907d 5769{
d1183b06
TT
5770 std::vector<struct block_symbol> candidates
5771 = ada_lookup_symbol_list (name, block0, domain);
f98fc17b 5772
d1183b06 5773 if (candidates.empty ())
54d343a2 5774 return {};
f98fc17b
PA
5775
5776 block_symbol info = candidates[0];
5777 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5778 return info;
4c4b4cd2 5779}
14f9c5c9 5780
14f9c5c9 5781
4c4b4cd2
PH
5782/* True iff STR is a possible encoded suffix of a normal Ada name
5783 that is to be ignored for matching purposes. Suffixes of parallel
5784 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5785 are given by any of the regular expressions:
4c4b4cd2 5786
babe1480
JB
5787 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5788 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5789 TKB [subprogram suffix for task bodies]
babe1480 5790 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5791 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5792
5793 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5794 match is performed. This sequence is used to differentiate homonyms,
5795 is an optional part of a valid name suffix. */
4c4b4cd2 5796
14f9c5c9 5797static int
d2e4a39e 5798is_name_suffix (const char *str)
14f9c5c9
AS
5799{
5800 int k;
4c4b4cd2
PH
5801 const char *matching;
5802 const int len = strlen (str);
5803
babe1480
JB
5804 /* Skip optional leading __[0-9]+. */
5805
4c4b4cd2
PH
5806 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5807 {
babe1480
JB
5808 str += 3;
5809 while (isdigit (str[0]))
dda83cd7 5810 str += 1;
4c4b4cd2 5811 }
babe1480
JB
5812
5813 /* [.$][0-9]+ */
4c4b4cd2 5814
babe1480 5815 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5816 {
babe1480 5817 matching = str + 1;
4c4b4cd2 5818 while (isdigit (matching[0]))
dda83cd7 5819 matching += 1;
4c4b4cd2 5820 if (matching[0] == '\0')
dda83cd7 5821 return 1;
4c4b4cd2
PH
5822 }
5823
5824 /* ___[0-9]+ */
babe1480 5825
4c4b4cd2
PH
5826 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5827 {
5828 matching = str + 3;
5829 while (isdigit (matching[0]))
dda83cd7 5830 matching += 1;
4c4b4cd2 5831 if (matching[0] == '\0')
dda83cd7 5832 return 1;
4c4b4cd2
PH
5833 }
5834
9ac7f98e
JB
5835 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5836
5837 if (strcmp (str, "TKB") == 0)
5838 return 1;
5839
529cad9c
PH
5840#if 0
5841 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5842 with a N at the end. Unfortunately, the compiler uses the same
5843 convention for other internal types it creates. So treating
529cad9c 5844 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5845 some regressions. For instance, consider the case of an enumerated
5846 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5847 name ends with N.
5848 Having a single character like this as a suffix carrying some
0963b4bd 5849 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5850 to be something like "_N" instead. In the meantime, do not do
5851 the following check. */
5852 /* Protected Object Subprograms */
5853 if (len == 1 && str [0] == 'N')
5854 return 1;
5855#endif
5856
5857 /* _E[0-9]+[bs]$ */
5858 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5859 {
5860 matching = str + 3;
5861 while (isdigit (matching[0]))
dda83cd7 5862 matching += 1;
529cad9c 5863 if ((matching[0] == 'b' || matching[0] == 's')
dda83cd7
SM
5864 && matching [1] == '\0')
5865 return 1;
529cad9c
PH
5866 }
5867
4c4b4cd2
PH
5868 /* ??? We should not modify STR directly, as we are doing below. This
5869 is fine in this case, but may become problematic later if we find
5870 that this alternative did not work, and want to try matching
5871 another one from the begining of STR. Since we modified it, we
5872 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5873 if (str[0] == 'X')
5874 {
5875 str += 1;
d2e4a39e 5876 while (str[0] != '_' && str[0] != '\0')
dda83cd7
SM
5877 {
5878 if (str[0] != 'n' && str[0] != 'b')
5879 return 0;
5880 str += 1;
5881 }
14f9c5c9 5882 }
babe1480 5883
14f9c5c9
AS
5884 if (str[0] == '\000')
5885 return 1;
babe1480 5886
d2e4a39e 5887 if (str[0] == '_')
14f9c5c9
AS
5888 {
5889 if (str[1] != '_' || str[2] == '\000')
dda83cd7 5890 return 0;
d2e4a39e 5891 if (str[2] == '_')
dda83cd7
SM
5892 {
5893 if (strcmp (str + 3, "JM") == 0)
5894 return 1;
5895 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5896 the LJM suffix in favor of the JM one. But we will
5897 still accept LJM as a valid suffix for a reasonable
5898 amount of time, just to allow ourselves to debug programs
5899 compiled using an older version of GNAT. */
5900 if (strcmp (str + 3, "LJM") == 0)
5901 return 1;
5902 if (str[3] != 'X')
5903 return 0;
5904 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5905 || str[4] == 'U' || str[4] == 'P')
5906 return 1;
5907 if (str[4] == 'R' && str[5] != 'T')
5908 return 1;
5909 return 0;
5910 }
4c4b4cd2 5911 if (!isdigit (str[2]))
dda83cd7 5912 return 0;
4c4b4cd2 5913 for (k = 3; str[k] != '\0'; k += 1)
dda83cd7
SM
5914 if (!isdigit (str[k]) && str[k] != '_')
5915 return 0;
14f9c5c9
AS
5916 return 1;
5917 }
4c4b4cd2 5918 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5919 {
4c4b4cd2 5920 for (k = 2; str[k] != '\0'; k += 1)
dda83cd7
SM
5921 if (!isdigit (str[k]) && str[k] != '_')
5922 return 0;
14f9c5c9
AS
5923 return 1;
5924 }
5925 return 0;
5926}
d2e4a39e 5927
aeb5907d
JB
5928/* Return non-zero if the string starting at NAME and ending before
5929 NAME_END contains no capital letters. */
529cad9c
PH
5930
5931static int
5932is_valid_name_for_wild_match (const char *name0)
5933{
f945dedf 5934 std::string decoded_name = ada_decode (name0);
529cad9c
PH
5935 int i;
5936
5823c3ef
JB
5937 /* If the decoded name starts with an angle bracket, it means that
5938 NAME0 does not follow the GNAT encoding format. It should then
5939 not be allowed as a possible wild match. */
5940 if (decoded_name[0] == '<')
5941 return 0;
5942
529cad9c
PH
5943 for (i=0; decoded_name[i] != '\0'; i++)
5944 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5945 return 0;
5946
5947 return 1;
5948}
5949
59c8a30b
JB
5950/* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
5951 character which could start a simple name. Assumes that *NAMEP points
5952 somewhere inside the string beginning at NAME0. */
4c4b4cd2 5953
14f9c5c9 5954static int
59c8a30b 5955advance_wild_match (const char **namep, const char *name0, char target0)
14f9c5c9 5956{
73589123 5957 const char *name = *namep;
5b4ee69b 5958
5823c3ef 5959 while (1)
14f9c5c9 5960 {
59c8a30b 5961 char t0, t1;
73589123
PH
5962
5963 t0 = *name;
5964 if (t0 == '_')
5965 {
5966 t1 = name[1];
5967 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5968 {
5969 name += 1;
61012eef 5970 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
5971 break;
5972 else
5973 name += 1;
5974 }
aa27d0b3
JB
5975 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5976 || name[2] == target0))
73589123
PH
5977 {
5978 name += 2;
5979 break;
5980 }
86b44259
TT
5981 else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
5982 {
5983 /* Names like "pkg__B_N__name", where N is a number, are
5984 block-local. We can handle these by simply skipping
5985 the "B_" here. */
5986 name += 4;
5987 }
73589123
PH
5988 else
5989 return 0;
5990 }
5991 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5992 name += 1;
5993 else
5823c3ef 5994 return 0;
73589123
PH
5995 }
5996
5997 *namep = name;
5998 return 1;
5999}
6000
b5ec771e
PA
6001/* Return true iff NAME encodes a name of the form prefix.PATN.
6002 Ignores any informational suffixes of NAME (i.e., for which
6003 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
6004 simple name. */
73589123 6005
b5ec771e 6006static bool
73589123
PH
6007wild_match (const char *name, const char *patn)
6008{
22e048c9 6009 const char *p;
73589123
PH
6010 const char *name0 = name;
6011
6012 while (1)
6013 {
6014 const char *match = name;
6015
6016 if (*name == *patn)
6017 {
6018 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6019 if (*p != *name)
6020 break;
6021 if (*p == '\0' && is_name_suffix (name))
b5ec771e 6022 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
6023
6024 if (name[-1] == '_')
6025 name -= 1;
6026 }
6027 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 6028 return false;
96d887e8 6029 }
96d887e8
PH
6030}
6031
d1183b06 6032/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
b5ec771e 6033 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
6034
6035static void
d1183b06 6036ada_add_block_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
6037 const struct block *block,
6038 const lookup_name_info &lookup_name,
6039 domain_enum domain, struct objfile *objfile)
96d887e8 6040{
8157b174 6041 struct block_iterator iter;
96d887e8
PH
6042 /* A matching argument symbol, if any. */
6043 struct symbol *arg_sym;
6044 /* Set true when we find a matching non-argument symbol. */
1178743e 6045 bool found_sym;
96d887e8
PH
6046 struct symbol *sym;
6047
6048 arg_sym = NULL;
1178743e 6049 found_sym = false;
b5ec771e
PA
6050 for (sym = block_iter_match_first (block, lookup_name, &iter);
6051 sym != NULL;
6052 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6053 {
c1b5c1eb 6054 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
b5ec771e
PA
6055 {
6056 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6057 {
6058 if (SYMBOL_IS_ARGUMENT (sym))
6059 arg_sym = sym;
6060 else
6061 {
1178743e 6062 found_sym = true;
d1183b06 6063 add_defn_to_vec (result,
b5ec771e
PA
6064 fixup_symbol_section (sym, objfile),
6065 block);
6066 }
6067 }
6068 }
96d887e8
PH
6069 }
6070
22cee43f
PMR
6071 /* Handle renamings. */
6072
d1183b06 6073 if (ada_add_block_renamings (result, block, lookup_name, domain))
1178743e 6074 found_sym = true;
22cee43f 6075
96d887e8
PH
6076 if (!found_sym && arg_sym != NULL)
6077 {
d1183b06 6078 add_defn_to_vec (result,
dda83cd7
SM
6079 fixup_symbol_section (arg_sym, objfile),
6080 block);
96d887e8
PH
6081 }
6082
b5ec771e 6083 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6084 {
6085 arg_sym = NULL;
1178743e 6086 found_sym = false;
b5ec771e
PA
6087 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6088 const char *name = ada_lookup_name.c_str ();
6089 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6090
6091 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6092 {
dda83cd7
SM
6093 if (symbol_matches_domain (sym->language (),
6094 SYMBOL_DOMAIN (sym), domain))
6095 {
6096 int cmp;
6097
6098 cmp = (int) '_' - (int) sym->linkage_name ()[0];
6099 if (cmp == 0)
6100 {
6101 cmp = !startswith (sym->linkage_name (), "_ada_");
6102 if (cmp == 0)
6103 cmp = strncmp (name, sym->linkage_name () + 5,
6104 name_len);
6105 }
6106
6107 if (cmp == 0
6108 && is_name_suffix (sym->linkage_name () + name_len + 5))
6109 {
2a2d4dc3
AS
6110 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6111 {
6112 if (SYMBOL_IS_ARGUMENT (sym))
6113 arg_sym = sym;
6114 else
6115 {
1178743e 6116 found_sym = true;
d1183b06 6117 add_defn_to_vec (result,
2a2d4dc3
AS
6118 fixup_symbol_section (sym, objfile),
6119 block);
6120 }
6121 }
dda83cd7
SM
6122 }
6123 }
76a01679 6124 }
96d887e8
PH
6125
6126 /* NOTE: This really shouldn't be needed for _ada_ symbols.
dda83cd7 6127 They aren't parameters, right? */
96d887e8 6128 if (!found_sym && arg_sym != NULL)
dda83cd7 6129 {
d1183b06 6130 add_defn_to_vec (result,
dda83cd7
SM
6131 fixup_symbol_section (arg_sym, objfile),
6132 block);
6133 }
96d887e8
PH
6134 }
6135}
6136\f
41d27058 6137
dda83cd7 6138 /* Symbol Completion */
41d27058 6139
b5ec771e 6140/* See symtab.h. */
41d27058 6141
b5ec771e
PA
6142bool
6143ada_lookup_name_info::matches
6144 (const char *sym_name,
6145 symbol_name_match_type match_type,
a207cff2 6146 completion_match_result *comp_match_res) const
41d27058 6147{
b5ec771e
PA
6148 bool match = false;
6149 const char *text = m_encoded_name.c_str ();
6150 size_t text_len = m_encoded_name.size ();
41d27058
JB
6151
6152 /* First, test against the fully qualified name of the symbol. */
6153
6154 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6155 match = true;
41d27058 6156
f945dedf 6157 std::string decoded_name = ada_decode (sym_name);
b5ec771e 6158 if (match && !m_encoded_p)
41d27058
JB
6159 {
6160 /* One needed check before declaring a positive match is to verify
dda83cd7
SM
6161 that iff we are doing a verbatim match, the decoded version
6162 of the symbol name starts with '<'. Otherwise, this symbol name
6163 is not a suitable completion. */
41d27058 6164
f945dedf 6165 bool has_angle_bracket = (decoded_name[0] == '<');
b5ec771e 6166 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6167 }
6168
b5ec771e 6169 if (match && !m_verbatim_p)
41d27058
JB
6170 {
6171 /* When doing non-verbatim match, another check that needs to
dda83cd7
SM
6172 be done is to verify that the potentially matching symbol name
6173 does not include capital letters, because the ada-mode would
6174 not be able to understand these symbol names without the
6175 angle bracket notation. */
41d27058
JB
6176 const char *tmp;
6177
6178 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6179 if (*tmp != '\0')
b5ec771e 6180 match = false;
41d27058
JB
6181 }
6182
6183 /* Second: Try wild matching... */
6184
b5ec771e 6185 if (!match && m_wild_match_p)
41d27058
JB
6186 {
6187 /* Since we are doing wild matching, this means that TEXT
dda83cd7
SM
6188 may represent an unqualified symbol name. We therefore must
6189 also compare TEXT against the unqualified name of the symbol. */
f945dedf 6190 sym_name = ada_unqualified_name (decoded_name.c_str ());
41d27058
JB
6191
6192 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6193 match = true;
41d27058
JB
6194 }
6195
b5ec771e 6196 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6197
6198 if (!match)
b5ec771e 6199 return false;
41d27058 6200
a207cff2 6201 if (comp_match_res != NULL)
b5ec771e 6202 {
a207cff2 6203 std::string &match_str = comp_match_res->match.storage ();
41d27058 6204
b5ec771e 6205 if (!m_encoded_p)
a207cff2 6206 match_str = ada_decode (sym_name);
b5ec771e
PA
6207 else
6208 {
6209 if (m_verbatim_p)
6210 match_str = add_angle_brackets (sym_name);
6211 else
6212 match_str = sym_name;
41d27058 6213
b5ec771e 6214 }
a207cff2
PA
6215
6216 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6217 }
6218
b5ec771e 6219 return true;
41d27058
JB
6220}
6221
dda83cd7 6222 /* Field Access */
96d887e8 6223
73fb9985
JB
6224/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6225 for tagged types. */
6226
6227static int
6228ada_is_dispatch_table_ptr_type (struct type *type)
6229{
0d5cff50 6230 const char *name;
73fb9985 6231
78134374 6232 if (type->code () != TYPE_CODE_PTR)
73fb9985
JB
6233 return 0;
6234
7d93a1e0 6235 name = TYPE_TARGET_TYPE (type)->name ();
73fb9985
JB
6236 if (name == NULL)
6237 return 0;
6238
6239 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6240}
6241
ac4a2da4
JG
6242/* Return non-zero if TYPE is an interface tag. */
6243
6244static int
6245ada_is_interface_tag (struct type *type)
6246{
7d93a1e0 6247 const char *name = type->name ();
ac4a2da4
JG
6248
6249 if (name == NULL)
6250 return 0;
6251
6252 return (strcmp (name, "ada__tags__interface_tag") == 0);
6253}
6254
963a6417
PH
6255/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6256 to be invisible to users. */
96d887e8 6257
963a6417
PH
6258int
6259ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6260{
1f704f76 6261 if (field_num < 0 || field_num > type->num_fields ())
963a6417 6262 return 1;
ffde82bf 6263
73fb9985
JB
6264 /* Check the name of that field. */
6265 {
6266 const char *name = TYPE_FIELD_NAME (type, field_num);
6267
6268 /* Anonymous field names should not be printed.
6269 brobecker/2007-02-20: I don't think this can actually happen
30baf67b 6270 but we don't want to print the value of anonymous fields anyway. */
73fb9985
JB
6271 if (name == NULL)
6272 return 1;
6273
ffde82bf
JB
6274 /* Normally, fields whose name start with an underscore ("_")
6275 are fields that have been internally generated by the compiler,
6276 and thus should not be printed. The "_parent" field is special,
6277 however: This is a field internally generated by the compiler
6278 for tagged types, and it contains the components inherited from
6279 the parent type. This field should not be printed as is, but
6280 should not be ignored either. */
61012eef 6281 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6282 return 1;
6283 }
6284
ac4a2da4
JG
6285 /* If this is the dispatch table of a tagged type or an interface tag,
6286 then ignore. */
73fb9985 6287 if (ada_is_tagged_type (type, 1)
940da03e
SM
6288 && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6289 || ada_is_interface_tag (type->field (field_num).type ())))
73fb9985
JB
6290 return 1;
6291
6292 /* Not a special field, so it should not be ignored. */
6293 return 0;
963a6417 6294}
96d887e8 6295
963a6417 6296/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6297 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6298
963a6417
PH
6299int
6300ada_is_tagged_type (struct type *type, int refok)
6301{
988f6b3d 6302 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6303}
96d887e8 6304
963a6417 6305/* True iff TYPE represents the type of X'Tag */
96d887e8 6306
963a6417
PH
6307int
6308ada_is_tag_type (struct type *type)
6309{
460efde1
JB
6310 type = ada_check_typedef (type);
6311
78134374 6312 if (type == NULL || type->code () != TYPE_CODE_PTR)
963a6417
PH
6313 return 0;
6314 else
96d887e8 6315 {
963a6417 6316 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6317
963a6417 6318 return (name != NULL
dda83cd7 6319 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6320 }
96d887e8
PH
6321}
6322
963a6417 6323/* The type of the tag on VAL. */
76a01679 6324
de93309a 6325static struct type *
963a6417 6326ada_tag_type (struct value *val)
96d887e8 6327{
988f6b3d 6328 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6329}
96d887e8 6330
b50d69b5
JG
6331/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6332 retired at Ada 05). */
6333
6334static int
6335is_ada95_tag (struct value *tag)
6336{
6337 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6338}
6339
963a6417 6340/* The value of the tag on VAL. */
96d887e8 6341
de93309a 6342static struct value *
963a6417
PH
6343ada_value_tag (struct value *val)
6344{
03ee6b2e 6345 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6346}
6347
963a6417
PH
6348/* The value of the tag on the object of type TYPE whose contents are
6349 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6350 ADDRESS. */
96d887e8 6351
963a6417 6352static struct value *
10a2c479 6353value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6354 const gdb_byte *valaddr,
dda83cd7 6355 CORE_ADDR address)
96d887e8 6356{
b5385fc0 6357 int tag_byte_offset;
963a6417 6358 struct type *tag_type;
5b4ee69b 6359
963a6417 6360 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
dda83cd7 6361 NULL, NULL, NULL))
96d887e8 6362 {
fc1a4b47 6363 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6364 ? NULL
6365 : valaddr + tag_byte_offset);
963a6417 6366 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6367
963a6417 6368 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6369 }
963a6417
PH
6370 return NULL;
6371}
96d887e8 6372
963a6417
PH
6373static struct type *
6374type_from_tag (struct value *tag)
6375{
f5272a3b 6376 gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
5b4ee69b 6377
963a6417 6378 if (type_name != NULL)
5c4258f4 6379 return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
963a6417
PH
6380 return NULL;
6381}
96d887e8 6382
b50d69b5
JG
6383/* Given a value OBJ of a tagged type, return a value of this
6384 type at the base address of the object. The base address, as
6385 defined in Ada.Tags, it is the address of the primary tag of
6386 the object, and therefore where the field values of its full
6387 view can be fetched. */
6388
6389struct value *
6390ada_tag_value_at_base_address (struct value *obj)
6391{
b50d69b5
JG
6392 struct value *val;
6393 LONGEST offset_to_top = 0;
6394 struct type *ptr_type, *obj_type;
6395 struct value *tag;
6396 CORE_ADDR base_address;
6397
6398 obj_type = value_type (obj);
6399
6400 /* It is the responsability of the caller to deref pointers. */
6401
78134374 6402 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
b50d69b5
JG
6403 return obj;
6404
6405 tag = ada_value_tag (obj);
6406 if (!tag)
6407 return obj;
6408
6409 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6410
6411 if (is_ada95_tag (tag))
6412 return obj;
6413
08f49010
XR
6414 ptr_type = language_lookup_primitive_type
6415 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6416 ptr_type = lookup_pointer_type (ptr_type);
6417 val = value_cast (ptr_type, tag);
6418 if (!val)
6419 return obj;
6420
6421 /* It is perfectly possible that an exception be raised while
6422 trying to determine the base address, just like for the tag;
6423 see ada_tag_name for more details. We do not print the error
6424 message for the same reason. */
6425
a70b8144 6426 try
b50d69b5
JG
6427 {
6428 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6429 }
6430
230d2906 6431 catch (const gdb_exception_error &e)
492d29ea
PA
6432 {
6433 return obj;
6434 }
b50d69b5
JG
6435
6436 /* If offset is null, nothing to do. */
6437
6438 if (offset_to_top == 0)
6439 return obj;
6440
6441 /* -1 is a special case in Ada.Tags; however, what should be done
6442 is not quite clear from the documentation. So do nothing for
6443 now. */
6444
6445 if (offset_to_top == -1)
6446 return obj;
6447
08f49010
XR
6448 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6449 from the base address. This was however incompatible with
6450 C++ dispatch table: C++ uses a *negative* value to *add*
6451 to the base address. Ada's convention has therefore been
6452 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6453 use the same convention. Here, we support both cases by
6454 checking the sign of OFFSET_TO_TOP. */
6455
6456 if (offset_to_top > 0)
6457 offset_to_top = -offset_to_top;
6458
6459 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6460 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6461
6462 /* Make sure that we have a proper tag at the new address.
6463 Otherwise, offset_to_top is bogus (which can happen when
6464 the object is not initialized yet). */
6465
6466 if (!tag)
6467 return obj;
6468
6469 obj_type = type_from_tag (tag);
6470
6471 if (!obj_type)
6472 return obj;
6473
6474 return value_from_contents_and_address (obj_type, NULL, base_address);
6475}
6476
1b611343
JB
6477/* Return the "ada__tags__type_specific_data" type. */
6478
6479static struct type *
6480ada_get_tsd_type (struct inferior *inf)
963a6417 6481{
1b611343 6482 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6483
1b611343
JB
6484 if (data->tsd_type == 0)
6485 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6486 return data->tsd_type;
6487}
529cad9c 6488
1b611343
JB
6489/* Return the TSD (type-specific data) associated to the given TAG.
6490 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6491
1b611343 6492 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6493
1b611343
JB
6494static struct value *
6495ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6496{
4c4b4cd2 6497 struct value *val;
1b611343 6498 struct type *type;
5b4ee69b 6499
1b611343
JB
6500 /* First option: The TSD is simply stored as a field of our TAG.
6501 Only older versions of GNAT would use this format, but we have
6502 to test it first, because there are no visible markers for
6503 the current approach except the absence of that field. */
529cad9c 6504
1b611343
JB
6505 val = ada_value_struct_elt (tag, "tsd", 1);
6506 if (val)
6507 return val;
e802dbe0 6508
1b611343
JB
6509 /* Try the second representation for the dispatch table (in which
6510 there is no explicit 'tsd' field in the referent of the tag pointer,
6511 and instead the tsd pointer is stored just before the dispatch
6512 table. */
e802dbe0 6513
1b611343
JB
6514 type = ada_get_tsd_type (current_inferior());
6515 if (type == NULL)
6516 return NULL;
6517 type = lookup_pointer_type (lookup_pointer_type (type));
6518 val = value_cast (type, tag);
6519 if (val == NULL)
6520 return NULL;
6521 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6522}
6523
1b611343
JB
6524/* Given the TSD of a tag (type-specific data), return a string
6525 containing the name of the associated type.
6526
f5272a3b 6527 May return NULL if we are unable to determine the tag name. */
1b611343 6528
f5272a3b 6529static gdb::unique_xmalloc_ptr<char>
1b611343 6530ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6531{
529cad9c 6532 char *p;
1b611343 6533 struct value *val;
529cad9c 6534
1b611343 6535 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6536 if (val == NULL)
1b611343 6537 return NULL;
66920317
TT
6538 gdb::unique_xmalloc_ptr<char> buffer
6539 = target_read_string (value_as_address (val), INT_MAX);
6540 if (buffer == nullptr)
f5272a3b
TT
6541 return nullptr;
6542
6543 for (p = buffer.get (); *p != '\0'; ++p)
6544 {
6545 if (isalpha (*p))
6546 *p = tolower (*p);
6547 }
6548
6549 return buffer;
4c4b4cd2
PH
6550}
6551
6552/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6553 a C string.
6554
6555 Return NULL if the TAG is not an Ada tag, or if we were unable to
f5272a3b 6556 determine the name of that tag. */
4c4b4cd2 6557
f5272a3b 6558gdb::unique_xmalloc_ptr<char>
4c4b4cd2
PH
6559ada_tag_name (struct value *tag)
6560{
f5272a3b 6561 gdb::unique_xmalloc_ptr<char> name;
5b4ee69b 6562
df407dfe 6563 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6564 return NULL;
1b611343
JB
6565
6566 /* It is perfectly possible that an exception be raised while trying
6567 to determine the TAG's name, even under normal circumstances:
6568 The associated variable may be uninitialized or corrupted, for
6569 instance. We do not let any exception propagate past this point.
6570 instead we return NULL.
6571
6572 We also do not print the error message either (which often is very
6573 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6574 the caller print a more meaningful message if necessary. */
a70b8144 6575 try
1b611343
JB
6576 {
6577 struct value *tsd = ada_get_tsd_from_tag (tag);
6578
6579 if (tsd != NULL)
6580 name = ada_tag_name_from_tsd (tsd);
6581 }
230d2906 6582 catch (const gdb_exception_error &e)
492d29ea
PA
6583 {
6584 }
1b611343
JB
6585
6586 return name;
4c4b4cd2
PH
6587}
6588
6589/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6590
d2e4a39e 6591struct type *
ebf56fd3 6592ada_parent_type (struct type *type)
14f9c5c9
AS
6593{
6594 int i;
6595
61ee279c 6596 type = ada_check_typedef (type);
14f9c5c9 6597
78134374 6598 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
6599 return NULL;
6600
1f704f76 6601 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 6602 if (ada_is_parent_field (type, i))
0c1f74cf 6603 {
dda83cd7 6604 struct type *parent_type = type->field (i).type ();
0c1f74cf 6605
dda83cd7
SM
6606 /* If the _parent field is a pointer, then dereference it. */
6607 if (parent_type->code () == TYPE_CODE_PTR)
6608 parent_type = TYPE_TARGET_TYPE (parent_type);
6609 /* If there is a parallel XVS type, get the actual base type. */
6610 parent_type = ada_get_base_type (parent_type);
0c1f74cf 6611
dda83cd7 6612 return ada_check_typedef (parent_type);
0c1f74cf 6613 }
14f9c5c9
AS
6614
6615 return NULL;
6616}
6617
4c4b4cd2
PH
6618/* True iff field number FIELD_NUM of structure type TYPE contains the
6619 parent-type (inherited) fields of a derived type. Assumes TYPE is
6620 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6621
6622int
ebf56fd3 6623ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6624{
61ee279c 6625 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6626
4c4b4cd2 6627 return (name != NULL
dda83cd7
SM
6628 && (startswith (name, "PARENT")
6629 || startswith (name, "_parent")));
14f9c5c9
AS
6630}
6631
4c4b4cd2 6632/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6633 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6634 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6635 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6636 structures. */
14f9c5c9
AS
6637
6638int
ebf56fd3 6639ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6640{
d2e4a39e 6641 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6642
dddc0e16
JB
6643 if (name != NULL && strcmp (name, "RETVAL") == 0)
6644 {
6645 /* This happens in functions with "out" or "in out" parameters
6646 which are passed by copy. For such functions, GNAT describes
6647 the function's return type as being a struct where the return
6648 value is in a field called RETVAL, and where the other "out"
6649 or "in out" parameters are fields of that struct. This is not
6650 a wrapper. */
6651 return 0;
6652 }
6653
d2e4a39e 6654 return (name != NULL
dda83cd7
SM
6655 && (startswith (name, "PARENT")
6656 || strcmp (name, "REP") == 0
6657 || startswith (name, "_parent")
6658 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6659}
6660
4c4b4cd2
PH
6661/* True iff field number FIELD_NUM of structure or union type TYPE
6662 is a variant wrapper. Assumes TYPE is a structure type with at least
6663 FIELD_NUM+1 fields. */
14f9c5c9
AS
6664
6665int
ebf56fd3 6666ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6667{
8ecb59f8
TT
6668 /* Only Ada types are eligible. */
6669 if (!ADA_TYPE_P (type))
6670 return 0;
6671
940da03e 6672 struct type *field_type = type->field (field_num).type ();
5b4ee69b 6673
78134374
SM
6674 return (field_type->code () == TYPE_CODE_UNION
6675 || (is_dynamic_field (type, field_num)
6676 && (TYPE_TARGET_TYPE (field_type)->code ()
c3e5cd34 6677 == TYPE_CODE_UNION)));
14f9c5c9
AS
6678}
6679
6680/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6681 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6682 returns the type of the controlling discriminant for the variant.
6683 May return NULL if the type could not be found. */
14f9c5c9 6684
d2e4a39e 6685struct type *
ebf56fd3 6686ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6687{
a121b7c1 6688 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6689
988f6b3d 6690 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
6691}
6692
4c4b4cd2 6693/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6694 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6695 represents a 'when others' clause; otherwise 0. */
14f9c5c9 6696
de93309a 6697static int
ebf56fd3 6698ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6699{
d2e4a39e 6700 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6701
14f9c5c9
AS
6702 return (name != NULL && name[0] == 'O');
6703}
6704
6705/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6706 returns the name of the discriminant controlling the variant.
6707 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6708
a121b7c1 6709const char *
ebf56fd3 6710ada_variant_discrim_name (struct type *type0)
14f9c5c9 6711{
5f9febe0 6712 static std::string result;
d2e4a39e
AS
6713 struct type *type;
6714 const char *name;
6715 const char *discrim_end;
6716 const char *discrim_start;
14f9c5c9 6717
78134374 6718 if (type0->code () == TYPE_CODE_PTR)
14f9c5c9
AS
6719 type = TYPE_TARGET_TYPE (type0);
6720 else
6721 type = type0;
6722
6723 name = ada_type_name (type);
6724
6725 if (name == NULL || name[0] == '\000')
6726 return "";
6727
6728 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6729 discrim_end -= 1)
6730 {
61012eef 6731 if (startswith (discrim_end, "___XVN"))
dda83cd7 6732 break;
14f9c5c9
AS
6733 }
6734 if (discrim_end == name)
6735 return "";
6736
d2e4a39e 6737 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6738 discrim_start -= 1)
6739 {
d2e4a39e 6740 if (discrim_start == name + 1)
dda83cd7 6741 return "";
76a01679 6742 if ((discrim_start > name + 3
dda83cd7
SM
6743 && startswith (discrim_start - 3, "___"))
6744 || discrim_start[-1] == '.')
6745 break;
14f9c5c9
AS
6746 }
6747
5f9febe0
TT
6748 result = std::string (discrim_start, discrim_end - discrim_start);
6749 return result.c_str ();
14f9c5c9
AS
6750}
6751
4c4b4cd2
PH
6752/* Scan STR for a subtype-encoded number, beginning at position K.
6753 Put the position of the character just past the number scanned in
6754 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6755 Return 1 if there was a valid number at the given position, and 0
6756 otherwise. A "subtype-encoded" number consists of the absolute value
6757 in decimal, followed by the letter 'm' to indicate a negative number.
6758 Assumes 0m does not occur. */
14f9c5c9
AS
6759
6760int
d2e4a39e 6761ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6762{
6763 ULONGEST RU;
6764
d2e4a39e 6765 if (!isdigit (str[k]))
14f9c5c9
AS
6766 return 0;
6767
4c4b4cd2 6768 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6769 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6770 LONGEST. */
14f9c5c9
AS
6771 RU = 0;
6772 while (isdigit (str[k]))
6773 {
d2e4a39e 6774 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6775 k += 1;
6776 }
6777
d2e4a39e 6778 if (str[k] == 'm')
14f9c5c9
AS
6779 {
6780 if (R != NULL)
dda83cd7 6781 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6782 k += 1;
6783 }
6784 else if (R != NULL)
6785 *R = (LONGEST) RU;
6786
4c4b4cd2 6787 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6788 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6789 number representable as a LONGEST (although either would probably work
6790 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6791 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6792
6793 if (new_k != NULL)
6794 *new_k = k;
6795 return 1;
6796}
6797
4c4b4cd2
PH
6798/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6799 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6800 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6801
de93309a 6802static int
ebf56fd3 6803ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6804{
d2e4a39e 6805 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6806 int p;
6807
6808 p = 0;
6809 while (1)
6810 {
d2e4a39e 6811 switch (name[p])
dda83cd7
SM
6812 {
6813 case '\0':
6814 return 0;
6815 case 'S':
6816 {
6817 LONGEST W;
6818
6819 if (!ada_scan_number (name, p + 1, &W, &p))
6820 return 0;
6821 if (val == W)
6822 return 1;
6823 break;
6824 }
6825 case 'R':
6826 {
6827 LONGEST L, U;
6828
6829 if (!ada_scan_number (name, p + 1, &L, &p)
6830 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6831 return 0;
6832 if (val >= L && val <= U)
6833 return 1;
6834 break;
6835 }
6836 case 'O':
6837 return 1;
6838 default:
6839 return 0;
6840 }
4c4b4cd2
PH
6841 }
6842}
6843
0963b4bd 6844/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6845
6846/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6847 ARG_TYPE, extract and return the value of one of its (non-static)
6848 fields. FIELDNO says which field. Differs from value_primitive_field
6849 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6850
5eb68a39 6851struct value *
d2e4a39e 6852ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
dda83cd7 6853 struct type *arg_type)
14f9c5c9 6854{
14f9c5c9
AS
6855 struct type *type;
6856
61ee279c 6857 arg_type = ada_check_typedef (arg_type);
940da03e 6858 type = arg_type->field (fieldno).type ();
14f9c5c9 6859
4504bbde
TT
6860 /* Handle packed fields. It might be that the field is not packed
6861 relative to its containing structure, but the structure itself is
6862 packed; in this case we must take the bit-field path. */
6863 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
14f9c5c9
AS
6864 {
6865 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6866 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6867
0fd88904 6868 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
dda83cd7
SM
6869 offset + bit_pos / 8,
6870 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6871 }
6872 else
6873 return value_primitive_field (arg1, offset, fieldno, arg_type);
6874}
6875
52ce6436
PH
6876/* Find field with name NAME in object of type TYPE. If found,
6877 set the following for each argument that is non-null:
6878 - *FIELD_TYPE_P to the field's type;
6879 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6880 an object of that type;
6881 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6882 - *BIT_SIZE_P to its size in bits if the field is packed, and
6883 0 otherwise;
6884 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6885 fields up to but not including the desired field, or by the total
6886 number of fields if not found. A NULL value of NAME never
6887 matches; the function just counts visible fields in this case.
6888
828d5846
XR
6889 Notice that we need to handle when a tagged record hierarchy
6890 has some components with the same name, like in this scenario:
6891
6892 type Top_T is tagged record
dda83cd7
SM
6893 N : Integer := 1;
6894 U : Integer := 974;
6895 A : Integer := 48;
828d5846
XR
6896 end record;
6897
6898 type Middle_T is new Top.Top_T with record
dda83cd7
SM
6899 N : Character := 'a';
6900 C : Integer := 3;
828d5846
XR
6901 end record;
6902
6903 type Bottom_T is new Middle.Middle_T with record
dda83cd7
SM
6904 N : Float := 4.0;
6905 C : Character := '5';
6906 X : Integer := 6;
6907 A : Character := 'J';
828d5846
XR
6908 end record;
6909
6910 Let's say we now have a variable declared and initialized as follow:
6911
6912 TC : Top_A := new Bottom_T;
6913
6914 And then we use this variable to call this function
6915
6916 procedure Assign (Obj: in out Top_T; TV : Integer);
6917
6918 as follow:
6919
6920 Assign (Top_T (B), 12);
6921
6922 Now, we're in the debugger, and we're inside that procedure
6923 then and we want to print the value of obj.c:
6924
6925 Usually, the tagged record or one of the parent type owns the
6926 component to print and there's no issue but in this particular
6927 case, what does it mean to ask for Obj.C? Since the actual
6928 type for object is type Bottom_T, it could mean two things: type
6929 component C from the Middle_T view, but also component C from
6930 Bottom_T. So in that "undefined" case, when the component is
6931 not found in the non-resolved type (which includes all the
6932 components of the parent type), then resolve it and see if we
6933 get better luck once expanded.
6934
6935 In the case of homonyms in the derived tagged type, we don't
6936 guaranty anything, and pick the one that's easiest for us
6937 to program.
6938
0963b4bd 6939 Returns 1 if found, 0 otherwise. */
52ce6436 6940
4c4b4cd2 6941static int
0d5cff50 6942find_struct_field (const char *name, struct type *type, int offset,
dda83cd7
SM
6943 struct type **field_type_p,
6944 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
52ce6436 6945 int *index_p)
4c4b4cd2
PH
6946{
6947 int i;
828d5846 6948 int parent_offset = -1;
4c4b4cd2 6949
61ee279c 6950 type = ada_check_typedef (type);
76a01679 6951
52ce6436
PH
6952 if (field_type_p != NULL)
6953 *field_type_p = NULL;
6954 if (byte_offset_p != NULL)
d5d6fca5 6955 *byte_offset_p = 0;
52ce6436
PH
6956 if (bit_offset_p != NULL)
6957 *bit_offset_p = 0;
6958 if (bit_size_p != NULL)
6959 *bit_size_p = 0;
6960
1f704f76 6961 for (i = 0; i < type->num_fields (); i += 1)
4c4b4cd2
PH
6962 {
6963 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6964 int fld_offset = offset + bit_pos / 8;
0d5cff50 6965 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6966
4c4b4cd2 6967 if (t_field_name == NULL)
dda83cd7 6968 continue;
4c4b4cd2 6969
828d5846 6970 else if (ada_is_parent_field (type, i))
dda83cd7 6971 {
828d5846
XR
6972 /* This is a field pointing us to the parent type of a tagged
6973 type. As hinted in this function's documentation, we give
6974 preference to fields in the current record first, so what
6975 we do here is just record the index of this field before
6976 we skip it. If it turns out we couldn't find our field
6977 in the current record, then we'll get back to it and search
6978 inside it whether the field might exist in the parent. */
6979
dda83cd7
SM
6980 parent_offset = i;
6981 continue;
6982 }
828d5846 6983
52ce6436 6984 else if (name != NULL && field_name_match (t_field_name, name))
dda83cd7
SM
6985 {
6986 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6987
52ce6436 6988 if (field_type_p != NULL)
940da03e 6989 *field_type_p = type->field (i).type ();
52ce6436
PH
6990 if (byte_offset_p != NULL)
6991 *byte_offset_p = fld_offset;
6992 if (bit_offset_p != NULL)
6993 *bit_offset_p = bit_pos % 8;
6994 if (bit_size_p != NULL)
6995 *bit_size_p = bit_size;
dda83cd7
SM
6996 return 1;
6997 }
4c4b4cd2 6998 else if (ada_is_wrapper_field (type, i))
dda83cd7 6999 {
940da03e 7000 if (find_struct_field (name, type->field (i).type (), fld_offset,
52ce6436
PH
7001 field_type_p, byte_offset_p, bit_offset_p,
7002 bit_size_p, index_p))
dda83cd7
SM
7003 return 1;
7004 }
4c4b4cd2 7005 else if (ada_is_variant_part (type, i))
dda83cd7 7006 {
52ce6436
PH
7007 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7008 fixed type?? */
dda83cd7
SM
7009 int j;
7010 struct type *field_type
940da03e 7011 = ada_check_typedef (type->field (i).type ());
4c4b4cd2 7012
dda83cd7
SM
7013 for (j = 0; j < field_type->num_fields (); j += 1)
7014 {
7015 if (find_struct_field (name, field_type->field (j).type (),
7016 fld_offset
7017 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7018 field_type_p, byte_offset_p,
7019 bit_offset_p, bit_size_p, index_p))
7020 return 1;
7021 }
7022 }
52ce6436
PH
7023 else if (index_p != NULL)
7024 *index_p += 1;
4c4b4cd2 7025 }
828d5846
XR
7026
7027 /* Field not found so far. If this is a tagged type which
7028 has a parent, try finding that field in the parent now. */
7029
7030 if (parent_offset != -1)
7031 {
7032 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
7033 int fld_offset = offset + bit_pos / 8;
7034
940da03e 7035 if (find_struct_field (name, type->field (parent_offset).type (),
dda83cd7
SM
7036 fld_offset, field_type_p, byte_offset_p,
7037 bit_offset_p, bit_size_p, index_p))
7038 return 1;
828d5846
XR
7039 }
7040
4c4b4cd2
PH
7041 return 0;
7042}
7043
0963b4bd 7044/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7045
52ce6436
PH
7046static int
7047num_visible_fields (struct type *type)
7048{
7049 int n;
5b4ee69b 7050
52ce6436
PH
7051 n = 0;
7052 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7053 return n;
7054}
14f9c5c9 7055
4c4b4cd2 7056/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7057 and search in it assuming it has (class) type TYPE.
7058 If found, return value, else return NULL.
7059
828d5846
XR
7060 Searches recursively through wrapper fields (e.g., '_parent').
7061
7062 In the case of homonyms in the tagged types, please refer to the
7063 long explanation in find_struct_field's function documentation. */
14f9c5c9 7064
4c4b4cd2 7065static struct value *
108d56a4 7066ada_search_struct_field (const char *name, struct value *arg, int offset,
dda83cd7 7067 struct type *type)
14f9c5c9
AS
7068{
7069 int i;
828d5846 7070 int parent_offset = -1;
14f9c5c9 7071
5b4ee69b 7072 type = ada_check_typedef (type);
1f704f76 7073 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7074 {
0d5cff50 7075 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7076
7077 if (t_field_name == NULL)
dda83cd7 7078 continue;
14f9c5c9 7079
828d5846 7080 else if (ada_is_parent_field (type, i))
dda83cd7 7081 {
828d5846
XR
7082 /* This is a field pointing us to the parent type of a tagged
7083 type. As hinted in this function's documentation, we give
7084 preference to fields in the current record first, so what
7085 we do here is just record the index of this field before
7086 we skip it. If it turns out we couldn't find our field
7087 in the current record, then we'll get back to it and search
7088 inside it whether the field might exist in the parent. */
7089
dda83cd7
SM
7090 parent_offset = i;
7091 continue;
7092 }
828d5846 7093
14f9c5c9 7094 else if (field_name_match (t_field_name, name))
dda83cd7 7095 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7096
7097 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7098 {
7099 struct value *v = /* Do not let indent join lines here. */
7100 ada_search_struct_field (name, arg,
7101 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7102 type->field (i).type ());
5b4ee69b 7103
dda83cd7
SM
7104 if (v != NULL)
7105 return v;
7106 }
14f9c5c9
AS
7107
7108 else if (ada_is_variant_part (type, i))
dda83cd7 7109 {
0963b4bd 7110 /* PNH: Do we ever get here? See find_struct_field. */
dda83cd7
SM
7111 int j;
7112 struct type *field_type = ada_check_typedef (type->field (i).type ());
7113 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
4c4b4cd2 7114
dda83cd7
SM
7115 for (j = 0; j < field_type->num_fields (); j += 1)
7116 {
7117 struct value *v = ada_search_struct_field /* Force line
0963b4bd 7118 break. */
dda83cd7
SM
7119 (name, arg,
7120 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7121 field_type->field (j).type ());
5b4ee69b 7122
dda83cd7
SM
7123 if (v != NULL)
7124 return v;
7125 }
7126 }
14f9c5c9 7127 }
828d5846
XR
7128
7129 /* Field not found so far. If this is a tagged type which
7130 has a parent, try finding that field in the parent now. */
7131
7132 if (parent_offset != -1)
7133 {
7134 struct value *v = ada_search_struct_field (
7135 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
940da03e 7136 type->field (parent_offset).type ());
828d5846
XR
7137
7138 if (v != NULL)
dda83cd7 7139 return v;
828d5846
XR
7140 }
7141
14f9c5c9
AS
7142 return NULL;
7143}
d2e4a39e 7144
52ce6436
PH
7145static struct value *ada_index_struct_field_1 (int *, struct value *,
7146 int, struct type *);
7147
7148
7149/* Return field #INDEX in ARG, where the index is that returned by
7150 * find_struct_field through its INDEX_P argument. Adjust the address
7151 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7152 * If found, return value, else return NULL. */
52ce6436
PH
7153
7154static struct value *
7155ada_index_struct_field (int index, struct value *arg, int offset,
7156 struct type *type)
7157{
7158 return ada_index_struct_field_1 (&index, arg, offset, type);
7159}
7160
7161
7162/* Auxiliary function for ada_index_struct_field. Like
7163 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7164 * *INDEX_P. */
52ce6436
PH
7165
7166static struct value *
7167ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7168 struct type *type)
7169{
7170 int i;
7171 type = ada_check_typedef (type);
7172
1f704f76 7173 for (i = 0; i < type->num_fields (); i += 1)
52ce6436
PH
7174 {
7175 if (TYPE_FIELD_NAME (type, i) == NULL)
dda83cd7 7176 continue;
52ce6436 7177 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7178 {
7179 struct value *v = /* Do not let indent join lines here. */
7180 ada_index_struct_field_1 (index_p, arg,
52ce6436 7181 offset + TYPE_FIELD_BITPOS (type, i) / 8,
940da03e 7182 type->field (i).type ());
5b4ee69b 7183
dda83cd7
SM
7184 if (v != NULL)
7185 return v;
7186 }
52ce6436
PH
7187
7188 else if (ada_is_variant_part (type, i))
dda83cd7 7189 {
52ce6436 7190 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7191 find_struct_field. */
52ce6436 7192 error (_("Cannot assign this kind of variant record"));
dda83cd7 7193 }
52ce6436 7194 else if (*index_p == 0)
dda83cd7 7195 return ada_value_primitive_field (arg, offset, i, type);
52ce6436
PH
7196 else
7197 *index_p -= 1;
7198 }
7199 return NULL;
7200}
7201
3b4de39c 7202/* Return a string representation of type TYPE. */
99bbb428 7203
3b4de39c 7204static std::string
99bbb428
PA
7205type_as_string (struct type *type)
7206{
d7e74731 7207 string_file tmp_stream;
99bbb428 7208
d7e74731 7209 type_print (type, "", &tmp_stream, -1);
99bbb428 7210
d7e74731 7211 return std::move (tmp_stream.string ());
99bbb428
PA
7212}
7213
14f9c5c9 7214/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7215 If DISPP is non-null, add its byte displacement from the beginning of a
7216 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7217 work for packed fields).
7218
7219 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7220 followed by "___".
14f9c5c9 7221
0963b4bd 7222 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7223 be a (pointer or reference)+ to a struct or union, and the
7224 ultimate target type will be searched.
14f9c5c9
AS
7225
7226 Looks recursively into variant clauses and parent types.
7227
828d5846
XR
7228 In the case of homonyms in the tagged types, please refer to the
7229 long explanation in find_struct_field's function documentation.
7230
4c4b4cd2
PH
7231 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7232 TYPE is not a type of the right kind. */
14f9c5c9 7233
4c4b4cd2 7234static struct type *
a121b7c1 7235ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
dda83cd7 7236 int noerr)
14f9c5c9
AS
7237{
7238 int i;
828d5846 7239 int parent_offset = -1;
14f9c5c9
AS
7240
7241 if (name == NULL)
7242 goto BadName;
7243
76a01679 7244 if (refok && type != NULL)
4c4b4cd2
PH
7245 while (1)
7246 {
dda83cd7
SM
7247 type = ada_check_typedef (type);
7248 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7249 break;
7250 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7251 }
14f9c5c9 7252
76a01679 7253 if (type == NULL
78134374
SM
7254 || (type->code () != TYPE_CODE_STRUCT
7255 && type->code () != TYPE_CODE_UNION))
14f9c5c9 7256 {
4c4b4cd2 7257 if (noerr)
dda83cd7 7258 return NULL;
99bbb428 7259
3b4de39c
PA
7260 error (_("Type %s is not a structure or union type"),
7261 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7262 }
7263
7264 type = to_static_fixed_type (type);
7265
1f704f76 7266 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7267 {
0d5cff50 7268 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7269 struct type *t;
d2e4a39e 7270
14f9c5c9 7271 if (t_field_name == NULL)
dda83cd7 7272 continue;
14f9c5c9 7273
828d5846 7274 else if (ada_is_parent_field (type, i))
dda83cd7 7275 {
828d5846
XR
7276 /* This is a field pointing us to the parent type of a tagged
7277 type. As hinted in this function's documentation, we give
7278 preference to fields in the current record first, so what
7279 we do here is just record the index of this field before
7280 we skip it. If it turns out we couldn't find our field
7281 in the current record, then we'll get back to it and search
7282 inside it whether the field might exist in the parent. */
7283
dda83cd7
SM
7284 parent_offset = i;
7285 continue;
7286 }
828d5846 7287
14f9c5c9 7288 else if (field_name_match (t_field_name, name))
940da03e 7289 return type->field (i).type ();
14f9c5c9
AS
7290
7291 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7292 {
7293 t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7294 0, 1);
7295 if (t != NULL)
988f6b3d 7296 return t;
dda83cd7 7297 }
14f9c5c9
AS
7298
7299 else if (ada_is_variant_part (type, i))
dda83cd7
SM
7300 {
7301 int j;
7302 struct type *field_type = ada_check_typedef (type->field (i).type ());
4c4b4cd2 7303
dda83cd7
SM
7304 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7305 {
b1f33ddd 7306 /* FIXME pnh 2008/01/26: We check for a field that is
dda83cd7 7307 NOT wrapped in a struct, since the compiler sometimes
b1f33ddd 7308 generates these for unchecked variant types. Revisit
dda83cd7 7309 if the compiler changes this practice. */
0d5cff50 7310 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7311
b1f33ddd
JB
7312 if (v_field_name != NULL
7313 && field_name_match (v_field_name, name))
940da03e 7314 t = field_type->field (j).type ();
b1f33ddd 7315 else
940da03e 7316 t = ada_lookup_struct_elt_type (field_type->field (j).type (),
988f6b3d 7317 name, 0, 1);
b1f33ddd 7318
dda83cd7 7319 if (t != NULL)
988f6b3d 7320 return t;
dda83cd7
SM
7321 }
7322 }
14f9c5c9
AS
7323
7324 }
7325
828d5846
XR
7326 /* Field not found so far. If this is a tagged type which
7327 has a parent, try finding that field in the parent now. */
7328
7329 if (parent_offset != -1)
7330 {
dda83cd7 7331 struct type *t;
828d5846 7332
dda83cd7
SM
7333 t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7334 name, 0, 1);
7335 if (t != NULL)
828d5846
XR
7336 return t;
7337 }
7338
14f9c5c9 7339BadName:
d2e4a39e 7340 if (!noerr)
14f9c5c9 7341 {
2b2798cc 7342 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7343
7344 error (_("Type %s has no component named %s"),
3b4de39c 7345 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7346 }
7347
7348 return NULL;
7349}
7350
b1f33ddd
JB
7351/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7352 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7353 represents an unchecked union (that is, the variant part of a
0963b4bd 7354 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7355
7356static int
7357is_unchecked_variant (struct type *var_type, struct type *outer_type)
7358{
a121b7c1 7359 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7360
988f6b3d 7361 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7362}
7363
7364
14f9c5c9 7365/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
d8af9068 7366 within OUTER, determine which variant clause (field number in VAR_TYPE,
4c4b4cd2 7367 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7368
d2e4a39e 7369int
d8af9068 7370ada_which_variant_applies (struct type *var_type, struct value *outer)
14f9c5c9
AS
7371{
7372 int others_clause;
7373 int i;
a121b7c1 7374 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816 7375 struct value *discrim;
14f9c5c9
AS
7376 LONGEST discrim_val;
7377
012370f6
TT
7378 /* Using plain value_from_contents_and_address here causes problems
7379 because we will end up trying to resolve a type that is currently
7380 being constructed. */
0c281816
JB
7381 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7382 if (discrim == NULL)
14f9c5c9 7383 return -1;
0c281816 7384 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7385
7386 others_clause = -1;
1f704f76 7387 for (i = 0; i < var_type->num_fields (); i += 1)
14f9c5c9
AS
7388 {
7389 if (ada_is_others_clause (var_type, i))
dda83cd7 7390 others_clause = i;
14f9c5c9 7391 else if (ada_in_variant (discrim_val, var_type, i))
dda83cd7 7392 return i;
14f9c5c9
AS
7393 }
7394
7395 return others_clause;
7396}
d2e4a39e 7397\f
14f9c5c9
AS
7398
7399
dda83cd7 7400 /* Dynamic-Sized Records */
14f9c5c9
AS
7401
7402/* Strategy: The type ostensibly attached to a value with dynamic size
7403 (i.e., a size that is not statically recorded in the debugging
7404 data) does not accurately reflect the size or layout of the value.
7405 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7406 conventional types that are constructed on the fly. */
14f9c5c9
AS
7407
7408/* There is a subtle and tricky problem here. In general, we cannot
7409 determine the size of dynamic records without its data. However,
7410 the 'struct value' data structure, which GDB uses to represent
7411 quantities in the inferior process (the target), requires the size
7412 of the type at the time of its allocation in order to reserve space
7413 for GDB's internal copy of the data. That's why the
7414 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7415 rather than struct value*s.
14f9c5c9
AS
7416
7417 However, GDB's internal history variables ($1, $2, etc.) are
7418 struct value*s containing internal copies of the data that are not, in
7419 general, the same as the data at their corresponding addresses in
7420 the target. Fortunately, the types we give to these values are all
7421 conventional, fixed-size types (as per the strategy described
7422 above), so that we don't usually have to perform the
7423 'to_fixed_xxx_type' conversions to look at their values.
7424 Unfortunately, there is one exception: if one of the internal
7425 history variables is an array whose elements are unconstrained
7426 records, then we will need to create distinct fixed types for each
7427 element selected. */
7428
7429/* The upshot of all of this is that many routines take a (type, host
7430 address, target address) triple as arguments to represent a value.
7431 The host address, if non-null, is supposed to contain an internal
7432 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7433 target at the target address. */
14f9c5c9
AS
7434
7435/* Assuming that VAL0 represents a pointer value, the result of
7436 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7437 dynamic-sized types. */
14f9c5c9 7438
d2e4a39e
AS
7439struct value *
7440ada_value_ind (struct value *val0)
14f9c5c9 7441{
c48db5ca 7442 struct value *val = value_ind (val0);
5b4ee69b 7443
b50d69b5
JG
7444 if (ada_is_tagged_type (value_type (val), 0))
7445 val = ada_tag_value_at_base_address (val);
7446
4c4b4cd2 7447 return ada_to_fixed_value (val);
14f9c5c9
AS
7448}
7449
7450/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7451 qualifiers on VAL0. */
7452
d2e4a39e
AS
7453static struct value *
7454ada_coerce_ref (struct value *val0)
7455{
78134374 7456 if (value_type (val0)->code () == TYPE_CODE_REF)
d2e4a39e
AS
7457 {
7458 struct value *val = val0;
5b4ee69b 7459
994b9211 7460 val = coerce_ref (val);
b50d69b5
JG
7461
7462 if (ada_is_tagged_type (value_type (val), 0))
7463 val = ada_tag_value_at_base_address (val);
7464
4c4b4cd2 7465 return ada_to_fixed_value (val);
d2e4a39e
AS
7466 }
7467 else
14f9c5c9
AS
7468 return val0;
7469}
7470
4c4b4cd2 7471/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7472
7473static unsigned int
ebf56fd3 7474field_alignment (struct type *type, int f)
14f9c5c9 7475{
d2e4a39e 7476 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7477 int len;
14f9c5c9
AS
7478 int align_offset;
7479
64a1bf19
JB
7480 /* The field name should never be null, unless the debugging information
7481 is somehow malformed. In this case, we assume the field does not
7482 require any alignment. */
7483 if (name == NULL)
7484 return 1;
7485
7486 len = strlen (name);
7487
4c4b4cd2
PH
7488 if (!isdigit (name[len - 1]))
7489 return 1;
14f9c5c9 7490
d2e4a39e 7491 if (isdigit (name[len - 2]))
14f9c5c9
AS
7492 align_offset = len - 2;
7493 else
7494 align_offset = len - 1;
7495
61012eef 7496 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7497 return TARGET_CHAR_BIT;
7498
4c4b4cd2
PH
7499 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7500}
7501
852dff6c 7502/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7503
852dff6c
JB
7504static struct symbol *
7505ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7506{
7507 struct symbol *sym;
7508
7509 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7510 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7511 return sym;
7512
4186eb54
KS
7513 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7514 return sym;
14f9c5c9
AS
7515}
7516
dddfab26
UW
7517/* Find a type named NAME. Ignores ambiguity. This routine will look
7518 solely for types defined by debug info, it will not search the GDB
7519 primitive types. */
4c4b4cd2 7520
852dff6c 7521static struct type *
ebf56fd3 7522ada_find_any_type (const char *name)
14f9c5c9 7523{
852dff6c 7524 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7525
14f9c5c9 7526 if (sym != NULL)
dddfab26 7527 return SYMBOL_TYPE (sym);
14f9c5c9 7528
dddfab26 7529 return NULL;
14f9c5c9
AS
7530}
7531
739593e0
JB
7532/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7533 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7534 symbol, in which case it is returned. Otherwise, this looks for
7535 symbols whose name is that of NAME_SYM suffixed with "___XR".
7536 Return symbol if found, and NULL otherwise. */
4c4b4cd2 7537
c0e70c62
TT
7538static bool
7539ada_is_renaming_symbol (struct symbol *name_sym)
aeb5907d 7540{
987012b8 7541 const char *name = name_sym->linkage_name ();
c0e70c62 7542 return strstr (name, "___XR") != NULL;
4c4b4cd2
PH
7543}
7544
14f9c5c9 7545/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7546 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7547 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7548 otherwise return 0. */
7549
14f9c5c9 7550int
d2e4a39e 7551ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7552{
7553 if (type1 == NULL)
7554 return 1;
7555 else if (type0 == NULL)
7556 return 0;
78134374 7557 else if (type1->code () == TYPE_CODE_VOID)
14f9c5c9 7558 return 1;
78134374 7559 else if (type0->code () == TYPE_CODE_VOID)
14f9c5c9 7560 return 0;
7d93a1e0 7561 else if (type1->name () == NULL && type0->name () != NULL)
4c4b4cd2 7562 return 1;
ad82864c 7563 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7564 return 1;
4c4b4cd2 7565 else if (ada_is_array_descriptor_type (type0)
dda83cd7 7566 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7567 return 1;
aeb5907d
JB
7568 else
7569 {
7d93a1e0
SM
7570 const char *type0_name = type0->name ();
7571 const char *type1_name = type1->name ();
aeb5907d
JB
7572
7573 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7574 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7575 return 1;
7576 }
14f9c5c9
AS
7577 return 0;
7578}
7579
e86ca25f
TT
7580/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7581 null. */
4c4b4cd2 7582
0d5cff50 7583const char *
d2e4a39e 7584ada_type_name (struct type *type)
14f9c5c9 7585{
d2e4a39e 7586 if (type == NULL)
14f9c5c9 7587 return NULL;
7d93a1e0 7588 return type->name ();
14f9c5c9
AS
7589}
7590
b4ba55a1
JB
7591/* Search the list of "descriptive" types associated to TYPE for a type
7592 whose name is NAME. */
7593
7594static struct type *
7595find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7596{
931e5bc3 7597 struct type *result, *tmp;
b4ba55a1 7598
c6044dd1
JB
7599 if (ada_ignore_descriptive_types_p)
7600 return NULL;
7601
b4ba55a1
JB
7602 /* If there no descriptive-type info, then there is no parallel type
7603 to be found. */
7604 if (!HAVE_GNAT_AUX_INFO (type))
7605 return NULL;
7606
7607 result = TYPE_DESCRIPTIVE_TYPE (type);
7608 while (result != NULL)
7609 {
0d5cff50 7610 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7611
7612 if (result_name == NULL)
dda83cd7
SM
7613 {
7614 warning (_("unexpected null name on descriptive type"));
7615 return NULL;
7616 }
b4ba55a1
JB
7617
7618 /* If the names match, stop. */
7619 if (strcmp (result_name, name) == 0)
7620 break;
7621
7622 /* Otherwise, look at the next item on the list, if any. */
7623 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7624 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7625 else
7626 tmp = NULL;
7627
7628 /* If not found either, try after having resolved the typedef. */
7629 if (tmp != NULL)
7630 result = tmp;
b4ba55a1 7631 else
931e5bc3 7632 {
f168693b 7633 result = check_typedef (result);
931e5bc3
JG
7634 if (HAVE_GNAT_AUX_INFO (result))
7635 result = TYPE_DESCRIPTIVE_TYPE (result);
7636 else
7637 result = NULL;
7638 }
b4ba55a1
JB
7639 }
7640
7641 /* If we didn't find a match, see whether this is a packed array. With
7642 older compilers, the descriptive type information is either absent or
7643 irrelevant when it comes to packed arrays so the above lookup fails.
7644 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7645 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7646 return ada_find_any_type (name);
7647
7648 return result;
7649}
7650
7651/* Find a parallel type to TYPE with the specified NAME, using the
7652 descriptive type taken from the debugging information, if available,
7653 and otherwise using the (slower) name-based method. */
7654
7655static struct type *
7656ada_find_parallel_type_with_name (struct type *type, const char *name)
7657{
7658 struct type *result = NULL;
7659
7660 if (HAVE_GNAT_AUX_INFO (type))
7661 result = find_parallel_type_by_descriptive_type (type, name);
7662 else
7663 result = ada_find_any_type (name);
7664
7665 return result;
7666}
7667
7668/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7669 SUFFIX to the name of TYPE. */
14f9c5c9 7670
d2e4a39e 7671struct type *
ebf56fd3 7672ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7673{
0d5cff50 7674 char *name;
fe978cb0 7675 const char *type_name = ada_type_name (type);
14f9c5c9 7676 int len;
d2e4a39e 7677
fe978cb0 7678 if (type_name == NULL)
14f9c5c9
AS
7679 return NULL;
7680
fe978cb0 7681 len = strlen (type_name);
14f9c5c9 7682
b4ba55a1 7683 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7684
fe978cb0 7685 strcpy (name, type_name);
14f9c5c9
AS
7686 strcpy (name + len, suffix);
7687
b4ba55a1 7688 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7689}
7690
14f9c5c9 7691/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7692 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7693
d2e4a39e
AS
7694static struct type *
7695dynamic_template_type (struct type *type)
14f9c5c9 7696{
61ee279c 7697 type = ada_check_typedef (type);
14f9c5c9 7698
78134374 7699 if (type == NULL || type->code () != TYPE_CODE_STRUCT
d2e4a39e 7700 || ada_type_name (type) == NULL)
14f9c5c9 7701 return NULL;
d2e4a39e 7702 else
14f9c5c9
AS
7703 {
7704 int len = strlen (ada_type_name (type));
5b4ee69b 7705
4c4b4cd2 7706 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
dda83cd7 7707 return type;
14f9c5c9 7708 else
dda83cd7 7709 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7710 }
7711}
7712
7713/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7714 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7715
d2e4a39e
AS
7716static int
7717is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7718{
7719 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7720
d2e4a39e 7721 return name != NULL
940da03e 7722 && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
14f9c5c9
AS
7723 && strstr (name, "___XVL") != NULL;
7724}
7725
4c4b4cd2
PH
7726/* The index of the variant field of TYPE, or -1 if TYPE does not
7727 represent a variant record type. */
14f9c5c9 7728
d2e4a39e 7729static int
4c4b4cd2 7730variant_field_index (struct type *type)
14f9c5c9
AS
7731{
7732 int f;
7733
78134374 7734 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
4c4b4cd2
PH
7735 return -1;
7736
1f704f76 7737 for (f = 0; f < type->num_fields (); f += 1)
4c4b4cd2
PH
7738 {
7739 if (ada_is_variant_part (type, f))
dda83cd7 7740 return f;
4c4b4cd2
PH
7741 }
7742 return -1;
14f9c5c9
AS
7743}
7744
4c4b4cd2
PH
7745/* A record type with no fields. */
7746
d2e4a39e 7747static struct type *
fe978cb0 7748empty_record (struct type *templ)
14f9c5c9 7749{
fe978cb0 7750 struct type *type = alloc_type_copy (templ);
5b4ee69b 7751
67607e24 7752 type->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7753 INIT_NONE_SPECIFIC (type);
d0e39ea2 7754 type->set_name ("<empty>");
14f9c5c9
AS
7755 TYPE_LENGTH (type) = 0;
7756 return type;
7757}
7758
7759/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7760 the value of type TYPE at VALADDR or ADDRESS (see comments at
7761 the beginning of this section) VAL according to GNAT conventions.
7762 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7763 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7764 an outer-level type (i.e., as opposed to a branch of a variant.) A
7765 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7766 of the variant.
14f9c5c9 7767
4c4b4cd2
PH
7768 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7769 length are not statically known are discarded. As a consequence,
7770 VALADDR, ADDRESS and DVAL0 are ignored.
7771
7772 NOTE: Limitations: For now, we assume that dynamic fields and
7773 variants occupy whole numbers of bytes. However, they need not be
7774 byte-aligned. */
7775
7776struct type *
10a2c479 7777ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7778 const gdb_byte *valaddr,
dda83cd7
SM
7779 CORE_ADDR address, struct value *dval0,
7780 int keep_dynamic_fields)
14f9c5c9 7781{
d2e4a39e
AS
7782 struct value *mark = value_mark ();
7783 struct value *dval;
7784 struct type *rtype;
14f9c5c9 7785 int nfields, bit_len;
4c4b4cd2 7786 int variant_field;
14f9c5c9 7787 long off;
d94e4f4f 7788 int fld_bit_len;
14f9c5c9
AS
7789 int f;
7790
4c4b4cd2
PH
7791 /* Compute the number of fields in this record type that are going
7792 to be processed: unless keep_dynamic_fields, this includes only
7793 fields whose position and length are static will be processed. */
7794 if (keep_dynamic_fields)
1f704f76 7795 nfields = type->num_fields ();
4c4b4cd2
PH
7796 else
7797 {
7798 nfields = 0;
1f704f76 7799 while (nfields < type->num_fields ()
dda83cd7
SM
7800 && !ada_is_variant_part (type, nfields)
7801 && !is_dynamic_field (type, nfields))
7802 nfields++;
4c4b4cd2
PH
7803 }
7804
e9bb382b 7805 rtype = alloc_type_copy (type);
67607e24 7806 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7807 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 7808 rtype->set_num_fields (nfields);
3cabb6b0
SM
7809 rtype->set_fields
7810 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
d0e39ea2 7811 rtype->set_name (ada_type_name (type));
9cdd0d12 7812 rtype->set_is_fixed_instance (true);
14f9c5c9 7813
d2e4a39e
AS
7814 off = 0;
7815 bit_len = 0;
4c4b4cd2
PH
7816 variant_field = -1;
7817
14f9c5c9
AS
7818 for (f = 0; f < nfields; f += 1)
7819 {
a89febbd 7820 off = align_up (off, field_alignment (type, f))
6c038f32 7821 + TYPE_FIELD_BITPOS (type, f);
ceacbf6e 7822 SET_FIELD_BITPOS (rtype->field (f), off);
d2e4a39e 7823 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7824
d2e4a39e 7825 if (ada_is_variant_part (type, f))
dda83cd7
SM
7826 {
7827 variant_field = f;
7828 fld_bit_len = 0;
7829 }
14f9c5c9 7830 else if (is_dynamic_field (type, f))
dda83cd7 7831 {
284614f0
JB
7832 const gdb_byte *field_valaddr = valaddr;
7833 CORE_ADDR field_address = address;
7834 struct type *field_type =
940da03e 7835 TYPE_TARGET_TYPE (type->field (f).type ());
284614f0 7836
dda83cd7 7837 if (dval0 == NULL)
b5304971
JG
7838 {
7839 /* rtype's length is computed based on the run-time
7840 value of discriminants. If the discriminants are not
7841 initialized, the type size may be completely bogus and
0963b4bd 7842 GDB may fail to allocate a value for it. So check the
b5304971 7843 size first before creating the value. */
c1b5a1a6 7844 ada_ensure_varsize_limit (rtype);
012370f6
TT
7845 /* Using plain value_from_contents_and_address here
7846 causes problems because we will end up trying to
7847 resolve a type that is currently being
7848 constructed. */
7849 dval = value_from_contents_and_address_unresolved (rtype,
7850 valaddr,
7851 address);
9f1f738a 7852 rtype = value_type (dval);
b5304971 7853 }
dda83cd7
SM
7854 else
7855 dval = dval0;
4c4b4cd2 7856
284614f0
JB
7857 /* If the type referenced by this field is an aligner type, we need
7858 to unwrap that aligner type, because its size might not be set.
7859 Keeping the aligner type would cause us to compute the wrong
7860 size for this field, impacting the offset of the all the fields
7861 that follow this one. */
7862 if (ada_is_aligner_type (field_type))
7863 {
7864 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7865
7866 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7867 field_address = cond_offset_target (field_address, field_offset);
7868 field_type = ada_aligned_type (field_type);
7869 }
7870
7871 field_valaddr = cond_offset_host (field_valaddr,
7872 off / TARGET_CHAR_BIT);
7873 field_address = cond_offset_target (field_address,
7874 off / TARGET_CHAR_BIT);
7875
7876 /* Get the fixed type of the field. Note that, in this case,
7877 we do not want to get the real type out of the tag: if
7878 the current field is the parent part of a tagged record,
7879 we will get the tag of the object. Clearly wrong: the real
7880 type of the parent is not the real type of the child. We
7881 would end up in an infinite loop. */
7882 field_type = ada_get_base_type (field_type);
7883 field_type = ada_to_fixed_type (field_type, field_valaddr,
7884 field_address, dval, 0);
27f2a97b
JB
7885 /* If the field size is already larger than the maximum
7886 object size, then the record itself will necessarily
7887 be larger than the maximum object size. We need to make
7888 this check now, because the size might be so ridiculously
7889 large (due to an uninitialized variable in the inferior)
7890 that it would cause an overflow when adding it to the
7891 record size. */
c1b5a1a6 7892 ada_ensure_varsize_limit (field_type);
284614f0 7893
5d14b6e5 7894 rtype->field (f).set_type (field_type);
dda83cd7 7895 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7896 /* The multiplication can potentially overflow. But because
7897 the field length has been size-checked just above, and
7898 assuming that the maximum size is a reasonable value,
7899 an overflow should not happen in practice. So rather than
7900 adding overflow recovery code to this already complex code,
7901 we just assume that it's not going to happen. */
dda83cd7
SM
7902 fld_bit_len =
7903 TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7904 }
14f9c5c9 7905 else
dda83cd7 7906 {
5ded5331
JB
7907 /* Note: If this field's type is a typedef, it is important
7908 to preserve the typedef layer.
7909
7910 Otherwise, we might be transforming a typedef to a fat
7911 pointer (encoding a pointer to an unconstrained array),
7912 into a basic fat pointer (encoding an unconstrained
7913 array). As both types are implemented using the same
7914 structure, the typedef is the only clue which allows us
7915 to distinguish between the two options. Stripping it
7916 would prevent us from printing this field appropriately. */
dda83cd7
SM
7917 rtype->field (f).set_type (type->field (f).type ());
7918 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7919 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7920 fld_bit_len =
7921 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7922 else
5ded5331 7923 {
940da03e 7924 struct type *field_type = type->field (f).type ();
5ded5331
JB
7925
7926 /* We need to be careful of typedefs when computing
7927 the length of our field. If this is a typedef,
7928 get the length of the target type, not the length
7929 of the typedef. */
78134374 7930 if (field_type->code () == TYPE_CODE_TYPEDEF)
5ded5331
JB
7931 field_type = ada_typedef_target_type (field_type);
7932
dda83cd7
SM
7933 fld_bit_len =
7934 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
5ded5331 7935 }
dda83cd7 7936 }
14f9c5c9 7937 if (off + fld_bit_len > bit_len)
dda83cd7 7938 bit_len = off + fld_bit_len;
d94e4f4f 7939 off += fld_bit_len;
4c4b4cd2 7940 TYPE_LENGTH (rtype) =
dda83cd7 7941 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7942 }
4c4b4cd2
PH
7943
7944 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7945 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7946 the record. This can happen in the presence of representation
7947 clauses. */
7948 if (variant_field >= 0)
7949 {
7950 struct type *branch_type;
7951
7952 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7953
7954 if (dval0 == NULL)
9f1f738a 7955 {
012370f6
TT
7956 /* Using plain value_from_contents_and_address here causes
7957 problems because we will end up trying to resolve a type
7958 that is currently being constructed. */
7959 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7960 address);
9f1f738a
SA
7961 rtype = value_type (dval);
7962 }
4c4b4cd2 7963 else
dda83cd7 7964 dval = dval0;
4c4b4cd2
PH
7965
7966 branch_type =
dda83cd7
SM
7967 to_fixed_variant_branch_type
7968 (type->field (variant_field).type (),
7969 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7970 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
4c4b4cd2 7971 if (branch_type == NULL)
dda83cd7
SM
7972 {
7973 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7974 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 7975 rtype->set_num_fields (rtype->num_fields () - 1);
dda83cd7 7976 }
4c4b4cd2 7977 else
dda83cd7
SM
7978 {
7979 rtype->field (variant_field).set_type (branch_type);
7980 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7981 fld_bit_len =
7982 TYPE_LENGTH (rtype->field (variant_field).type ()) *
7983 TARGET_CHAR_BIT;
7984 if (off + fld_bit_len > bit_len)
7985 bit_len = off + fld_bit_len;
7986 TYPE_LENGTH (rtype) =
7987 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7988 }
4c4b4cd2
PH
7989 }
7990
714e53ab
PH
7991 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7992 should contain the alignment of that record, which should be a strictly
7993 positive value. If null or negative, then something is wrong, most
7994 probably in the debug info. In that case, we don't round up the size
0963b4bd 7995 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7996 the current RTYPE length might be good enough for our purposes. */
7997 if (TYPE_LENGTH (type) <= 0)
7998 {
7d93a1e0 7999 if (rtype->name ())
cc1defb1 8000 warning (_("Invalid type size for `%s' detected: %s."),
7d93a1e0 8001 rtype->name (), pulongest (TYPE_LENGTH (type)));
323e0a4a 8002 else
cc1defb1
KS
8003 warning (_("Invalid type size for <unnamed> detected: %s."),
8004 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
8005 }
8006 else
8007 {
a89febbd
TT
8008 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
8009 TYPE_LENGTH (type));
714e53ab 8010 }
14f9c5c9
AS
8011
8012 value_free_to_mark (mark);
d2e4a39e 8013 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8014 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8015 return rtype;
8016}
8017
4c4b4cd2
PH
8018/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8019 of 1. */
14f9c5c9 8020
d2e4a39e 8021static struct type *
fc1a4b47 8022template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 8023 CORE_ADDR address, struct value *dval0)
4c4b4cd2
PH
8024{
8025 return ada_template_to_fixed_record_type_1 (type, valaddr,
dda83cd7 8026 address, dval0, 1);
4c4b4cd2
PH
8027}
8028
8029/* An ordinary record type in which ___XVL-convention fields and
8030 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8031 static approximations, containing all possible fields. Uses
8032 no runtime values. Useless for use in values, but that's OK,
8033 since the results are used only for type determinations. Works on both
8034 structs and unions. Representation note: to save space, we memorize
8035 the result of this function in the TYPE_TARGET_TYPE of the
8036 template type. */
8037
8038static struct type *
8039template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8040{
8041 struct type *type;
8042 int nfields;
8043 int f;
8044
9e195661 8045 /* No need no do anything if the input type is already fixed. */
22c4c60c 8046 if (type0->is_fixed_instance ())
9e195661
PMR
8047 return type0;
8048
8049 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8050 if (TYPE_TARGET_TYPE (type0) != NULL)
8051 return TYPE_TARGET_TYPE (type0);
8052
9e195661 8053 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8054 type = type0;
1f704f76 8055 nfields = type0->num_fields ();
9e195661
PMR
8056
8057 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8058 recompute all over next time. */
8059 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8060
8061 for (f = 0; f < nfields; f += 1)
8062 {
940da03e 8063 struct type *field_type = type0->field (f).type ();
4c4b4cd2 8064 struct type *new_type;
14f9c5c9 8065
4c4b4cd2 8066 if (is_dynamic_field (type0, f))
460efde1
JB
8067 {
8068 field_type = ada_check_typedef (field_type);
dda83cd7 8069 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
460efde1 8070 }
14f9c5c9 8071 else
dda83cd7 8072 new_type = static_unwrap_type (field_type);
9e195661
PMR
8073
8074 if (new_type != field_type)
8075 {
8076 /* Clone TYPE0 only the first time we get a new field type. */
8077 if (type == type0)
8078 {
8079 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
78134374 8080 type->set_code (type0->code ());
8ecb59f8 8081 INIT_NONE_SPECIFIC (type);
5e33d5f4 8082 type->set_num_fields (nfields);
3cabb6b0
SM
8083
8084 field *fields =
8085 ((struct field *)
8086 TYPE_ALLOC (type, nfields * sizeof (struct field)));
80fc5e77 8087 memcpy (fields, type0->fields (),
9e195661 8088 sizeof (struct field) * nfields);
3cabb6b0
SM
8089 type->set_fields (fields);
8090
d0e39ea2 8091 type->set_name (ada_type_name (type0));
9cdd0d12 8092 type->set_is_fixed_instance (true);
9e195661
PMR
8093 TYPE_LENGTH (type) = 0;
8094 }
5d14b6e5 8095 type->field (f).set_type (new_type);
9e195661
PMR
8096 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8097 }
14f9c5c9 8098 }
9e195661 8099
14f9c5c9
AS
8100 return type;
8101}
8102
4c4b4cd2 8103/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8104 whose address in memory is ADDRESS, returns a revision of TYPE,
8105 which should be a non-dynamic-sized record, in which the variant
8106 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8107 for discriminant values in DVAL0, which can be NULL if the record
8108 contains the necessary discriminant values. */
8109
d2e4a39e 8110static struct type *
fc1a4b47 8111to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
dda83cd7 8112 CORE_ADDR address, struct value *dval0)
14f9c5c9 8113{
d2e4a39e 8114 struct value *mark = value_mark ();
4c4b4cd2 8115 struct value *dval;
d2e4a39e 8116 struct type *rtype;
14f9c5c9 8117 struct type *branch_type;
1f704f76 8118 int nfields = type->num_fields ();
4c4b4cd2 8119 int variant_field = variant_field_index (type);
14f9c5c9 8120
4c4b4cd2 8121 if (variant_field == -1)
14f9c5c9
AS
8122 return type;
8123
4c4b4cd2 8124 if (dval0 == NULL)
9f1f738a
SA
8125 {
8126 dval = value_from_contents_and_address (type, valaddr, address);
8127 type = value_type (dval);
8128 }
4c4b4cd2
PH
8129 else
8130 dval = dval0;
8131
e9bb382b 8132 rtype = alloc_type_copy (type);
67607e24 8133 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8134 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8135 rtype->set_num_fields (nfields);
3cabb6b0
SM
8136
8137 field *fields =
d2e4a39e 8138 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
80fc5e77 8139 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
3cabb6b0
SM
8140 rtype->set_fields (fields);
8141
d0e39ea2 8142 rtype->set_name (ada_type_name (type));
9cdd0d12 8143 rtype->set_is_fixed_instance (true);
14f9c5c9
AS
8144 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8145
4c4b4cd2 8146 branch_type = to_fixed_variant_branch_type
940da03e 8147 (type->field (variant_field).type (),
d2e4a39e 8148 cond_offset_host (valaddr,
dda83cd7
SM
8149 TYPE_FIELD_BITPOS (type, variant_field)
8150 / TARGET_CHAR_BIT),
d2e4a39e 8151 cond_offset_target (address,
dda83cd7
SM
8152 TYPE_FIELD_BITPOS (type, variant_field)
8153 / TARGET_CHAR_BIT), dval);
d2e4a39e 8154 if (branch_type == NULL)
14f9c5c9 8155 {
4c4b4cd2 8156 int f;
5b4ee69b 8157
4c4b4cd2 8158 for (f = variant_field + 1; f < nfields; f += 1)
dda83cd7 8159 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8160 rtype->set_num_fields (rtype->num_fields () - 1);
14f9c5c9
AS
8161 }
8162 else
8163 {
5d14b6e5 8164 rtype->field (variant_field).set_type (branch_type);
4c4b4cd2
PH
8165 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8166 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8167 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8168 }
940da03e 8169 TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
d2e4a39e 8170
4c4b4cd2 8171 value_free_to_mark (mark);
14f9c5c9
AS
8172 return rtype;
8173}
8174
8175/* An ordinary record type (with fixed-length fields) that describes
8176 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8177 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8178 should be in DVAL, a record value; it may be NULL if the object
8179 at ADDR itself contains any necessary discriminant values.
8180 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8181 values from the record are needed. Except in the case that DVAL,
8182 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8183 unchecked) is replaced by a particular branch of the variant.
8184
8185 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8186 is questionable and may be removed. It can arise during the
8187 processing of an unconstrained-array-of-record type where all the
8188 variant branches have exactly the same size. This is because in
8189 such cases, the compiler does not bother to use the XVS convention
8190 when encoding the record. I am currently dubious of this
8191 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8192
d2e4a39e 8193static struct type *
fc1a4b47 8194to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
dda83cd7 8195 CORE_ADDR address, struct value *dval)
14f9c5c9 8196{
d2e4a39e 8197 struct type *templ_type;
14f9c5c9 8198
22c4c60c 8199 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8200 return type0;
8201
d2e4a39e 8202 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8203
8204 if (templ_type != NULL)
8205 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8206 else if (variant_field_index (type0) >= 0)
8207 {
8208 if (dval == NULL && valaddr == NULL && address == 0)
dda83cd7 8209 return type0;
4c4b4cd2 8210 return to_record_with_fixed_variant_part (type0, valaddr, address,
dda83cd7 8211 dval);
4c4b4cd2 8212 }
14f9c5c9
AS
8213 else
8214 {
9cdd0d12 8215 type0->set_is_fixed_instance (true);
14f9c5c9
AS
8216 return type0;
8217 }
8218
8219}
8220
8221/* An ordinary record type (with fixed-length fields) that describes
8222 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8223 union type. Any necessary discriminants' values should be in DVAL,
8224 a record value. That is, this routine selects the appropriate
8225 branch of the union at ADDR according to the discriminant value
b1f33ddd 8226 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8227 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8228
d2e4a39e 8229static struct type *
fc1a4b47 8230to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
dda83cd7 8231 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8232{
8233 int which;
d2e4a39e
AS
8234 struct type *templ_type;
8235 struct type *var_type;
14f9c5c9 8236
78134374 8237 if (var_type0->code () == TYPE_CODE_PTR)
14f9c5c9 8238 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8239 else
14f9c5c9
AS
8240 var_type = var_type0;
8241
8242 templ_type = ada_find_parallel_type (var_type, "___XVU");
8243
8244 if (templ_type != NULL)
8245 var_type = templ_type;
8246
b1f33ddd
JB
8247 if (is_unchecked_variant (var_type, value_type (dval)))
8248 return var_type0;
d8af9068 8249 which = ada_which_variant_applies (var_type, dval);
14f9c5c9
AS
8250
8251 if (which < 0)
e9bb382b 8252 return empty_record (var_type);
14f9c5c9 8253 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8254 return to_fixed_record_type
940da03e 8255 (TYPE_TARGET_TYPE (var_type->field (which).type ()),
d2e4a39e 8256 valaddr, address, dval);
940da03e 8257 else if (variant_field_index (var_type->field (which).type ()) >= 0)
d2e4a39e
AS
8258 return
8259 to_fixed_record_type
940da03e 8260 (var_type->field (which).type (), valaddr, address, dval);
14f9c5c9 8261 else
940da03e 8262 return var_type->field (which).type ();
14f9c5c9
AS
8263}
8264
8908fca5
JB
8265/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8266 ENCODING_TYPE, a type following the GNAT conventions for discrete
8267 type encodings, only carries redundant information. */
8268
8269static int
8270ada_is_redundant_range_encoding (struct type *range_type,
8271 struct type *encoding_type)
8272{
108d56a4 8273 const char *bounds_str;
8908fca5
JB
8274 int n;
8275 LONGEST lo, hi;
8276
78134374 8277 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8908fca5 8278
78134374
SM
8279 if (get_base_type (range_type)->code ()
8280 != get_base_type (encoding_type)->code ())
005e2509
JB
8281 {
8282 /* The compiler probably used a simple base type to describe
8283 the range type instead of the range's actual base type,
8284 expecting us to get the real base type from the encoding
8285 anyway. In this situation, the encoding cannot be ignored
8286 as redundant. */
8287 return 0;
8288 }
8289
8908fca5
JB
8290 if (is_dynamic_type (range_type))
8291 return 0;
8292
7d93a1e0 8293 if (encoding_type->name () == NULL)
8908fca5
JB
8294 return 0;
8295
7d93a1e0 8296 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8908fca5
JB
8297 if (bounds_str == NULL)
8298 return 0;
8299
8300 n = 8; /* Skip "___XDLU_". */
8301 if (!ada_scan_number (bounds_str, n, &lo, &n))
8302 return 0;
5537ddd0 8303 if (range_type->bounds ()->low.const_val () != lo)
8908fca5
JB
8304 return 0;
8305
8306 n += 2; /* Skip the "__" separator between the two bounds. */
8307 if (!ada_scan_number (bounds_str, n, &hi, &n))
8308 return 0;
5537ddd0 8309 if (range_type->bounds ()->high.const_val () != hi)
8908fca5
JB
8310 return 0;
8311
8312 return 1;
8313}
8314
8315/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8316 a type following the GNAT encoding for describing array type
8317 indices, only carries redundant information. */
8318
8319static int
8320ada_is_redundant_index_type_desc (struct type *array_type,
8321 struct type *desc_type)
8322{
8323 struct type *this_layer = check_typedef (array_type);
8324 int i;
8325
1f704f76 8326 for (i = 0; i < desc_type->num_fields (); i++)
8908fca5 8327 {
3d967001 8328 if (!ada_is_redundant_range_encoding (this_layer->index_type (),
940da03e 8329 desc_type->field (i).type ()))
8908fca5
JB
8330 return 0;
8331 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8332 }
8333
8334 return 1;
8335}
8336
14f9c5c9
AS
8337/* Assuming that TYPE0 is an array type describing the type of a value
8338 at ADDR, and that DVAL describes a record containing any
8339 discriminants used in TYPE0, returns a type for the value that
8340 contains no dynamic components (that is, no components whose sizes
8341 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8342 true, gives an error message if the resulting type's size is over
4c4b4cd2 8343 varsize_limit. */
14f9c5c9 8344
d2e4a39e
AS
8345static struct type *
8346to_fixed_array_type (struct type *type0, struct value *dval,
dda83cd7 8347 int ignore_too_big)
14f9c5c9 8348{
d2e4a39e
AS
8349 struct type *index_type_desc;
8350 struct type *result;
ad82864c 8351 int constrained_packed_array_p;
931e5bc3 8352 static const char *xa_suffix = "___XA";
14f9c5c9 8353
b0dd7688 8354 type0 = ada_check_typedef (type0);
22c4c60c 8355 if (type0->is_fixed_instance ())
4c4b4cd2 8356 return type0;
14f9c5c9 8357
ad82864c
JB
8358 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8359 if (constrained_packed_array_p)
75fd6a26
TT
8360 {
8361 type0 = decode_constrained_packed_array_type (type0);
8362 if (type0 == nullptr)
8363 error (_("could not decode constrained packed array type"));
8364 }
284614f0 8365
931e5bc3
JG
8366 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8367
8368 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8369 encoding suffixed with 'P' may still be generated. If so,
8370 it should be used to find the XA type. */
8371
8372 if (index_type_desc == NULL)
8373 {
1da0522e 8374 const char *type_name = ada_type_name (type0);
931e5bc3 8375
1da0522e 8376 if (type_name != NULL)
931e5bc3 8377 {
1da0522e 8378 const int len = strlen (type_name);
931e5bc3
JG
8379 char *name = (char *) alloca (len + strlen (xa_suffix));
8380
1da0522e 8381 if (type_name[len - 1] == 'P')
931e5bc3 8382 {
1da0522e 8383 strcpy (name, type_name);
931e5bc3
JG
8384 strcpy (name + len - 1, xa_suffix);
8385 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8386 }
8387 }
8388 }
8389
28c85d6c 8390 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8391 if (index_type_desc != NULL
8392 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8393 {
8394 /* Ignore this ___XA parallel type, as it does not bring any
8395 useful information. This allows us to avoid creating fixed
8396 versions of the array's index types, which would be identical
8397 to the original ones. This, in turn, can also help avoid
8398 the creation of fixed versions of the array itself. */
8399 index_type_desc = NULL;
8400 }
8401
14f9c5c9
AS
8402 if (index_type_desc == NULL)
8403 {
61ee279c 8404 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8405
14f9c5c9 8406 /* NOTE: elt_type---the fixed version of elt_type0---should never
dda83cd7
SM
8407 depend on the contents of the array in properly constructed
8408 debugging data. */
529cad9c 8409 /* Create a fixed version of the array element type.
dda83cd7
SM
8410 We're not providing the address of an element here,
8411 and thus the actual object value cannot be inspected to do
8412 the conversion. This should not be a problem, since arrays of
8413 unconstrained objects are not allowed. In particular, all
8414 the elements of an array of a tagged type should all be of
8415 the same type specified in the debugging info. No need to
8416 consult the object tag. */
1ed6ede0 8417 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8418
284614f0
JB
8419 /* Make sure we always create a new array type when dealing with
8420 packed array types, since we're going to fix-up the array
8421 type length and element bitsize a little further down. */
ad82864c 8422 if (elt_type0 == elt_type && !constrained_packed_array_p)
dda83cd7 8423 result = type0;
14f9c5c9 8424 else
dda83cd7
SM
8425 result = create_array_type (alloc_type_copy (type0),
8426 elt_type, type0->index_type ());
14f9c5c9
AS
8427 }
8428 else
8429 {
8430 int i;
8431 struct type *elt_type0;
8432
8433 elt_type0 = type0;
1f704f76 8434 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
dda83cd7 8435 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8436
8437 /* NOTE: result---the fixed version of elt_type0---should never
dda83cd7
SM
8438 depend on the contents of the array in properly constructed
8439 debugging data. */
529cad9c 8440 /* Create a fixed version of the array element type.
dda83cd7
SM
8441 We're not providing the address of an element here,
8442 and thus the actual object value cannot be inspected to do
8443 the conversion. This should not be a problem, since arrays of
8444 unconstrained objects are not allowed. In particular, all
8445 the elements of an array of a tagged type should all be of
8446 the same type specified in the debugging info. No need to
8447 consult the object tag. */
1ed6ede0 8448 result =
dda83cd7 8449 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8450
8451 elt_type0 = type0;
1f704f76 8452 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
dda83cd7
SM
8453 {
8454 struct type *range_type =
8455 to_fixed_range_type (index_type_desc->field (i).type (), dval);
5b4ee69b 8456
dda83cd7
SM
8457 result = create_array_type (alloc_type_copy (elt_type0),
8458 result, range_type);
1ce677a4 8459 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
dda83cd7 8460 }
d2e4a39e 8461 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
dda83cd7 8462 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8463 }
8464
2e6fda7d
JB
8465 /* We want to preserve the type name. This can be useful when
8466 trying to get the type name of a value that has already been
8467 printed (for instance, if the user did "print VAR; whatis $". */
7d93a1e0 8468 result->set_name (type0->name ());
2e6fda7d 8469
ad82864c 8470 if (constrained_packed_array_p)
284614f0
JB
8471 {
8472 /* So far, the resulting type has been created as if the original
8473 type was a regular (non-packed) array type. As a result, the
8474 bitsize of the array elements needs to be set again, and the array
8475 length needs to be recomputed based on that bitsize. */
8476 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8477 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8478
8479 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8480 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8481 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
dda83cd7 8482 TYPE_LENGTH (result)++;
284614f0
JB
8483 }
8484
9cdd0d12 8485 result->set_is_fixed_instance (true);
14f9c5c9 8486 return result;
d2e4a39e 8487}
14f9c5c9
AS
8488
8489
8490/* A standard type (containing no dynamically sized components)
8491 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8492 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8493 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8494 ADDRESS or in VALADDR contains these discriminants.
8495
1ed6ede0
JB
8496 If CHECK_TAG is not null, in the case of tagged types, this function
8497 attempts to locate the object's tag and use it to compute the actual
8498 type. However, when ADDRESS is null, we cannot use it to determine the
8499 location of the tag, and therefore compute the tagged type's actual type.
8500 So we return the tagged type without consulting the tag. */
529cad9c 8501
f192137b
JB
8502static struct type *
8503ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
dda83cd7 8504 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8505{
61ee279c 8506 type = ada_check_typedef (type);
8ecb59f8
TT
8507
8508 /* Only un-fixed types need to be handled here. */
8509 if (!HAVE_GNAT_AUX_INFO (type))
8510 return type;
8511
78134374 8512 switch (type->code ())
d2e4a39e
AS
8513 {
8514 default:
14f9c5c9 8515 return type;
d2e4a39e 8516 case TYPE_CODE_STRUCT:
4c4b4cd2 8517 {
dda83cd7
SM
8518 struct type *static_type = to_static_fixed_type (type);
8519 struct type *fixed_record_type =
8520 to_fixed_record_type (type, valaddr, address, NULL);
8521
8522 /* If STATIC_TYPE is a tagged type and we know the object's address,
8523 then we can determine its tag, and compute the object's actual
8524 type from there. Note that we have to use the fixed record
8525 type (the parent part of the record may have dynamic fields
8526 and the way the location of _tag is expressed may depend on
8527 them). */
8528
8529 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8530 {
b50d69b5
JG
8531 struct value *tag =
8532 value_tag_from_contents_and_address
8533 (fixed_record_type,
8534 valaddr,
8535 address);
8536 struct type *real_type = type_from_tag (tag);
8537 struct value *obj =
8538 value_from_contents_and_address (fixed_record_type,
8539 valaddr,
8540 address);
dda83cd7
SM
8541 fixed_record_type = value_type (obj);
8542 if (real_type != NULL)
8543 return to_fixed_record_type
b50d69b5
JG
8544 (real_type, NULL,
8545 value_address (ada_tag_value_at_base_address (obj)), NULL);
dda83cd7
SM
8546 }
8547
8548 /* Check to see if there is a parallel ___XVZ variable.
8549 If there is, then it provides the actual size of our type. */
8550 else if (ada_type_name (fixed_record_type) != NULL)
8551 {
8552 const char *name = ada_type_name (fixed_record_type);
8553 char *xvz_name
224c3ddb 8554 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 8555 bool xvz_found = false;
dda83cd7 8556 LONGEST size;
4af88198 8557
dda83cd7 8558 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 8559 try
eccab96d
JB
8560 {
8561 xvz_found = get_int_var_value (xvz_name, size);
8562 }
230d2906 8563 catch (const gdb_exception_error &except)
eccab96d
JB
8564 {
8565 /* We found the variable, but somehow failed to read
8566 its value. Rethrow the same error, but with a little
8567 bit more information, to help the user understand
8568 what went wrong (Eg: the variable might have been
8569 optimized out). */
8570 throw_error (except.error,
8571 _("unable to read value of %s (%s)"),
3d6e9d23 8572 xvz_name, except.what ());
eccab96d 8573 }
eccab96d 8574
dda83cd7
SM
8575 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8576 {
8577 fixed_record_type = copy_type (fixed_record_type);
8578 TYPE_LENGTH (fixed_record_type) = size;
8579
8580 /* The FIXED_RECORD_TYPE may have be a stub. We have
8581 observed this when the debugging info is STABS, and
8582 apparently it is something that is hard to fix.
8583
8584 In practice, we don't need the actual type definition
8585 at all, because the presence of the XVZ variable allows us
8586 to assume that there must be a XVS type as well, which we
8587 should be able to use later, when we need the actual type
8588 definition.
8589
8590 In the meantime, pretend that the "fixed" type we are
8591 returning is NOT a stub, because this can cause trouble
8592 when using this type to create new types targeting it.
8593 Indeed, the associated creation routines often check
8594 whether the target type is a stub and will try to replace
8595 it, thus using a type with the wrong size. This, in turn,
8596 might cause the new type to have the wrong size too.
8597 Consider the case of an array, for instance, where the size
8598 of the array is computed from the number of elements in
8599 our array multiplied by the size of its element. */
b4b73759 8600 fixed_record_type->set_is_stub (false);
dda83cd7
SM
8601 }
8602 }
8603 return fixed_record_type;
4c4b4cd2 8604 }
d2e4a39e 8605 case TYPE_CODE_ARRAY:
4c4b4cd2 8606 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8607 case TYPE_CODE_UNION:
8608 if (dval == NULL)
dda83cd7 8609 return type;
d2e4a39e 8610 else
dda83cd7 8611 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8612 }
14f9c5c9
AS
8613}
8614
f192137b
JB
8615/* The same as ada_to_fixed_type_1, except that it preserves the type
8616 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8617
8618 The typedef layer needs be preserved in order to differentiate between
8619 arrays and array pointers when both types are implemented using the same
8620 fat pointer. In the array pointer case, the pointer is encoded as
8621 a typedef of the pointer type. For instance, considering:
8622
8623 type String_Access is access String;
8624 S1 : String_Access := null;
8625
8626 To the debugger, S1 is defined as a typedef of type String. But
8627 to the user, it is a pointer. So if the user tries to print S1,
8628 we should not dereference the array, but print the array address
8629 instead.
8630
8631 If we didn't preserve the typedef layer, we would lose the fact that
8632 the type is to be presented as a pointer (needs de-reference before
8633 being printed). And we would also use the source-level type name. */
f192137b
JB
8634
8635struct type *
8636ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 8637 CORE_ADDR address, struct value *dval, int check_tag)
f192137b
JB
8638
8639{
8640 struct type *fixed_type =
8641 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8642
96dbd2c1
JB
8643 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8644 then preserve the typedef layer.
8645
8646 Implementation note: We can only check the main-type portion of
8647 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8648 from TYPE now returns a type that has the same instance flags
8649 as TYPE. For instance, if TYPE is a "typedef const", and its
8650 target type is a "struct", then the typedef elimination will return
8651 a "const" version of the target type. See check_typedef for more
8652 details about how the typedef layer elimination is done.
8653
8654 brobecker/2010-11-19: It seems to me that the only case where it is
8655 useful to preserve the typedef layer is when dealing with fat pointers.
8656 Perhaps, we could add a check for that and preserve the typedef layer
85102364 8657 only in that situation. But this seems unnecessary so far, probably
96dbd2c1
JB
8658 because we call check_typedef/ada_check_typedef pretty much everywhere.
8659 */
78134374 8660 if (type->code () == TYPE_CODE_TYPEDEF
720d1a40 8661 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8662 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8663 return type;
8664
8665 return fixed_type;
8666}
8667
14f9c5c9 8668/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8669 TYPE0, but based on no runtime data. */
14f9c5c9 8670
d2e4a39e
AS
8671static struct type *
8672to_static_fixed_type (struct type *type0)
14f9c5c9 8673{
d2e4a39e 8674 struct type *type;
14f9c5c9
AS
8675
8676 if (type0 == NULL)
8677 return NULL;
8678
22c4c60c 8679 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8680 return type0;
8681
61ee279c 8682 type0 = ada_check_typedef (type0);
d2e4a39e 8683
78134374 8684 switch (type0->code ())
14f9c5c9
AS
8685 {
8686 default:
8687 return type0;
8688 case TYPE_CODE_STRUCT:
8689 type = dynamic_template_type (type0);
d2e4a39e 8690 if (type != NULL)
dda83cd7 8691 return template_to_static_fixed_type (type);
4c4b4cd2 8692 else
dda83cd7 8693 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8694 case TYPE_CODE_UNION:
8695 type = ada_find_parallel_type (type0, "___XVU");
8696 if (type != NULL)
dda83cd7 8697 return template_to_static_fixed_type (type);
4c4b4cd2 8698 else
dda83cd7 8699 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8700 }
8701}
8702
4c4b4cd2
PH
8703/* A static approximation of TYPE with all type wrappers removed. */
8704
d2e4a39e
AS
8705static struct type *
8706static_unwrap_type (struct type *type)
14f9c5c9
AS
8707{
8708 if (ada_is_aligner_type (type))
8709 {
940da03e 8710 struct type *type1 = ada_check_typedef (type)->field (0).type ();
14f9c5c9 8711 if (ada_type_name (type1) == NULL)
d0e39ea2 8712 type1->set_name (ada_type_name (type));
14f9c5c9
AS
8713
8714 return static_unwrap_type (type1);
8715 }
d2e4a39e 8716 else
14f9c5c9 8717 {
d2e4a39e 8718 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8719
d2e4a39e 8720 if (raw_real_type == type)
dda83cd7 8721 return type;
14f9c5c9 8722 else
dda83cd7 8723 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8724 }
8725}
8726
8727/* In some cases, incomplete and private types require
4c4b4cd2 8728 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8729 type Foo;
8730 type FooP is access Foo;
8731 V: FooP;
8732 type Foo is array ...;
4c4b4cd2 8733 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8734 cross-references to such types, we instead substitute for FooP a
8735 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8736 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8737
8738/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8739 exists, otherwise TYPE. */
8740
d2e4a39e 8741struct type *
61ee279c 8742ada_check_typedef (struct type *type)
14f9c5c9 8743{
727e3d2e
JB
8744 if (type == NULL)
8745 return NULL;
8746
736ade86
XR
8747 /* If our type is an access to an unconstrained array, which is encoded
8748 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
8749 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8750 what allows us to distinguish between fat pointers that represent
8751 array types, and fat pointers that represent array access types
8752 (in both cases, the compiler implements them as fat pointers). */
736ade86 8753 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
8754 return type;
8755
f168693b 8756 type = check_typedef (type);
78134374 8757 if (type == NULL || type->code () != TYPE_CODE_ENUM
e46d3488 8758 || !type->is_stub ()
7d93a1e0 8759 || type->name () == NULL)
14f9c5c9 8760 return type;
d2e4a39e 8761 else
14f9c5c9 8762 {
7d93a1e0 8763 const char *name = type->name ();
d2e4a39e 8764 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8765
05e522ef 8766 if (type1 == NULL)
dda83cd7 8767 return type;
05e522ef
JB
8768
8769 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8770 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8771 types, only for the typedef-to-array types). If that's the case,
8772 strip the typedef layer. */
78134374 8773 if (type1->code () == TYPE_CODE_TYPEDEF)
3a867c22
JB
8774 type1 = ada_check_typedef (type1);
8775
8776 return type1;
14f9c5c9
AS
8777 }
8778}
8779
8780/* A value representing the data at VALADDR/ADDRESS as described by
8781 type TYPE0, but with a standard (static-sized) type that correctly
8782 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8783 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8784 creation of struct values]. */
14f9c5c9 8785
4c4b4cd2
PH
8786static struct value *
8787ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
dda83cd7 8788 struct value *val0)
14f9c5c9 8789{
1ed6ede0 8790 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8791
14f9c5c9
AS
8792 if (type == type0 && val0 != NULL)
8793 return val0;
cc0e770c
JB
8794
8795 if (VALUE_LVAL (val0) != lval_memory)
8796 {
8797 /* Our value does not live in memory; it could be a convenience
8798 variable, for instance. Create a not_lval value using val0's
8799 contents. */
8800 return value_from_contents (type, value_contents (val0));
8801 }
8802
8803 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
8804}
8805
8806/* A value representing VAL, but with a standard (static-sized) type
8807 that correctly describes it. Does not necessarily create a new
8808 value. */
8809
0c3acc09 8810struct value *
4c4b4cd2
PH
8811ada_to_fixed_value (struct value *val)
8812{
c48db5ca 8813 val = unwrap_value (val);
d8ce9127 8814 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 8815 return val;
14f9c5c9 8816}
d2e4a39e 8817\f
14f9c5c9 8818
14f9c5c9
AS
8819/* Attributes */
8820
4c4b4cd2
PH
8821/* Table mapping attribute numbers to names.
8822 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8823
27087b7f 8824static const char * const attribute_names[] = {
14f9c5c9
AS
8825 "<?>",
8826
d2e4a39e 8827 "first",
14f9c5c9
AS
8828 "last",
8829 "length",
8830 "image",
14f9c5c9
AS
8831 "max",
8832 "min",
4c4b4cd2
PH
8833 "modulus",
8834 "pos",
8835 "size",
8836 "tag",
14f9c5c9 8837 "val",
14f9c5c9
AS
8838 0
8839};
8840
de93309a 8841static const char *
4c4b4cd2 8842ada_attribute_name (enum exp_opcode n)
14f9c5c9 8843{
4c4b4cd2
PH
8844 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8845 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8846 else
8847 return attribute_names[0];
8848}
8849
4c4b4cd2 8850/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8851
4c4b4cd2
PH
8852static LONGEST
8853pos_atr (struct value *arg)
14f9c5c9 8854{
24209737
PH
8855 struct value *val = coerce_ref (arg);
8856 struct type *type = value_type (val);
14f9c5c9 8857
d2e4a39e 8858 if (!discrete_type_p (type))
323e0a4a 8859 error (_("'POS only defined on discrete types"));
14f9c5c9 8860
6244c119
SM
8861 gdb::optional<LONGEST> result = discrete_position (type, value_as_long (val));
8862 if (!result.has_value ())
aa715135 8863 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 8864
6244c119 8865 return *result;
4c4b4cd2
PH
8866}
8867
8868static struct value *
3cb382c9 8869value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8870{
3cb382c9 8871 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8872}
8873
4c4b4cd2 8874/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8875
d2e4a39e 8876static struct value *
53a47a3e 8877val_atr (struct type *type, LONGEST val)
14f9c5c9 8878{
53a47a3e 8879 gdb_assert (discrete_type_p (type));
0bc2354b
TT
8880 if (type->code () == TYPE_CODE_RANGE)
8881 type = TYPE_TARGET_TYPE (type);
78134374 8882 if (type->code () == TYPE_CODE_ENUM)
14f9c5c9 8883 {
53a47a3e 8884 if (val < 0 || val >= type->num_fields ())
dda83cd7 8885 error (_("argument to 'VAL out of range"));
53a47a3e 8886 val = TYPE_FIELD_ENUMVAL (type, val);
14f9c5c9 8887 }
53a47a3e
TT
8888 return value_from_longest (type, val);
8889}
8890
8891static struct value *
3848abd6 8892ada_val_atr (enum noside noside, struct type *type, struct value *arg)
53a47a3e 8893{
3848abd6
TT
8894 if (noside == EVAL_AVOID_SIDE_EFFECTS)
8895 return value_zero (type, not_lval);
8896
53a47a3e
TT
8897 if (!discrete_type_p (type))
8898 error (_("'VAL only defined on discrete types"));
8899 if (!integer_type_p (value_type (arg)))
8900 error (_("'VAL requires integral argument"));
8901
8902 return val_atr (type, value_as_long (arg));
14f9c5c9 8903}
14f9c5c9 8904\f
d2e4a39e 8905
dda83cd7 8906 /* Evaluation */
14f9c5c9 8907
4c4b4cd2
PH
8908/* True if TYPE appears to be an Ada character type.
8909 [At the moment, this is true only for Character and Wide_Character;
8910 It is a heuristic test that could stand improvement]. */
14f9c5c9 8911
fc913e53 8912bool
d2e4a39e 8913ada_is_character_type (struct type *type)
14f9c5c9 8914{
7b9f71f2
JB
8915 const char *name;
8916
8917 /* If the type code says it's a character, then assume it really is,
8918 and don't check any further. */
78134374 8919 if (type->code () == TYPE_CODE_CHAR)
fc913e53 8920 return true;
7b9f71f2
JB
8921
8922 /* Otherwise, assume it's a character type iff it is a discrete type
8923 with a known character type name. */
8924 name = ada_type_name (type);
8925 return (name != NULL
dda83cd7
SM
8926 && (type->code () == TYPE_CODE_INT
8927 || type->code () == TYPE_CODE_RANGE)
8928 && (strcmp (name, "character") == 0
8929 || strcmp (name, "wide_character") == 0
8930 || strcmp (name, "wide_wide_character") == 0
8931 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8932}
8933
4c4b4cd2 8934/* True if TYPE appears to be an Ada string type. */
14f9c5c9 8935
fc913e53 8936bool
ebf56fd3 8937ada_is_string_type (struct type *type)
14f9c5c9 8938{
61ee279c 8939 type = ada_check_typedef (type);
d2e4a39e 8940 if (type != NULL
78134374 8941 && type->code () != TYPE_CODE_PTR
76a01679 8942 && (ada_is_simple_array_type (type)
dda83cd7 8943 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8944 && ada_array_arity (type) == 1)
8945 {
8946 struct type *elttype = ada_array_element_type (type, 1);
8947
8948 return ada_is_character_type (elttype);
8949 }
d2e4a39e 8950 else
fc913e53 8951 return false;
14f9c5c9
AS
8952}
8953
5bf03f13
JB
8954/* The compiler sometimes provides a parallel XVS type for a given
8955 PAD type. Normally, it is safe to follow the PAD type directly,
8956 but older versions of the compiler have a bug that causes the offset
8957 of its "F" field to be wrong. Following that field in that case
8958 would lead to incorrect results, but this can be worked around
8959 by ignoring the PAD type and using the associated XVS type instead.
8960
8961 Set to True if the debugger should trust the contents of PAD types.
8962 Otherwise, ignore the PAD type if there is a parallel XVS type. */
491144b5 8963static bool trust_pad_over_xvs = true;
14f9c5c9
AS
8964
8965/* True if TYPE is a struct type introduced by the compiler to force the
8966 alignment of a value. Such types have a single field with a
4c4b4cd2 8967 distinctive name. */
14f9c5c9
AS
8968
8969int
ebf56fd3 8970ada_is_aligner_type (struct type *type)
14f9c5c9 8971{
61ee279c 8972 type = ada_check_typedef (type);
714e53ab 8973
5bf03f13 8974 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8975 return 0;
8976
78134374 8977 return (type->code () == TYPE_CODE_STRUCT
dda83cd7
SM
8978 && type->num_fields () == 1
8979 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8980}
8981
8982/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8983 the parallel type. */
14f9c5c9 8984
d2e4a39e
AS
8985struct type *
8986ada_get_base_type (struct type *raw_type)
14f9c5c9 8987{
d2e4a39e
AS
8988 struct type *real_type_namer;
8989 struct type *raw_real_type;
14f9c5c9 8990
78134374 8991 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
8992 return raw_type;
8993
284614f0
JB
8994 if (ada_is_aligner_type (raw_type))
8995 /* The encoding specifies that we should always use the aligner type.
8996 So, even if this aligner type has an associated XVS type, we should
8997 simply ignore it.
8998
8999 According to the compiler gurus, an XVS type parallel to an aligner
9000 type may exist because of a stabs limitation. In stabs, aligner
9001 types are empty because the field has a variable-sized type, and
9002 thus cannot actually be used as an aligner type. As a result,
9003 we need the associated parallel XVS type to decode the type.
9004 Since the policy in the compiler is to not change the internal
9005 representation based on the debugging info format, we sometimes
9006 end up having a redundant XVS type parallel to the aligner type. */
9007 return raw_type;
9008
14f9c5c9 9009 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9010 if (real_type_namer == NULL
78134374 9011 || real_type_namer->code () != TYPE_CODE_STRUCT
1f704f76 9012 || real_type_namer->num_fields () != 1)
14f9c5c9
AS
9013 return raw_type;
9014
940da03e 9015 if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
f80d3ff2
JB
9016 {
9017 /* This is an older encoding form where the base type needs to be
85102364 9018 looked up by name. We prefer the newer encoding because it is
f80d3ff2
JB
9019 more efficient. */
9020 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9021 if (raw_real_type == NULL)
9022 return raw_type;
9023 else
9024 return raw_real_type;
9025 }
9026
9027 /* The field in our XVS type is a reference to the base type. */
940da03e 9028 return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
d2e4a39e 9029}
14f9c5c9 9030
4c4b4cd2 9031/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9032
d2e4a39e
AS
9033struct type *
9034ada_aligned_type (struct type *type)
14f9c5c9
AS
9035{
9036 if (ada_is_aligner_type (type))
940da03e 9037 return ada_aligned_type (type->field (0).type ());
14f9c5c9
AS
9038 else
9039 return ada_get_base_type (type);
9040}
9041
9042
9043/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9044 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9045
fc1a4b47
AC
9046const gdb_byte *
9047ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9048{
d2e4a39e 9049 if (ada_is_aligner_type (type))
940da03e 9050 return ada_aligned_value_addr (type->field (0).type (),
dda83cd7
SM
9051 valaddr +
9052 TYPE_FIELD_BITPOS (type,
9053 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9054 else
9055 return valaddr;
9056}
9057
4c4b4cd2
PH
9058
9059
14f9c5c9 9060/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9061 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9062const char *
9063ada_enum_name (const char *name)
14f9c5c9 9064{
5f9febe0 9065 static std::string storage;
e6a959d6 9066 const char *tmp;
14f9c5c9 9067
4c4b4cd2
PH
9068 /* First, unqualify the enumeration name:
9069 1. Search for the last '.' character. If we find one, then skip
177b42fe 9070 all the preceding characters, the unqualified name starts
76a01679 9071 right after that dot.
4c4b4cd2 9072 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9073 translates dots into "__". Search forward for double underscores,
9074 but stop searching when we hit an overloading suffix, which is
9075 of the form "__" followed by digits. */
4c4b4cd2 9076
c3e5cd34
PH
9077 tmp = strrchr (name, '.');
9078 if (tmp != NULL)
4c4b4cd2
PH
9079 name = tmp + 1;
9080 else
14f9c5c9 9081 {
4c4b4cd2 9082 while ((tmp = strstr (name, "__")) != NULL)
dda83cd7
SM
9083 {
9084 if (isdigit (tmp[2]))
9085 break;
9086 else
9087 name = tmp + 2;
9088 }
14f9c5c9
AS
9089 }
9090
9091 if (name[0] == 'Q')
9092 {
14f9c5c9 9093 int v;
5b4ee69b 9094
14f9c5c9 9095 if (name[1] == 'U' || name[1] == 'W')
dda83cd7
SM
9096 {
9097 if (sscanf (name + 2, "%x", &v) != 1)
9098 return name;
9099 }
272560b5
TT
9100 else if (((name[1] >= '0' && name[1] <= '9')
9101 || (name[1] >= 'a' && name[1] <= 'z'))
9102 && name[2] == '\0')
9103 {
5f9febe0
TT
9104 storage = string_printf ("'%c'", name[1]);
9105 return storage.c_str ();
272560b5 9106 }
14f9c5c9 9107 else
dda83cd7 9108 return name;
14f9c5c9
AS
9109
9110 if (isascii (v) && isprint (v))
5f9febe0 9111 storage = string_printf ("'%c'", v);
14f9c5c9 9112 else if (name[1] == 'U')
5f9febe0 9113 storage = string_printf ("[\"%02x\"]", v);
14f9c5c9 9114 else
5f9febe0 9115 storage = string_printf ("[\"%04x\"]", v);
14f9c5c9 9116
5f9febe0 9117 return storage.c_str ();
14f9c5c9 9118 }
d2e4a39e 9119 else
4c4b4cd2 9120 {
c3e5cd34
PH
9121 tmp = strstr (name, "__");
9122 if (tmp == NULL)
9123 tmp = strstr (name, "$");
9124 if (tmp != NULL)
dda83cd7 9125 {
5f9febe0
TT
9126 storage = std::string (name, tmp - name);
9127 return storage.c_str ();
dda83cd7 9128 }
4c4b4cd2
PH
9129
9130 return name;
9131 }
14f9c5c9
AS
9132}
9133
14f9c5c9
AS
9134/* Evaluate the subexpression of EXP starting at *POS as for
9135 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9136 expression. */
14f9c5c9 9137
d2e4a39e
AS
9138static struct value *
9139evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9140{
fe1fe7ea 9141 return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9142}
9143
9144/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9145 value it wraps. */
14f9c5c9 9146
d2e4a39e
AS
9147static struct value *
9148unwrap_value (struct value *val)
14f9c5c9 9149{
df407dfe 9150 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9151
14f9c5c9
AS
9152 if (ada_is_aligner_type (type))
9153 {
de4d072f 9154 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9155 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9156
14f9c5c9 9157 if (ada_type_name (val_type) == NULL)
d0e39ea2 9158 val_type->set_name (ada_type_name (type));
14f9c5c9
AS
9159
9160 return unwrap_value (v);
9161 }
d2e4a39e 9162 else
14f9c5c9 9163 {
d2e4a39e 9164 struct type *raw_real_type =
dda83cd7 9165 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9166
5bf03f13
JB
9167 /* If there is no parallel XVS or XVE type, then the value is
9168 already unwrapped. Return it without further modification. */
9169 if ((type == raw_real_type)
9170 && ada_find_parallel_type (type, "___XVE") == NULL)
9171 return val;
14f9c5c9 9172
d2e4a39e 9173 return
dda83cd7
SM
9174 coerce_unspec_val_to_type
9175 (val, ada_to_fixed_type (raw_real_type, 0,
9176 value_address (val),
9177 NULL, 1));
14f9c5c9
AS
9178 }
9179}
d2e4a39e 9180
d99dcf51
JB
9181/* Given two array types T1 and T2, return nonzero iff both arrays
9182 contain the same number of elements. */
9183
9184static int
9185ada_same_array_size_p (struct type *t1, struct type *t2)
9186{
9187 LONGEST lo1, hi1, lo2, hi2;
9188
9189 /* Get the array bounds in order to verify that the size of
9190 the two arrays match. */
9191 if (!get_array_bounds (t1, &lo1, &hi1)
9192 || !get_array_bounds (t2, &lo2, &hi2))
9193 error (_("unable to determine array bounds"));
9194
9195 /* To make things easier for size comparison, normalize a bit
9196 the case of empty arrays by making sure that the difference
9197 between upper bound and lower bound is always -1. */
9198 if (lo1 > hi1)
9199 hi1 = lo1 - 1;
9200 if (lo2 > hi2)
9201 hi2 = lo2 - 1;
9202
9203 return (hi1 - lo1 == hi2 - lo2);
9204}
9205
9206/* Assuming that VAL is an array of integrals, and TYPE represents
9207 an array with the same number of elements, but with wider integral
9208 elements, return an array "casted" to TYPE. In practice, this
9209 means that the returned array is built by casting each element
9210 of the original array into TYPE's (wider) element type. */
9211
9212static struct value *
9213ada_promote_array_of_integrals (struct type *type, struct value *val)
9214{
9215 struct type *elt_type = TYPE_TARGET_TYPE (type);
9216 LONGEST lo, hi;
9217 struct value *res;
9218 LONGEST i;
9219
9220 /* Verify that both val and type are arrays of scalars, and
9221 that the size of val's elements is smaller than the size
9222 of type's element. */
78134374 9223 gdb_assert (type->code () == TYPE_CODE_ARRAY);
d99dcf51 9224 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
78134374 9225 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
d99dcf51
JB
9226 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9227 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9228 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9229
9230 if (!get_array_bounds (type, &lo, &hi))
9231 error (_("unable to determine array bounds"));
9232
9233 res = allocate_value (type);
9234
9235 /* Promote each array element. */
9236 for (i = 0; i < hi - lo + 1; i++)
9237 {
9238 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9239
9240 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9241 value_contents_all (elt), TYPE_LENGTH (elt_type));
9242 }
9243
9244 return res;
9245}
9246
4c4b4cd2
PH
9247/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9248 return the converted value. */
9249
d2e4a39e
AS
9250static struct value *
9251coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9252{
df407dfe 9253 struct type *type2 = value_type (val);
5b4ee69b 9254
14f9c5c9
AS
9255 if (type == type2)
9256 return val;
9257
61ee279c
PH
9258 type2 = ada_check_typedef (type2);
9259 type = ada_check_typedef (type);
14f9c5c9 9260
78134374
SM
9261 if (type2->code () == TYPE_CODE_PTR
9262 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9
AS
9263 {
9264 val = ada_value_ind (val);
df407dfe 9265 type2 = value_type (val);
14f9c5c9
AS
9266 }
9267
78134374
SM
9268 if (type2->code () == TYPE_CODE_ARRAY
9269 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9 9270 {
d99dcf51
JB
9271 if (!ada_same_array_size_p (type, type2))
9272 error (_("cannot assign arrays of different length"));
9273
9274 if (is_integral_type (TYPE_TARGET_TYPE (type))
9275 && is_integral_type (TYPE_TARGET_TYPE (type2))
9276 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9277 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9278 {
9279 /* Allow implicit promotion of the array elements to
9280 a wider type. */
9281 return ada_promote_array_of_integrals (type, val);
9282 }
9283
9284 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
dda83cd7
SM
9285 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9286 error (_("Incompatible types in assignment"));
04624583 9287 deprecated_set_value_type (val, type);
14f9c5c9 9288 }
d2e4a39e 9289 return val;
14f9c5c9
AS
9290}
9291
4c4b4cd2
PH
9292static struct value *
9293ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9294{
9295 struct value *val;
9296 struct type *type1, *type2;
9297 LONGEST v, v1, v2;
9298
994b9211
AC
9299 arg1 = coerce_ref (arg1);
9300 arg2 = coerce_ref (arg2);
18af8284
JB
9301 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9302 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9303
78134374
SM
9304 if (type1->code () != TYPE_CODE_INT
9305 || type2->code () != TYPE_CODE_INT)
4c4b4cd2
PH
9306 return value_binop (arg1, arg2, op);
9307
76a01679 9308 switch (op)
4c4b4cd2
PH
9309 {
9310 case BINOP_MOD:
9311 case BINOP_DIV:
9312 case BINOP_REM:
9313 break;
9314 default:
9315 return value_binop (arg1, arg2, op);
9316 }
9317
9318 v2 = value_as_long (arg2);
9319 if (v2 == 0)
323e0a4a 9320 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2 9321
c6d940a9 9322 if (type1->is_unsigned () || op == BINOP_MOD)
4c4b4cd2
PH
9323 return value_binop (arg1, arg2, op);
9324
9325 v1 = value_as_long (arg1);
9326 switch (op)
9327 {
9328 case BINOP_DIV:
9329 v = v1 / v2;
76a01679 9330 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
dda83cd7 9331 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9332 break;
9333 case BINOP_REM:
9334 v = v1 % v2;
76a01679 9335 if (v * v1 < 0)
dda83cd7 9336 v -= v2;
4c4b4cd2
PH
9337 break;
9338 default:
9339 /* Should not reach this point. */
9340 v = 0;
9341 }
9342
9343 val = allocate_value (type1);
990a07ab 9344 store_unsigned_integer (value_contents_raw (val),
dda83cd7 9345 TYPE_LENGTH (value_type (val)),
34877895 9346 type_byte_order (type1), v);
4c4b4cd2
PH
9347 return val;
9348}
9349
9350static int
9351ada_value_equal (struct value *arg1, struct value *arg2)
9352{
df407dfe
AC
9353 if (ada_is_direct_array_type (value_type (arg1))
9354 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9355 {
79e8fcaa
JB
9356 struct type *arg1_type, *arg2_type;
9357
f58b38bf 9358 /* Automatically dereference any array reference before
dda83cd7 9359 we attempt to perform the comparison. */
f58b38bf
JB
9360 arg1 = ada_coerce_ref (arg1);
9361 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9362
4c4b4cd2
PH
9363 arg1 = ada_coerce_to_simple_array (arg1);
9364 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9365
9366 arg1_type = ada_check_typedef (value_type (arg1));
9367 arg2_type = ada_check_typedef (value_type (arg2));
9368
78134374 9369 if (arg1_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
9370 || arg2_type->code () != TYPE_CODE_ARRAY)
9371 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9372 /* FIXME: The following works only for types whose
dda83cd7
SM
9373 representations use all bits (no padding or undefined bits)
9374 and do not have user-defined equality. */
79e8fcaa
JB
9375 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9376 && memcmp (value_contents (arg1), value_contents (arg2),
9377 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9378 }
9379 return value_equal (arg1, arg2);
9380}
9381
52ce6436
PH
9382/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9383 component of LHS (a simple array or a record), updating *POS past
9384 the expression, assuming that LHS is contained in CONTAINER. Does
9385 not modify the inferior's memory, nor does it modify LHS (unless
9386 LHS == CONTAINER). */
9387
9388static void
9389assign_component (struct value *container, struct value *lhs, LONGEST index,
9390 struct expression *exp, int *pos)
9391{
9392 struct value *mark = value_mark ();
9393 struct value *elt;
0e2da9f0 9394 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9395
78134374 9396 if (lhs_type->code () == TYPE_CODE_ARRAY)
52ce6436 9397 {
22601c15
UW
9398 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9399 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9400
52ce6436
PH
9401 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9402 }
9403 else
9404 {
9405 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9406 elt = ada_to_fixed_value (elt);
52ce6436
PH
9407 }
9408
9409 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9410 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9411 else
9412 value_assign_to_component (container, elt,
9413 ada_evaluate_subexp (NULL, exp, pos,
9414 EVAL_NORMAL));
9415
9416 value_free_to_mark (mark);
9417}
9418
9419/* Assuming that LHS represents an lvalue having a record or array
9420 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9421 of that aggregate's value to LHS, advancing *POS past the
9422 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9423 lvalue containing LHS (possibly LHS itself). Does not modify
9424 the inferior's memory, nor does it modify the contents of
0963b4bd 9425 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9426
9427static struct value *
9428assign_aggregate (struct value *container,
9429 struct value *lhs, struct expression *exp,
9430 int *pos, enum noside noside)
9431{
9432 struct type *lhs_type;
9433 int n = exp->elts[*pos+1].longconst;
9434 LONGEST low_index, high_index;
52ce6436 9435 int i;
52ce6436
PH
9436
9437 *pos += 3;
9438 if (noside != EVAL_NORMAL)
9439 {
52ce6436
PH
9440 for (i = 0; i < n; i += 1)
9441 ada_evaluate_subexp (NULL, exp, pos, noside);
9442 return container;
9443 }
9444
9445 container = ada_coerce_ref (container);
9446 if (ada_is_direct_array_type (value_type (container)))
9447 container = ada_coerce_to_simple_array (container);
9448 lhs = ada_coerce_ref (lhs);
9449 if (!deprecated_value_modifiable (lhs))
9450 error (_("Left operand of assignment is not a modifiable lvalue."));
9451
0e2da9f0 9452 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9453 if (ada_is_direct_array_type (lhs_type))
9454 {
9455 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 9456 lhs_type = check_typedef (value_type (lhs));
cf88be68
SM
9457 low_index = lhs_type->bounds ()->low.const_val ();
9458 high_index = lhs_type->bounds ()->high.const_val ();
52ce6436 9459 }
78134374 9460 else if (lhs_type->code () == TYPE_CODE_STRUCT)
52ce6436
PH
9461 {
9462 low_index = 0;
9463 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9464 }
9465 else
9466 error (_("Left-hand side must be array or record."));
9467
cf608cc4 9468 std::vector<LONGEST> indices (4);
52ce6436
PH
9469 indices[0] = indices[1] = low_index - 1;
9470 indices[2] = indices[3] = high_index + 1;
52ce6436
PH
9471
9472 for (i = 0; i < n; i += 1)
9473 {
9474 switch (exp->elts[*pos].opcode)
9475 {
1fbf5ada 9476 case OP_CHOICES:
cf608cc4 9477 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
1fbf5ada
JB
9478 low_index, high_index);
9479 break;
9480 case OP_POSITIONAL:
9481 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436 9482 low_index, high_index);
1fbf5ada
JB
9483 break;
9484 case OP_OTHERS:
9485 if (i != n-1)
9486 error (_("Misplaced 'others' clause"));
cf608cc4
TT
9487 aggregate_assign_others (container, lhs, exp, pos, indices,
9488 low_index, high_index);
1fbf5ada
JB
9489 break;
9490 default:
9491 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9492 }
9493 }
9494
9495 return container;
9496}
9497
9498/* Assign into the component of LHS indexed by the OP_POSITIONAL
9499 construct at *POS, updating *POS past the construct, given that
cf608cc4
TT
9500 the positions are relative to lower bound LOW, where HIGH is the
9501 upper bound. Record the position in INDICES. CONTAINER is as for
0963b4bd 9502 assign_aggregate. */
52ce6436
PH
9503static void
9504aggregate_assign_positional (struct value *container,
9505 struct value *lhs, struct expression *exp,
cf608cc4
TT
9506 int *pos, std::vector<LONGEST> &indices,
9507 LONGEST low, LONGEST high)
52ce6436
PH
9508{
9509 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9510
9511 if (ind - 1 == high)
e1d5a0d2 9512 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9513 if (ind <= high)
9514 {
cf608cc4 9515 add_component_interval (ind, ind, indices);
52ce6436
PH
9516 *pos += 3;
9517 assign_component (container, lhs, ind, exp, pos);
9518 }
9519 else
9520 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9521}
9522
9523/* Assign into the components of LHS indexed by the OP_CHOICES
9524 construct at *POS, updating *POS past the construct, given that
9525 the allowable indices are LOW..HIGH. Record the indices assigned
cf608cc4 9526 to in INDICES. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9527static void
9528aggregate_assign_from_choices (struct value *container,
9529 struct value *lhs, struct expression *exp,
cf608cc4
TT
9530 int *pos, std::vector<LONGEST> &indices,
9531 LONGEST low, LONGEST high)
52ce6436
PH
9532{
9533 int j;
9534 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9535 int choice_pos, expr_pc;
9536 int is_array = ada_is_direct_array_type (value_type (lhs));
9537
9538 choice_pos = *pos += 3;
9539
9540 for (j = 0; j < n_choices; j += 1)
9541 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9542 expr_pc = *pos;
9543 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9544
9545 for (j = 0; j < n_choices; j += 1)
9546 {
9547 LONGEST lower, upper;
9548 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9549
52ce6436
PH
9550 if (op == OP_DISCRETE_RANGE)
9551 {
9552 choice_pos += 1;
9553 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9554 EVAL_NORMAL));
9555 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9556 EVAL_NORMAL));
9557 }
9558 else if (is_array)
9559 {
9560 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9561 EVAL_NORMAL));
9562 upper = lower;
9563 }
9564 else
9565 {
9566 int ind;
0d5cff50 9567 const char *name;
5b4ee69b 9568
52ce6436
PH
9569 switch (op)
9570 {
9571 case OP_NAME:
9572 name = &exp->elts[choice_pos + 2].string;
9573 break;
9574 case OP_VAR_VALUE:
987012b8 9575 name = exp->elts[choice_pos + 2].symbol->natural_name ();
52ce6436
PH
9576 break;
9577 default:
9578 error (_("Invalid record component association."));
9579 }
9580 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9581 ind = 0;
9582 if (! find_struct_field (name, value_type (lhs), 0,
9583 NULL, NULL, NULL, NULL, &ind))
9584 error (_("Unknown component name: %s."), name);
9585 lower = upper = ind;
9586 }
9587
9588 if (lower <= upper && (lower < low || upper > high))
9589 error (_("Index in component association out of bounds."));
9590
cf608cc4 9591 add_component_interval (lower, upper, indices);
52ce6436
PH
9592 while (lower <= upper)
9593 {
9594 int pos1;
5b4ee69b 9595
52ce6436
PH
9596 pos1 = expr_pc;
9597 assign_component (container, lhs, lower, exp, &pos1);
9598 lower += 1;
9599 }
9600 }
9601}
9602
9603/* Assign the value of the expression in the OP_OTHERS construct in
9604 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9605 have not been previously assigned. The index intervals already assigned
cf608cc4
TT
9606 are in INDICES. Updates *POS to after the OP_OTHERS clause.
9607 CONTAINER is as for assign_aggregate. */
52ce6436
PH
9608static void
9609aggregate_assign_others (struct value *container,
9610 struct value *lhs, struct expression *exp,
cf608cc4 9611 int *pos, std::vector<LONGEST> &indices,
52ce6436
PH
9612 LONGEST low, LONGEST high)
9613{
9614 int i;
5ce64950 9615 int expr_pc = *pos + 1;
52ce6436 9616
cf608cc4 9617 int num_indices = indices.size ();
52ce6436
PH
9618 for (i = 0; i < num_indices - 2; i += 2)
9619 {
9620 LONGEST ind;
5b4ee69b 9621
52ce6436
PH
9622 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9623 {
5ce64950 9624 int localpos;
5b4ee69b 9625
5ce64950
MS
9626 localpos = expr_pc;
9627 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9628 }
9629 }
9630 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9631}
9632
cf608cc4
TT
9633/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9634 [ INDICES[0] .. INDICES[1] ],... The resulting intervals do not
9635 overlap. */
52ce6436
PH
9636static void
9637add_component_interval (LONGEST low, LONGEST high,
cf608cc4 9638 std::vector<LONGEST> &indices)
52ce6436
PH
9639{
9640 int i, j;
5b4ee69b 9641
cf608cc4
TT
9642 int size = indices.size ();
9643 for (i = 0; i < size; i += 2) {
52ce6436
PH
9644 if (high >= indices[i] && low <= indices[i + 1])
9645 {
9646 int kh;
5b4ee69b 9647
cf608cc4 9648 for (kh = i + 2; kh < size; kh += 2)
52ce6436
PH
9649 if (high < indices[kh])
9650 break;
9651 if (low < indices[i])
9652 indices[i] = low;
9653 indices[i + 1] = indices[kh - 1];
9654 if (high > indices[i + 1])
9655 indices[i + 1] = high;
cf608cc4
TT
9656 memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
9657 indices.resize (kh - i - 2);
52ce6436
PH
9658 return;
9659 }
9660 else if (high < indices[i])
9661 break;
9662 }
9663
cf608cc4 9664 indices.resize (indices.size () + 2);
d4813f10 9665 for (j = indices.size () - 1; j >= i + 2; j -= 1)
52ce6436
PH
9666 indices[j] = indices[j - 2];
9667 indices[i] = low;
9668 indices[i + 1] = high;
9669}
9670
6e48bd2c
JB
9671/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9672 is different. */
9673
9674static struct value *
b7e22850 9675ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
9676{
9677 if (type == ada_check_typedef (value_type (arg2)))
9678 return arg2;
9679
6e48bd2c
JB
9680 return value_cast (type, arg2);
9681}
9682
284614f0
JB
9683/* Evaluating Ada expressions, and printing their result.
9684 ------------------------------------------------------
9685
21649b50
JB
9686 1. Introduction:
9687 ----------------
9688
284614f0
JB
9689 We usually evaluate an Ada expression in order to print its value.
9690 We also evaluate an expression in order to print its type, which
9691 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9692 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9693 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9694 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9695 similar.
9696
9697 Evaluating expressions is a little more complicated for Ada entities
9698 than it is for entities in languages such as C. The main reason for
9699 this is that Ada provides types whose definition might be dynamic.
9700 One example of such types is variant records. Or another example
9701 would be an array whose bounds can only be known at run time.
9702
9703 The following description is a general guide as to what should be
9704 done (and what should NOT be done) in order to evaluate an expression
9705 involving such types, and when. This does not cover how the semantic
9706 information is encoded by GNAT as this is covered separatly. For the
9707 document used as the reference for the GNAT encoding, see exp_dbug.ads
9708 in the GNAT sources.
9709
9710 Ideally, we should embed each part of this description next to its
9711 associated code. Unfortunately, the amount of code is so vast right
9712 now that it's hard to see whether the code handling a particular
9713 situation might be duplicated or not. One day, when the code is
9714 cleaned up, this guide might become redundant with the comments
9715 inserted in the code, and we might want to remove it.
9716
21649b50
JB
9717 2. ``Fixing'' an Entity, the Simple Case:
9718 -----------------------------------------
9719
284614f0
JB
9720 When evaluating Ada expressions, the tricky issue is that they may
9721 reference entities whose type contents and size are not statically
9722 known. Consider for instance a variant record:
9723
9724 type Rec (Empty : Boolean := True) is record
dda83cd7
SM
9725 case Empty is
9726 when True => null;
9727 when False => Value : Integer;
9728 end case;
284614f0
JB
9729 end record;
9730 Yes : Rec := (Empty => False, Value => 1);
9731 No : Rec := (empty => True);
9732
9733 The size and contents of that record depends on the value of the
9734 descriminant (Rec.Empty). At this point, neither the debugging
9735 information nor the associated type structure in GDB are able to
9736 express such dynamic types. So what the debugger does is to create
9737 "fixed" versions of the type that applies to the specific object.
30baf67b 9738 We also informally refer to this operation as "fixing" an object,
284614f0
JB
9739 which means creating its associated fixed type.
9740
9741 Example: when printing the value of variable "Yes" above, its fixed
9742 type would look like this:
9743
9744 type Rec is record
dda83cd7
SM
9745 Empty : Boolean;
9746 Value : Integer;
284614f0
JB
9747 end record;
9748
9749 On the other hand, if we printed the value of "No", its fixed type
9750 would become:
9751
9752 type Rec is record
dda83cd7 9753 Empty : Boolean;
284614f0
JB
9754 end record;
9755
9756 Things become a little more complicated when trying to fix an entity
9757 with a dynamic type that directly contains another dynamic type,
9758 such as an array of variant records, for instance. There are
9759 two possible cases: Arrays, and records.
9760
21649b50
JB
9761 3. ``Fixing'' Arrays:
9762 ---------------------
9763
9764 The type structure in GDB describes an array in terms of its bounds,
9765 and the type of its elements. By design, all elements in the array
9766 have the same type and we cannot represent an array of variant elements
9767 using the current type structure in GDB. When fixing an array,
9768 we cannot fix the array element, as we would potentially need one
9769 fixed type per element of the array. As a result, the best we can do
9770 when fixing an array is to produce an array whose bounds and size
9771 are correct (allowing us to read it from memory), but without having
9772 touched its element type. Fixing each element will be done later,
9773 when (if) necessary.
9774
9775 Arrays are a little simpler to handle than records, because the same
9776 amount of memory is allocated for each element of the array, even if
1b536f04 9777 the amount of space actually used by each element differs from element
21649b50 9778 to element. Consider for instance the following array of type Rec:
284614f0
JB
9779
9780 type Rec_Array is array (1 .. 2) of Rec;
9781
1b536f04
JB
9782 The actual amount of memory occupied by each element might be different
9783 from element to element, depending on the value of their discriminant.
21649b50 9784 But the amount of space reserved for each element in the array remains
1b536f04 9785 fixed regardless. So we simply need to compute that size using
21649b50
JB
9786 the debugging information available, from which we can then determine
9787 the array size (we multiply the number of elements of the array by
9788 the size of each element).
9789
9790 The simplest case is when we have an array of a constrained element
9791 type. For instance, consider the following type declarations:
9792
dda83cd7
SM
9793 type Bounded_String (Max_Size : Integer) is
9794 Length : Integer;
9795 Buffer : String (1 .. Max_Size);
9796 end record;
9797 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
21649b50
JB
9798
9799 In this case, the compiler describes the array as an array of
9800 variable-size elements (identified by its XVS suffix) for which
9801 the size can be read in the parallel XVZ variable.
9802
9803 In the case of an array of an unconstrained element type, the compiler
9804 wraps the array element inside a private PAD type. This type should not
9805 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9806 that we also use the adjective "aligner" in our code to designate
9807 these wrapper types.
9808
1b536f04 9809 In some cases, the size allocated for each element is statically
21649b50
JB
9810 known. In that case, the PAD type already has the correct size,
9811 and the array element should remain unfixed.
9812
9813 But there are cases when this size is not statically known.
9814 For instance, assuming that "Five" is an integer variable:
284614f0 9815
dda83cd7
SM
9816 type Dynamic is array (1 .. Five) of Integer;
9817 type Wrapper (Has_Length : Boolean := False) is record
9818 Data : Dynamic;
9819 case Has_Length is
9820 when True => Length : Integer;
9821 when False => null;
9822 end case;
9823 end record;
9824 type Wrapper_Array is array (1 .. 2) of Wrapper;
284614f0 9825
dda83cd7
SM
9826 Hello : Wrapper_Array := (others => (Has_Length => True,
9827 Data => (others => 17),
9828 Length => 1));
284614f0
JB
9829
9830
9831 The debugging info would describe variable Hello as being an
9832 array of a PAD type. The size of that PAD type is not statically
9833 known, but can be determined using a parallel XVZ variable.
9834 In that case, a copy of the PAD type with the correct size should
9835 be used for the fixed array.
9836
21649b50
JB
9837 3. ``Fixing'' record type objects:
9838 ----------------------------------
9839
9840 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9841 record types. In this case, in order to compute the associated
9842 fixed type, we need to determine the size and offset of each of
9843 its components. This, in turn, requires us to compute the fixed
9844 type of each of these components.
9845
9846 Consider for instance the example:
9847
dda83cd7
SM
9848 type Bounded_String (Max_Size : Natural) is record
9849 Str : String (1 .. Max_Size);
9850 Length : Natural;
9851 end record;
9852 My_String : Bounded_String (Max_Size => 10);
284614f0
JB
9853
9854 In that case, the position of field "Length" depends on the size
9855 of field Str, which itself depends on the value of the Max_Size
21649b50 9856 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9857 we need to fix the type of field Str. Therefore, fixing a variant
9858 record requires us to fix each of its components.
9859
9860 However, if a component does not have a dynamic size, the component
9861 should not be fixed. In particular, fields that use a PAD type
9862 should not fixed. Here is an example where this might happen
9863 (assuming type Rec above):
9864
9865 type Container (Big : Boolean) is record
dda83cd7
SM
9866 First : Rec;
9867 After : Integer;
9868 case Big is
9869 when True => Another : Integer;
9870 when False => null;
9871 end case;
284614f0
JB
9872 end record;
9873 My_Container : Container := (Big => False,
dda83cd7
SM
9874 First => (Empty => True),
9875 After => 42);
284614f0
JB
9876
9877 In that example, the compiler creates a PAD type for component First,
9878 whose size is constant, and then positions the component After just
9879 right after it. The offset of component After is therefore constant
9880 in this case.
9881
9882 The debugger computes the position of each field based on an algorithm
9883 that uses, among other things, the actual position and size of the field
21649b50
JB
9884 preceding it. Let's now imagine that the user is trying to print
9885 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9886 end up computing the offset of field After based on the size of the
9887 fixed version of field First. And since in our example First has
9888 only one actual field, the size of the fixed type is actually smaller
9889 than the amount of space allocated to that field, and thus we would
9890 compute the wrong offset of field After.
9891
21649b50
JB
9892 To make things more complicated, we need to watch out for dynamic
9893 components of variant records (identified by the ___XVL suffix in
9894 the component name). Even if the target type is a PAD type, the size
9895 of that type might not be statically known. So the PAD type needs
9896 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9897 we might end up with the wrong size for our component. This can be
9898 observed with the following type declarations:
284614f0 9899
dda83cd7
SM
9900 type Octal is new Integer range 0 .. 7;
9901 type Octal_Array is array (Positive range <>) of Octal;
9902 pragma Pack (Octal_Array);
284614f0 9903
dda83cd7
SM
9904 type Octal_Buffer (Size : Positive) is record
9905 Buffer : Octal_Array (1 .. Size);
9906 Length : Integer;
9907 end record;
284614f0
JB
9908
9909 In that case, Buffer is a PAD type whose size is unset and needs
9910 to be computed by fixing the unwrapped type.
9911
21649b50
JB
9912 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9913 ----------------------------------------------------------
9914
9915 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9916 thus far, be actually fixed?
9917
9918 The answer is: Only when referencing that element. For instance
9919 when selecting one component of a record, this specific component
9920 should be fixed at that point in time. Or when printing the value
9921 of a record, each component should be fixed before its value gets
9922 printed. Similarly for arrays, the element of the array should be
9923 fixed when printing each element of the array, or when extracting
9924 one element out of that array. On the other hand, fixing should
9925 not be performed on the elements when taking a slice of an array!
9926
31432a67 9927 Note that one of the side effects of miscomputing the offset and
284614f0
JB
9928 size of each field is that we end up also miscomputing the size
9929 of the containing type. This can have adverse results when computing
9930 the value of an entity. GDB fetches the value of an entity based
9931 on the size of its type, and thus a wrong size causes GDB to fetch
9932 the wrong amount of memory. In the case where the computed size is
9933 too small, GDB fetches too little data to print the value of our
31432a67 9934 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
9935 past the buffer containing the data =:-o. */
9936
ced9779b
JB
9937/* Evaluate a subexpression of EXP, at index *POS, and return a value
9938 for that subexpression cast to TO_TYPE. Advance *POS over the
9939 subexpression. */
9940
9941static value *
9942ada_evaluate_subexp_for_cast (expression *exp, int *pos,
9943 enum noside noside, struct type *to_type)
9944{
9945 int pc = *pos;
9946
9947 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
9948 || exp->elts[pc].opcode == OP_VAR_VALUE)
9949 {
9950 (*pos) += 4;
9951
9952 value *val;
9953 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
dda83cd7
SM
9954 {
9955 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9956 return value_zero (to_type, not_lval);
9957
9958 val = evaluate_var_msym_value (noside,
9959 exp->elts[pc + 1].objfile,
9960 exp->elts[pc + 2].msymbol);
9961 }
ced9779b 9962 else
dda83cd7
SM
9963 val = evaluate_var_value (noside,
9964 exp->elts[pc + 1].block,
9965 exp->elts[pc + 2].symbol);
ced9779b
JB
9966
9967 if (noside == EVAL_SKIP)
dda83cd7 9968 return eval_skip_value (exp);
ced9779b
JB
9969
9970 val = ada_value_cast (to_type, val);
9971
9972 /* Follow the Ada language semantics that do not allow taking
9973 an address of the result of a cast (view conversion in Ada). */
9974 if (VALUE_LVAL (val) == lval_memory)
dda83cd7
SM
9975 {
9976 if (value_lazy (val))
9977 value_fetch_lazy (val);
9978 VALUE_LVAL (val) = not_lval;
9979 }
ced9779b
JB
9980 return val;
9981 }
9982
9983 value *val = evaluate_subexp (to_type, exp, pos, noside);
9984 if (noside == EVAL_SKIP)
9985 return eval_skip_value (exp);
9986 return ada_value_cast (to_type, val);
9987}
9988
62d4bd94
TT
9989/* A helper function for TERNOP_IN_RANGE. */
9990
9991static value *
9992eval_ternop_in_range (struct type *expect_type, struct expression *exp,
9993 enum noside noside,
9994 value *arg1, value *arg2, value *arg3)
9995{
9996 if (noside == EVAL_SKIP)
9997 return eval_skip_value (exp);
9998
9999 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10000 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10001 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
10002 return
10003 value_from_longest (type,
10004 (value_less (arg1, arg3)
10005 || value_equal (arg1, arg3))
10006 && (value_less (arg2, arg1)
10007 || value_equal (arg2, arg1)));
10008}
10009
82390ab8
TT
10010/* A helper function for UNOP_NEG. */
10011
7c15d377 10012value *
82390ab8
TT
10013ada_unop_neg (struct type *expect_type,
10014 struct expression *exp,
10015 enum noside noside, enum exp_opcode op,
10016 struct value *arg1)
10017{
10018 if (noside == EVAL_SKIP)
10019 return eval_skip_value (exp);
10020 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10021 return value_neg (arg1);
10022}
10023
7efc87ff
TT
10024/* A helper function for UNOP_IN_RANGE. */
10025
95d49dfb 10026value *
7efc87ff
TT
10027ada_unop_in_range (struct type *expect_type,
10028 struct expression *exp,
10029 enum noside noside, enum exp_opcode op,
10030 struct value *arg1, struct type *type)
10031{
10032 if (noside == EVAL_SKIP)
10033 return eval_skip_value (exp);
10034
10035 struct value *arg2, *arg3;
10036 switch (type->code ())
10037 {
10038 default:
10039 lim_warning (_("Membership test incompletely implemented; "
10040 "always returns true"));
10041 type = language_bool_type (exp->language_defn, exp->gdbarch);
10042 return value_from_longest (type, (LONGEST) 1);
10043
10044 case TYPE_CODE_RANGE:
10045 arg2 = value_from_longest (type,
10046 type->bounds ()->low.const_val ());
10047 arg3 = value_from_longest (type,
10048 type->bounds ()->high.const_val ());
10049 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10050 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10051 type = language_bool_type (exp->language_defn, exp->gdbarch);
10052 return
10053 value_from_longest (type,
10054 (value_less (arg1, arg3)
10055 || value_equal (arg1, arg3))
10056 && (value_less (arg2, arg1)
10057 || value_equal (arg2, arg1)));
10058 }
10059}
10060
020dbabe
TT
10061/* A helper function for OP_ATR_TAG. */
10062
7c15d377 10063value *
020dbabe
TT
10064ada_atr_tag (struct type *expect_type,
10065 struct expression *exp,
10066 enum noside noside, enum exp_opcode op,
10067 struct value *arg1)
10068{
10069 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10070 return value_zero (ada_tag_type (arg1), not_lval);
10071
10072 return ada_value_tag (arg1);
10073}
10074
68c75735
TT
10075/* A helper function for OP_ATR_SIZE. */
10076
7c15d377 10077value *
68c75735
TT
10078ada_atr_size (struct type *expect_type,
10079 struct expression *exp,
10080 enum noside noside, enum exp_opcode op,
10081 struct value *arg1)
10082{
10083 struct type *type = value_type (arg1);
10084
10085 /* If the argument is a reference, then dereference its type, since
10086 the user is really asking for the size of the actual object,
10087 not the size of the pointer. */
10088 if (type->code () == TYPE_CODE_REF)
10089 type = TYPE_TARGET_TYPE (type);
10090
10091 if (noside == EVAL_SKIP)
10092 return eval_skip_value (exp);
10093 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10094 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10095 else
10096 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10097 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10098}
10099
d05e24e6
TT
10100/* A helper function for UNOP_ABS. */
10101
7c15d377 10102value *
d05e24e6
TT
10103ada_abs (struct type *expect_type,
10104 struct expression *exp,
10105 enum noside noside, enum exp_opcode op,
10106 struct value *arg1)
10107{
10108 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10109 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10110 return value_neg (arg1);
10111 else
10112 return arg1;
10113}
10114
faa1dfd7
TT
10115/* A helper function for BINOP_MUL. */
10116
10117static value *
10118ada_mult_binop (struct type *expect_type,
10119 struct expression *exp,
10120 enum noside noside, enum exp_opcode op,
10121 struct value *arg1, struct value *arg2)
10122{
10123 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10124 {
10125 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10126 return value_zero (value_type (arg1), not_lval);
10127 }
10128 else
10129 {
10130 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10131 return ada_value_binop (arg1, arg2, op);
10132 }
10133}
10134
214b13ac
TT
10135/* A helper function for BINOP_EQUAL and BINOP_NOTEQUAL. */
10136
10137static value *
10138ada_equal_binop (struct type *expect_type,
10139 struct expression *exp,
10140 enum noside noside, enum exp_opcode op,
10141 struct value *arg1, struct value *arg2)
10142{
10143 int tem;
10144 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10145 tem = 0;
10146 else
10147 {
10148 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10149 tem = ada_value_equal (arg1, arg2);
10150 }
10151 if (op == BINOP_NOTEQUAL)
10152 tem = !tem;
10153 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
10154 return value_from_longest (type, (LONGEST) tem);
10155}
10156
5ce19db8
TT
10157/* A helper function for TERNOP_SLICE. */
10158
10159static value *
10160ada_ternop_slice (struct expression *exp,
10161 enum noside noside,
10162 struct value *array, struct value *low_bound_val,
10163 struct value *high_bound_val)
10164{
10165 LONGEST low_bound;
10166 LONGEST high_bound;
10167
10168 low_bound_val = coerce_ref (low_bound_val);
10169 high_bound_val = coerce_ref (high_bound_val);
10170 low_bound = value_as_long (low_bound_val);
10171 high_bound = value_as_long (high_bound_val);
10172
10173 /* If this is a reference to an aligner type, then remove all
10174 the aligners. */
10175 if (value_type (array)->code () == TYPE_CODE_REF
10176 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10177 TYPE_TARGET_TYPE (value_type (array)) =
10178 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10179
10180 if (ada_is_any_packed_array_type (value_type (array)))
10181 error (_("cannot slice a packed array"));
10182
10183 /* If this is a reference to an array or an array lvalue,
10184 convert to a pointer. */
10185 if (value_type (array)->code () == TYPE_CODE_REF
10186 || (value_type (array)->code () == TYPE_CODE_ARRAY
10187 && VALUE_LVAL (array) == lval_memory))
10188 array = value_addr (array);
10189
10190 if (noside == EVAL_AVOID_SIDE_EFFECTS
10191 && ada_is_array_descriptor_type (ada_check_typedef
10192 (value_type (array))))
10193 return empty_array (ada_type_of_array (array, 0), low_bound,
10194 high_bound);
10195
10196 array = ada_coerce_to_simple_array_ptr (array);
10197
10198 /* If we have more than one level of pointer indirection,
10199 dereference the value until we get only one level. */
10200 while (value_type (array)->code () == TYPE_CODE_PTR
10201 && (TYPE_TARGET_TYPE (value_type (array))->code ()
10202 == TYPE_CODE_PTR))
10203 array = value_ind (array);
10204
10205 /* Make sure we really do have an array type before going further,
10206 to avoid a SEGV when trying to get the index type or the target
10207 type later down the road if the debug info generated by
10208 the compiler is incorrect or incomplete. */
10209 if (!ada_is_simple_array_type (value_type (array)))
10210 error (_("cannot take slice of non-array"));
10211
10212 if (ada_check_typedef (value_type (array))->code ()
10213 == TYPE_CODE_PTR)
10214 {
10215 struct type *type0 = ada_check_typedef (value_type (array));
10216
10217 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10218 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10219 else
10220 {
10221 struct type *arr_type0 =
10222 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10223
10224 return ada_value_slice_from_ptr (array, arr_type0,
10225 longest_to_int (low_bound),
10226 longest_to_int (high_bound));
10227 }
10228 }
10229 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10230 return array;
10231 else if (high_bound < low_bound)
10232 return empty_array (value_type (array), low_bound, high_bound);
10233 else
10234 return ada_value_slice (array, longest_to_int (low_bound),
10235 longest_to_int (high_bound));
10236}
10237
b467efaa
TT
10238/* A helper function for BINOP_IN_BOUNDS. */
10239
10240static value *
10241ada_binop_in_bounds (struct expression *exp, enum noside noside,
10242 struct value *arg1, struct value *arg2, int n)
10243{
10244 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10245 {
10246 struct type *type = language_bool_type (exp->language_defn,
10247 exp->gdbarch);
10248 return value_zero (type, not_lval);
10249 }
10250
10251 struct type *type = ada_index_type (value_type (arg2), n, "range");
10252 if (!type)
10253 type = value_type (arg1);
10254
10255 value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
10256 arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
10257
10258 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10259 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10260 type = language_bool_type (exp->language_defn, exp->gdbarch);
10261 return value_from_longest (type,
10262 (value_less (arg1, arg3)
10263 || value_equal (arg1, arg3))
10264 && (value_less (arg2, arg1)
10265 || value_equal (arg2, arg1)));
10266}
10267
b84564fc
TT
10268/* A helper function for some attribute operations. */
10269
10270static value *
10271ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
10272 struct value *arg1, struct type *type_arg, int tem)
10273{
10274 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10275 {
10276 if (type_arg == NULL)
10277 type_arg = value_type (arg1);
10278
10279 if (ada_is_constrained_packed_array_type (type_arg))
10280 type_arg = decode_constrained_packed_array_type (type_arg);
10281
10282 if (!discrete_type_p (type_arg))
10283 {
10284 switch (op)
10285 {
10286 default: /* Should never happen. */
10287 error (_("unexpected attribute encountered"));
10288 case OP_ATR_FIRST:
10289 case OP_ATR_LAST:
10290 type_arg = ada_index_type (type_arg, tem,
10291 ada_attribute_name (op));
10292 break;
10293 case OP_ATR_LENGTH:
10294 type_arg = builtin_type (exp->gdbarch)->builtin_int;
10295 break;
10296 }
10297 }
10298
10299 return value_zero (type_arg, not_lval);
10300 }
10301 else if (type_arg == NULL)
10302 {
10303 arg1 = ada_coerce_ref (arg1);
10304
10305 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10306 arg1 = ada_coerce_to_simple_array (arg1);
10307
10308 struct type *type;
10309 if (op == OP_ATR_LENGTH)
10310 type = builtin_type (exp->gdbarch)->builtin_int;
10311 else
10312 {
10313 type = ada_index_type (value_type (arg1), tem,
10314 ada_attribute_name (op));
10315 if (type == NULL)
10316 type = builtin_type (exp->gdbarch)->builtin_int;
10317 }
10318
10319 switch (op)
10320 {
10321 default: /* Should never happen. */
10322 error (_("unexpected attribute encountered"));
10323 case OP_ATR_FIRST:
10324 return value_from_longest
10325 (type, ada_array_bound (arg1, tem, 0));
10326 case OP_ATR_LAST:
10327 return value_from_longest
10328 (type, ada_array_bound (arg1, tem, 1));
10329 case OP_ATR_LENGTH:
10330 return value_from_longest
10331 (type, ada_array_length (arg1, tem));
10332 }
10333 }
10334 else if (discrete_type_p (type_arg))
10335 {
10336 struct type *range_type;
10337 const char *name = ada_type_name (type_arg);
10338
10339 range_type = NULL;
10340 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10341 range_type = to_fixed_range_type (type_arg, NULL);
10342 if (range_type == NULL)
10343 range_type = type_arg;
10344 switch (op)
10345 {
10346 default:
10347 error (_("unexpected attribute encountered"));
10348 case OP_ATR_FIRST:
10349 return value_from_longest
10350 (range_type, ada_discrete_type_low_bound (range_type));
10351 case OP_ATR_LAST:
10352 return value_from_longest
10353 (range_type, ada_discrete_type_high_bound (range_type));
10354 case OP_ATR_LENGTH:
10355 error (_("the 'length attribute applies only to array types"));
10356 }
10357 }
10358 else if (type_arg->code () == TYPE_CODE_FLT)
10359 error (_("unimplemented type attribute"));
10360 else
10361 {
10362 LONGEST low, high;
10363
10364 if (ada_is_constrained_packed_array_type (type_arg))
10365 type_arg = decode_constrained_packed_array_type (type_arg);
10366
10367 struct type *type;
10368 if (op == OP_ATR_LENGTH)
10369 type = builtin_type (exp->gdbarch)->builtin_int;
10370 else
10371 {
10372 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10373 if (type == NULL)
10374 type = builtin_type (exp->gdbarch)->builtin_int;
10375 }
10376
10377 switch (op)
10378 {
10379 default:
10380 error (_("unexpected attribute encountered"));
10381 case OP_ATR_FIRST:
10382 low = ada_array_bound_from_type (type_arg, tem, 0);
10383 return value_from_longest (type, low);
10384 case OP_ATR_LAST:
10385 high = ada_array_bound_from_type (type_arg, tem, 1);
10386 return value_from_longest (type, high);
10387 case OP_ATR_LENGTH:
10388 low = ada_array_bound_from_type (type_arg, tem, 0);
10389 high = ada_array_bound_from_type (type_arg, tem, 1);
10390 return value_from_longest (type, high - low + 1);
10391 }
10392 }
10393}
10394
38dc70cf
TT
10395/* A helper function for OP_ATR_MIN and OP_ATR_MAX. */
10396
10397static struct value *
10398ada_binop_minmax (struct type *expect_type,
10399 struct expression *exp,
10400 enum noside noside, enum exp_opcode op,
10401 struct value *arg1, struct value *arg2)
10402{
10403 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10404 return value_zero (value_type (arg1), not_lval);
10405 else
10406 {
10407 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10408 return value_binop (arg1, arg2,
10409 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10410 }
10411}
10412
dd5fd283
TT
10413/* A helper function for BINOP_EXP. */
10414
10415static struct value *
10416ada_binop_exp (struct type *expect_type,
10417 struct expression *exp,
10418 enum noside noside, enum exp_opcode op,
10419 struct value *arg1, struct value *arg2)
10420{
10421 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10422 return value_zero (value_type (arg1), not_lval);
10423 else
10424 {
10425 /* For integer exponentiation operations,
10426 only promote the first argument. */
10427 if (is_integral_type (value_type (arg2)))
10428 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10429 else
10430 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10431
10432 return value_binop (arg1, arg2, op);
10433 }
10434}
10435
03070ee9
TT
10436namespace expr
10437{
10438
10439value *
10440ada_wrapped_operation::evaluate (struct type *expect_type,
10441 struct expression *exp,
10442 enum noside noside)
10443{
10444 value *result = std::get<0> (m_storage)->evaluate (expect_type, exp, noside);
10445 if (noside == EVAL_NORMAL)
10446 result = unwrap_value (result);
10447
10448 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
10449 then we need to perform the conversion manually, because
10450 evaluate_subexp_standard doesn't do it. This conversion is
10451 necessary in Ada because the different kinds of float/fixed
10452 types in Ada have different representations.
10453
10454 Similarly, we need to perform the conversion from OP_LONG
10455 ourselves. */
10456 if ((opcode () == OP_FLOAT || opcode () == OP_LONG) && expect_type != NULL)
10457 result = ada_value_cast (expect_type, result);
10458
10459 return result;
10460}
10461
42fecb61
TT
10462value *
10463ada_string_operation::evaluate (struct type *expect_type,
10464 struct expression *exp,
10465 enum noside noside)
10466{
10467 value *result = string_operation::evaluate (expect_type, exp, noside);
10468 /* The result type will have code OP_STRING, bashed there from
10469 OP_ARRAY. Bash it back. */
10470 if (value_type (result)->code () == TYPE_CODE_STRING)
10471 value_type (result)->set_code (TYPE_CODE_ARRAY);
10472 return result;
10473}
10474
cc6bd32e
TT
10475value *
10476ada_qual_operation::evaluate (struct type *expect_type,
10477 struct expression *exp,
10478 enum noside noside)
10479{
10480 struct type *type = std::get<1> (m_storage);
10481 return std::get<0> (m_storage)->evaluate (type, exp, noside);
10482}
10483
fc715eb2
TT
10484value *
10485ada_ternop_range_operation::evaluate (struct type *expect_type,
10486 struct expression *exp,
10487 enum noside noside)
10488{
10489 value *arg0 = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
10490 value *arg1 = std::get<1> (m_storage)->evaluate (nullptr, exp, noside);
10491 value *arg2 = std::get<2> (m_storage)->evaluate (nullptr, exp, noside);
10492 return eval_ternop_in_range (expect_type, exp, noside, arg0, arg1, arg2);
10493}
10494
03070ee9
TT
10495}
10496
284614f0
JB
10497/* Implement the evaluate_exp routine in the exp_descriptor structure
10498 for the Ada language. */
10499
52ce6436 10500static struct value *
ebf56fd3 10501ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
dda83cd7 10502 int *pos, enum noside noside)
14f9c5c9
AS
10503{
10504 enum exp_opcode op;
b5385fc0 10505 int tem;
14f9c5c9 10506 int pc;
5ec18f2b 10507 int preeval_pos;
14f9c5c9
AS
10508 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10509 struct type *type;
52ce6436 10510 int nargs, oplen;
d2e4a39e 10511 struct value **argvec;
14f9c5c9 10512
d2e4a39e
AS
10513 pc = *pos;
10514 *pos += 1;
14f9c5c9
AS
10515 op = exp->elts[pc].opcode;
10516
d2e4a39e 10517 switch (op)
14f9c5c9
AS
10518 {
10519 default:
10520 *pos -= 1;
6e48bd2c 10521 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10522
10523 if (noside == EVAL_NORMAL)
10524 arg1 = unwrap_value (arg1);
6e48bd2c 10525
edd079d9 10526 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
dda83cd7
SM
10527 then we need to perform the conversion manually, because
10528 evaluate_subexp_standard doesn't do it. This conversion is
10529 necessary in Ada because the different kinds of float/fixed
10530 types in Ada have different representations.
6e48bd2c 10531
dda83cd7
SM
10532 Similarly, we need to perform the conversion from OP_LONG
10533 ourselves. */
edd079d9 10534 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
dda83cd7 10535 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10536
10537 return arg1;
4c4b4cd2
PH
10538
10539 case OP_STRING:
10540 {
dda83cd7
SM
10541 struct value *result;
10542
10543 *pos -= 1;
10544 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10545 /* The result type will have code OP_STRING, bashed there from
10546 OP_ARRAY. Bash it back. */
10547 if (value_type (result)->code () == TYPE_CODE_STRING)
10548 value_type (result)->set_code (TYPE_CODE_ARRAY);
10549 return result;
4c4b4cd2 10550 }
14f9c5c9
AS
10551
10552 case UNOP_CAST:
10553 (*pos) += 2;
10554 type = exp->elts[pc + 1].type;
ced9779b 10555 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10556
4c4b4cd2
PH
10557 case UNOP_QUAL:
10558 (*pos) += 2;
10559 type = exp->elts[pc + 1].type;
10560 return ada_evaluate_subexp (type, exp, pos, noside);
10561
14f9c5c9 10562 case BINOP_ASSIGN:
fe1fe7ea 10563 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
52ce6436
PH
10564 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10565 {
10566 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10567 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10568 return arg1;
10569 return ada_value_assign (arg1, arg1);
10570 }
003f3813 10571 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
dda83cd7
SM
10572 except if the lhs of our assignment is a convenience variable.
10573 In the case of assigning to a convenience variable, the lhs
10574 should be exactly the result of the evaluation of the rhs. */
003f3813
JB
10575 type = value_type (arg1);
10576 if (VALUE_LVAL (arg1) == lval_internalvar)
dda83cd7 10577 type = NULL;
003f3813 10578 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10579 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10580 return arg1;
f411722c
TT
10581 if (VALUE_LVAL (arg1) == lval_internalvar)
10582 {
10583 /* Nothing. */
10584 }
d2e4a39e 10585 else
dda83cd7 10586 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10587 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10588
10589 case BINOP_ADD:
10590 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10591 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10592 if (noside == EVAL_SKIP)
dda83cd7 10593 goto nosideret;
78134374 10594 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10595 return (value_from_longest
10596 (value_type (arg1),
10597 value_as_long (arg1) + value_as_long (arg2)));
78134374 10598 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10599 return (value_from_longest
10600 (value_type (arg2),
10601 value_as_long (arg1) + value_as_long (arg2)));
b49180ac
TT
10602 /* Preserve the original type for use by the range case below.
10603 We cannot cast the result to a reference type, so if ARG1 is
10604 a reference type, find its underlying type. */
b7789565 10605 type = value_type (arg1);
78134374 10606 while (type->code () == TYPE_CODE_REF)
dda83cd7 10607 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10608 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10609 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10610 /* We need to special-case the result of adding to a range.
10611 This is done for the benefit of "ptype". gdb's Ada support
10612 historically used the LHS to set the result type here, so
10613 preserve this behavior. */
10614 if (type->code () == TYPE_CODE_RANGE)
10615 arg1 = value_cast (type, arg1);
10616 return arg1;
14f9c5c9
AS
10617
10618 case BINOP_SUB:
10619 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10620 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10621 if (noside == EVAL_SKIP)
dda83cd7 10622 goto nosideret;
78134374 10623 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10624 return (value_from_longest
10625 (value_type (arg1),
10626 value_as_long (arg1) - value_as_long (arg2)));
78134374 10627 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10628 return (value_from_longest
10629 (value_type (arg2),
10630 value_as_long (arg1) - value_as_long (arg2)));
b49180ac
TT
10631 /* Preserve the original type for use by the range case below.
10632 We cannot cast the result to a reference type, so if ARG1 is
10633 a reference type, find its underlying type. */
b7789565 10634 type = value_type (arg1);
78134374 10635 while (type->code () == TYPE_CODE_REF)
dda83cd7 10636 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10637 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10638 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10639 /* We need to special-case the result of adding to a range.
10640 This is done for the benefit of "ptype". gdb's Ada support
10641 historically used the LHS to set the result type here, so
10642 preserve this behavior. */
10643 if (type->code () == TYPE_CODE_RANGE)
10644 arg1 = value_cast (type, arg1);
10645 return arg1;
14f9c5c9
AS
10646
10647 case BINOP_MUL:
10648 case BINOP_DIV:
e1578042
JB
10649 case BINOP_REM:
10650 case BINOP_MOD:
fe1fe7ea
SM
10651 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10652 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10653 if (noside == EVAL_SKIP)
dda83cd7 10654 goto nosideret;
faa1dfd7
TT
10655 return ada_mult_binop (expect_type, exp, noside, op,
10656 arg1, arg2);
4c4b4cd2 10657
4c4b4cd2
PH
10658 case BINOP_EQUAL:
10659 case BINOP_NOTEQUAL:
fe1fe7ea 10660 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
df407dfe 10661 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10662 if (noside == EVAL_SKIP)
dda83cd7 10663 goto nosideret;
214b13ac 10664 return ada_equal_binop (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
10665
10666 case UNOP_NEG:
fe1fe7ea 10667 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
82390ab8 10668 return ada_unop_neg (expect_type, exp, noside, op, arg1);
4c4b4cd2 10669
2330c6c6
JB
10670 case BINOP_LOGICAL_AND:
10671 case BINOP_LOGICAL_OR:
10672 case UNOP_LOGICAL_NOT:
000d5124 10673 {
dda83cd7 10674 struct value *val;
000d5124 10675
dda83cd7
SM
10676 *pos -= 1;
10677 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1 10678 type = language_bool_type (exp->language_defn, exp->gdbarch);
dda83cd7 10679 return value_cast (type, val);
000d5124 10680 }
2330c6c6
JB
10681
10682 case BINOP_BITWISE_AND:
10683 case BINOP_BITWISE_IOR:
10684 case BINOP_BITWISE_XOR:
000d5124 10685 {
dda83cd7 10686 struct value *val;
000d5124 10687
fe1fe7ea
SM
10688 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10689 *pos = pc;
dda83cd7 10690 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
000d5124 10691
dda83cd7 10692 return value_cast (value_type (arg1), val);
000d5124 10693 }
2330c6c6 10694
14f9c5c9
AS
10695 case OP_VAR_VALUE:
10696 *pos -= 1;
6799def4 10697
14f9c5c9 10698 if (noside == EVAL_SKIP)
dda83cd7
SM
10699 {
10700 *pos += 4;
10701 goto nosideret;
10702 }
da5c522f
JB
10703
10704 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7
SM
10705 /* Only encountered when an unresolved symbol occurs in a
10706 context other than a function call, in which case, it is
10707 invalid. */
10708 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10709 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10710
10711 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10712 {
10713 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10714 /* Check to see if this is a tagged type. We also need to handle
10715 the case where the type is a reference to a tagged type, but
10716 we have to be careful to exclude pointers to tagged types.
10717 The latter should be shown as usual (as a pointer), whereas
10718 a reference should mostly be transparent to the user. */
10719 if (ada_is_tagged_type (type, 0)
10720 || (type->code () == TYPE_CODE_REF
10721 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10722 {
10723 /* Tagged types are a little special in the fact that the real
10724 type is dynamic and can only be determined by inspecting the
10725 object's tag. This means that we need to get the object's
10726 value first (EVAL_NORMAL) and then extract the actual object
10727 type from its tag.
10728
10729 Note that we cannot skip the final step where we extract
10730 the object type from its tag, because the EVAL_NORMAL phase
10731 results in dynamic components being resolved into fixed ones.
10732 This can cause problems when trying to print the type
10733 description of tagged types whose parent has a dynamic size:
10734 We use the type name of the "_parent" component in order
10735 to print the name of the ancestor type in the type description.
10736 If that component had a dynamic size, the resolution into
10737 a fixed type would result in the loss of that type name,
10738 thus preventing us from printing the name of the ancestor
10739 type in the type description. */
fe1fe7ea 10740 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
0d72a7c3 10741
78134374 10742 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10743 {
10744 struct type *actual_type;
10745
10746 actual_type = type_from_tag (ada_value_tag (arg1));
10747 if (actual_type == NULL)
10748 /* If, for some reason, we were unable to determine
10749 the actual type from the tag, then use the static
10750 approximation that we just computed as a fallback.
10751 This can happen if the debugging information is
10752 incomplete, for instance. */
10753 actual_type = type;
10754 return value_zero (actual_type, not_lval);
10755 }
10756 else
10757 {
10758 /* In the case of a ref, ada_coerce_ref takes care
10759 of determining the actual type. But the evaluation
10760 should return a ref as it should be valid to ask
10761 for its address; so rebuild a ref after coerce. */
10762 arg1 = ada_coerce_ref (arg1);
a65cfae5 10763 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10764 }
10765 }
0c1f74cf 10766
84754697
JB
10767 /* Records and unions for which GNAT encodings have been
10768 generated need to be statically fixed as well.
10769 Otherwise, non-static fixing produces a type where
10770 all dynamic properties are removed, which prevents "ptype"
10771 from being able to completely describe the type.
10772 For instance, a case statement in a variant record would be
10773 replaced by the relevant components based on the actual
10774 value of the discriminants. */
78134374 10775 if ((type->code () == TYPE_CODE_STRUCT
84754697 10776 && dynamic_template_type (type) != NULL)
78134374 10777 || (type->code () == TYPE_CODE_UNION
84754697
JB
10778 && ada_find_parallel_type (type, "___XVU") != NULL))
10779 {
10780 *pos += 4;
10781 return value_zero (to_static_fixed_type (type), not_lval);
10782 }
dda83cd7 10783 }
da5c522f
JB
10784
10785 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10786 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10787
10788 case OP_FUNCALL:
10789 (*pos) += 2;
10790
10791 /* Allocate arg vector, including space for the function to be
dda83cd7 10792 called in argvec[0] and a terminating NULL. */
4c4b4cd2 10793 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10794 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10795
10796 if (exp->elts[*pos].opcode == OP_VAR_VALUE
dda83cd7
SM
10797 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10798 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10799 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2 10800 else
dda83cd7
SM
10801 {
10802 for (tem = 0; tem <= nargs; tem += 1)
fe1fe7ea
SM
10803 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10804 argvec[tem] = 0;
4c4b4cd2 10805
dda83cd7
SM
10806 if (noside == EVAL_SKIP)
10807 goto nosideret;
10808 }
4c4b4cd2 10809
ad82864c
JB
10810 if (ada_is_constrained_packed_array_type
10811 (desc_base_type (value_type (argvec[0]))))
dda83cd7 10812 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 10813 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
dda83cd7
SM
10814 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10815 /* This is a packed array that has already been fixed, and
284614f0
JB
10816 therefore already coerced to a simple array. Nothing further
10817 to do. */
dda83cd7 10818 ;
78134374 10819 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
10820 {
10821 /* Make sure we dereference references so that all the code below
10822 feels like it's really handling the referenced value. Wrapping
10823 types (for alignment) may be there, so make sure we strip them as
10824 well. */
10825 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10826 }
78134374 10827 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
10828 && VALUE_LVAL (argvec[0]) == lval_memory)
10829 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10830
df407dfe 10831 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10832
10833 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10834 them. So, if this is an array typedef (encoding use for array
10835 access types encoded as fat pointers), strip it now. */
78134374 10836 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
10837 type = ada_typedef_target_type (type);
10838
78134374 10839 if (type->code () == TYPE_CODE_PTR)
dda83cd7
SM
10840 {
10841 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10842 {
10843 case TYPE_CODE_FUNC:
10844 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10845 break;
10846 case TYPE_CODE_ARRAY:
10847 break;
10848 case TYPE_CODE_STRUCT:
10849 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10850 argvec[0] = ada_value_ind (argvec[0]);
10851 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10852 break;
10853 default:
10854 error (_("cannot subscript or call something of type `%s'"),
10855 ada_type_name (value_type (argvec[0])));
10856 break;
10857 }
10858 }
4c4b4cd2 10859
78134374 10860 switch (type->code ())
dda83cd7
SM
10861 {
10862 case TYPE_CODE_FUNC:
10863 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10864 {
7022349d
PA
10865 if (TYPE_TARGET_TYPE (type) == NULL)
10866 error_call_unknown_return_type (NULL);
10867 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10868 }
e71585ff
PA
10869 return call_function_by_hand (argvec[0], NULL,
10870 gdb::make_array_view (argvec + 1,
10871 nargs));
c8ea1972
PH
10872 case TYPE_CODE_INTERNAL_FUNCTION:
10873 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10874 /* We don't know anything about what the internal
10875 function might return, but we have to return
10876 something. */
10877 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10878 not_lval);
10879 else
10880 return call_internal_function (exp->gdbarch, exp->language_defn,
10881 argvec[0], nargs, argvec + 1);
10882
dda83cd7
SM
10883 case TYPE_CODE_STRUCT:
10884 {
10885 int arity;
10886
10887 arity = ada_array_arity (type);
10888 type = ada_array_element_type (type, nargs);
10889 if (type == NULL)
10890 error (_("cannot subscript or call a record"));
10891 if (arity != nargs)
10892 error (_("wrong number of subscripts; expecting %d"), arity);
10893 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10894 return value_zero (ada_aligned_type (type), lval_memory);
10895 return
10896 unwrap_value (ada_value_subscript
10897 (argvec[0], nargs, argvec + 1));
10898 }
10899 case TYPE_CODE_ARRAY:
10900 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10901 {
10902 type = ada_array_element_type (type, nargs);
10903 if (type == NULL)
10904 error (_("element type of array unknown"));
10905 else
10906 return value_zero (ada_aligned_type (type), lval_memory);
10907 }
10908 return
10909 unwrap_value (ada_value_subscript
10910 (ada_coerce_to_simple_array (argvec[0]),
10911 nargs, argvec + 1));
10912 case TYPE_CODE_PTR: /* Pointer to array */
10913 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10914 {
deede10c 10915 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
dda83cd7
SM
10916 type = ada_array_element_type (type, nargs);
10917 if (type == NULL)
10918 error (_("element type of array unknown"));
10919 else
10920 return value_zero (ada_aligned_type (type), lval_memory);
10921 }
10922 return
10923 unwrap_value (ada_value_ptr_subscript (argvec[0],
deede10c 10924 nargs, argvec + 1));
4c4b4cd2 10925
dda83cd7
SM
10926 default:
10927 error (_("Attempt to index or call something other than an "
e1d5a0d2 10928 "array or function"));
dda83cd7 10929 }
4c4b4cd2
PH
10930
10931 case TERNOP_SLICE:
10932 {
fe1fe7ea
SM
10933 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10934 struct value *low_bound_val
10935 = evaluate_subexp (nullptr, exp, pos, noside);
10936 struct value *high_bound_val
10937 = evaluate_subexp (nullptr, exp, pos, noside);
dda83cd7
SM
10938
10939 if (noside == EVAL_SKIP)
10940 goto nosideret;
10941
5ce19db8
TT
10942 return ada_ternop_slice (exp, noside, array, low_bound_val,
10943 high_bound_val);
4c4b4cd2 10944 }
14f9c5c9 10945
4c4b4cd2
PH
10946 case UNOP_IN_RANGE:
10947 (*pos) += 2;
fe1fe7ea 10948 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
8008e265 10949 type = check_typedef (exp->elts[pc + 1].type);
7efc87ff 10950 return ada_unop_in_range (expect_type, exp, noside, op, arg1, type);
4c4b4cd2
PH
10951
10952 case BINOP_IN_BOUNDS:
14f9c5c9 10953 (*pos) += 2;
fe1fe7ea
SM
10954 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10955 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10956
4c4b4cd2 10957 if (noside == EVAL_SKIP)
dda83cd7 10958 goto nosideret;
14f9c5c9 10959
4c4b4cd2 10960 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10961
b467efaa 10962 return ada_binop_in_bounds (exp, noside, arg1, arg2, tem);
4c4b4cd2
PH
10963
10964 case TERNOP_IN_RANGE:
fe1fe7ea
SM
10965 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10966 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10967 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10968
62d4bd94 10969 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
4c4b4cd2
PH
10970
10971 case OP_ATR_FIRST:
10972 case OP_ATR_LAST:
10973 case OP_ATR_LENGTH:
10974 {
dda83cd7 10975 struct type *type_arg;
5b4ee69b 10976
dda83cd7
SM
10977 if (exp->elts[*pos].opcode == OP_TYPE)
10978 {
fe1fe7ea
SM
10979 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10980 arg1 = NULL;
dda83cd7
SM
10981 type_arg = check_typedef (exp->elts[pc + 2].type);
10982 }
10983 else
10984 {
fe1fe7ea
SM
10985 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10986 type_arg = NULL;
dda83cd7 10987 }
76a01679 10988
dda83cd7
SM
10989 if (exp->elts[*pos].opcode != OP_LONG)
10990 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10991 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10992 *pos += 4;
76a01679 10993
dda83cd7
SM
10994 if (noside == EVAL_SKIP)
10995 goto nosideret;
1eea4ebd 10996
b84564fc 10997 return ada_unop_atr (exp, noside, op, arg1, type_arg, tem);
14f9c5c9
AS
10998 }
10999
4c4b4cd2 11000 case OP_ATR_TAG:
fe1fe7ea 11001 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11002 if (noside == EVAL_SKIP)
dda83cd7 11003 goto nosideret;
020dbabe 11004 return ada_atr_tag (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
11005
11006 case OP_ATR_MIN:
11007 case OP_ATR_MAX:
fe1fe7ea
SM
11008 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11009 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11010 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11011 if (noside == EVAL_SKIP)
dda83cd7 11012 goto nosideret;
38dc70cf 11013 return ada_binop_minmax (expect_type, exp, noside, op, arg1, arg2);
14f9c5c9 11014
4c4b4cd2
PH
11015 case OP_ATR_MODULUS:
11016 {
dda83cd7 11017 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11018
fe1fe7ea
SM
11019 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11020 if (noside == EVAL_SKIP)
dda83cd7 11021 goto nosideret;
4c4b4cd2 11022
dda83cd7
SM
11023 if (!ada_is_modular_type (type_arg))
11024 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11025
dda83cd7
SM
11026 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11027 ada_modulus (type_arg));
4c4b4cd2
PH
11028 }
11029
11030
11031 case OP_ATR_POS:
fe1fe7ea
SM
11032 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11033 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11034 if (noside == EVAL_SKIP)
dda83cd7 11035 goto nosideret;
3cb382c9
UW
11036 type = builtin_type (exp->gdbarch)->builtin_int;
11037 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11038 return value_zero (type, not_lval);
14f9c5c9 11039 else
3cb382c9 11040 return value_pos_atr (type, arg1);
14f9c5c9 11041
4c4b4cd2 11042 case OP_ATR_SIZE:
fe1fe7ea 11043 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
68c75735 11044 return ada_atr_size (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
11045
11046 case OP_ATR_VAL:
fe1fe7ea
SM
11047 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11048 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11049 type = exp->elts[pc + 2].type;
14f9c5c9 11050 if (noside == EVAL_SKIP)
dda83cd7 11051 goto nosideret;
3848abd6 11052 return ada_val_atr (noside, type, arg1);
4c4b4cd2
PH
11053
11054 case BINOP_EXP:
fe1fe7ea
SM
11055 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11056 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11057 if (noside == EVAL_SKIP)
dda83cd7 11058 goto nosideret;
dd5fd283 11059 return ada_binop_exp (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
11060
11061 case UNOP_PLUS:
fe1fe7ea 11062 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11063 if (noside == EVAL_SKIP)
dda83cd7 11064 goto nosideret;
4c4b4cd2 11065 else
dda83cd7 11066 return arg1;
4c4b4cd2
PH
11067
11068 case UNOP_ABS:
fe1fe7ea 11069 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11070 if (noside == EVAL_SKIP)
dda83cd7 11071 goto nosideret;
d05e24e6 11072 return ada_abs (expect_type, exp, noside, op, arg1);
14f9c5c9
AS
11073
11074 case UNOP_IND:
5ec18f2b 11075 preeval_pos = *pos;
fe1fe7ea 11076 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11077 if (noside == EVAL_SKIP)
dda83cd7 11078 goto nosideret;
df407dfe 11079 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11080 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11081 {
11082 if (ada_is_array_descriptor_type (type))
11083 /* GDB allows dereferencing GNAT array descriptors. */
11084 {
11085 struct type *arrType = ada_type_of_array (arg1, 0);
11086
11087 if (arrType == NULL)
11088 error (_("Attempt to dereference null array pointer."));
11089 return value_at_lazy (arrType, 0);
11090 }
11091 else if (type->code () == TYPE_CODE_PTR
11092 || type->code () == TYPE_CODE_REF
11093 /* In C you can dereference an array to get the 1st elt. */
11094 || type->code () == TYPE_CODE_ARRAY)
11095 {
11096 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11097 only be determined by inspecting the object's tag.
11098 This means that we need to evaluate completely the
11099 expression in order to get its type. */
5ec18f2b 11100
78134374
SM
11101 if ((type->code () == TYPE_CODE_REF
11102 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
11103 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11104 {
fe1fe7ea
SM
11105 arg1
11106 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11107 type = value_type (ada_value_ind (arg1));
11108 }
11109 else
11110 {
11111 type = to_static_fixed_type
11112 (ada_aligned_type
11113 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11114 }
c1b5a1a6 11115 ada_ensure_varsize_limit (type);
dda83cd7
SM
11116 return value_zero (type, lval_memory);
11117 }
11118 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11119 {
11120 /* GDB allows dereferencing an int. */
11121 if (expect_type == NULL)
11122 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11123 lval_memory);
11124 else
11125 {
11126 expect_type =
11127 to_static_fixed_type (ada_aligned_type (expect_type));
11128 return value_zero (expect_type, lval_memory);
11129 }
11130 }
dda83cd7
SM
11131 else
11132 error (_("Attempt to take contents of a non-pointer value."));
11133 }
0963b4bd 11134 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11135 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11136
78134374 11137 if (type->code () == TYPE_CODE_INT)
dda83cd7
SM
11138 /* GDB allows dereferencing an int. If we were given
11139 the expect_type, then use that as the target type.
11140 Otherwise, assume that the target type is an int. */
11141 {
11142 if (expect_type != NULL)
96967637
JB
11143 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11144 arg1));
11145 else
11146 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11147 (CORE_ADDR) value_as_address (arg1));
dda83cd7 11148 }
6b0d7253 11149
4c4b4cd2 11150 if (ada_is_array_descriptor_type (type))
dda83cd7
SM
11151 /* GDB allows dereferencing GNAT array descriptors. */
11152 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11153 else
dda83cd7 11154 return ada_value_ind (arg1);
14f9c5c9
AS
11155
11156 case STRUCTOP_STRUCT:
11157 tem = longest_to_int (exp->elts[pc + 1].longconst);
11158 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11159 preeval_pos = *pos;
fe1fe7ea 11160 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11161 if (noside == EVAL_SKIP)
dda83cd7 11162 goto nosideret;
14f9c5c9 11163 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11164 {
11165 struct type *type1 = value_type (arg1);
5b4ee69b 11166
dda83cd7
SM
11167 if (ada_is_tagged_type (type1, 1))
11168 {
11169 type = ada_lookup_struct_elt_type (type1,
11170 &exp->elts[pc + 2].string,
11171 1, 1);
5ec18f2b
JG
11172
11173 /* If the field is not found, check if it exists in the
11174 extension of this object's type. This means that we
11175 need to evaluate completely the expression. */
11176
dda83cd7 11177 if (type == NULL)
5ec18f2b 11178 {
fe1fe7ea
SM
11179 arg1
11180 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11181 arg1 = ada_value_struct_elt (arg1,
11182 &exp->elts[pc + 2].string,
11183 0);
11184 arg1 = unwrap_value (arg1);
11185 type = value_type (ada_to_fixed_value (arg1));
11186 }
dda83cd7
SM
11187 }
11188 else
11189 type =
11190 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11191 0);
11192
11193 return value_zero (ada_aligned_type (type), lval_memory);
11194 }
14f9c5c9 11195 else
a579cd9a
MW
11196 {
11197 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11198 arg1 = unwrap_value (arg1);
11199 return ada_to_fixed_value (arg1);
11200 }
284614f0 11201
14f9c5c9 11202 case OP_TYPE:
4c4b4cd2 11203 /* The value is not supposed to be used. This is here to make it
dda83cd7 11204 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11205 (*pos) += 2;
11206 if (noside == EVAL_SKIP)
dda83cd7 11207 goto nosideret;
14f9c5c9 11208 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 11209 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11210 else
dda83cd7 11211 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11212
11213 case OP_AGGREGATE:
11214 case OP_CHOICES:
11215 case OP_OTHERS:
11216 case OP_DISCRETE_RANGE:
11217 case OP_POSITIONAL:
11218 case OP_NAME:
11219 if (noside == EVAL_NORMAL)
11220 switch (op)
11221 {
11222 case OP_NAME:
11223 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11224 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11225 case OP_AGGREGATE:
11226 error (_("Aggregates only allowed on the right of an assignment"));
11227 default:
0963b4bd
MS
11228 internal_error (__FILE__, __LINE__,
11229 _("aggregate apparently mangled"));
52ce6436
PH
11230 }
11231
11232 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11233 *pos += oplen - 1;
11234 for (tem = 0; tem < nargs; tem += 1)
11235 ada_evaluate_subexp (NULL, exp, pos, noside);
11236 goto nosideret;
14f9c5c9
AS
11237 }
11238
11239nosideret:
ced9779b 11240 return eval_skip_value (exp);
14f9c5c9 11241}
14f9c5c9 11242\f
d2e4a39e 11243
4c4b4cd2
PH
11244/* Return non-zero iff TYPE represents a System.Address type. */
11245
11246int
11247ada_is_system_address_type (struct type *type)
11248{
7d93a1e0 11249 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11250}
11251
14f9c5c9 11252\f
d2e4a39e 11253
dda83cd7 11254 /* Range types */
14f9c5c9
AS
11255
11256/* Scan STR beginning at position K for a discriminant name, and
11257 return the value of that discriminant field of DVAL in *PX. If
11258 PNEW_K is not null, put the position of the character beyond the
11259 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11260 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11261
11262static int
108d56a4 11263scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
dda83cd7 11264 int *pnew_k)
14f9c5c9 11265{
5f9febe0 11266 static std::string storage;
5da1a4d3 11267 const char *pstart, *pend, *bound;
d2e4a39e 11268 struct value *bound_val;
14f9c5c9
AS
11269
11270 if (dval == NULL || str == NULL || str[k] == '\0')
11271 return 0;
11272
5da1a4d3
SM
11273 pstart = str + k;
11274 pend = strstr (pstart, "__");
14f9c5c9
AS
11275 if (pend == NULL)
11276 {
5da1a4d3 11277 bound = pstart;
14f9c5c9
AS
11278 k += strlen (bound);
11279 }
d2e4a39e 11280 else
14f9c5c9 11281 {
5da1a4d3
SM
11282 int len = pend - pstart;
11283
11284 /* Strip __ and beyond. */
5f9febe0
TT
11285 storage = std::string (pstart, len);
11286 bound = storage.c_str ();
d2e4a39e 11287 k = pend - str;
14f9c5c9 11288 }
d2e4a39e 11289
df407dfe 11290 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11291 if (bound_val == NULL)
11292 return 0;
11293
11294 *px = value_as_long (bound_val);
11295 if (pnew_k != NULL)
11296 *pnew_k = k;
11297 return 1;
11298}
11299
25a1127b
TT
11300/* Value of variable named NAME. Only exact matches are considered.
11301 If no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11302 otherwise causes an error with message ERR_MSG. */
11303
d2e4a39e 11304static struct value *
edb0c9cb 11305get_var_value (const char *name, const char *err_msg)
14f9c5c9 11306{
25a1127b
TT
11307 std::string quoted_name = add_angle_brackets (name);
11308
11309 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
14f9c5c9 11310
d1183b06
TT
11311 std::vector<struct block_symbol> syms
11312 = ada_lookup_symbol_list_worker (lookup_name,
11313 get_selected_block (0),
11314 VAR_DOMAIN, 1);
14f9c5c9 11315
d1183b06 11316 if (syms.size () != 1)
14f9c5c9
AS
11317 {
11318 if (err_msg == NULL)
dda83cd7 11319 return 0;
14f9c5c9 11320 else
dda83cd7 11321 error (("%s"), err_msg);
14f9c5c9
AS
11322 }
11323
54d343a2 11324 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11325}
d2e4a39e 11326
edb0c9cb
PA
11327/* Value of integer variable named NAME in the current environment.
11328 If no such variable is found, returns false. Otherwise, sets VALUE
11329 to the variable's value and returns true. */
4c4b4cd2 11330
edb0c9cb
PA
11331bool
11332get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11333{
4c4b4cd2 11334 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11335
14f9c5c9 11336 if (var_val == 0)
edb0c9cb
PA
11337 return false;
11338
11339 value = value_as_long (var_val);
11340 return true;
14f9c5c9 11341}
d2e4a39e 11342
14f9c5c9
AS
11343
11344/* Return a range type whose base type is that of the range type named
11345 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11346 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11347 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11348 corresponding range type from debug information; fall back to using it
11349 if symbol lookup fails. If a new type must be created, allocate it
11350 like ORIG_TYPE was. The bounds information, in general, is encoded
11351 in NAME, the base type given in the named range type. */
14f9c5c9 11352
d2e4a39e 11353static struct type *
28c85d6c 11354to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11355{
0d5cff50 11356 const char *name;
14f9c5c9 11357 struct type *base_type;
108d56a4 11358 const char *subtype_info;
14f9c5c9 11359
28c85d6c 11360 gdb_assert (raw_type != NULL);
7d93a1e0 11361 gdb_assert (raw_type->name () != NULL);
dddfab26 11362
78134374 11363 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11364 base_type = TYPE_TARGET_TYPE (raw_type);
11365 else
11366 base_type = raw_type;
11367
7d93a1e0 11368 name = raw_type->name ();
14f9c5c9
AS
11369 subtype_info = strstr (name, "___XD");
11370 if (subtype_info == NULL)
690cc4eb 11371 {
43bbcdc2
PH
11372 LONGEST L = ada_discrete_type_low_bound (raw_type);
11373 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11374
690cc4eb
PH
11375 if (L < INT_MIN || U > INT_MAX)
11376 return raw_type;
11377 else
0c9c3474
SA
11378 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11379 L, U);
690cc4eb 11380 }
14f9c5c9
AS
11381 else
11382 {
14f9c5c9
AS
11383 int prefix_len = subtype_info - name;
11384 LONGEST L, U;
11385 struct type *type;
108d56a4 11386 const char *bounds_str;
14f9c5c9
AS
11387 int n;
11388
14f9c5c9
AS
11389 subtype_info += 5;
11390 bounds_str = strchr (subtype_info, '_');
11391 n = 1;
11392
d2e4a39e 11393 if (*subtype_info == 'L')
dda83cd7
SM
11394 {
11395 if (!ada_scan_number (bounds_str, n, &L, &n)
11396 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11397 return raw_type;
11398 if (bounds_str[n] == '_')
11399 n += 2;
11400 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11401 n += 1;
11402 subtype_info += 1;
11403 }
d2e4a39e 11404 else
dda83cd7 11405 {
5f9febe0
TT
11406 std::string name_buf = std::string (name, prefix_len) + "___L";
11407 if (!get_int_var_value (name_buf.c_str (), L))
dda83cd7
SM
11408 {
11409 lim_warning (_("Unknown lower bound, using 1."));
11410 L = 1;
11411 }
11412 }
14f9c5c9 11413
d2e4a39e 11414 if (*subtype_info == 'U')
dda83cd7
SM
11415 {
11416 if (!ada_scan_number (bounds_str, n, &U, &n)
11417 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11418 return raw_type;
11419 }
d2e4a39e 11420 else
dda83cd7 11421 {
5f9febe0
TT
11422 std::string name_buf = std::string (name, prefix_len) + "___U";
11423 if (!get_int_var_value (name_buf.c_str (), U))
dda83cd7
SM
11424 {
11425 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11426 U = L;
11427 }
11428 }
14f9c5c9 11429
0c9c3474
SA
11430 type = create_static_range_type (alloc_type_copy (raw_type),
11431 base_type, L, U);
f5a91472 11432 /* create_static_range_type alters the resulting type's length
dda83cd7
SM
11433 to match the size of the base_type, which is not what we want.
11434 Set it back to the original range type's length. */
f5a91472 11435 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11436 type->set_name (name);
14f9c5c9
AS
11437 return type;
11438 }
11439}
11440
4c4b4cd2
PH
11441/* True iff NAME is the name of a range type. */
11442
14f9c5c9 11443int
d2e4a39e 11444ada_is_range_type_name (const char *name)
14f9c5c9
AS
11445{
11446 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11447}
14f9c5c9 11448\f
d2e4a39e 11449
dda83cd7 11450 /* Modular types */
4c4b4cd2
PH
11451
11452/* True iff TYPE is an Ada modular type. */
14f9c5c9 11453
14f9c5c9 11454int
d2e4a39e 11455ada_is_modular_type (struct type *type)
14f9c5c9 11456{
18af8284 11457 struct type *subranged_type = get_base_type (type);
14f9c5c9 11458
78134374 11459 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
dda83cd7
SM
11460 && subranged_type->code () == TYPE_CODE_INT
11461 && subranged_type->is_unsigned ());
14f9c5c9
AS
11462}
11463
4c4b4cd2
PH
11464/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11465
61ee279c 11466ULONGEST
0056e4d5 11467ada_modulus (struct type *type)
14f9c5c9 11468{
5e500d33
SM
11469 const dynamic_prop &high = type->bounds ()->high;
11470
11471 if (high.kind () == PROP_CONST)
11472 return (ULONGEST) high.const_val () + 1;
11473
11474 /* If TYPE is unresolved, the high bound might be a location list. Return
11475 0, for lack of a better value to return. */
11476 return 0;
14f9c5c9 11477}
d2e4a39e 11478\f
f7f9143b
JB
11479
11480/* Ada exception catchpoint support:
11481 ---------------------------------
11482
11483 We support 3 kinds of exception catchpoints:
11484 . catchpoints on Ada exceptions
11485 . catchpoints on unhandled Ada exceptions
11486 . catchpoints on failed assertions
11487
11488 Exceptions raised during failed assertions, or unhandled exceptions
11489 could perfectly be caught with the general catchpoint on Ada exceptions.
11490 However, we can easily differentiate these two special cases, and having
11491 the option to distinguish these two cases from the rest can be useful
11492 to zero-in on certain situations.
11493
11494 Exception catchpoints are a specialized form of breakpoint,
11495 since they rely on inserting breakpoints inside known routines
11496 of the GNAT runtime. The implementation therefore uses a standard
11497 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11498 of breakpoint_ops.
11499
0259addd
JB
11500 Support in the runtime for exception catchpoints have been changed
11501 a few times already, and these changes affect the implementation
11502 of these catchpoints. In order to be able to support several
11503 variants of the runtime, we use a sniffer that will determine
28010a5d 11504 the runtime variant used by the program being debugged. */
f7f9143b 11505
82eacd52
JB
11506/* Ada's standard exceptions.
11507
11508 The Ada 83 standard also defined Numeric_Error. But there so many
11509 situations where it was unclear from the Ada 83 Reference Manual
11510 (RM) whether Constraint_Error or Numeric_Error should be raised,
11511 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11512 Interpretation saying that anytime the RM says that Numeric_Error
11513 should be raised, the implementation may raise Constraint_Error.
11514 Ada 95 went one step further and pretty much removed Numeric_Error
11515 from the list of standard exceptions (it made it a renaming of
11516 Constraint_Error, to help preserve compatibility when compiling
11517 an Ada83 compiler). As such, we do not include Numeric_Error from
11518 this list of standard exceptions. */
3d0b0fa3 11519
27087b7f 11520static const char * const standard_exc[] = {
3d0b0fa3
JB
11521 "constraint_error",
11522 "program_error",
11523 "storage_error",
11524 "tasking_error"
11525};
11526
0259addd
JB
11527typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11528
11529/* A structure that describes how to support exception catchpoints
11530 for a given executable. */
11531
11532struct exception_support_info
11533{
11534 /* The name of the symbol to break on in order to insert
11535 a catchpoint on exceptions. */
11536 const char *catch_exception_sym;
11537
11538 /* The name of the symbol to break on in order to insert
11539 a catchpoint on unhandled exceptions. */
11540 const char *catch_exception_unhandled_sym;
11541
11542 /* The name of the symbol to break on in order to insert
11543 a catchpoint on failed assertions. */
11544 const char *catch_assert_sym;
11545
9f757bf7
XR
11546 /* The name of the symbol to break on in order to insert
11547 a catchpoint on exception handling. */
11548 const char *catch_handlers_sym;
11549
0259addd
JB
11550 /* Assuming that the inferior just triggered an unhandled exception
11551 catchpoint, this function is responsible for returning the address
11552 in inferior memory where the name of that exception is stored.
11553 Return zero if the address could not be computed. */
11554 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11555};
11556
11557static CORE_ADDR ada_unhandled_exception_name_addr (void);
11558static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11559
11560/* The following exception support info structure describes how to
11561 implement exception catchpoints with the latest version of the
ca683e3a 11562 Ada runtime (as of 2019-08-??). */
0259addd
JB
11563
11564static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11565{
11566 "__gnat_debug_raise_exception", /* catch_exception_sym */
11567 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11568 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11569 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11570 ada_unhandled_exception_name_addr
11571};
11572
11573/* The following exception support info structure describes how to
11574 implement exception catchpoints with an earlier version of the
11575 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11576
11577static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11578{
11579 "__gnat_debug_raise_exception", /* catch_exception_sym */
11580 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11581 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11582 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11583 ada_unhandled_exception_name_addr
11584};
11585
11586/* The following exception support info structure describes how to
11587 implement exception catchpoints with a slightly older version
11588 of the Ada runtime. */
11589
11590static const struct exception_support_info exception_support_info_fallback =
11591{
11592 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11593 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11594 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11595 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11596 ada_unhandled_exception_name_addr_from_raise
11597};
11598
f17011e0
JB
11599/* Return nonzero if we can detect the exception support routines
11600 described in EINFO.
11601
11602 This function errors out if an abnormal situation is detected
11603 (for instance, if we find the exception support routines, but
11604 that support is found to be incomplete). */
11605
11606static int
11607ada_has_this_exception_support (const struct exception_support_info *einfo)
11608{
11609 struct symbol *sym;
11610
11611 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11612 that should be compiled with debugging information. As a result, we
11613 expect to find that symbol in the symtabs. */
11614
11615 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11616 if (sym == NULL)
a6af7abe
JB
11617 {
11618 /* Perhaps we did not find our symbol because the Ada runtime was
11619 compiled without debugging info, or simply stripped of it.
11620 It happens on some GNU/Linux distributions for instance, where
11621 users have to install a separate debug package in order to get
11622 the runtime's debugging info. In that situation, let the user
11623 know why we cannot insert an Ada exception catchpoint.
11624
11625 Note: Just for the purpose of inserting our Ada exception
11626 catchpoint, we could rely purely on the associated minimal symbol.
11627 But we would be operating in degraded mode anyway, since we are
11628 still lacking the debugging info needed later on to extract
11629 the name of the exception being raised (this name is printed in
11630 the catchpoint message, and is also used when trying to catch
11631 a specific exception). We do not handle this case for now. */
3b7344d5 11632 struct bound_minimal_symbol msym
1c8e84b0
JB
11633 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11634
3b7344d5 11635 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11636 error (_("Your Ada runtime appears to be missing some debugging "
11637 "information.\nCannot insert Ada exception catchpoint "
11638 "in this configuration."));
11639
11640 return 0;
11641 }
f17011e0
JB
11642
11643 /* Make sure that the symbol we found corresponds to a function. */
11644
11645 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11646 {
11647 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11648 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11649 return 0;
11650 }
11651
11652 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11653 if (sym == NULL)
11654 {
11655 struct bound_minimal_symbol msym
11656 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11657
11658 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11659 error (_("Your Ada runtime appears to be missing some debugging "
11660 "information.\nCannot insert Ada exception catchpoint "
11661 "in this configuration."));
11662
11663 return 0;
11664 }
11665
11666 /* Make sure that the symbol we found corresponds to a function. */
11667
11668 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11669 {
11670 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11671 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11672 return 0;
11673 }
f17011e0
JB
11674
11675 return 1;
11676}
11677
0259addd
JB
11678/* Inspect the Ada runtime and determine which exception info structure
11679 should be used to provide support for exception catchpoints.
11680
3eecfa55
JB
11681 This function will always set the per-inferior exception_info,
11682 or raise an error. */
0259addd
JB
11683
11684static void
11685ada_exception_support_info_sniffer (void)
11686{
3eecfa55 11687 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11688
11689 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11690 if (data->exception_info != NULL)
0259addd
JB
11691 return;
11692
11693 /* Check the latest (default) exception support info. */
f17011e0 11694 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11695 {
3eecfa55 11696 data->exception_info = &default_exception_support_info;
0259addd
JB
11697 return;
11698 }
11699
ca683e3a
AO
11700 /* Try the v0 exception suport info. */
11701 if (ada_has_this_exception_support (&exception_support_info_v0))
11702 {
11703 data->exception_info = &exception_support_info_v0;
11704 return;
11705 }
11706
0259addd 11707 /* Try our fallback exception suport info. */
f17011e0 11708 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11709 {
3eecfa55 11710 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11711 return;
11712 }
11713
11714 /* Sometimes, it is normal for us to not be able to find the routine
11715 we are looking for. This happens when the program is linked with
11716 the shared version of the GNAT runtime, and the program has not been
11717 started yet. Inform the user of these two possible causes if
11718 applicable. */
11719
ccefe4c4 11720 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11721 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11722
11723 /* If the symbol does not exist, then check that the program is
11724 already started, to make sure that shared libraries have been
11725 loaded. If it is not started, this may mean that the symbol is
11726 in a shared library. */
11727
e99b03dc 11728 if (inferior_ptid.pid () == 0)
0259addd
JB
11729 error (_("Unable to insert catchpoint. Try to start the program first."));
11730
11731 /* At this point, we know that we are debugging an Ada program and
11732 that the inferior has been started, but we still are not able to
0963b4bd 11733 find the run-time symbols. That can mean that we are in
0259addd
JB
11734 configurable run time mode, or that a-except as been optimized
11735 out by the linker... In any case, at this point it is not worth
11736 supporting this feature. */
11737
7dda8cff 11738 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11739}
11740
f7f9143b
JB
11741/* True iff FRAME is very likely to be that of a function that is
11742 part of the runtime system. This is all very heuristic, but is
11743 intended to be used as advice as to what frames are uninteresting
11744 to most users. */
11745
11746static int
11747is_known_support_routine (struct frame_info *frame)
11748{
692465f1 11749 enum language func_lang;
f7f9143b 11750 int i;
f35a17b5 11751 const char *fullname;
f7f9143b 11752
4ed6b5be
JB
11753 /* If this code does not have any debugging information (no symtab),
11754 This cannot be any user code. */
f7f9143b 11755
51abb421 11756 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11757 if (sal.symtab == NULL)
11758 return 1;
11759
4ed6b5be
JB
11760 /* If there is a symtab, but the associated source file cannot be
11761 located, then assume this is not user code: Selecting a frame
11762 for which we cannot display the code would not be very helpful
11763 for the user. This should also take care of case such as VxWorks
11764 where the kernel has some debugging info provided for a few units. */
f7f9143b 11765
f35a17b5
JK
11766 fullname = symtab_to_fullname (sal.symtab);
11767 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11768 return 1;
11769
85102364 11770 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
11771 We also check the name of the objfile against the name of some
11772 known system libraries that sometimes come with debugging info
11773 too. */
11774
f7f9143b
JB
11775 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11776 {
11777 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11778 if (re_exec (lbasename (sal.symtab->filename)))
dda83cd7 11779 return 1;
eb822aa6 11780 if (SYMTAB_OBJFILE (sal.symtab) != NULL
dda83cd7
SM
11781 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11782 return 1;
f7f9143b
JB
11783 }
11784
4ed6b5be 11785 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11786
c6dc63a1
TT
11787 gdb::unique_xmalloc_ptr<char> func_name
11788 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
11789 if (func_name == NULL)
11790 return 1;
11791
11792 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11793 {
11794 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
11795 if (re_exec (func_name.get ()))
11796 return 1;
f7f9143b
JB
11797 }
11798
11799 return 0;
11800}
11801
11802/* Find the first frame that contains debugging information and that is not
11803 part of the Ada run-time, starting from FI and moving upward. */
11804
0ef643c8 11805void
f7f9143b
JB
11806ada_find_printable_frame (struct frame_info *fi)
11807{
11808 for (; fi != NULL; fi = get_prev_frame (fi))
11809 {
11810 if (!is_known_support_routine (fi))
dda83cd7
SM
11811 {
11812 select_frame (fi);
11813 break;
11814 }
f7f9143b
JB
11815 }
11816
11817}
11818
11819/* Assuming that the inferior just triggered an unhandled exception
11820 catchpoint, return the address in inferior memory where the name
11821 of the exception is stored.
11822
11823 Return zero if the address could not be computed. */
11824
11825static CORE_ADDR
11826ada_unhandled_exception_name_addr (void)
0259addd
JB
11827{
11828 return parse_and_eval_address ("e.full_name");
11829}
11830
11831/* Same as ada_unhandled_exception_name_addr, except that this function
11832 should be used when the inferior uses an older version of the runtime,
11833 where the exception name needs to be extracted from a specific frame
11834 several frames up in the callstack. */
11835
11836static CORE_ADDR
11837ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11838{
11839 int frame_level;
11840 struct frame_info *fi;
3eecfa55 11841 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
11842
11843 /* To determine the name of this exception, we need to select
11844 the frame corresponding to RAISE_SYM_NAME. This frame is
11845 at least 3 levels up, so we simply skip the first 3 frames
11846 without checking the name of their associated function. */
11847 fi = get_current_frame ();
11848 for (frame_level = 0; frame_level < 3; frame_level += 1)
11849 if (fi != NULL)
11850 fi = get_prev_frame (fi);
11851
11852 while (fi != NULL)
11853 {
692465f1
JB
11854 enum language func_lang;
11855
c6dc63a1
TT
11856 gdb::unique_xmalloc_ptr<char> func_name
11857 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
11858 if (func_name != NULL)
11859 {
dda83cd7 11860 if (strcmp (func_name.get (),
55b87a52
KS
11861 data->exception_info->catch_exception_sym) == 0)
11862 break; /* We found the frame we were looking for... */
55b87a52 11863 }
fb44b1a7 11864 fi = get_prev_frame (fi);
f7f9143b
JB
11865 }
11866
11867 if (fi == NULL)
11868 return 0;
11869
11870 select_frame (fi);
11871 return parse_and_eval_address ("id.full_name");
11872}
11873
11874/* Assuming the inferior just triggered an Ada exception catchpoint
11875 (of any type), return the address in inferior memory where the name
11876 of the exception is stored, if applicable.
11877
45db7c09
PA
11878 Assumes the selected frame is the current frame.
11879
f7f9143b
JB
11880 Return zero if the address could not be computed, or if not relevant. */
11881
11882static CORE_ADDR
761269c8 11883ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
dda83cd7 11884 struct breakpoint *b)
f7f9143b 11885{
3eecfa55
JB
11886 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11887
f7f9143b
JB
11888 switch (ex)
11889 {
761269c8 11890 case ada_catch_exception:
dda83cd7
SM
11891 return (parse_and_eval_address ("e.full_name"));
11892 break;
f7f9143b 11893
761269c8 11894 case ada_catch_exception_unhandled:
dda83cd7
SM
11895 return data->exception_info->unhandled_exception_name_addr ();
11896 break;
9f757bf7
XR
11897
11898 case ada_catch_handlers:
dda83cd7 11899 return 0; /* The runtimes does not provide access to the exception
9f757bf7 11900 name. */
dda83cd7 11901 break;
9f757bf7 11902
761269c8 11903 case ada_catch_assert:
dda83cd7
SM
11904 return 0; /* Exception name is not relevant in this case. */
11905 break;
f7f9143b
JB
11906
11907 default:
dda83cd7
SM
11908 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11909 break;
f7f9143b
JB
11910 }
11911
11912 return 0; /* Should never be reached. */
11913}
11914
e547c119
JB
11915/* Assuming the inferior is stopped at an exception catchpoint,
11916 return the message which was associated to the exception, if
11917 available. Return NULL if the message could not be retrieved.
11918
e547c119
JB
11919 Note: The exception message can be associated to an exception
11920 either through the use of the Raise_Exception function, or
11921 more simply (Ada 2005 and later), via:
11922
11923 raise Exception_Name with "exception message";
11924
11925 */
11926
6f46ac85 11927static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11928ada_exception_message_1 (void)
11929{
11930 struct value *e_msg_val;
e547c119 11931 int e_msg_len;
e547c119
JB
11932
11933 /* For runtimes that support this feature, the exception message
11934 is passed as an unbounded string argument called "message". */
11935 e_msg_val = parse_and_eval ("message");
11936 if (e_msg_val == NULL)
11937 return NULL; /* Exception message not supported. */
11938
11939 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11940 gdb_assert (e_msg_val != NULL);
11941 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11942
11943 /* If the message string is empty, then treat it as if there was
11944 no exception message. */
11945 if (e_msg_len <= 0)
11946 return NULL;
11947
15f3b077
TT
11948 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11949 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11950 e_msg_len);
11951 e_msg.get ()[e_msg_len] = '\0';
11952
11953 return e_msg;
e547c119
JB
11954}
11955
11956/* Same as ada_exception_message_1, except that all exceptions are
11957 contained here (returning NULL instead). */
11958
6f46ac85 11959static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11960ada_exception_message (void)
11961{
6f46ac85 11962 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 11963
a70b8144 11964 try
e547c119
JB
11965 {
11966 e_msg = ada_exception_message_1 ();
11967 }
230d2906 11968 catch (const gdb_exception_error &e)
e547c119 11969 {
6f46ac85 11970 e_msg.reset (nullptr);
e547c119 11971 }
e547c119
JB
11972
11973 return e_msg;
11974}
11975
f7f9143b
JB
11976/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11977 any error that ada_exception_name_addr_1 might cause to be thrown.
11978 When an error is intercepted, a warning with the error message is printed,
11979 and zero is returned. */
11980
11981static CORE_ADDR
761269c8 11982ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
dda83cd7 11983 struct breakpoint *b)
f7f9143b 11984{
f7f9143b
JB
11985 CORE_ADDR result = 0;
11986
a70b8144 11987 try
f7f9143b
JB
11988 {
11989 result = ada_exception_name_addr_1 (ex, b);
11990 }
11991
230d2906 11992 catch (const gdb_exception_error &e)
f7f9143b 11993 {
3d6e9d23 11994 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
11995 return 0;
11996 }
11997
11998 return result;
11999}
12000
cb7de75e 12001static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
12002 (const char *excep_string,
12003 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
12004
12005/* Ada catchpoints.
12006
12007 In the case of catchpoints on Ada exceptions, the catchpoint will
12008 stop the target on every exception the program throws. When a user
12009 specifies the name of a specific exception, we translate this
12010 request into a condition expression (in text form), and then parse
12011 it into an expression stored in each of the catchpoint's locations.
12012 We then use this condition to check whether the exception that was
12013 raised is the one the user is interested in. If not, then the
12014 target is resumed again. We store the name of the requested
12015 exception, in order to be able to re-set the condition expression
12016 when symbols change. */
12017
12018/* An instance of this type is used to represent an Ada catchpoint
5625a286 12019 breakpoint location. */
28010a5d 12020
5625a286 12021class ada_catchpoint_location : public bp_location
28010a5d 12022{
5625a286 12023public:
5f486660 12024 ada_catchpoint_location (breakpoint *owner)
f06f1252 12025 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 12026 {}
28010a5d
PA
12027
12028 /* The condition that checks whether the exception that was raised
12029 is the specific exception the user specified on catchpoint
12030 creation. */
4d01a485 12031 expression_up excep_cond_expr;
28010a5d
PA
12032};
12033
c1fc2657 12034/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 12035
c1fc2657 12036struct ada_catchpoint : public breakpoint
28010a5d 12037{
37f6a7f4
TT
12038 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
12039 : m_kind (kind)
12040 {
12041 }
12042
28010a5d 12043 /* The name of the specific exception the user specified. */
bc18fbb5 12044 std::string excep_string;
37f6a7f4
TT
12045
12046 /* What kind of catchpoint this is. */
12047 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
12048};
12049
12050/* Parse the exception condition string in the context of each of the
12051 catchpoint's locations, and store them for later evaluation. */
12052
12053static void
9f757bf7 12054create_excep_cond_exprs (struct ada_catchpoint *c,
dda83cd7 12055 enum ada_exception_catchpoint_kind ex)
28010a5d 12056{
fccf9de1
TT
12057 struct bp_location *bl;
12058
28010a5d 12059 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12060 if (c->excep_string.empty ())
28010a5d
PA
12061 return;
12062
12063 /* Same if there are no locations... */
c1fc2657 12064 if (c->loc == NULL)
28010a5d
PA
12065 return;
12066
fccf9de1
TT
12067 /* Compute the condition expression in text form, from the specific
12068 expection we want to catch. */
12069 std::string cond_string
12070 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 12071
fccf9de1
TT
12072 /* Iterate over all the catchpoint's locations, and parse an
12073 expression for each. */
12074 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
12075 {
12076 struct ada_catchpoint_location *ada_loc
fccf9de1 12077 = (struct ada_catchpoint_location *) bl;
4d01a485 12078 expression_up exp;
28010a5d 12079
fccf9de1 12080 if (!bl->shlib_disabled)
28010a5d 12081 {
bbc13ae3 12082 const char *s;
28010a5d 12083
cb7de75e 12084 s = cond_string.c_str ();
a70b8144 12085 try
28010a5d 12086 {
fccf9de1
TT
12087 exp = parse_exp_1 (&s, bl->address,
12088 block_for_pc (bl->address),
036e657b 12089 0);
28010a5d 12090 }
230d2906 12091 catch (const gdb_exception_error &e)
849f2b52
JB
12092 {
12093 warning (_("failed to reevaluate internal exception condition "
12094 "for catchpoint %d: %s"),
3d6e9d23 12095 c->number, e.what ());
849f2b52 12096 }
28010a5d
PA
12097 }
12098
b22e99fd 12099 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12100 }
28010a5d
PA
12101}
12102
28010a5d
PA
12103/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12104 structure for all exception catchpoint kinds. */
12105
12106static struct bp_location *
37f6a7f4 12107allocate_location_exception (struct breakpoint *self)
28010a5d 12108{
5f486660 12109 return new ada_catchpoint_location (self);
28010a5d
PA
12110}
12111
12112/* Implement the RE_SET method in the breakpoint_ops structure for all
12113 exception catchpoint kinds. */
12114
12115static void
37f6a7f4 12116re_set_exception (struct breakpoint *b)
28010a5d
PA
12117{
12118 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12119
12120 /* Call the base class's method. This updates the catchpoint's
12121 locations. */
2060206e 12122 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12123
12124 /* Reparse the exception conditional expressions. One for each
12125 location. */
37f6a7f4 12126 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12127}
12128
12129/* Returns true if we should stop for this breakpoint hit. If the
12130 user specified a specific exception, we only want to cause a stop
12131 if the program thrown that exception. */
12132
12133static int
12134should_stop_exception (const struct bp_location *bl)
12135{
12136 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12137 const struct ada_catchpoint_location *ada_loc
12138 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12139 int stop;
12140
37f6a7f4
TT
12141 struct internalvar *var = lookup_internalvar ("_ada_exception");
12142 if (c->m_kind == ada_catch_assert)
12143 clear_internalvar (var);
12144 else
12145 {
12146 try
12147 {
12148 const char *expr;
12149
12150 if (c->m_kind == ada_catch_handlers)
12151 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12152 ".all.occurrence.id");
12153 else
12154 expr = "e";
12155
12156 struct value *exc = parse_and_eval (expr);
12157 set_internalvar (var, exc);
12158 }
12159 catch (const gdb_exception_error &ex)
12160 {
12161 clear_internalvar (var);
12162 }
12163 }
12164
28010a5d 12165 /* With no specific exception, should always stop. */
bc18fbb5 12166 if (c->excep_string.empty ())
28010a5d
PA
12167 return 1;
12168
12169 if (ada_loc->excep_cond_expr == NULL)
12170 {
12171 /* We will have a NULL expression if back when we were creating
12172 the expressions, this location's had failed to parse. */
12173 return 1;
12174 }
12175
12176 stop = 1;
a70b8144 12177 try
28010a5d
PA
12178 {
12179 struct value *mark;
12180
12181 mark = value_mark ();
4d01a485 12182 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12183 value_free_to_mark (mark);
12184 }
230d2906 12185 catch (const gdb_exception &ex)
492d29ea
PA
12186 {
12187 exception_fprintf (gdb_stderr, ex,
12188 _("Error in testing exception condition:\n"));
12189 }
492d29ea 12190
28010a5d
PA
12191 return stop;
12192}
12193
12194/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12195 for all exception catchpoint kinds. */
12196
12197static void
37f6a7f4 12198check_status_exception (bpstat bs)
28010a5d 12199{
b6433ede 12200 bs->stop = should_stop_exception (bs->bp_location_at.get ());
28010a5d
PA
12201}
12202
f7f9143b
JB
12203/* Implement the PRINT_IT method in the breakpoint_ops structure
12204 for all exception catchpoint kinds. */
12205
12206static enum print_stop_action
37f6a7f4 12207print_it_exception (bpstat bs)
f7f9143b 12208{
79a45e25 12209 struct ui_out *uiout = current_uiout;
348d480f
PA
12210 struct breakpoint *b = bs->breakpoint_at;
12211
956a9fb9 12212 annotate_catchpoint (b->number);
f7f9143b 12213
112e8700 12214 if (uiout->is_mi_like_p ())
f7f9143b 12215 {
112e8700 12216 uiout->field_string ("reason",
956a9fb9 12217 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12218 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12219 }
12220
112e8700
SM
12221 uiout->text (b->disposition == disp_del
12222 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12223 uiout->field_signed ("bkptno", b->number);
112e8700 12224 uiout->text (", ");
f7f9143b 12225
45db7c09
PA
12226 /* ada_exception_name_addr relies on the selected frame being the
12227 current frame. Need to do this here because this function may be
12228 called more than once when printing a stop, and below, we'll
12229 select the first frame past the Ada run-time (see
12230 ada_find_printable_frame). */
12231 select_frame (get_current_frame ());
12232
37f6a7f4
TT
12233 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12234 switch (c->m_kind)
f7f9143b 12235 {
761269c8
JB
12236 case ada_catch_exception:
12237 case ada_catch_exception_unhandled:
9f757bf7 12238 case ada_catch_handlers:
956a9fb9 12239 {
37f6a7f4 12240 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12241 char exception_name[256];
12242
12243 if (addr != 0)
12244 {
c714b426
PA
12245 read_memory (addr, (gdb_byte *) exception_name,
12246 sizeof (exception_name) - 1);
956a9fb9
JB
12247 exception_name [sizeof (exception_name) - 1] = '\0';
12248 }
12249 else
12250 {
12251 /* For some reason, we were unable to read the exception
12252 name. This could happen if the Runtime was compiled
12253 without debugging info, for instance. In that case,
12254 just replace the exception name by the generic string
12255 "exception" - it will read as "an exception" in the
12256 notification we are about to print. */
967cff16 12257 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12258 }
12259 /* In the case of unhandled exception breakpoints, we print
12260 the exception name as "unhandled EXCEPTION_NAME", to make
12261 it clearer to the user which kind of catchpoint just got
12262 hit. We used ui_out_text to make sure that this extra
12263 info does not pollute the exception name in the MI case. */
37f6a7f4 12264 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12265 uiout->text ("unhandled ");
12266 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12267 }
12268 break;
761269c8 12269 case ada_catch_assert:
956a9fb9
JB
12270 /* In this case, the name of the exception is not really
12271 important. Just print "failed assertion" to make it clearer
12272 that his program just hit an assertion-failure catchpoint.
12273 We used ui_out_text because this info does not belong in
12274 the MI output. */
112e8700 12275 uiout->text ("failed assertion");
956a9fb9 12276 break;
f7f9143b 12277 }
e547c119 12278
6f46ac85 12279 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12280 if (exception_message != NULL)
12281 {
e547c119 12282 uiout->text (" (");
6f46ac85 12283 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12284 uiout->text (")");
e547c119
JB
12285 }
12286
112e8700 12287 uiout->text (" at ");
956a9fb9 12288 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12289
12290 return PRINT_SRC_AND_LOC;
12291}
12292
12293/* Implement the PRINT_ONE method in the breakpoint_ops structure
12294 for all exception catchpoint kinds. */
12295
12296static void
37f6a7f4 12297print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12298{
79a45e25 12299 struct ui_out *uiout = current_uiout;
28010a5d 12300 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12301 struct value_print_options opts;
12302
12303 get_user_print_options (&opts);
f06f1252 12304
79a45b7d 12305 if (opts.addressprint)
f06f1252 12306 uiout->field_skip ("addr");
f7f9143b
JB
12307
12308 annotate_field (5);
37f6a7f4 12309 switch (c->m_kind)
f7f9143b 12310 {
761269c8 12311 case ada_catch_exception:
dda83cd7
SM
12312 if (!c->excep_string.empty ())
12313 {
bc18fbb5
TT
12314 std::string msg = string_printf (_("`%s' Ada exception"),
12315 c->excep_string.c_str ());
28010a5d 12316
dda83cd7
SM
12317 uiout->field_string ("what", msg);
12318 }
12319 else
12320 uiout->field_string ("what", "all Ada exceptions");
12321
12322 break;
f7f9143b 12323
761269c8 12324 case ada_catch_exception_unhandled:
dda83cd7
SM
12325 uiout->field_string ("what", "unhandled Ada exceptions");
12326 break;
f7f9143b 12327
9f757bf7 12328 case ada_catch_handlers:
dda83cd7
SM
12329 if (!c->excep_string.empty ())
12330 {
9f757bf7
XR
12331 uiout->field_fmt ("what",
12332 _("`%s' Ada exception handlers"),
bc18fbb5 12333 c->excep_string.c_str ());
dda83cd7
SM
12334 }
12335 else
9f757bf7 12336 uiout->field_string ("what", "all Ada exceptions handlers");
dda83cd7 12337 break;
9f757bf7 12338
761269c8 12339 case ada_catch_assert:
dda83cd7
SM
12340 uiout->field_string ("what", "failed Ada assertions");
12341 break;
f7f9143b
JB
12342
12343 default:
dda83cd7
SM
12344 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12345 break;
f7f9143b
JB
12346 }
12347}
12348
12349/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12350 for all exception catchpoint kinds. */
12351
12352static void
37f6a7f4 12353print_mention_exception (struct breakpoint *b)
f7f9143b 12354{
28010a5d 12355 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12356 struct ui_out *uiout = current_uiout;
28010a5d 12357
112e8700 12358 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
dda83cd7 12359 : _("Catchpoint "));
381befee 12360 uiout->field_signed ("bkptno", b->number);
112e8700 12361 uiout->text (": ");
00eb2c4a 12362
37f6a7f4 12363 switch (c->m_kind)
f7f9143b 12364 {
761269c8 12365 case ada_catch_exception:
dda83cd7 12366 if (!c->excep_string.empty ())
00eb2c4a 12367 {
862d101a 12368 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12369 c->excep_string.c_str ());
862d101a 12370 uiout->text (info.c_str ());
00eb2c4a 12371 }
dda83cd7
SM
12372 else
12373 uiout->text (_("all Ada exceptions"));
12374 break;
f7f9143b 12375
761269c8 12376 case ada_catch_exception_unhandled:
dda83cd7
SM
12377 uiout->text (_("unhandled Ada exceptions"));
12378 break;
9f757bf7
XR
12379
12380 case ada_catch_handlers:
dda83cd7 12381 if (!c->excep_string.empty ())
9f757bf7
XR
12382 {
12383 std::string info
12384 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12385 c->excep_string.c_str ());
9f757bf7
XR
12386 uiout->text (info.c_str ());
12387 }
dda83cd7
SM
12388 else
12389 uiout->text (_("all Ada exceptions handlers"));
12390 break;
9f757bf7 12391
761269c8 12392 case ada_catch_assert:
dda83cd7
SM
12393 uiout->text (_("failed Ada assertions"));
12394 break;
f7f9143b
JB
12395
12396 default:
dda83cd7
SM
12397 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12398 break;
f7f9143b
JB
12399 }
12400}
12401
6149aea9
PA
12402/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12403 for all exception catchpoint kinds. */
12404
12405static void
37f6a7f4 12406print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12407{
28010a5d
PA
12408 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12409
37f6a7f4 12410 switch (c->m_kind)
6149aea9 12411 {
761269c8 12412 case ada_catch_exception:
6149aea9 12413 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12414 if (!c->excep_string.empty ())
12415 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12416 break;
12417
761269c8 12418 case ada_catch_exception_unhandled:
78076abc 12419 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12420 break;
12421
9f757bf7
XR
12422 case ada_catch_handlers:
12423 fprintf_filtered (fp, "catch handlers");
12424 break;
12425
761269c8 12426 case ada_catch_assert:
6149aea9
PA
12427 fprintf_filtered (fp, "catch assert");
12428 break;
12429
12430 default:
12431 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12432 }
d9b3f62e 12433 print_recreate_thread (b, fp);
6149aea9
PA
12434}
12435
37f6a7f4 12436/* Virtual tables for various breakpoint types. */
2060206e 12437static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12438static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12439static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12440static struct breakpoint_ops catch_handlers_breakpoint_ops;
12441
f06f1252
TT
12442/* See ada-lang.h. */
12443
12444bool
12445is_ada_exception_catchpoint (breakpoint *bp)
12446{
12447 return (bp->ops == &catch_exception_breakpoint_ops
12448 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12449 || bp->ops == &catch_assert_breakpoint_ops
12450 || bp->ops == &catch_handlers_breakpoint_ops);
12451}
12452
f7f9143b
JB
12453/* Split the arguments specified in a "catch exception" command.
12454 Set EX to the appropriate catchpoint type.
28010a5d 12455 Set EXCEP_STRING to the name of the specific exception if
5845583d 12456 specified by the user.
9f757bf7
XR
12457 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12458 "catch handlers" command. False otherwise.
5845583d
JB
12459 If a condition is found at the end of the arguments, the condition
12460 expression is stored in COND_STRING (memory must be deallocated
12461 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12462
12463static void
a121b7c1 12464catch_ada_exception_command_split (const char *args,
9f757bf7 12465 bool is_catch_handlers_cmd,
dda83cd7 12466 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12467 std::string *excep_string,
12468 std::string *cond_string)
f7f9143b 12469{
bc18fbb5 12470 std::string exception_name;
f7f9143b 12471
bc18fbb5
TT
12472 exception_name = extract_arg (&args);
12473 if (exception_name == "if")
5845583d
JB
12474 {
12475 /* This is not an exception name; this is the start of a condition
12476 expression for a catchpoint on all exceptions. So, "un-get"
12477 this token, and set exception_name to NULL. */
bc18fbb5 12478 exception_name.clear ();
5845583d
JB
12479 args -= 2;
12480 }
f7f9143b 12481
5845583d 12482 /* Check to see if we have a condition. */
f7f9143b 12483
f1735a53 12484 args = skip_spaces (args);
61012eef 12485 if (startswith (args, "if")
5845583d
JB
12486 && (isspace (args[2]) || args[2] == '\0'))
12487 {
12488 args += 2;
f1735a53 12489 args = skip_spaces (args);
5845583d
JB
12490
12491 if (args[0] == '\0')
dda83cd7 12492 error (_("Condition missing after `if' keyword"));
bc18fbb5 12493 *cond_string = args;
5845583d
JB
12494
12495 args += strlen (args);
12496 }
12497
12498 /* Check that we do not have any more arguments. Anything else
12499 is unexpected. */
f7f9143b
JB
12500
12501 if (args[0] != '\0')
12502 error (_("Junk at end of expression"));
12503
9f757bf7
XR
12504 if (is_catch_handlers_cmd)
12505 {
12506 /* Catch handling of exceptions. */
12507 *ex = ada_catch_handlers;
12508 *excep_string = exception_name;
12509 }
bc18fbb5 12510 else if (exception_name.empty ())
f7f9143b
JB
12511 {
12512 /* Catch all exceptions. */
761269c8 12513 *ex = ada_catch_exception;
bc18fbb5 12514 excep_string->clear ();
f7f9143b 12515 }
bc18fbb5 12516 else if (exception_name == "unhandled")
f7f9143b
JB
12517 {
12518 /* Catch unhandled exceptions. */
761269c8 12519 *ex = ada_catch_exception_unhandled;
bc18fbb5 12520 excep_string->clear ();
f7f9143b
JB
12521 }
12522 else
12523 {
12524 /* Catch a specific exception. */
761269c8 12525 *ex = ada_catch_exception;
28010a5d 12526 *excep_string = exception_name;
f7f9143b
JB
12527 }
12528}
12529
12530/* Return the name of the symbol on which we should break in order to
12531 implement a catchpoint of the EX kind. */
12532
12533static const char *
761269c8 12534ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12535{
3eecfa55
JB
12536 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12537
12538 gdb_assert (data->exception_info != NULL);
0259addd 12539
f7f9143b
JB
12540 switch (ex)
12541 {
761269c8 12542 case ada_catch_exception:
dda83cd7
SM
12543 return (data->exception_info->catch_exception_sym);
12544 break;
761269c8 12545 case ada_catch_exception_unhandled:
dda83cd7
SM
12546 return (data->exception_info->catch_exception_unhandled_sym);
12547 break;
761269c8 12548 case ada_catch_assert:
dda83cd7
SM
12549 return (data->exception_info->catch_assert_sym);
12550 break;
9f757bf7 12551 case ada_catch_handlers:
dda83cd7
SM
12552 return (data->exception_info->catch_handlers_sym);
12553 break;
f7f9143b 12554 default:
dda83cd7
SM
12555 internal_error (__FILE__, __LINE__,
12556 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12557 }
12558}
12559
12560/* Return the breakpoint ops "virtual table" used for catchpoints
12561 of the EX kind. */
12562
c0a91b2b 12563static const struct breakpoint_ops *
761269c8 12564ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12565{
12566 switch (ex)
12567 {
761269c8 12568 case ada_catch_exception:
dda83cd7
SM
12569 return (&catch_exception_breakpoint_ops);
12570 break;
761269c8 12571 case ada_catch_exception_unhandled:
dda83cd7
SM
12572 return (&catch_exception_unhandled_breakpoint_ops);
12573 break;
761269c8 12574 case ada_catch_assert:
dda83cd7
SM
12575 return (&catch_assert_breakpoint_ops);
12576 break;
9f757bf7 12577 case ada_catch_handlers:
dda83cd7
SM
12578 return (&catch_handlers_breakpoint_ops);
12579 break;
f7f9143b 12580 default:
dda83cd7
SM
12581 internal_error (__FILE__, __LINE__,
12582 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12583 }
12584}
12585
12586/* Return the condition that will be used to match the current exception
12587 being raised with the exception that the user wants to catch. This
12588 assumes that this condition is used when the inferior just triggered
12589 an exception catchpoint.
cb7de75e 12590 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12591
cb7de75e 12592static std::string
9f757bf7 12593ada_exception_catchpoint_cond_string (const char *excep_string,
dda83cd7 12594 enum ada_exception_catchpoint_kind ex)
f7f9143b 12595{
3d0b0fa3 12596 int i;
fccf9de1 12597 bool is_standard_exc = false;
cb7de75e 12598 std::string result;
9f757bf7
XR
12599
12600 if (ex == ada_catch_handlers)
12601 {
12602 /* For exception handlers catchpoints, the condition string does
dda83cd7 12603 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12604 result = ("long_integer (GNAT_GCC_exception_Access"
12605 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12606 }
12607 else
fccf9de1 12608 result = "long_integer (e)";
3d0b0fa3 12609
0963b4bd 12610 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12611 runtime units that have been compiled without debugging info; if
28010a5d 12612 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12613 exception (e.g. "constraint_error") then, during the evaluation
12614 of the condition expression, the symbol lookup on this name would
0963b4bd 12615 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12616 may then be set only on user-defined exceptions which have the
12617 same not-fully-qualified name (e.g. my_package.constraint_error).
12618
12619 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12620 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12621 exception constraint_error" is rewritten into "catch exception
12622 standard.constraint_error".
12623
85102364 12624 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12625 the inferior program, then the only way to specify this exception as a
12626 breakpoint condition is to use its fully-qualified named:
fccf9de1 12627 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12628
12629 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12630 {
28010a5d 12631 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12632 {
fccf9de1 12633 is_standard_exc = true;
9f757bf7 12634 break;
3d0b0fa3
JB
12635 }
12636 }
9f757bf7 12637
fccf9de1
TT
12638 result += " = ";
12639
12640 if (is_standard_exc)
12641 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12642 else
12643 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12644
9f757bf7 12645 return result;
f7f9143b
JB
12646}
12647
12648/* Return the symtab_and_line that should be used to insert an exception
12649 catchpoint of the TYPE kind.
12650
28010a5d
PA
12651 ADDR_STRING returns the name of the function where the real
12652 breakpoint that implements the catchpoints is set, depending on the
12653 type of catchpoint we need to create. */
f7f9143b
JB
12654
12655static struct symtab_and_line
bc18fbb5 12656ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12657 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12658{
12659 const char *sym_name;
12660 struct symbol *sym;
f7f9143b 12661
0259addd
JB
12662 /* First, find out which exception support info to use. */
12663 ada_exception_support_info_sniffer ();
12664
12665 /* Then lookup the function on which we will break in order to catch
f7f9143b 12666 the Ada exceptions requested by the user. */
f7f9143b
JB
12667 sym_name = ada_exception_sym_name (ex);
12668 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12669
57aff202
JB
12670 if (sym == NULL)
12671 error (_("Catchpoint symbol not found: %s"), sym_name);
12672
12673 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12674 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12675
12676 /* Set ADDR_STRING. */
cc12f4a8 12677 *addr_string = sym_name;
f7f9143b 12678
f7f9143b 12679 /* Set OPS. */
4b9eee8c 12680 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12681
f17011e0 12682 return find_function_start_sal (sym, 1);
f7f9143b
JB
12683}
12684
b4a5b78b 12685/* Create an Ada exception catchpoint.
f7f9143b 12686
b4a5b78b 12687 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12688
bc18fbb5 12689 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12690 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12691 of the exception to which this catchpoint applies.
2df4d1d5 12692
bc18fbb5 12693 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12694
b4a5b78b
JB
12695 TEMPFLAG, if nonzero, means that the underlying breakpoint
12696 should be temporary.
28010a5d 12697
b4a5b78b 12698 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12699
349774ef 12700void
28010a5d 12701create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12702 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12703 const std::string &excep_string,
56ecd069 12704 const std::string &cond_string,
28010a5d 12705 int tempflag,
349774ef 12706 int disabled,
28010a5d
PA
12707 int from_tty)
12708{
cc12f4a8 12709 std::string addr_string;
b4a5b78b 12710 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12711 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12712
37f6a7f4 12713 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12714 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12715 ops, tempflag, disabled, from_tty);
28010a5d 12716 c->excep_string = excep_string;
9f757bf7 12717 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069 12718 if (!cond_string.empty ())
733d554a 12719 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
b270e6f9 12720 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12721}
12722
9ac4176b
PA
12723/* Implement the "catch exception" command. */
12724
12725static void
eb4c3f4a 12726catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12727 struct cmd_list_element *command)
12728{
a121b7c1 12729 const char *arg = arg_entry;
9ac4176b
PA
12730 struct gdbarch *gdbarch = get_current_arch ();
12731 int tempflag;
761269c8 12732 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12733 std::string excep_string;
56ecd069 12734 std::string cond_string;
9ac4176b
PA
12735
12736 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12737
12738 if (!arg)
12739 arg = "";
9f757bf7 12740 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12741 &cond_string);
9f757bf7
XR
12742 create_ada_exception_catchpoint (gdbarch, ex_kind,
12743 excep_string, cond_string,
12744 tempflag, 1 /* enabled */,
12745 from_tty);
12746}
12747
12748/* Implement the "catch handlers" command. */
12749
12750static void
12751catch_ada_handlers_command (const char *arg_entry, int from_tty,
12752 struct cmd_list_element *command)
12753{
12754 const char *arg = arg_entry;
12755 struct gdbarch *gdbarch = get_current_arch ();
12756 int tempflag;
12757 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12758 std::string excep_string;
56ecd069 12759 std::string cond_string;
9f757bf7
XR
12760
12761 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12762
12763 if (!arg)
12764 arg = "";
12765 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 12766 &cond_string);
b4a5b78b
JB
12767 create_ada_exception_catchpoint (gdbarch, ex_kind,
12768 excep_string, cond_string,
349774ef
JB
12769 tempflag, 1 /* enabled */,
12770 from_tty);
9ac4176b
PA
12771}
12772
71bed2db
TT
12773/* Completion function for the Ada "catch" commands. */
12774
12775static void
12776catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12777 const char *text, const char *word)
12778{
12779 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12780
12781 for (const ada_exc_info &info : exceptions)
12782 {
12783 if (startswith (info.name, word))
b02f78f9 12784 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
12785 }
12786}
12787
b4a5b78b 12788/* Split the arguments specified in a "catch assert" command.
5845583d 12789
b4a5b78b
JB
12790 ARGS contains the command's arguments (or the empty string if
12791 no arguments were passed).
5845583d
JB
12792
12793 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12794 (the memory needs to be deallocated after use). */
5845583d 12795
b4a5b78b 12796static void
56ecd069 12797catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 12798{
f1735a53 12799 args = skip_spaces (args);
f7f9143b 12800
5845583d 12801 /* Check whether a condition was provided. */
61012eef 12802 if (startswith (args, "if")
5845583d 12803 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12804 {
5845583d 12805 args += 2;
f1735a53 12806 args = skip_spaces (args);
5845583d 12807 if (args[0] == '\0')
dda83cd7 12808 error (_("condition missing after `if' keyword"));
56ecd069 12809 cond_string.assign (args);
f7f9143b
JB
12810 }
12811
5845583d
JB
12812 /* Otherwise, there should be no other argument at the end of
12813 the command. */
12814 else if (args[0] != '\0')
12815 error (_("Junk at end of arguments."));
f7f9143b
JB
12816}
12817
9ac4176b
PA
12818/* Implement the "catch assert" command. */
12819
12820static void
eb4c3f4a 12821catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12822 struct cmd_list_element *command)
12823{
a121b7c1 12824 const char *arg = arg_entry;
9ac4176b
PA
12825 struct gdbarch *gdbarch = get_current_arch ();
12826 int tempflag;
56ecd069 12827 std::string cond_string;
9ac4176b
PA
12828
12829 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12830
12831 if (!arg)
12832 arg = "";
56ecd069 12833 catch_ada_assert_command_split (arg, cond_string);
761269c8 12834 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 12835 "", cond_string,
349774ef
JB
12836 tempflag, 1 /* enabled */,
12837 from_tty);
9ac4176b 12838}
778865d3
JB
12839
12840/* Return non-zero if the symbol SYM is an Ada exception object. */
12841
12842static int
12843ada_is_exception_sym (struct symbol *sym)
12844{
7d93a1e0 12845 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
12846
12847 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
dda83cd7
SM
12848 && SYMBOL_CLASS (sym) != LOC_BLOCK
12849 && SYMBOL_CLASS (sym) != LOC_CONST
12850 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12851 && type_name != NULL && strcmp (type_name, "exception") == 0);
778865d3
JB
12852}
12853
12854/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12855 Ada exception object. This matches all exceptions except the ones
12856 defined by the Ada language. */
12857
12858static int
12859ada_is_non_standard_exception_sym (struct symbol *sym)
12860{
12861 int i;
12862
12863 if (!ada_is_exception_sym (sym))
12864 return 0;
12865
12866 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 12867 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
12868 return 0; /* A standard exception. */
12869
12870 /* Numeric_Error is also a standard exception, so exclude it.
12871 See the STANDARD_EXC description for more details as to why
12872 this exception is not listed in that array. */
987012b8 12873 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
12874 return 0;
12875
12876 return 1;
12877}
12878
ab816a27 12879/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
12880 objects.
12881
12882 The comparison is determined first by exception name, and then
12883 by exception address. */
12884
ab816a27 12885bool
cc536b21 12886ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 12887{
778865d3
JB
12888 int result;
12889
ab816a27
TT
12890 result = strcmp (name, other.name);
12891 if (result < 0)
12892 return true;
12893 if (result == 0 && addr < other.addr)
12894 return true;
12895 return false;
12896}
778865d3 12897
ab816a27 12898bool
cc536b21 12899ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
12900{
12901 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
12902}
12903
12904/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12905 routine, but keeping the first SKIP elements untouched.
12906
12907 All duplicates are also removed. */
12908
12909static void
ab816a27 12910sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
12911 int skip)
12912{
ab816a27
TT
12913 std::sort (exceptions->begin () + skip, exceptions->end ());
12914 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12915 exceptions->end ());
778865d3
JB
12916}
12917
778865d3
JB
12918/* Add all exceptions defined by the Ada standard whose name match
12919 a regular expression.
12920
12921 If PREG is not NULL, then this regexp_t object is used to
12922 perform the symbol name matching. Otherwise, no name-based
12923 filtering is performed.
12924
12925 EXCEPTIONS is a vector of exceptions to which matching exceptions
12926 gets pushed. */
12927
12928static void
2d7cc5c7 12929ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 12930 std::vector<ada_exc_info> *exceptions)
778865d3
JB
12931{
12932 int i;
12933
12934 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12935 {
12936 if (preg == NULL
2d7cc5c7 12937 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
12938 {
12939 struct bound_minimal_symbol msymbol
12940 = ada_lookup_simple_minsym (standard_exc[i]);
12941
12942 if (msymbol.minsym != NULL)
12943 {
12944 struct ada_exc_info info
77e371c0 12945 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 12946
ab816a27 12947 exceptions->push_back (info);
778865d3
JB
12948 }
12949 }
12950 }
12951}
12952
12953/* Add all Ada exceptions defined locally and accessible from the given
12954 FRAME.
12955
12956 If PREG is not NULL, then this regexp_t object is used to
12957 perform the symbol name matching. Otherwise, no name-based
12958 filtering is performed.
12959
12960 EXCEPTIONS is a vector of exceptions to which matching exceptions
12961 gets pushed. */
12962
12963static void
2d7cc5c7
PA
12964ada_add_exceptions_from_frame (compiled_regex *preg,
12965 struct frame_info *frame,
ab816a27 12966 std::vector<ada_exc_info> *exceptions)
778865d3 12967{
3977b71f 12968 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12969
12970 while (block != 0)
12971 {
12972 struct block_iterator iter;
12973 struct symbol *sym;
12974
12975 ALL_BLOCK_SYMBOLS (block, iter, sym)
12976 {
12977 switch (SYMBOL_CLASS (sym))
12978 {
12979 case LOC_TYPEDEF:
12980 case LOC_BLOCK:
12981 case LOC_CONST:
12982 break;
12983 default:
12984 if (ada_is_exception_sym (sym))
12985 {
987012b8 12986 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
12987 SYMBOL_VALUE_ADDRESS (sym)};
12988
ab816a27 12989 exceptions->push_back (info);
778865d3
JB
12990 }
12991 }
12992 }
12993 if (BLOCK_FUNCTION (block) != NULL)
12994 break;
12995 block = BLOCK_SUPERBLOCK (block);
12996 }
12997}
12998
14bc53a8
PA
12999/* Return true if NAME matches PREG or if PREG is NULL. */
13000
13001static bool
2d7cc5c7 13002name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
13003{
13004 return (preg == NULL
f945dedf 13005 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
13006}
13007
778865d3
JB
13008/* Add all exceptions defined globally whose name name match
13009 a regular expression, excluding standard exceptions.
13010
13011 The reason we exclude standard exceptions is that they need
13012 to be handled separately: Standard exceptions are defined inside
13013 a runtime unit which is normally not compiled with debugging info,
13014 and thus usually do not show up in our symbol search. However,
13015 if the unit was in fact built with debugging info, we need to
13016 exclude them because they would duplicate the entry we found
13017 during the special loop that specifically searches for those
13018 standard exceptions.
13019
13020 If PREG is not NULL, then this regexp_t object is used to
13021 perform the symbol name matching. Otherwise, no name-based
13022 filtering is performed.
13023
13024 EXCEPTIONS is a vector of exceptions to which matching exceptions
13025 gets pushed. */
13026
13027static void
2d7cc5c7 13028ada_add_global_exceptions (compiled_regex *preg,
ab816a27 13029 std::vector<ada_exc_info> *exceptions)
778865d3 13030{
14bc53a8
PA
13031 /* In Ada, the symbol "search name" is a linkage name, whereas the
13032 regular expression used to do the matching refers to the natural
13033 name. So match against the decoded name. */
13034 expand_symtabs_matching (NULL,
b5ec771e 13035 lookup_name_info::match_any (),
14bc53a8
PA
13036 [&] (const char *search_name)
13037 {
f945dedf
CB
13038 std::string decoded = ada_decode (search_name);
13039 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
13040 },
13041 NULL,
13042 VARIABLES_DOMAIN);
778865d3 13043
2030c079 13044 for (objfile *objfile : current_program_space->objfiles ())
778865d3 13045 {
b669c953 13046 for (compunit_symtab *s : objfile->compunits ())
778865d3 13047 {
d8aeb77f
TT
13048 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13049 int i;
778865d3 13050
d8aeb77f
TT
13051 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13052 {
582942f4 13053 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
13054 struct block_iterator iter;
13055 struct symbol *sym;
778865d3 13056
d8aeb77f
TT
13057 ALL_BLOCK_SYMBOLS (b, iter, sym)
13058 if (ada_is_non_standard_exception_sym (sym)
987012b8 13059 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
13060 {
13061 struct ada_exc_info info
987012b8 13062 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
13063
13064 exceptions->push_back (info);
13065 }
13066 }
778865d3
JB
13067 }
13068 }
13069}
13070
13071/* Implements ada_exceptions_list with the regular expression passed
13072 as a regex_t, rather than a string.
13073
13074 If not NULL, PREG is used to filter out exceptions whose names
13075 do not match. Otherwise, all exceptions are listed. */
13076
ab816a27 13077static std::vector<ada_exc_info>
2d7cc5c7 13078ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13079{
ab816a27 13080 std::vector<ada_exc_info> result;
778865d3
JB
13081 int prev_len;
13082
13083 /* First, list the known standard exceptions. These exceptions
13084 need to be handled separately, as they are usually defined in
13085 runtime units that have been compiled without debugging info. */
13086
13087 ada_add_standard_exceptions (preg, &result);
13088
13089 /* Next, find all exceptions whose scope is local and accessible
13090 from the currently selected frame. */
13091
13092 if (has_stack_frames ())
13093 {
ab816a27 13094 prev_len = result.size ();
778865d3
JB
13095 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13096 &result);
ab816a27 13097 if (result.size () > prev_len)
778865d3
JB
13098 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13099 }
13100
13101 /* Add all exceptions whose scope is global. */
13102
ab816a27 13103 prev_len = result.size ();
778865d3 13104 ada_add_global_exceptions (preg, &result);
ab816a27 13105 if (result.size () > prev_len)
778865d3
JB
13106 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13107
778865d3
JB
13108 return result;
13109}
13110
13111/* Return a vector of ada_exc_info.
13112
13113 If REGEXP is NULL, all exceptions are included in the result.
13114 Otherwise, it should contain a valid regular expression,
13115 and only the exceptions whose names match that regular expression
13116 are included in the result.
13117
13118 The exceptions are sorted in the following order:
13119 - Standard exceptions (defined by the Ada language), in
13120 alphabetical order;
13121 - Exceptions only visible from the current frame, in
13122 alphabetical order;
13123 - Exceptions whose scope is global, in alphabetical order. */
13124
ab816a27 13125std::vector<ada_exc_info>
778865d3
JB
13126ada_exceptions_list (const char *regexp)
13127{
2d7cc5c7
PA
13128 if (regexp == NULL)
13129 return ada_exceptions_list_1 (NULL);
778865d3 13130
2d7cc5c7
PA
13131 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13132 return ada_exceptions_list_1 (&reg);
778865d3
JB
13133}
13134
13135/* Implement the "info exceptions" command. */
13136
13137static void
1d12d88f 13138info_exceptions_command (const char *regexp, int from_tty)
778865d3 13139{
778865d3 13140 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13141
ab816a27 13142 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13143
13144 if (regexp != NULL)
13145 printf_filtered
13146 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13147 else
13148 printf_filtered (_("All defined Ada exceptions:\n"));
13149
ab816a27
TT
13150 for (const ada_exc_info &info : exceptions)
13151 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13152}
13153
dda83cd7 13154 /* Operators */
4c4b4cd2
PH
13155/* Information about operators given special treatment in functions
13156 below. */
13157/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13158
13159#define ADA_OPERATORS \
13160 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13161 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13162 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13163 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13164 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13165 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13166 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13167 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13168 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13169 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13170 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13171 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13172 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13173 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13174 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13175 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13176 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13177 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13178 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13179
13180static void
554794dc
SDJ
13181ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13182 int *argsp)
4c4b4cd2
PH
13183{
13184 switch (exp->elts[pc - 1].opcode)
13185 {
76a01679 13186 default:
4c4b4cd2
PH
13187 operator_length_standard (exp, pc, oplenp, argsp);
13188 break;
13189
13190#define OP_DEFN(op, len, args, binop) \
13191 case op: *oplenp = len; *argsp = args; break;
13192 ADA_OPERATORS;
13193#undef OP_DEFN
52ce6436
PH
13194
13195 case OP_AGGREGATE:
13196 *oplenp = 3;
13197 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13198 break;
13199
13200 case OP_CHOICES:
13201 *oplenp = 3;
13202 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13203 break;
4c4b4cd2
PH
13204 }
13205}
13206
c0201579
JK
13207/* Implementation of the exp_descriptor method operator_check. */
13208
13209static int
13210ada_operator_check (struct expression *exp, int pos,
13211 int (*objfile_func) (struct objfile *objfile, void *data),
13212 void *data)
13213{
13214 const union exp_element *const elts = exp->elts;
13215 struct type *type = NULL;
13216
13217 switch (elts[pos].opcode)
13218 {
13219 case UNOP_IN_RANGE:
13220 case UNOP_QUAL:
13221 type = elts[pos + 1].type;
13222 break;
13223
13224 default:
13225 return operator_check_standard (exp, pos, objfile_func, data);
13226 }
13227
13228 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13229
6ac37371
SM
13230 if (type != nullptr && type->objfile_owner () != nullptr
13231 && objfile_func (type->objfile_owner (), data))
c0201579
JK
13232 return 1;
13233
13234 return 0;
13235}
13236
4c4b4cd2
PH
13237/* As for operator_length, but assumes PC is pointing at the first
13238 element of the operator, and gives meaningful results only for the
52ce6436 13239 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13240
13241static void
76a01679 13242ada_forward_operator_length (struct expression *exp, int pc,
dda83cd7 13243 int *oplenp, int *argsp)
4c4b4cd2 13244{
76a01679 13245 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13246 {
13247 default:
13248 *oplenp = *argsp = 0;
13249 break;
52ce6436 13250
4c4b4cd2
PH
13251#define OP_DEFN(op, len, args, binop) \
13252 case op: *oplenp = len; *argsp = args; break;
13253 ADA_OPERATORS;
13254#undef OP_DEFN
52ce6436
PH
13255
13256 case OP_AGGREGATE:
13257 *oplenp = 3;
13258 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13259 break;
13260
13261 case OP_CHOICES:
13262 *oplenp = 3;
13263 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13264 break;
13265
13266 case OP_STRING:
13267 case OP_NAME:
13268 {
13269 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13270
52ce6436
PH
13271 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13272 *argsp = 0;
13273 break;
13274 }
4c4b4cd2
PH
13275 }
13276}
13277
13278static int
13279ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13280{
13281 enum exp_opcode op = exp->elts[elt].opcode;
13282 int oplen, nargs;
13283 int pc = elt;
13284 int i;
76a01679 13285
4c4b4cd2
PH
13286 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13287
76a01679 13288 switch (op)
4c4b4cd2 13289 {
76a01679 13290 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13291 case OP_ATR_FIRST:
13292 case OP_ATR_LAST:
13293 case OP_ATR_LENGTH:
13294 case OP_ATR_IMAGE:
13295 case OP_ATR_MAX:
13296 case OP_ATR_MIN:
13297 case OP_ATR_MODULUS:
13298 case OP_ATR_POS:
13299 case OP_ATR_SIZE:
13300 case OP_ATR_TAG:
13301 case OP_ATR_VAL:
13302 break;
13303
13304 case UNOP_IN_RANGE:
13305 case UNOP_QUAL:
323e0a4a
AC
13306 /* XXX: gdb_sprint_host_address, type_sprint */
13307 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13308 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13309 fprintf_filtered (stream, " (");
13310 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13311 fprintf_filtered (stream, ")");
13312 break;
13313 case BINOP_IN_BOUNDS:
52ce6436
PH
13314 fprintf_filtered (stream, " (%d)",
13315 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13316 break;
13317 case TERNOP_IN_RANGE:
13318 break;
13319
52ce6436
PH
13320 case OP_AGGREGATE:
13321 case OP_OTHERS:
13322 case OP_DISCRETE_RANGE:
13323 case OP_POSITIONAL:
13324 case OP_CHOICES:
13325 break;
13326
13327 case OP_NAME:
13328 case OP_STRING:
13329 {
13330 char *name = &exp->elts[elt + 2].string;
13331 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13332
52ce6436
PH
13333 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13334 break;
13335 }
13336
4c4b4cd2
PH
13337 default:
13338 return dump_subexp_body_standard (exp, stream, elt);
13339 }
13340
13341 elt += oplen;
13342 for (i = 0; i < nargs; i += 1)
13343 elt = dump_subexp (exp, stream, elt);
13344
13345 return elt;
13346}
13347
13348/* The Ada extension of print_subexp (q.v.). */
13349
76a01679
JB
13350static void
13351ada_print_subexp (struct expression *exp, int *pos,
dda83cd7 13352 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13353{
52ce6436 13354 int oplen, nargs, i;
4c4b4cd2
PH
13355 int pc = *pos;
13356 enum exp_opcode op = exp->elts[pc].opcode;
13357
13358 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13359
52ce6436 13360 *pos += oplen;
4c4b4cd2
PH
13361 switch (op)
13362 {
13363 default:
52ce6436 13364 *pos -= oplen;
4c4b4cd2
PH
13365 print_subexp_standard (exp, pos, stream, prec);
13366 return;
13367
13368 case OP_VAR_VALUE:
987012b8 13369 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13370 return;
13371
13372 case BINOP_IN_BOUNDS:
323e0a4a 13373 /* XXX: sprint_subexp */
4c4b4cd2 13374 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13375 fputs_filtered (" in ", stream);
4c4b4cd2 13376 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13377 fputs_filtered ("'range", stream);
4c4b4cd2 13378 if (exp->elts[pc + 1].longconst > 1)
dda83cd7
SM
13379 fprintf_filtered (stream, "(%ld)",
13380 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13381 return;
13382
13383 case TERNOP_IN_RANGE:
4c4b4cd2 13384 if (prec >= PREC_EQUAL)
dda83cd7 13385 fputs_filtered ("(", stream);
323e0a4a 13386 /* XXX: sprint_subexp */
4c4b4cd2 13387 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13388 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13389 print_subexp (exp, pos, stream, PREC_EQUAL);
13390 fputs_filtered (" .. ", stream);
13391 print_subexp (exp, pos, stream, PREC_EQUAL);
13392 if (prec >= PREC_EQUAL)
dda83cd7 13393 fputs_filtered (")", stream);
76a01679 13394 return;
4c4b4cd2
PH
13395
13396 case OP_ATR_FIRST:
13397 case OP_ATR_LAST:
13398 case OP_ATR_LENGTH:
13399 case OP_ATR_IMAGE:
13400 case OP_ATR_MAX:
13401 case OP_ATR_MIN:
13402 case OP_ATR_MODULUS:
13403 case OP_ATR_POS:
13404 case OP_ATR_SIZE:
13405 case OP_ATR_TAG:
13406 case OP_ATR_VAL:
4c4b4cd2 13407 if (exp->elts[*pos].opcode == OP_TYPE)
dda83cd7
SM
13408 {
13409 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13410 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
79d43c61 13411 &type_print_raw_options);
dda83cd7
SM
13412 *pos += 3;
13413 }
4c4b4cd2 13414 else
dda83cd7 13415 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13416 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13417 if (nargs > 1)
dda83cd7
SM
13418 {
13419 int tem;
13420
13421 for (tem = 1; tem < nargs; tem += 1)
13422 {
13423 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13424 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13425 }
13426 fputs_filtered (")", stream);
13427 }
4c4b4cd2 13428 return;
14f9c5c9 13429
4c4b4cd2 13430 case UNOP_QUAL:
4c4b4cd2
PH
13431 type_print (exp->elts[pc + 1].type, "", stream, 0);
13432 fputs_filtered ("'(", stream);
13433 print_subexp (exp, pos, stream, PREC_PREFIX);
13434 fputs_filtered (")", stream);
13435 return;
14f9c5c9 13436
4c4b4cd2 13437 case UNOP_IN_RANGE:
323e0a4a 13438 /* XXX: sprint_subexp */
4c4b4cd2 13439 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13440 fputs_filtered (" in ", stream);
79d43c61
TT
13441 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13442 &type_print_raw_options);
4c4b4cd2 13443 return;
52ce6436
PH
13444
13445 case OP_DISCRETE_RANGE:
13446 print_subexp (exp, pos, stream, PREC_SUFFIX);
13447 fputs_filtered ("..", stream);
13448 print_subexp (exp, pos, stream, PREC_SUFFIX);
13449 return;
13450
13451 case OP_OTHERS:
13452 fputs_filtered ("others => ", stream);
13453 print_subexp (exp, pos, stream, PREC_SUFFIX);
13454 return;
13455
13456 case OP_CHOICES:
13457 for (i = 0; i < nargs-1; i += 1)
13458 {
13459 if (i > 0)
13460 fputs_filtered ("|", stream);
13461 print_subexp (exp, pos, stream, PREC_SUFFIX);
13462 }
13463 fputs_filtered (" => ", stream);
13464 print_subexp (exp, pos, stream, PREC_SUFFIX);
13465 return;
13466
13467 case OP_POSITIONAL:
13468 print_subexp (exp, pos, stream, PREC_SUFFIX);
13469 return;
13470
13471 case OP_AGGREGATE:
13472 fputs_filtered ("(", stream);
13473 for (i = 0; i < nargs; i += 1)
13474 {
13475 if (i > 0)
13476 fputs_filtered (", ", stream);
13477 print_subexp (exp, pos, stream, PREC_SUFFIX);
13478 }
13479 fputs_filtered (")", stream);
13480 return;
4c4b4cd2
PH
13481 }
13482}
14f9c5c9
AS
13483
13484/* Table mapping opcodes into strings for printing operators
13485 and precedences of the operators. */
13486
d2e4a39e
AS
13487static const struct op_print ada_op_print_tab[] = {
13488 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13489 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13490 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13491 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13492 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13493 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13494 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13495 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13496 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13497 {">=", BINOP_GEQ, PREC_ORDER, 0},
13498 {">", BINOP_GTR, PREC_ORDER, 0},
13499 {"<", BINOP_LESS, PREC_ORDER, 0},
13500 {">>", BINOP_RSH, PREC_SHIFT, 0},
13501 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13502 {"+", BINOP_ADD, PREC_ADD, 0},
13503 {"-", BINOP_SUB, PREC_ADD, 0},
13504 {"&", BINOP_CONCAT, PREC_ADD, 0},
13505 {"*", BINOP_MUL, PREC_MUL, 0},
13506 {"/", BINOP_DIV, PREC_MUL, 0},
13507 {"rem", BINOP_REM, PREC_MUL, 0},
13508 {"mod", BINOP_MOD, PREC_MUL, 0},
13509 {"**", BINOP_EXP, PREC_REPEAT, 0},
13510 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13511 {"-", UNOP_NEG, PREC_PREFIX, 0},
13512 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13513 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13514 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13515 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13516 {".all", UNOP_IND, PREC_SUFFIX, 1},
13517 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13518 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13519 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9 13520};
6c038f32
PH
13521\f
13522 /* Language vector */
13523
6c038f32
PH
13524static const struct exp_descriptor ada_exp_descriptor = {
13525 ada_print_subexp,
13526 ada_operator_length,
c0201579 13527 ada_operator_check,
6c038f32
PH
13528 ada_dump_subexp_body,
13529 ada_evaluate_subexp
13530};
13531
b5ec771e
PA
13532/* symbol_name_matcher_ftype adapter for wild_match. */
13533
13534static bool
13535do_wild_match (const char *symbol_search_name,
13536 const lookup_name_info &lookup_name,
a207cff2 13537 completion_match_result *comp_match_res)
b5ec771e
PA
13538{
13539 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13540}
13541
13542/* symbol_name_matcher_ftype adapter for full_match. */
13543
13544static bool
13545do_full_match (const char *symbol_search_name,
13546 const lookup_name_info &lookup_name,
a207cff2 13547 completion_match_result *comp_match_res)
b5ec771e 13548{
959d6a67
TT
13549 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13550
13551 /* If both symbols start with "_ada_", just let the loop below
13552 handle the comparison. However, if only the symbol name starts
13553 with "_ada_", skip the prefix and let the match proceed as
13554 usual. */
13555 if (startswith (symbol_search_name, "_ada_")
13556 && !startswith (lname, "_ada"))
86b44259
TT
13557 symbol_search_name += 5;
13558
86b44259
TT
13559 int uscore_count = 0;
13560 while (*lname != '\0')
13561 {
13562 if (*symbol_search_name != *lname)
13563 {
13564 if (*symbol_search_name == 'B' && uscore_count == 2
13565 && symbol_search_name[1] == '_')
13566 {
13567 symbol_search_name += 2;
13568 while (isdigit (*symbol_search_name))
13569 ++symbol_search_name;
13570 if (symbol_search_name[0] == '_'
13571 && symbol_search_name[1] == '_')
13572 {
13573 symbol_search_name += 2;
13574 continue;
13575 }
13576 }
13577 return false;
13578 }
13579
13580 if (*symbol_search_name == '_')
13581 ++uscore_count;
13582 else
13583 uscore_count = 0;
13584
13585 ++symbol_search_name;
13586 ++lname;
13587 }
13588
13589 return is_name_suffix (symbol_search_name);
b5ec771e
PA
13590}
13591
a2cd4f14
JB
13592/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13593
13594static bool
13595do_exact_match (const char *symbol_search_name,
13596 const lookup_name_info &lookup_name,
13597 completion_match_result *comp_match_res)
13598{
13599 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13600}
13601
b5ec771e
PA
13602/* Build the Ada lookup name for LOOKUP_NAME. */
13603
13604ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13605{
e0802d59 13606 gdb::string_view user_name = lookup_name.name ();
b5ec771e 13607
6a780b67 13608 if (!user_name.empty () && user_name[0] == '<')
b5ec771e
PA
13609 {
13610 if (user_name.back () == '>')
e0802d59 13611 m_encoded_name
5ac58899 13612 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
b5ec771e 13613 else
e0802d59 13614 m_encoded_name
5ac58899 13615 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
b5ec771e
PA
13616 m_encoded_p = true;
13617 m_verbatim_p = true;
13618 m_wild_match_p = false;
13619 m_standard_p = false;
13620 }
13621 else
13622 {
13623 m_verbatim_p = false;
13624
e0802d59 13625 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13626
13627 if (!m_encoded_p)
13628 {
e0802d59 13629 const char *folded = ada_fold_name (user_name);
5c4258f4
TT
13630 m_encoded_name = ada_encode_1 (folded, false);
13631 if (m_encoded_name.empty ())
5ac58899 13632 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13633 }
13634 else
5ac58899 13635 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13636
13637 /* Handle the 'package Standard' special case. See description
13638 of m_standard_p. */
13639 if (startswith (m_encoded_name.c_str (), "standard__"))
13640 {
13641 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13642 m_standard_p = true;
13643 }
13644 else
13645 m_standard_p = false;
74ccd7f5 13646
b5ec771e
PA
13647 /* If the name contains a ".", then the user is entering a fully
13648 qualified entity name, and the match must not be done in wild
13649 mode. Similarly, if the user wants to complete what looks
13650 like an encoded name, the match must not be done in wild
13651 mode. Also, in the standard__ special case always do
13652 non-wild matching. */
13653 m_wild_match_p
13654 = (lookup_name.match_type () != symbol_name_match_type::FULL
13655 && !m_encoded_p
13656 && !m_standard_p
13657 && user_name.find ('.') == std::string::npos);
13658 }
13659}
13660
13661/* symbol_name_matcher_ftype method for Ada. This only handles
13662 completion mode. */
13663
13664static bool
13665ada_symbol_name_matches (const char *symbol_search_name,
13666 const lookup_name_info &lookup_name,
a207cff2 13667 completion_match_result *comp_match_res)
74ccd7f5 13668{
b5ec771e
PA
13669 return lookup_name.ada ().matches (symbol_search_name,
13670 lookup_name.match_type (),
a207cff2 13671 comp_match_res);
b5ec771e
PA
13672}
13673
de63c46b
PA
13674/* A name matcher that matches the symbol name exactly, with
13675 strcmp. */
13676
13677static bool
13678literal_symbol_name_matcher (const char *symbol_search_name,
13679 const lookup_name_info &lookup_name,
13680 completion_match_result *comp_match_res)
13681{
e0802d59 13682 gdb::string_view name_view = lookup_name.name ();
de63c46b 13683
e0802d59
TT
13684 if (lookup_name.completion_mode ()
13685 ? (strncmp (symbol_search_name, name_view.data (),
13686 name_view.size ()) == 0)
13687 : symbol_search_name == name_view)
de63c46b
PA
13688 {
13689 if (comp_match_res != NULL)
13690 comp_match_res->set_match (symbol_search_name);
13691 return true;
13692 }
13693 else
13694 return false;
13695}
13696
c9debfb9 13697/* Implement the "get_symbol_name_matcher" language_defn method for
b5ec771e
PA
13698 Ada. */
13699
13700static symbol_name_matcher_ftype *
13701ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13702{
de63c46b
PA
13703 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13704 return literal_symbol_name_matcher;
13705
b5ec771e
PA
13706 if (lookup_name.completion_mode ())
13707 return ada_symbol_name_matches;
74ccd7f5 13708 else
b5ec771e
PA
13709 {
13710 if (lookup_name.ada ().wild_match_p ())
13711 return do_wild_match;
a2cd4f14
JB
13712 else if (lookup_name.ada ().verbatim_p ())
13713 return do_exact_match;
b5ec771e
PA
13714 else
13715 return do_full_match;
13716 }
74ccd7f5
JB
13717}
13718
0874fd07
AB
13719/* Class representing the Ada language. */
13720
13721class ada_language : public language_defn
13722{
13723public:
13724 ada_language ()
0e25e767 13725 : language_defn (language_ada)
0874fd07 13726 { /* Nothing. */ }
5bd40f2a 13727
6f7664a9
AB
13728 /* See language.h. */
13729
13730 const char *name () const override
13731 { return "ada"; }
13732
13733 /* See language.h. */
13734
13735 const char *natural_name () const override
13736 { return "Ada"; }
13737
e171d6f1
AB
13738 /* See language.h. */
13739
13740 const std::vector<const char *> &filename_extensions () const override
13741 {
13742 static const std::vector<const char *> extensions
13743 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13744 return extensions;
13745 }
13746
5bd40f2a
AB
13747 /* Print an array element index using the Ada syntax. */
13748
13749 void print_array_index (struct type *index_type,
13750 LONGEST index,
13751 struct ui_file *stream,
13752 const value_print_options *options) const override
13753 {
13754 struct value *index_value = val_atr (index_type, index);
13755
00c696a6 13756 value_print (index_value, stream, options);
5bd40f2a
AB
13757 fprintf_filtered (stream, " => ");
13758 }
15e5fd35
AB
13759
13760 /* Implement the "read_var_value" language_defn method for Ada. */
13761
13762 struct value *read_var_value (struct symbol *var,
13763 const struct block *var_block,
13764 struct frame_info *frame) const override
13765 {
13766 /* The only case where default_read_var_value is not sufficient
13767 is when VAR is a renaming... */
13768 if (frame != nullptr)
13769 {
13770 const struct block *frame_block = get_frame_block (frame, NULL);
13771 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13772 return ada_read_renaming_var_value (var, frame_block);
13773 }
13774
13775 /* This is a typical case where we expect the default_read_var_value
13776 function to work. */
13777 return language_defn::read_var_value (var, var_block, frame);
13778 }
1fb314aa
AB
13779
13780 /* See language.h. */
13781 void language_arch_info (struct gdbarch *gdbarch,
13782 struct language_arch_info *lai) const override
13783 {
13784 const struct builtin_type *builtin = builtin_type (gdbarch);
13785
7bea47f0
AB
13786 /* Helper function to allow shorter lines below. */
13787 auto add = [&] (struct type *t)
13788 {
13789 lai->add_primitive_type (t);
13790 };
13791
13792 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13793 0, "integer"));
13794 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13795 0, "long_integer"));
13796 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13797 0, "short_integer"));
13798 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13799 0, "character");
13800 lai->set_string_char_type (char_type);
13801 add (char_type);
13802 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13803 "float", gdbarch_float_format (gdbarch)));
13804 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13805 "long_float", gdbarch_double_format (gdbarch)));
13806 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13807 0, "long_long_integer"));
13808 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13809 "long_long_float",
13810 gdbarch_long_double_format (gdbarch)));
13811 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13812 0, "natural"));
13813 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13814 0, "positive"));
13815 add (builtin->builtin_void);
13816
13817 struct type *system_addr_ptr
1fb314aa
AB
13818 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13819 "void"));
7bea47f0
AB
13820 system_addr_ptr->set_name ("system__address");
13821 add (system_addr_ptr);
1fb314aa
AB
13822
13823 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13824 type. This is a signed integral type whose size is the same as
13825 the size of addresses. */
7bea47f0
AB
13826 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
13827 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13828 "storage_offset"));
1fb314aa 13829
7bea47f0 13830 lai->set_bool_type (builtin->builtin_bool);
1fb314aa 13831 }
4009ee92
AB
13832
13833 /* See language.h. */
13834
13835 bool iterate_over_symbols
13836 (const struct block *block, const lookup_name_info &name,
13837 domain_enum domain,
13838 gdb::function_view<symbol_found_callback_ftype> callback) const override
13839 {
d1183b06
TT
13840 std::vector<struct block_symbol> results
13841 = ada_lookup_symbol_list_worker (name, block, domain, 0);
4009ee92
AB
13842 for (block_symbol &sym : results)
13843 {
13844 if (!callback (&sym))
13845 return false;
13846 }
13847
13848 return true;
13849 }
6f827019
AB
13850
13851 /* See language.h. */
13852 bool sniff_from_mangled_name (const char *mangled,
13853 char **out) const override
13854 {
13855 std::string demangled = ada_decode (mangled);
13856
13857 *out = NULL;
13858
13859 if (demangled != mangled && demangled[0] != '<')
13860 {
13861 /* Set the gsymbol language to Ada, but still return 0.
13862 Two reasons for that:
13863
13864 1. For Ada, we prefer computing the symbol's decoded name
13865 on the fly rather than pre-compute it, in order to save
13866 memory (Ada projects are typically very large).
13867
13868 2. There are some areas in the definition of the GNAT
13869 encoding where, with a bit of bad luck, we might be able
13870 to decode a non-Ada symbol, generating an incorrect
13871 demangled name (Eg: names ending with "TB" for instance
13872 are identified as task bodies and so stripped from
13873 the decoded name returned).
13874
13875 Returning true, here, but not setting *DEMANGLED, helps us get
13876 a little bit of the best of both worlds. Because we're last,
13877 we should not affect any of the other languages that were
13878 able to demangle the symbol before us; we get to correctly
13879 tag Ada symbols as such; and even if we incorrectly tagged a
13880 non-Ada symbol, which should be rare, any routing through the
13881 Ada language should be transparent (Ada tries to behave much
13882 like C/C++ with non-Ada symbols). */
13883 return true;
13884 }
13885
13886 return false;
13887 }
fbfb0a46
AB
13888
13889 /* See language.h. */
13890
5399db93 13891 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d
AB
13892 {
13893 return ada_la_decode (mangled, options);
13894 }
13895
13896 /* See language.h. */
13897
fbfb0a46
AB
13898 void print_type (struct type *type, const char *varstring,
13899 struct ui_file *stream, int show, int level,
13900 const struct type_print_options *flags) const override
13901 {
13902 ada_print_type (type, varstring, stream, show, level, flags);
13903 }
c9debfb9 13904
53fc67f8
AB
13905 /* See language.h. */
13906
13907 const char *word_break_characters (void) const override
13908 {
13909 return ada_completer_word_break_characters;
13910 }
13911
7e56227d
AB
13912 /* See language.h. */
13913
13914 void collect_symbol_completion_matches (completion_tracker &tracker,
13915 complete_symbol_mode mode,
13916 symbol_name_match_type name_match_type,
13917 const char *text, const char *word,
13918 enum type_code code) const override
13919 {
13920 struct symbol *sym;
13921 const struct block *b, *surrounding_static_block = 0;
13922 struct block_iterator iter;
13923
13924 gdb_assert (code == TYPE_CODE_UNDEF);
13925
13926 lookup_name_info lookup_name (text, name_match_type, true);
13927
13928 /* First, look at the partial symtab symbols. */
13929 expand_symtabs_matching (NULL,
13930 lookup_name,
13931 NULL,
13932 NULL,
13933 ALL_DOMAIN);
13934
13935 /* At this point scan through the misc symbol vectors and add each
13936 symbol you find to the list. Eventually we want to ignore
13937 anything that isn't a text symbol (everything else will be
13938 handled by the psymtab code above). */
13939
13940 for (objfile *objfile : current_program_space->objfiles ())
13941 {
13942 for (minimal_symbol *msymbol : objfile->msymbols ())
13943 {
13944 QUIT;
13945
13946 if (completion_skip_symbol (mode, msymbol))
13947 continue;
13948
13949 language symbol_language = msymbol->language ();
13950
13951 /* Ada minimal symbols won't have their language set to Ada. If
13952 we let completion_list_add_name compare using the
13953 default/C-like matcher, then when completing e.g., symbols in a
13954 package named "pck", we'd match internal Ada symbols like
13955 "pckS", which are invalid in an Ada expression, unless you wrap
13956 them in '<' '>' to request a verbatim match.
13957
13958 Unfortunately, some Ada encoded names successfully demangle as
13959 C++ symbols (using an old mangling scheme), such as "name__2Xn"
13960 -> "Xn::name(void)" and thus some Ada minimal symbols end up
13961 with the wrong language set. Paper over that issue here. */
13962 if (symbol_language == language_auto
13963 || symbol_language == language_cplus)
13964 symbol_language = language_ada;
13965
13966 completion_list_add_name (tracker,
13967 symbol_language,
13968 msymbol->linkage_name (),
13969 lookup_name, text, word);
13970 }
13971 }
13972
13973 /* Search upwards from currently selected frame (so that we can
13974 complete on local vars. */
13975
13976 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13977 {
13978 if (!BLOCK_SUPERBLOCK (b))
13979 surrounding_static_block = b; /* For elmin of dups */
13980
13981 ALL_BLOCK_SYMBOLS (b, iter, sym)
13982 {
13983 if (completion_skip_symbol (mode, sym))
13984 continue;
13985
13986 completion_list_add_name (tracker,
13987 sym->language (),
13988 sym->linkage_name (),
13989 lookup_name, text, word);
13990 }
13991 }
13992
13993 /* Go through the symtabs and check the externs and statics for
13994 symbols which match. */
13995
13996 for (objfile *objfile : current_program_space->objfiles ())
13997 {
13998 for (compunit_symtab *s : objfile->compunits ())
13999 {
14000 QUIT;
14001 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
14002 ALL_BLOCK_SYMBOLS (b, iter, sym)
14003 {
14004 if (completion_skip_symbol (mode, sym))
14005 continue;
14006
14007 completion_list_add_name (tracker,
14008 sym->language (),
14009 sym->linkage_name (),
14010 lookup_name, text, word);
14011 }
14012 }
14013 }
14014
14015 for (objfile *objfile : current_program_space->objfiles ())
14016 {
14017 for (compunit_symtab *s : objfile->compunits ())
14018 {
14019 QUIT;
14020 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
14021 /* Don't do this block twice. */
14022 if (b == surrounding_static_block)
14023 continue;
14024 ALL_BLOCK_SYMBOLS (b, iter, sym)
14025 {
14026 if (completion_skip_symbol (mode, sym))
14027 continue;
14028
14029 completion_list_add_name (tracker,
14030 sym->language (),
14031 sym->linkage_name (),
14032 lookup_name, text, word);
14033 }
14034 }
14035 }
14036 }
14037
f16a9f57
AB
14038 /* See language.h. */
14039
14040 gdb::unique_xmalloc_ptr<char> watch_location_expression
14041 (struct type *type, CORE_ADDR addr) const override
14042 {
14043 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
14044 std::string name = type_to_string (type);
14045 return gdb::unique_xmalloc_ptr<char>
14046 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
14047 }
14048
a1d1fa3e
AB
14049 /* See language.h. */
14050
14051 void value_print (struct value *val, struct ui_file *stream,
14052 const struct value_print_options *options) const override
14053 {
14054 return ada_value_print (val, stream, options);
14055 }
14056
ebe2334e
AB
14057 /* See language.h. */
14058
14059 void value_print_inner
14060 (struct value *val, struct ui_file *stream, int recurse,
14061 const struct value_print_options *options) const override
14062 {
14063 return ada_value_print_inner (val, stream, recurse, options);
14064 }
14065
a78a19b1
AB
14066 /* See language.h. */
14067
14068 struct block_symbol lookup_symbol_nonlocal
14069 (const char *name, const struct block *block,
14070 const domain_enum domain) const override
14071 {
14072 struct block_symbol sym;
14073
14074 sym = ada_lookup_symbol (name, block_static_block (block), domain);
14075 if (sym.symbol != NULL)
14076 return sym;
14077
14078 /* If we haven't found a match at this point, try the primitive
14079 types. In other languages, this search is performed before
14080 searching for global symbols in order to short-circuit that
14081 global-symbol search if it happens that the name corresponds
14082 to a primitive type. But we cannot do the same in Ada, because
14083 it is perfectly legitimate for a program to declare a type which
14084 has the same name as a standard type. If looking up a type in
14085 that situation, we have traditionally ignored the primitive type
14086 in favor of user-defined types. This is why, unlike most other
14087 languages, we search the primitive types this late and only after
14088 having searched the global symbols without success. */
14089
14090 if (domain == VAR_DOMAIN)
14091 {
14092 struct gdbarch *gdbarch;
14093
14094 if (block == NULL)
14095 gdbarch = target_gdbarch ();
14096 else
14097 gdbarch = block_gdbarch (block);
14098 sym.symbol
14099 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
14100 if (sym.symbol != NULL)
14101 return sym;
14102 }
14103
14104 return {};
14105 }
14106
87afa652
AB
14107 /* See language.h. */
14108
14109 int parser (struct parser_state *ps) const override
14110 {
14111 warnings_issued = 0;
14112 return ada_parse (ps);
14113 }
14114
1bf9c363
AB
14115 /* See language.h.
14116
14117 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14118 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14119 namespace) and converts operators that are user-defined into
14120 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
14121 a preferred result type [at the moment, only type void has any
14122 effect---causing procedures to be preferred over functions in calls].
14123 A null CONTEXT_TYPE indicates that a non-void return type is
14124 preferred. May change (expand) *EXP. */
14125
c5c41205
TT
14126 void post_parser (expression_up *expp, struct parser_state *ps)
14127 const override
1bf9c363
AB
14128 {
14129 struct type *context_type = NULL;
14130 int pc = 0;
14131
c5c41205 14132 if (ps->void_context_p)
1bf9c363
AB
14133 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14134
c5c41205
TT
14135 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
14136 ps->block_tracker);
1bf9c363
AB
14137 }
14138
ec8cec5b
AB
14139 /* See language.h. */
14140
14141 void emitchar (int ch, struct type *chtype,
14142 struct ui_file *stream, int quoter) const override
14143 {
14144 ada_emit_char (ch, chtype, stream, quoter, 1);
14145 }
14146
52b50f2c
AB
14147 /* See language.h. */
14148
14149 void printchar (int ch, struct type *chtype,
14150 struct ui_file *stream) const override
14151 {
14152 ada_printchar (ch, chtype, stream);
14153 }
14154
d711ee67
AB
14155 /* See language.h. */
14156
14157 void printstr (struct ui_file *stream, struct type *elttype,
14158 const gdb_byte *string, unsigned int length,
14159 const char *encoding, int force_ellipses,
14160 const struct value_print_options *options) const override
14161 {
14162 ada_printstr (stream, elttype, string, length, encoding,
14163 force_ellipses, options);
14164 }
14165
4ffc13fb
AB
14166 /* See language.h. */
14167
14168 void print_typedef (struct type *type, struct symbol *new_symbol,
14169 struct ui_file *stream) const override
14170 {
14171 ada_print_typedef (type, new_symbol, stream);
14172 }
14173
39e7ecca
AB
14174 /* See language.h. */
14175
14176 bool is_string_type_p (struct type *type) const override
14177 {
14178 return ada_is_string_type (type);
14179 }
14180
22e3f3ed
AB
14181 /* See language.h. */
14182
14183 const char *struct_too_deep_ellipsis () const override
14184 { return "(...)"; }
39e7ecca 14185
67bd3fd5
AB
14186 /* See language.h. */
14187
14188 bool c_style_arrays_p () const override
14189 { return false; }
14190
d3355e4d
AB
14191 /* See language.h. */
14192
14193 bool store_sym_names_in_linkage_form_p () const override
14194 { return true; }
14195
b63a3f3f
AB
14196 /* See language.h. */
14197
14198 const struct lang_varobj_ops *varobj_ops () const override
14199 { return &ada_varobj_ops; }
14200
5aba6ebe
AB
14201 /* See language.h. */
14202
14203 const struct exp_descriptor *expression_ops () const override
14204 { return &ada_exp_descriptor; }
14205
b7c6e27d
AB
14206 /* See language.h. */
14207
14208 const struct op_print *opcode_print_table () const override
14209 { return ada_op_print_tab; }
14210
c9debfb9
AB
14211protected:
14212 /* See language.h. */
14213
14214 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14215 (const lookup_name_info &lookup_name) const override
14216 {
14217 return ada_get_symbol_name_matcher (lookup_name);
14218 }
0874fd07
AB
14219};
14220
14221/* Single instance of the Ada language class. */
14222
14223static ada_language ada_language_defn;
14224
5bf03f13
JB
14225/* Command-list for the "set/show ada" prefix command. */
14226static struct cmd_list_element *set_ada_list;
14227static struct cmd_list_element *show_ada_list;
14228
2060206e
PA
14229static void
14230initialize_ada_catchpoint_ops (void)
14231{
14232 struct breakpoint_ops *ops;
14233
14234 initialize_breakpoint_ops ();
14235
14236 ops = &catch_exception_breakpoint_ops;
14237 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14238 ops->allocate_location = allocate_location_exception;
14239 ops->re_set = re_set_exception;
14240 ops->check_status = check_status_exception;
14241 ops->print_it = print_it_exception;
14242 ops->print_one = print_one_exception;
14243 ops->print_mention = print_mention_exception;
14244 ops->print_recreate = print_recreate_exception;
2060206e
PA
14245
14246 ops = &catch_exception_unhandled_breakpoint_ops;
14247 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14248 ops->allocate_location = allocate_location_exception;
14249 ops->re_set = re_set_exception;
14250 ops->check_status = check_status_exception;
14251 ops->print_it = print_it_exception;
14252 ops->print_one = print_one_exception;
14253 ops->print_mention = print_mention_exception;
14254 ops->print_recreate = print_recreate_exception;
2060206e
PA
14255
14256 ops = &catch_assert_breakpoint_ops;
14257 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14258 ops->allocate_location = allocate_location_exception;
14259 ops->re_set = re_set_exception;
14260 ops->check_status = check_status_exception;
14261 ops->print_it = print_it_exception;
14262 ops->print_one = print_one_exception;
14263 ops->print_mention = print_mention_exception;
14264 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14265
14266 ops = &catch_handlers_breakpoint_ops;
14267 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14268 ops->allocate_location = allocate_location_exception;
14269 ops->re_set = re_set_exception;
14270 ops->check_status = check_status_exception;
14271 ops->print_it = print_it_exception;
14272 ops->print_one = print_one_exception;
14273 ops->print_mention = print_mention_exception;
14274 ops->print_recreate = print_recreate_exception;
2060206e
PA
14275}
14276
3d9434b5
JB
14277/* This module's 'new_objfile' observer. */
14278
14279static void
14280ada_new_objfile_observer (struct objfile *objfile)
14281{
14282 ada_clear_symbol_cache ();
14283}
14284
14285/* This module's 'free_objfile' observer. */
14286
14287static void
14288ada_free_objfile_observer (struct objfile *objfile)
14289{
14290 ada_clear_symbol_cache ();
14291}
14292
6c265988 14293void _initialize_ada_language ();
d2e4a39e 14294void
6c265988 14295_initialize_ada_language ()
14f9c5c9 14296{
2060206e
PA
14297 initialize_ada_catchpoint_ops ();
14298
0743fc83
TT
14299 add_basic_prefix_cmd ("ada", no_class,
14300 _("Prefix command for changing Ada-specific settings."),
14301 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14302
0743fc83
TT
14303 add_show_prefix_cmd ("ada", no_class,
14304 _("Generic command for showing Ada-specific settings."),
14305 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14306
14307 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
dda83cd7 14308 &trust_pad_over_xvs, _("\
590042fc
PW
14309Enable or disable an optimization trusting PAD types over XVS types."), _("\
14310Show whether an optimization trusting PAD types over XVS types is activated."),
dda83cd7 14311 _("\
5bf03f13
JB
14312This is related to the encoding used by the GNAT compiler. The debugger\n\
14313should normally trust the contents of PAD types, but certain older versions\n\
14314of GNAT have a bug that sometimes causes the information in the PAD type\n\
14315to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14316work around this bug. It is always safe to turn this option \"off\", but\n\
14317this incurs a slight performance penalty, so it is recommended to NOT change\n\
14318this option to \"off\" unless necessary."),
dda83cd7 14319 NULL, NULL, &set_ada_list, &show_ada_list);
5bf03f13 14320
d72413e6
PMR
14321 add_setshow_boolean_cmd ("print-signatures", class_vars,
14322 &print_signatures, _("\
14323Enable or disable the output of formal and return types for functions in the \
590042fc 14324overloads selection menu."), _("\
d72413e6 14325Show whether the output of formal and return types for functions in the \
590042fc 14326overloads selection menu is activated."),
d72413e6
PMR
14327 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14328
9ac4176b
PA
14329 add_catch_command ("exception", _("\
14330Catch Ada exceptions, when raised.\n\
9bf7038b 14331Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14332Without any argument, stop when any Ada exception is raised.\n\
14333If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14334being raised does not have a handler (and will therefore lead to the task's\n\
14335termination).\n\
14336Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14337raised is the same as ARG.\n\
14338CONDITION is a boolean expression that is evaluated to see whether the\n\
14339exception should cause a stop."),
9ac4176b 14340 catch_ada_exception_command,
71bed2db 14341 catch_ada_completer,
9ac4176b
PA
14342 CATCH_PERMANENT,
14343 CATCH_TEMPORARY);
9f757bf7
XR
14344
14345 add_catch_command ("handlers", _("\
14346Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14347Usage: catch handlers [ARG] [if CONDITION]\n\
14348Without any argument, stop when any Ada exception is handled.\n\
14349With an argument, catch only exceptions with the given name.\n\
14350CONDITION is a boolean expression that is evaluated to see whether the\n\
14351exception should cause a stop."),
9f757bf7 14352 catch_ada_handlers_command,
dda83cd7 14353 catch_ada_completer,
9f757bf7
XR
14354 CATCH_PERMANENT,
14355 CATCH_TEMPORARY);
9ac4176b
PA
14356 add_catch_command ("assert", _("\
14357Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14358Usage: catch assert [if CONDITION]\n\
14359CONDITION is a boolean expression that is evaluated to see whether the\n\
14360exception should cause a stop."),
9ac4176b 14361 catch_assert_command,
dda83cd7 14362 NULL,
9ac4176b
PA
14363 CATCH_PERMANENT,
14364 CATCH_TEMPORARY);
14365
6c038f32 14366 varsize_limit = 65536;
3fcded8f
JB
14367 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14368 &varsize_limit, _("\
14369Set the maximum number of bytes allowed in a variable-size object."), _("\
14370Show the maximum number of bytes allowed in a variable-size object."), _("\
14371Attempts to access an object whose size is not a compile-time constant\n\
14372and exceeds this limit will cause an error."),
14373 NULL, NULL, &setlist, &showlist);
6c038f32 14374
778865d3
JB
14375 add_info ("exceptions", info_exceptions_command,
14376 _("\
14377List all Ada exception names.\n\
9bf7038b 14378Usage: info exceptions [REGEXP]\n\
778865d3
JB
14379If a regular expression is passed as an argument, only those matching\n\
14380the regular expression are listed."));
14381
0743fc83
TT
14382 add_basic_prefix_cmd ("ada", class_maintenance,
14383 _("Set Ada maintenance-related variables."),
14384 &maint_set_ada_cmdlist, "maintenance set ada ",
14385 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14386
0743fc83
TT
14387 add_show_prefix_cmd ("ada", class_maintenance,
14388 _("Show Ada maintenance-related variables."),
14389 &maint_show_ada_cmdlist, "maintenance show ada ",
14390 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14391
14392 add_setshow_boolean_cmd
14393 ("ignore-descriptive-types", class_maintenance,
14394 &ada_ignore_descriptive_types_p,
14395 _("Set whether descriptive types generated by GNAT should be ignored."),
14396 _("Show whether descriptive types generated by GNAT should be ignored."),
14397 _("\
14398When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14399DWARF attribute."),
14400 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14401
459a2e4c
TT
14402 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14403 NULL, xcalloc, xfree);
6b69afc4 14404
3d9434b5 14405 /* The ada-lang observers. */
76727919
TT
14406 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14407 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14408 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14409}
This page took 3.424378 seconds and 4 git commands to generate.