Implement Ada min and max operations
[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
d9e7db06 10117value *
faa1dfd7
TT
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
6e8fb7b7 10137value *
214b13ac
TT
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
1b1ebfab 10159value *
5ce19db8
TT
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
82c3886e 10240value *
b467efaa
TT
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
6ad3b8bf 10397struct value *
38dc70cf
TT
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
73796c73
TT
10495value *
10496ada_binop_addsub_operation::evaluate (struct type *expect_type,
10497 struct expression *exp,
10498 enum noside noside)
10499{
10500 value *arg1 = std::get<1> (m_storage)->evaluate_with_coercion (exp, noside);
10501 value *arg2 = std::get<2> (m_storage)->evaluate_with_coercion (exp, noside);
10502
10503 auto do_op = [=] (LONGEST x, LONGEST y)
10504 {
10505 if (std::get<0> (m_storage) == BINOP_ADD)
10506 return x + y;
10507 return x - y;
10508 };
10509
10510 if (value_type (arg1)->code () == TYPE_CODE_PTR)
10511 return (value_from_longest
10512 (value_type (arg1),
10513 do_op (value_as_long (arg1), value_as_long (arg2))));
10514 if (value_type (arg2)->code () == TYPE_CODE_PTR)
10515 return (value_from_longest
10516 (value_type (arg2),
10517 do_op (value_as_long (arg1), value_as_long (arg2))));
10518 /* Preserve the original type for use by the range case below.
10519 We cannot cast the result to a reference type, so if ARG1 is
10520 a reference type, find its underlying type. */
10521 struct type *type = value_type (arg1);
10522 while (type->code () == TYPE_CODE_REF)
10523 type = TYPE_TARGET_TYPE (type);
10524 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10525 arg1 = value_binop (arg1, arg2, std::get<0> (m_storage));
10526 /* We need to special-case the result with a range.
10527 This is done for the benefit of "ptype". gdb's Ada support
10528 historically used the LHS to set the result type here, so
10529 preserve this behavior. */
10530 if (type->code () == TYPE_CODE_RANGE)
10531 arg1 = value_cast (type, arg1);
10532 return arg1;
10533}
10534
60fa02ca
TT
10535value *
10536ada_unop_atr_operation::evaluate (struct type *expect_type,
10537 struct expression *exp,
10538 enum noside noside)
10539{
10540 struct type *type_arg = nullptr;
10541 value *val = nullptr;
10542
10543 if (std::get<0> (m_storage)->opcode () == OP_TYPE)
10544 {
10545 value *tem = std::get<0> (m_storage)->evaluate (nullptr, exp,
10546 EVAL_AVOID_SIDE_EFFECTS);
10547 type_arg = value_type (tem);
10548 }
10549 else
10550 val = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
10551
10552 return ada_unop_atr (exp, noside, std::get<1> (m_storage),
10553 val, type_arg, std::get<2> (m_storage));
10554}
10555
3f4a0053
TT
10556value *
10557ada_var_msym_value_operation::evaluate_for_cast (struct type *expect_type,
10558 struct expression *exp,
10559 enum noside noside)
10560{
10561 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10562 return value_zero (expect_type, not_lval);
10563
10564 value *val = evaluate_var_msym_value (noside,
10565 std::get<1> (m_storage),
10566 std::get<0> (m_storage));
10567
10568 val = ada_value_cast (expect_type, val);
10569
10570 /* Follow the Ada language semantics that do not allow taking
10571 an address of the result of a cast (view conversion in Ada). */
10572 if (VALUE_LVAL (val) == lval_memory)
10573 {
10574 if (value_lazy (val))
10575 value_fetch_lazy (val);
10576 VALUE_LVAL (val) = not_lval;
10577 }
10578 return val;
10579}
10580
99a3b1e7
TT
10581value *
10582ada_var_value_operation::evaluate_for_cast (struct type *expect_type,
10583 struct expression *exp,
10584 enum noside noside)
10585{
10586 value *val = evaluate_var_value (noside,
10587 std::get<1> (m_storage),
10588 std::get<0> (m_storage));
10589
10590 val = ada_value_cast (expect_type, val);
10591
10592 /* Follow the Ada language semantics that do not allow taking
10593 an address of the result of a cast (view conversion in Ada). */
10594 if (VALUE_LVAL (val) == lval_memory)
10595 {
10596 if (value_lazy (val))
10597 value_fetch_lazy (val);
10598 VALUE_LVAL (val) = not_lval;
10599 }
10600 return val;
10601}
10602
10603value *
10604ada_var_value_operation::evaluate (struct type *expect_type,
10605 struct expression *exp,
10606 enum noside noside)
10607{
10608 symbol *sym = std::get<0> (m_storage);
10609
10610 if (SYMBOL_DOMAIN (sym) == UNDEF_DOMAIN)
10611 /* Only encountered when an unresolved symbol occurs in a
10612 context other than a function call, in which case, it is
10613 invalid. */
10614 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10615 sym->print_name ());
10616
10617 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10618 {
10619 struct type *type = static_unwrap_type (SYMBOL_TYPE (sym));
10620 /* Check to see if this is a tagged type. We also need to handle
10621 the case where the type is a reference to a tagged type, but
10622 we have to be careful to exclude pointers to tagged types.
10623 The latter should be shown as usual (as a pointer), whereas
10624 a reference should mostly be transparent to the user. */
10625 if (ada_is_tagged_type (type, 0)
10626 || (type->code () == TYPE_CODE_REF
10627 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
10628 {
10629 /* Tagged types are a little special in the fact that the real
10630 type is dynamic and can only be determined by inspecting the
10631 object's tag. This means that we need to get the object's
10632 value first (EVAL_NORMAL) and then extract the actual object
10633 type from its tag.
10634
10635 Note that we cannot skip the final step where we extract
10636 the object type from its tag, because the EVAL_NORMAL phase
10637 results in dynamic components being resolved into fixed ones.
10638 This can cause problems when trying to print the type
10639 description of tagged types whose parent has a dynamic size:
10640 We use the type name of the "_parent" component in order
10641 to print the name of the ancestor type in the type description.
10642 If that component had a dynamic size, the resolution into
10643 a fixed type would result in the loss of that type name,
10644 thus preventing us from printing the name of the ancestor
10645 type in the type description. */
10646 value *arg1 = var_value_operation::evaluate (nullptr, exp,
10647 EVAL_NORMAL);
10648
10649 if (type->code () != TYPE_CODE_REF)
10650 {
10651 struct type *actual_type;
10652
10653 actual_type = type_from_tag (ada_value_tag (arg1));
10654 if (actual_type == NULL)
10655 /* If, for some reason, we were unable to determine
10656 the actual type from the tag, then use the static
10657 approximation that we just computed as a fallback.
10658 This can happen if the debugging information is
10659 incomplete, for instance. */
10660 actual_type = type;
10661 return value_zero (actual_type, not_lval);
10662 }
10663 else
10664 {
10665 /* In the case of a ref, ada_coerce_ref takes care
10666 of determining the actual type. But the evaluation
10667 should return a ref as it should be valid to ask
10668 for its address; so rebuild a ref after coerce. */
10669 arg1 = ada_coerce_ref (arg1);
10670 return value_ref (arg1, TYPE_CODE_REF);
10671 }
10672 }
10673
10674 /* Records and unions for which GNAT encodings have been
10675 generated need to be statically fixed as well.
10676 Otherwise, non-static fixing produces a type where
10677 all dynamic properties are removed, which prevents "ptype"
10678 from being able to completely describe the type.
10679 For instance, a case statement in a variant record would be
10680 replaced by the relevant components based on the actual
10681 value of the discriminants. */
10682 if ((type->code () == TYPE_CODE_STRUCT
10683 && dynamic_template_type (type) != NULL)
10684 || (type->code () == TYPE_CODE_UNION
10685 && ada_find_parallel_type (type, "___XVU") != NULL))
10686 return value_zero (to_static_fixed_type (type), not_lval);
10687 }
10688
10689 value *arg1 = var_value_operation::evaluate (expect_type, exp, noside);
10690 return ada_to_fixed_value (arg1);
10691}
10692
03070ee9
TT
10693}
10694
284614f0
JB
10695/* Implement the evaluate_exp routine in the exp_descriptor structure
10696 for the Ada language. */
10697
52ce6436 10698static struct value *
ebf56fd3 10699ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
dda83cd7 10700 int *pos, enum noside noside)
14f9c5c9
AS
10701{
10702 enum exp_opcode op;
b5385fc0 10703 int tem;
14f9c5c9 10704 int pc;
5ec18f2b 10705 int preeval_pos;
14f9c5c9
AS
10706 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10707 struct type *type;
52ce6436 10708 int nargs, oplen;
d2e4a39e 10709 struct value **argvec;
14f9c5c9 10710
d2e4a39e
AS
10711 pc = *pos;
10712 *pos += 1;
14f9c5c9
AS
10713 op = exp->elts[pc].opcode;
10714
d2e4a39e 10715 switch (op)
14f9c5c9
AS
10716 {
10717 default:
10718 *pos -= 1;
6e48bd2c 10719 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10720
10721 if (noside == EVAL_NORMAL)
10722 arg1 = unwrap_value (arg1);
6e48bd2c 10723
edd079d9 10724 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
dda83cd7
SM
10725 then we need to perform the conversion manually, because
10726 evaluate_subexp_standard doesn't do it. This conversion is
10727 necessary in Ada because the different kinds of float/fixed
10728 types in Ada have different representations.
6e48bd2c 10729
dda83cd7
SM
10730 Similarly, we need to perform the conversion from OP_LONG
10731 ourselves. */
edd079d9 10732 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
dda83cd7 10733 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10734
10735 return arg1;
4c4b4cd2
PH
10736
10737 case OP_STRING:
10738 {
dda83cd7
SM
10739 struct value *result;
10740
10741 *pos -= 1;
10742 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10743 /* The result type will have code OP_STRING, bashed there from
10744 OP_ARRAY. Bash it back. */
10745 if (value_type (result)->code () == TYPE_CODE_STRING)
10746 value_type (result)->set_code (TYPE_CODE_ARRAY);
10747 return result;
4c4b4cd2 10748 }
14f9c5c9
AS
10749
10750 case UNOP_CAST:
10751 (*pos) += 2;
10752 type = exp->elts[pc + 1].type;
ced9779b 10753 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10754
4c4b4cd2
PH
10755 case UNOP_QUAL:
10756 (*pos) += 2;
10757 type = exp->elts[pc + 1].type;
10758 return ada_evaluate_subexp (type, exp, pos, noside);
10759
14f9c5c9 10760 case BINOP_ASSIGN:
fe1fe7ea 10761 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
52ce6436
PH
10762 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10763 {
10764 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10765 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10766 return arg1;
10767 return ada_value_assign (arg1, arg1);
10768 }
003f3813 10769 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
dda83cd7
SM
10770 except if the lhs of our assignment is a convenience variable.
10771 In the case of assigning to a convenience variable, the lhs
10772 should be exactly the result of the evaluation of the rhs. */
003f3813
JB
10773 type = value_type (arg1);
10774 if (VALUE_LVAL (arg1) == lval_internalvar)
dda83cd7 10775 type = NULL;
003f3813 10776 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10777 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10778 return arg1;
f411722c
TT
10779 if (VALUE_LVAL (arg1) == lval_internalvar)
10780 {
10781 /* Nothing. */
10782 }
d2e4a39e 10783 else
dda83cd7 10784 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10785 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10786
10787 case BINOP_ADD:
10788 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10789 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10790 if (noside == EVAL_SKIP)
dda83cd7 10791 goto nosideret;
78134374 10792 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10793 return (value_from_longest
10794 (value_type (arg1),
10795 value_as_long (arg1) + value_as_long (arg2)));
78134374 10796 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10797 return (value_from_longest
10798 (value_type (arg2),
10799 value_as_long (arg1) + value_as_long (arg2)));
b49180ac
TT
10800 /* Preserve the original type for use by the range case below.
10801 We cannot cast the result to a reference type, so if ARG1 is
10802 a reference type, find its underlying type. */
b7789565 10803 type = value_type (arg1);
78134374 10804 while (type->code () == TYPE_CODE_REF)
dda83cd7 10805 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10806 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10807 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10808 /* We need to special-case the result of adding to a range.
10809 This is done for the benefit of "ptype". gdb's Ada support
10810 historically used the LHS to set the result type here, so
10811 preserve this behavior. */
10812 if (type->code () == TYPE_CODE_RANGE)
10813 arg1 = value_cast (type, arg1);
10814 return arg1;
14f9c5c9
AS
10815
10816 case BINOP_SUB:
10817 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10818 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10819 if (noside == EVAL_SKIP)
dda83cd7 10820 goto nosideret;
78134374 10821 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10822 return (value_from_longest
10823 (value_type (arg1),
10824 value_as_long (arg1) - value_as_long (arg2)));
78134374 10825 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10826 return (value_from_longest
10827 (value_type (arg2),
10828 value_as_long (arg1) - value_as_long (arg2)));
b49180ac
TT
10829 /* Preserve the original type for use by the range case below.
10830 We cannot cast the result to a reference type, so if ARG1 is
10831 a reference type, find its underlying type. */
b7789565 10832 type = value_type (arg1);
78134374 10833 while (type->code () == TYPE_CODE_REF)
dda83cd7 10834 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10835 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10836 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10837 /* We need to special-case the result of adding to a range.
10838 This is done for the benefit of "ptype". gdb's Ada support
10839 historically used the LHS to set the result type here, so
10840 preserve this behavior. */
10841 if (type->code () == TYPE_CODE_RANGE)
10842 arg1 = value_cast (type, arg1);
10843 return arg1;
14f9c5c9
AS
10844
10845 case BINOP_MUL:
10846 case BINOP_DIV:
e1578042
JB
10847 case BINOP_REM:
10848 case BINOP_MOD:
fe1fe7ea
SM
10849 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10850 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10851 if (noside == EVAL_SKIP)
dda83cd7 10852 goto nosideret;
faa1dfd7
TT
10853 return ada_mult_binop (expect_type, exp, noside, op,
10854 arg1, arg2);
4c4b4cd2 10855
4c4b4cd2
PH
10856 case BINOP_EQUAL:
10857 case BINOP_NOTEQUAL:
fe1fe7ea 10858 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
df407dfe 10859 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10860 if (noside == EVAL_SKIP)
dda83cd7 10861 goto nosideret;
214b13ac 10862 return ada_equal_binop (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
10863
10864 case UNOP_NEG:
fe1fe7ea 10865 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
82390ab8 10866 return ada_unop_neg (expect_type, exp, noside, op, arg1);
4c4b4cd2 10867
2330c6c6
JB
10868 case BINOP_LOGICAL_AND:
10869 case BINOP_LOGICAL_OR:
10870 case UNOP_LOGICAL_NOT:
000d5124 10871 {
dda83cd7 10872 struct value *val;
000d5124 10873
dda83cd7
SM
10874 *pos -= 1;
10875 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1 10876 type = language_bool_type (exp->language_defn, exp->gdbarch);
dda83cd7 10877 return value_cast (type, val);
000d5124 10878 }
2330c6c6
JB
10879
10880 case BINOP_BITWISE_AND:
10881 case BINOP_BITWISE_IOR:
10882 case BINOP_BITWISE_XOR:
000d5124 10883 {
dda83cd7 10884 struct value *val;
000d5124 10885
fe1fe7ea
SM
10886 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10887 *pos = pc;
dda83cd7 10888 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
000d5124 10889
dda83cd7 10890 return value_cast (value_type (arg1), val);
000d5124 10891 }
2330c6c6 10892
14f9c5c9
AS
10893 case OP_VAR_VALUE:
10894 *pos -= 1;
6799def4 10895
14f9c5c9 10896 if (noside == EVAL_SKIP)
dda83cd7
SM
10897 {
10898 *pos += 4;
10899 goto nosideret;
10900 }
da5c522f
JB
10901
10902 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7
SM
10903 /* Only encountered when an unresolved symbol occurs in a
10904 context other than a function call, in which case, it is
10905 invalid. */
10906 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10907 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10908
10909 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10910 {
10911 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10912 /* Check to see if this is a tagged type. We also need to handle
10913 the case where the type is a reference to a tagged type, but
10914 we have to be careful to exclude pointers to tagged types.
10915 The latter should be shown as usual (as a pointer), whereas
10916 a reference should mostly be transparent to the user. */
10917 if (ada_is_tagged_type (type, 0)
10918 || (type->code () == TYPE_CODE_REF
10919 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10920 {
10921 /* Tagged types are a little special in the fact that the real
10922 type is dynamic and can only be determined by inspecting the
10923 object's tag. This means that we need to get the object's
10924 value first (EVAL_NORMAL) and then extract the actual object
10925 type from its tag.
10926
10927 Note that we cannot skip the final step where we extract
10928 the object type from its tag, because the EVAL_NORMAL phase
10929 results in dynamic components being resolved into fixed ones.
10930 This can cause problems when trying to print the type
10931 description of tagged types whose parent has a dynamic size:
10932 We use the type name of the "_parent" component in order
10933 to print the name of the ancestor type in the type description.
10934 If that component had a dynamic size, the resolution into
10935 a fixed type would result in the loss of that type name,
10936 thus preventing us from printing the name of the ancestor
10937 type in the type description. */
fe1fe7ea 10938 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
0d72a7c3 10939
78134374 10940 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10941 {
10942 struct type *actual_type;
10943
10944 actual_type = type_from_tag (ada_value_tag (arg1));
10945 if (actual_type == NULL)
10946 /* If, for some reason, we were unable to determine
10947 the actual type from the tag, then use the static
10948 approximation that we just computed as a fallback.
10949 This can happen if the debugging information is
10950 incomplete, for instance. */
10951 actual_type = type;
10952 return value_zero (actual_type, not_lval);
10953 }
10954 else
10955 {
10956 /* In the case of a ref, ada_coerce_ref takes care
10957 of determining the actual type. But the evaluation
10958 should return a ref as it should be valid to ask
10959 for its address; so rebuild a ref after coerce. */
10960 arg1 = ada_coerce_ref (arg1);
a65cfae5 10961 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10962 }
10963 }
0c1f74cf 10964
84754697
JB
10965 /* Records and unions for which GNAT encodings have been
10966 generated need to be statically fixed as well.
10967 Otherwise, non-static fixing produces a type where
10968 all dynamic properties are removed, which prevents "ptype"
10969 from being able to completely describe the type.
10970 For instance, a case statement in a variant record would be
10971 replaced by the relevant components based on the actual
10972 value of the discriminants. */
78134374 10973 if ((type->code () == TYPE_CODE_STRUCT
84754697 10974 && dynamic_template_type (type) != NULL)
78134374 10975 || (type->code () == TYPE_CODE_UNION
84754697
JB
10976 && ada_find_parallel_type (type, "___XVU") != NULL))
10977 {
10978 *pos += 4;
10979 return value_zero (to_static_fixed_type (type), not_lval);
10980 }
dda83cd7 10981 }
da5c522f
JB
10982
10983 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10984 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10985
10986 case OP_FUNCALL:
10987 (*pos) += 2;
10988
10989 /* Allocate arg vector, including space for the function to be
dda83cd7 10990 called in argvec[0] and a terminating NULL. */
4c4b4cd2 10991 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10992 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10993
10994 if (exp->elts[*pos].opcode == OP_VAR_VALUE
dda83cd7
SM
10995 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10996 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10997 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2 10998 else
dda83cd7
SM
10999 {
11000 for (tem = 0; tem <= nargs; tem += 1)
fe1fe7ea
SM
11001 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
11002 argvec[tem] = 0;
4c4b4cd2 11003
dda83cd7
SM
11004 if (noside == EVAL_SKIP)
11005 goto nosideret;
11006 }
4c4b4cd2 11007
ad82864c
JB
11008 if (ada_is_constrained_packed_array_type
11009 (desc_base_type (value_type (argvec[0]))))
dda83cd7 11010 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 11011 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
dda83cd7
SM
11012 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
11013 /* This is a packed array that has already been fixed, and
284614f0
JB
11014 therefore already coerced to a simple array. Nothing further
11015 to do. */
dda83cd7 11016 ;
78134374 11017 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
11018 {
11019 /* Make sure we dereference references so that all the code below
11020 feels like it's really handling the referenced value. Wrapping
11021 types (for alignment) may be there, so make sure we strip them as
11022 well. */
11023 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
11024 }
78134374 11025 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
11026 && VALUE_LVAL (argvec[0]) == lval_memory)
11027 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 11028
df407dfe 11029 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
11030
11031 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
11032 them. So, if this is an array typedef (encoding use for array
11033 access types encoded as fat pointers), strip it now. */
78134374 11034 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
11035 type = ada_typedef_target_type (type);
11036
78134374 11037 if (type->code () == TYPE_CODE_PTR)
dda83cd7
SM
11038 {
11039 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
11040 {
11041 case TYPE_CODE_FUNC:
11042 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
11043 break;
11044 case TYPE_CODE_ARRAY:
11045 break;
11046 case TYPE_CODE_STRUCT:
11047 if (noside != EVAL_AVOID_SIDE_EFFECTS)
11048 argvec[0] = ada_value_ind (argvec[0]);
11049 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
11050 break;
11051 default:
11052 error (_("cannot subscript or call something of type `%s'"),
11053 ada_type_name (value_type (argvec[0])));
11054 break;
11055 }
11056 }
4c4b4cd2 11057
78134374 11058 switch (type->code ())
dda83cd7
SM
11059 {
11060 case TYPE_CODE_FUNC:
11061 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 11062 {
7022349d
PA
11063 if (TYPE_TARGET_TYPE (type) == NULL)
11064 error_call_unknown_return_type (NULL);
11065 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 11066 }
e71585ff
PA
11067 return call_function_by_hand (argvec[0], NULL,
11068 gdb::make_array_view (argvec + 1,
11069 nargs));
c8ea1972
PH
11070 case TYPE_CODE_INTERNAL_FUNCTION:
11071 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11072 /* We don't know anything about what the internal
11073 function might return, but we have to return
11074 something. */
11075 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11076 not_lval);
11077 else
11078 return call_internal_function (exp->gdbarch, exp->language_defn,
11079 argvec[0], nargs, argvec + 1);
11080
dda83cd7
SM
11081 case TYPE_CODE_STRUCT:
11082 {
11083 int arity;
11084
11085 arity = ada_array_arity (type);
11086 type = ada_array_element_type (type, nargs);
11087 if (type == NULL)
11088 error (_("cannot subscript or call a record"));
11089 if (arity != nargs)
11090 error (_("wrong number of subscripts; expecting %d"), arity);
11091 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11092 return value_zero (ada_aligned_type (type), lval_memory);
11093 return
11094 unwrap_value (ada_value_subscript
11095 (argvec[0], nargs, argvec + 1));
11096 }
11097 case TYPE_CODE_ARRAY:
11098 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11099 {
11100 type = ada_array_element_type (type, nargs);
11101 if (type == NULL)
11102 error (_("element type of array unknown"));
11103 else
11104 return value_zero (ada_aligned_type (type), lval_memory);
11105 }
11106 return
11107 unwrap_value (ada_value_subscript
11108 (ada_coerce_to_simple_array (argvec[0]),
11109 nargs, argvec + 1));
11110 case TYPE_CODE_PTR: /* Pointer to array */
11111 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11112 {
deede10c 11113 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
dda83cd7
SM
11114 type = ada_array_element_type (type, nargs);
11115 if (type == NULL)
11116 error (_("element type of array unknown"));
11117 else
11118 return value_zero (ada_aligned_type (type), lval_memory);
11119 }
11120 return
11121 unwrap_value (ada_value_ptr_subscript (argvec[0],
deede10c 11122 nargs, argvec + 1));
4c4b4cd2 11123
dda83cd7
SM
11124 default:
11125 error (_("Attempt to index or call something other than an "
e1d5a0d2 11126 "array or function"));
dda83cd7 11127 }
4c4b4cd2
PH
11128
11129 case TERNOP_SLICE:
11130 {
fe1fe7ea
SM
11131 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
11132 struct value *low_bound_val
11133 = evaluate_subexp (nullptr, exp, pos, noside);
11134 struct value *high_bound_val
11135 = evaluate_subexp (nullptr, exp, pos, noside);
dda83cd7
SM
11136
11137 if (noside == EVAL_SKIP)
11138 goto nosideret;
11139
5ce19db8
TT
11140 return ada_ternop_slice (exp, noside, array, low_bound_val,
11141 high_bound_val);
4c4b4cd2 11142 }
14f9c5c9 11143
4c4b4cd2
PH
11144 case UNOP_IN_RANGE:
11145 (*pos) += 2;
fe1fe7ea 11146 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
8008e265 11147 type = check_typedef (exp->elts[pc + 1].type);
7efc87ff 11148 return ada_unop_in_range (expect_type, exp, noside, op, arg1, type);
4c4b4cd2
PH
11149
11150 case BINOP_IN_BOUNDS:
14f9c5c9 11151 (*pos) += 2;
fe1fe7ea
SM
11152 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11153 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11154
4c4b4cd2 11155 if (noside == EVAL_SKIP)
dda83cd7 11156 goto nosideret;
14f9c5c9 11157
4c4b4cd2 11158 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 11159
b467efaa 11160 return ada_binop_in_bounds (exp, noside, arg1, arg2, tem);
4c4b4cd2
PH
11161
11162 case TERNOP_IN_RANGE:
fe1fe7ea
SM
11163 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11164 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
11165 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11166
62d4bd94 11167 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
4c4b4cd2
PH
11168
11169 case OP_ATR_FIRST:
11170 case OP_ATR_LAST:
11171 case OP_ATR_LENGTH:
11172 {
dda83cd7 11173 struct type *type_arg;
5b4ee69b 11174
dda83cd7
SM
11175 if (exp->elts[*pos].opcode == OP_TYPE)
11176 {
fe1fe7ea
SM
11177 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11178 arg1 = NULL;
dda83cd7
SM
11179 type_arg = check_typedef (exp->elts[pc + 2].type);
11180 }
11181 else
11182 {
fe1fe7ea
SM
11183 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11184 type_arg = NULL;
dda83cd7 11185 }
76a01679 11186
dda83cd7
SM
11187 if (exp->elts[*pos].opcode != OP_LONG)
11188 error (_("Invalid operand to '%s"), ada_attribute_name (op));
11189 tem = longest_to_int (exp->elts[*pos + 2].longconst);
11190 *pos += 4;
76a01679 11191
dda83cd7
SM
11192 if (noside == EVAL_SKIP)
11193 goto nosideret;
1eea4ebd 11194
b84564fc 11195 return ada_unop_atr (exp, noside, op, arg1, type_arg, tem);
14f9c5c9
AS
11196 }
11197
4c4b4cd2 11198 case OP_ATR_TAG:
fe1fe7ea 11199 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11200 if (noside == EVAL_SKIP)
dda83cd7 11201 goto nosideret;
020dbabe 11202 return ada_atr_tag (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
11203
11204 case OP_ATR_MIN:
11205 case OP_ATR_MAX:
fe1fe7ea
SM
11206 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11207 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11208 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11209 if (noside == EVAL_SKIP)
dda83cd7 11210 goto nosideret;
38dc70cf 11211 return ada_binop_minmax (expect_type, exp, noside, op, arg1, arg2);
14f9c5c9 11212
4c4b4cd2
PH
11213 case OP_ATR_MODULUS:
11214 {
dda83cd7 11215 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11216
fe1fe7ea
SM
11217 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11218 if (noside == EVAL_SKIP)
dda83cd7 11219 goto nosideret;
4c4b4cd2 11220
dda83cd7
SM
11221 if (!ada_is_modular_type (type_arg))
11222 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11223
dda83cd7
SM
11224 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11225 ada_modulus (type_arg));
4c4b4cd2
PH
11226 }
11227
11228
11229 case OP_ATR_POS:
fe1fe7ea
SM
11230 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11231 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11232 if (noside == EVAL_SKIP)
dda83cd7 11233 goto nosideret;
3cb382c9
UW
11234 type = builtin_type (exp->gdbarch)->builtin_int;
11235 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11236 return value_zero (type, not_lval);
14f9c5c9 11237 else
3cb382c9 11238 return value_pos_atr (type, arg1);
14f9c5c9 11239
4c4b4cd2 11240 case OP_ATR_SIZE:
fe1fe7ea 11241 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
68c75735 11242 return ada_atr_size (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
11243
11244 case OP_ATR_VAL:
fe1fe7ea
SM
11245 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
11246 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11247 type = exp->elts[pc + 2].type;
14f9c5c9 11248 if (noside == EVAL_SKIP)
dda83cd7 11249 goto nosideret;
3848abd6 11250 return ada_val_atr (noside, type, arg1);
4c4b4cd2
PH
11251
11252 case BINOP_EXP:
fe1fe7ea
SM
11253 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
11254 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11255 if (noside == EVAL_SKIP)
dda83cd7 11256 goto nosideret;
dd5fd283 11257 return ada_binop_exp (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
11258
11259 case UNOP_PLUS:
fe1fe7ea 11260 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11261 if (noside == EVAL_SKIP)
dda83cd7 11262 goto nosideret;
4c4b4cd2 11263 else
dda83cd7 11264 return arg1;
4c4b4cd2
PH
11265
11266 case UNOP_ABS:
fe1fe7ea 11267 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 11268 if (noside == EVAL_SKIP)
dda83cd7 11269 goto nosideret;
d05e24e6 11270 return ada_abs (expect_type, exp, noside, op, arg1);
14f9c5c9
AS
11271
11272 case UNOP_IND:
5ec18f2b 11273 preeval_pos = *pos;
fe1fe7ea 11274 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11275 if (noside == EVAL_SKIP)
dda83cd7 11276 goto nosideret;
df407dfe 11277 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11278 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11279 {
11280 if (ada_is_array_descriptor_type (type))
11281 /* GDB allows dereferencing GNAT array descriptors. */
11282 {
11283 struct type *arrType = ada_type_of_array (arg1, 0);
11284
11285 if (arrType == NULL)
11286 error (_("Attempt to dereference null array pointer."));
11287 return value_at_lazy (arrType, 0);
11288 }
11289 else if (type->code () == TYPE_CODE_PTR
11290 || type->code () == TYPE_CODE_REF
11291 /* In C you can dereference an array to get the 1st elt. */
11292 || type->code () == TYPE_CODE_ARRAY)
11293 {
11294 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11295 only be determined by inspecting the object's tag.
11296 This means that we need to evaluate completely the
11297 expression in order to get its type. */
5ec18f2b 11298
78134374
SM
11299 if ((type->code () == TYPE_CODE_REF
11300 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
11301 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11302 {
fe1fe7ea
SM
11303 arg1
11304 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11305 type = value_type (ada_value_ind (arg1));
11306 }
11307 else
11308 {
11309 type = to_static_fixed_type
11310 (ada_aligned_type
11311 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11312 }
c1b5a1a6 11313 ada_ensure_varsize_limit (type);
dda83cd7
SM
11314 return value_zero (type, lval_memory);
11315 }
11316 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11317 {
11318 /* GDB allows dereferencing an int. */
11319 if (expect_type == NULL)
11320 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11321 lval_memory);
11322 else
11323 {
11324 expect_type =
11325 to_static_fixed_type (ada_aligned_type (expect_type));
11326 return value_zero (expect_type, lval_memory);
11327 }
11328 }
dda83cd7
SM
11329 else
11330 error (_("Attempt to take contents of a non-pointer value."));
11331 }
0963b4bd 11332 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11333 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11334
78134374 11335 if (type->code () == TYPE_CODE_INT)
dda83cd7
SM
11336 /* GDB allows dereferencing an int. If we were given
11337 the expect_type, then use that as the target type.
11338 Otherwise, assume that the target type is an int. */
11339 {
11340 if (expect_type != NULL)
96967637
JB
11341 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11342 arg1));
11343 else
11344 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11345 (CORE_ADDR) value_as_address (arg1));
dda83cd7 11346 }
6b0d7253 11347
4c4b4cd2 11348 if (ada_is_array_descriptor_type (type))
dda83cd7
SM
11349 /* GDB allows dereferencing GNAT array descriptors. */
11350 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11351 else
dda83cd7 11352 return ada_value_ind (arg1);
14f9c5c9
AS
11353
11354 case STRUCTOP_STRUCT:
11355 tem = longest_to_int (exp->elts[pc + 1].longconst);
11356 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11357 preeval_pos = *pos;
fe1fe7ea 11358 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11359 if (noside == EVAL_SKIP)
dda83cd7 11360 goto nosideret;
14f9c5c9 11361 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11362 {
11363 struct type *type1 = value_type (arg1);
5b4ee69b 11364
dda83cd7
SM
11365 if (ada_is_tagged_type (type1, 1))
11366 {
11367 type = ada_lookup_struct_elt_type (type1,
11368 &exp->elts[pc + 2].string,
11369 1, 1);
5ec18f2b
JG
11370
11371 /* If the field is not found, check if it exists in the
11372 extension of this object's type. This means that we
11373 need to evaluate completely the expression. */
11374
dda83cd7 11375 if (type == NULL)
5ec18f2b 11376 {
fe1fe7ea
SM
11377 arg1
11378 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11379 arg1 = ada_value_struct_elt (arg1,
11380 &exp->elts[pc + 2].string,
11381 0);
11382 arg1 = unwrap_value (arg1);
11383 type = value_type (ada_to_fixed_value (arg1));
11384 }
dda83cd7
SM
11385 }
11386 else
11387 type =
11388 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11389 0);
11390
11391 return value_zero (ada_aligned_type (type), lval_memory);
11392 }
14f9c5c9 11393 else
a579cd9a
MW
11394 {
11395 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11396 arg1 = unwrap_value (arg1);
11397 return ada_to_fixed_value (arg1);
11398 }
284614f0 11399
14f9c5c9 11400 case OP_TYPE:
4c4b4cd2 11401 /* The value is not supposed to be used. This is here to make it
dda83cd7 11402 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11403 (*pos) += 2;
11404 if (noside == EVAL_SKIP)
dda83cd7 11405 goto nosideret;
14f9c5c9 11406 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 11407 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11408 else
dda83cd7 11409 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11410
11411 case OP_AGGREGATE:
11412 case OP_CHOICES:
11413 case OP_OTHERS:
11414 case OP_DISCRETE_RANGE:
11415 case OP_POSITIONAL:
11416 case OP_NAME:
11417 if (noside == EVAL_NORMAL)
11418 switch (op)
11419 {
11420 case OP_NAME:
11421 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11422 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11423 case OP_AGGREGATE:
11424 error (_("Aggregates only allowed on the right of an assignment"));
11425 default:
0963b4bd
MS
11426 internal_error (__FILE__, __LINE__,
11427 _("aggregate apparently mangled"));
52ce6436
PH
11428 }
11429
11430 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11431 *pos += oplen - 1;
11432 for (tem = 0; tem < nargs; tem += 1)
11433 ada_evaluate_subexp (NULL, exp, pos, noside);
11434 goto nosideret;
14f9c5c9
AS
11435 }
11436
11437nosideret:
ced9779b 11438 return eval_skip_value (exp);
14f9c5c9 11439}
14f9c5c9 11440\f
d2e4a39e 11441
4c4b4cd2
PH
11442/* Return non-zero iff TYPE represents a System.Address type. */
11443
11444int
11445ada_is_system_address_type (struct type *type)
11446{
7d93a1e0 11447 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11448}
11449
14f9c5c9 11450\f
d2e4a39e 11451
dda83cd7 11452 /* Range types */
14f9c5c9
AS
11453
11454/* Scan STR beginning at position K for a discriminant name, and
11455 return the value of that discriminant field of DVAL in *PX. If
11456 PNEW_K is not null, put the position of the character beyond the
11457 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11458 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11459
11460static int
108d56a4 11461scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
dda83cd7 11462 int *pnew_k)
14f9c5c9 11463{
5f9febe0 11464 static std::string storage;
5da1a4d3 11465 const char *pstart, *pend, *bound;
d2e4a39e 11466 struct value *bound_val;
14f9c5c9
AS
11467
11468 if (dval == NULL || str == NULL || str[k] == '\0')
11469 return 0;
11470
5da1a4d3
SM
11471 pstart = str + k;
11472 pend = strstr (pstart, "__");
14f9c5c9
AS
11473 if (pend == NULL)
11474 {
5da1a4d3 11475 bound = pstart;
14f9c5c9
AS
11476 k += strlen (bound);
11477 }
d2e4a39e 11478 else
14f9c5c9 11479 {
5da1a4d3
SM
11480 int len = pend - pstart;
11481
11482 /* Strip __ and beyond. */
5f9febe0
TT
11483 storage = std::string (pstart, len);
11484 bound = storage.c_str ();
d2e4a39e 11485 k = pend - str;
14f9c5c9 11486 }
d2e4a39e 11487
df407dfe 11488 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11489 if (bound_val == NULL)
11490 return 0;
11491
11492 *px = value_as_long (bound_val);
11493 if (pnew_k != NULL)
11494 *pnew_k = k;
11495 return 1;
11496}
11497
25a1127b
TT
11498/* Value of variable named NAME. Only exact matches are considered.
11499 If no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11500 otherwise causes an error with message ERR_MSG. */
11501
d2e4a39e 11502static struct value *
edb0c9cb 11503get_var_value (const char *name, const char *err_msg)
14f9c5c9 11504{
25a1127b
TT
11505 std::string quoted_name = add_angle_brackets (name);
11506
11507 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
14f9c5c9 11508
d1183b06
TT
11509 std::vector<struct block_symbol> syms
11510 = ada_lookup_symbol_list_worker (lookup_name,
11511 get_selected_block (0),
11512 VAR_DOMAIN, 1);
14f9c5c9 11513
d1183b06 11514 if (syms.size () != 1)
14f9c5c9
AS
11515 {
11516 if (err_msg == NULL)
dda83cd7 11517 return 0;
14f9c5c9 11518 else
dda83cd7 11519 error (("%s"), err_msg);
14f9c5c9
AS
11520 }
11521
54d343a2 11522 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11523}
d2e4a39e 11524
edb0c9cb
PA
11525/* Value of integer variable named NAME in the current environment.
11526 If no such variable is found, returns false. Otherwise, sets VALUE
11527 to the variable's value and returns true. */
4c4b4cd2 11528
edb0c9cb
PA
11529bool
11530get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11531{
4c4b4cd2 11532 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11533
14f9c5c9 11534 if (var_val == 0)
edb0c9cb
PA
11535 return false;
11536
11537 value = value_as_long (var_val);
11538 return true;
14f9c5c9 11539}
d2e4a39e 11540
14f9c5c9
AS
11541
11542/* Return a range type whose base type is that of the range type named
11543 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11544 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11545 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11546 corresponding range type from debug information; fall back to using it
11547 if symbol lookup fails. If a new type must be created, allocate it
11548 like ORIG_TYPE was. The bounds information, in general, is encoded
11549 in NAME, the base type given in the named range type. */
14f9c5c9 11550
d2e4a39e 11551static struct type *
28c85d6c 11552to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11553{
0d5cff50 11554 const char *name;
14f9c5c9 11555 struct type *base_type;
108d56a4 11556 const char *subtype_info;
14f9c5c9 11557
28c85d6c 11558 gdb_assert (raw_type != NULL);
7d93a1e0 11559 gdb_assert (raw_type->name () != NULL);
dddfab26 11560
78134374 11561 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11562 base_type = TYPE_TARGET_TYPE (raw_type);
11563 else
11564 base_type = raw_type;
11565
7d93a1e0 11566 name = raw_type->name ();
14f9c5c9
AS
11567 subtype_info = strstr (name, "___XD");
11568 if (subtype_info == NULL)
690cc4eb 11569 {
43bbcdc2
PH
11570 LONGEST L = ada_discrete_type_low_bound (raw_type);
11571 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11572
690cc4eb
PH
11573 if (L < INT_MIN || U > INT_MAX)
11574 return raw_type;
11575 else
0c9c3474
SA
11576 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11577 L, U);
690cc4eb 11578 }
14f9c5c9
AS
11579 else
11580 {
14f9c5c9
AS
11581 int prefix_len = subtype_info - name;
11582 LONGEST L, U;
11583 struct type *type;
108d56a4 11584 const char *bounds_str;
14f9c5c9
AS
11585 int n;
11586
14f9c5c9
AS
11587 subtype_info += 5;
11588 bounds_str = strchr (subtype_info, '_');
11589 n = 1;
11590
d2e4a39e 11591 if (*subtype_info == 'L')
dda83cd7
SM
11592 {
11593 if (!ada_scan_number (bounds_str, n, &L, &n)
11594 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11595 return raw_type;
11596 if (bounds_str[n] == '_')
11597 n += 2;
11598 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11599 n += 1;
11600 subtype_info += 1;
11601 }
d2e4a39e 11602 else
dda83cd7 11603 {
5f9febe0
TT
11604 std::string name_buf = std::string (name, prefix_len) + "___L";
11605 if (!get_int_var_value (name_buf.c_str (), L))
dda83cd7
SM
11606 {
11607 lim_warning (_("Unknown lower bound, using 1."));
11608 L = 1;
11609 }
11610 }
14f9c5c9 11611
d2e4a39e 11612 if (*subtype_info == 'U')
dda83cd7
SM
11613 {
11614 if (!ada_scan_number (bounds_str, n, &U, &n)
11615 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11616 return raw_type;
11617 }
d2e4a39e 11618 else
dda83cd7 11619 {
5f9febe0
TT
11620 std::string name_buf = std::string (name, prefix_len) + "___U";
11621 if (!get_int_var_value (name_buf.c_str (), U))
dda83cd7
SM
11622 {
11623 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11624 U = L;
11625 }
11626 }
14f9c5c9 11627
0c9c3474
SA
11628 type = create_static_range_type (alloc_type_copy (raw_type),
11629 base_type, L, U);
f5a91472 11630 /* create_static_range_type alters the resulting type's length
dda83cd7
SM
11631 to match the size of the base_type, which is not what we want.
11632 Set it back to the original range type's length. */
f5a91472 11633 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11634 type->set_name (name);
14f9c5c9
AS
11635 return type;
11636 }
11637}
11638
4c4b4cd2
PH
11639/* True iff NAME is the name of a range type. */
11640
14f9c5c9 11641int
d2e4a39e 11642ada_is_range_type_name (const char *name)
14f9c5c9
AS
11643{
11644 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11645}
14f9c5c9 11646\f
d2e4a39e 11647
dda83cd7 11648 /* Modular types */
4c4b4cd2
PH
11649
11650/* True iff TYPE is an Ada modular type. */
14f9c5c9 11651
14f9c5c9 11652int
d2e4a39e 11653ada_is_modular_type (struct type *type)
14f9c5c9 11654{
18af8284 11655 struct type *subranged_type = get_base_type (type);
14f9c5c9 11656
78134374 11657 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
dda83cd7
SM
11658 && subranged_type->code () == TYPE_CODE_INT
11659 && subranged_type->is_unsigned ());
14f9c5c9
AS
11660}
11661
4c4b4cd2
PH
11662/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11663
61ee279c 11664ULONGEST
0056e4d5 11665ada_modulus (struct type *type)
14f9c5c9 11666{
5e500d33
SM
11667 const dynamic_prop &high = type->bounds ()->high;
11668
11669 if (high.kind () == PROP_CONST)
11670 return (ULONGEST) high.const_val () + 1;
11671
11672 /* If TYPE is unresolved, the high bound might be a location list. Return
11673 0, for lack of a better value to return. */
11674 return 0;
14f9c5c9 11675}
d2e4a39e 11676\f
f7f9143b
JB
11677
11678/* Ada exception catchpoint support:
11679 ---------------------------------
11680
11681 We support 3 kinds of exception catchpoints:
11682 . catchpoints on Ada exceptions
11683 . catchpoints on unhandled Ada exceptions
11684 . catchpoints on failed assertions
11685
11686 Exceptions raised during failed assertions, or unhandled exceptions
11687 could perfectly be caught with the general catchpoint on Ada exceptions.
11688 However, we can easily differentiate these two special cases, and having
11689 the option to distinguish these two cases from the rest can be useful
11690 to zero-in on certain situations.
11691
11692 Exception catchpoints are a specialized form of breakpoint,
11693 since they rely on inserting breakpoints inside known routines
11694 of the GNAT runtime. The implementation therefore uses a standard
11695 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11696 of breakpoint_ops.
11697
0259addd
JB
11698 Support in the runtime for exception catchpoints have been changed
11699 a few times already, and these changes affect the implementation
11700 of these catchpoints. In order to be able to support several
11701 variants of the runtime, we use a sniffer that will determine
28010a5d 11702 the runtime variant used by the program being debugged. */
f7f9143b 11703
82eacd52
JB
11704/* Ada's standard exceptions.
11705
11706 The Ada 83 standard also defined Numeric_Error. But there so many
11707 situations where it was unclear from the Ada 83 Reference Manual
11708 (RM) whether Constraint_Error or Numeric_Error should be raised,
11709 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11710 Interpretation saying that anytime the RM says that Numeric_Error
11711 should be raised, the implementation may raise Constraint_Error.
11712 Ada 95 went one step further and pretty much removed Numeric_Error
11713 from the list of standard exceptions (it made it a renaming of
11714 Constraint_Error, to help preserve compatibility when compiling
11715 an Ada83 compiler). As such, we do not include Numeric_Error from
11716 this list of standard exceptions. */
3d0b0fa3 11717
27087b7f 11718static const char * const standard_exc[] = {
3d0b0fa3
JB
11719 "constraint_error",
11720 "program_error",
11721 "storage_error",
11722 "tasking_error"
11723};
11724
0259addd
JB
11725typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11726
11727/* A structure that describes how to support exception catchpoints
11728 for a given executable. */
11729
11730struct exception_support_info
11731{
11732 /* The name of the symbol to break on in order to insert
11733 a catchpoint on exceptions. */
11734 const char *catch_exception_sym;
11735
11736 /* The name of the symbol to break on in order to insert
11737 a catchpoint on unhandled exceptions. */
11738 const char *catch_exception_unhandled_sym;
11739
11740 /* The name of the symbol to break on in order to insert
11741 a catchpoint on failed assertions. */
11742 const char *catch_assert_sym;
11743
9f757bf7
XR
11744 /* The name of the symbol to break on in order to insert
11745 a catchpoint on exception handling. */
11746 const char *catch_handlers_sym;
11747
0259addd
JB
11748 /* Assuming that the inferior just triggered an unhandled exception
11749 catchpoint, this function is responsible for returning the address
11750 in inferior memory where the name of that exception is stored.
11751 Return zero if the address could not be computed. */
11752 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11753};
11754
11755static CORE_ADDR ada_unhandled_exception_name_addr (void);
11756static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11757
11758/* The following exception support info structure describes how to
11759 implement exception catchpoints with the latest version of the
ca683e3a 11760 Ada runtime (as of 2019-08-??). */
0259addd
JB
11761
11762static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11763{
11764 "__gnat_debug_raise_exception", /* catch_exception_sym */
11765 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11766 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11767 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11768 ada_unhandled_exception_name_addr
11769};
11770
11771/* The following exception support info structure describes how to
11772 implement exception catchpoints with an earlier version of the
11773 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11774
11775static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11776{
11777 "__gnat_debug_raise_exception", /* catch_exception_sym */
11778 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11779 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11780 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11781 ada_unhandled_exception_name_addr
11782};
11783
11784/* The following exception support info structure describes how to
11785 implement exception catchpoints with a slightly older version
11786 of the Ada runtime. */
11787
11788static const struct exception_support_info exception_support_info_fallback =
11789{
11790 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11791 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11792 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11793 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11794 ada_unhandled_exception_name_addr_from_raise
11795};
11796
f17011e0
JB
11797/* Return nonzero if we can detect the exception support routines
11798 described in EINFO.
11799
11800 This function errors out if an abnormal situation is detected
11801 (for instance, if we find the exception support routines, but
11802 that support is found to be incomplete). */
11803
11804static int
11805ada_has_this_exception_support (const struct exception_support_info *einfo)
11806{
11807 struct symbol *sym;
11808
11809 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11810 that should be compiled with debugging information. As a result, we
11811 expect to find that symbol in the symtabs. */
11812
11813 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11814 if (sym == NULL)
a6af7abe
JB
11815 {
11816 /* Perhaps we did not find our symbol because the Ada runtime was
11817 compiled without debugging info, or simply stripped of it.
11818 It happens on some GNU/Linux distributions for instance, where
11819 users have to install a separate debug package in order to get
11820 the runtime's debugging info. In that situation, let the user
11821 know why we cannot insert an Ada exception catchpoint.
11822
11823 Note: Just for the purpose of inserting our Ada exception
11824 catchpoint, we could rely purely on the associated minimal symbol.
11825 But we would be operating in degraded mode anyway, since we are
11826 still lacking the debugging info needed later on to extract
11827 the name of the exception being raised (this name is printed in
11828 the catchpoint message, and is also used when trying to catch
11829 a specific exception). We do not handle this case for now. */
3b7344d5 11830 struct bound_minimal_symbol msym
1c8e84b0
JB
11831 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11832
3b7344d5 11833 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11834 error (_("Your Ada runtime appears to be missing some debugging "
11835 "information.\nCannot insert Ada exception catchpoint "
11836 "in this configuration."));
11837
11838 return 0;
11839 }
f17011e0
JB
11840
11841 /* Make sure that the symbol we found corresponds to a function. */
11842
11843 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11844 {
11845 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11846 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11847 return 0;
11848 }
11849
11850 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11851 if (sym == NULL)
11852 {
11853 struct bound_minimal_symbol msym
11854 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11855
11856 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11857 error (_("Your Ada runtime appears to be missing some debugging "
11858 "information.\nCannot insert Ada exception catchpoint "
11859 "in this configuration."));
11860
11861 return 0;
11862 }
11863
11864 /* Make sure that the symbol we found corresponds to a function. */
11865
11866 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11867 {
11868 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11869 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11870 return 0;
11871 }
f17011e0
JB
11872
11873 return 1;
11874}
11875
0259addd
JB
11876/* Inspect the Ada runtime and determine which exception info structure
11877 should be used to provide support for exception catchpoints.
11878
3eecfa55
JB
11879 This function will always set the per-inferior exception_info,
11880 or raise an error. */
0259addd
JB
11881
11882static void
11883ada_exception_support_info_sniffer (void)
11884{
3eecfa55 11885 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11886
11887 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11888 if (data->exception_info != NULL)
0259addd
JB
11889 return;
11890
11891 /* Check the latest (default) exception support info. */
f17011e0 11892 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11893 {
3eecfa55 11894 data->exception_info = &default_exception_support_info;
0259addd
JB
11895 return;
11896 }
11897
ca683e3a
AO
11898 /* Try the v0 exception suport info. */
11899 if (ada_has_this_exception_support (&exception_support_info_v0))
11900 {
11901 data->exception_info = &exception_support_info_v0;
11902 return;
11903 }
11904
0259addd 11905 /* Try our fallback exception suport info. */
f17011e0 11906 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11907 {
3eecfa55 11908 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11909 return;
11910 }
11911
11912 /* Sometimes, it is normal for us to not be able to find the routine
11913 we are looking for. This happens when the program is linked with
11914 the shared version of the GNAT runtime, and the program has not been
11915 started yet. Inform the user of these two possible causes if
11916 applicable. */
11917
ccefe4c4 11918 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11919 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11920
11921 /* If the symbol does not exist, then check that the program is
11922 already started, to make sure that shared libraries have been
11923 loaded. If it is not started, this may mean that the symbol is
11924 in a shared library. */
11925
e99b03dc 11926 if (inferior_ptid.pid () == 0)
0259addd
JB
11927 error (_("Unable to insert catchpoint. Try to start the program first."));
11928
11929 /* At this point, we know that we are debugging an Ada program and
11930 that the inferior has been started, but we still are not able to
0963b4bd 11931 find the run-time symbols. That can mean that we are in
0259addd
JB
11932 configurable run time mode, or that a-except as been optimized
11933 out by the linker... In any case, at this point it is not worth
11934 supporting this feature. */
11935
7dda8cff 11936 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11937}
11938
f7f9143b
JB
11939/* True iff FRAME is very likely to be that of a function that is
11940 part of the runtime system. This is all very heuristic, but is
11941 intended to be used as advice as to what frames are uninteresting
11942 to most users. */
11943
11944static int
11945is_known_support_routine (struct frame_info *frame)
11946{
692465f1 11947 enum language func_lang;
f7f9143b 11948 int i;
f35a17b5 11949 const char *fullname;
f7f9143b 11950
4ed6b5be
JB
11951 /* If this code does not have any debugging information (no symtab),
11952 This cannot be any user code. */
f7f9143b 11953
51abb421 11954 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11955 if (sal.symtab == NULL)
11956 return 1;
11957
4ed6b5be
JB
11958 /* If there is a symtab, but the associated source file cannot be
11959 located, then assume this is not user code: Selecting a frame
11960 for which we cannot display the code would not be very helpful
11961 for the user. This should also take care of case such as VxWorks
11962 where the kernel has some debugging info provided for a few units. */
f7f9143b 11963
f35a17b5
JK
11964 fullname = symtab_to_fullname (sal.symtab);
11965 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11966 return 1;
11967
85102364 11968 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
11969 We also check the name of the objfile against the name of some
11970 known system libraries that sometimes come with debugging info
11971 too. */
11972
f7f9143b
JB
11973 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11974 {
11975 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11976 if (re_exec (lbasename (sal.symtab->filename)))
dda83cd7 11977 return 1;
eb822aa6 11978 if (SYMTAB_OBJFILE (sal.symtab) != NULL
dda83cd7
SM
11979 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11980 return 1;
f7f9143b
JB
11981 }
11982
4ed6b5be 11983 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11984
c6dc63a1
TT
11985 gdb::unique_xmalloc_ptr<char> func_name
11986 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
11987 if (func_name == NULL)
11988 return 1;
11989
11990 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11991 {
11992 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
11993 if (re_exec (func_name.get ()))
11994 return 1;
f7f9143b
JB
11995 }
11996
11997 return 0;
11998}
11999
12000/* Find the first frame that contains debugging information and that is not
12001 part of the Ada run-time, starting from FI and moving upward. */
12002
0ef643c8 12003void
f7f9143b
JB
12004ada_find_printable_frame (struct frame_info *fi)
12005{
12006 for (; fi != NULL; fi = get_prev_frame (fi))
12007 {
12008 if (!is_known_support_routine (fi))
dda83cd7
SM
12009 {
12010 select_frame (fi);
12011 break;
12012 }
f7f9143b
JB
12013 }
12014
12015}
12016
12017/* Assuming that the inferior just triggered an unhandled exception
12018 catchpoint, return the address in inferior memory where the name
12019 of the exception is stored.
12020
12021 Return zero if the address could not be computed. */
12022
12023static CORE_ADDR
12024ada_unhandled_exception_name_addr (void)
0259addd
JB
12025{
12026 return parse_and_eval_address ("e.full_name");
12027}
12028
12029/* Same as ada_unhandled_exception_name_addr, except that this function
12030 should be used when the inferior uses an older version of the runtime,
12031 where the exception name needs to be extracted from a specific frame
12032 several frames up in the callstack. */
12033
12034static CORE_ADDR
12035ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
12036{
12037 int frame_level;
12038 struct frame_info *fi;
3eecfa55 12039 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
12040
12041 /* To determine the name of this exception, we need to select
12042 the frame corresponding to RAISE_SYM_NAME. This frame is
12043 at least 3 levels up, so we simply skip the first 3 frames
12044 without checking the name of their associated function. */
12045 fi = get_current_frame ();
12046 for (frame_level = 0; frame_level < 3; frame_level += 1)
12047 if (fi != NULL)
12048 fi = get_prev_frame (fi);
12049
12050 while (fi != NULL)
12051 {
692465f1
JB
12052 enum language func_lang;
12053
c6dc63a1
TT
12054 gdb::unique_xmalloc_ptr<char> func_name
12055 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
12056 if (func_name != NULL)
12057 {
dda83cd7 12058 if (strcmp (func_name.get (),
55b87a52
KS
12059 data->exception_info->catch_exception_sym) == 0)
12060 break; /* We found the frame we were looking for... */
55b87a52 12061 }
fb44b1a7 12062 fi = get_prev_frame (fi);
f7f9143b
JB
12063 }
12064
12065 if (fi == NULL)
12066 return 0;
12067
12068 select_frame (fi);
12069 return parse_and_eval_address ("id.full_name");
12070}
12071
12072/* Assuming the inferior just triggered an Ada exception catchpoint
12073 (of any type), return the address in inferior memory where the name
12074 of the exception is stored, if applicable.
12075
45db7c09
PA
12076 Assumes the selected frame is the current frame.
12077
f7f9143b
JB
12078 Return zero if the address could not be computed, or if not relevant. */
12079
12080static CORE_ADDR
761269c8 12081ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
dda83cd7 12082 struct breakpoint *b)
f7f9143b 12083{
3eecfa55
JB
12084 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12085
f7f9143b
JB
12086 switch (ex)
12087 {
761269c8 12088 case ada_catch_exception:
dda83cd7
SM
12089 return (parse_and_eval_address ("e.full_name"));
12090 break;
f7f9143b 12091
761269c8 12092 case ada_catch_exception_unhandled:
dda83cd7
SM
12093 return data->exception_info->unhandled_exception_name_addr ();
12094 break;
9f757bf7
XR
12095
12096 case ada_catch_handlers:
dda83cd7 12097 return 0; /* The runtimes does not provide access to the exception
9f757bf7 12098 name. */
dda83cd7 12099 break;
9f757bf7 12100
761269c8 12101 case ada_catch_assert:
dda83cd7
SM
12102 return 0; /* Exception name is not relevant in this case. */
12103 break;
f7f9143b
JB
12104
12105 default:
dda83cd7
SM
12106 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12107 break;
f7f9143b
JB
12108 }
12109
12110 return 0; /* Should never be reached. */
12111}
12112
e547c119
JB
12113/* Assuming the inferior is stopped at an exception catchpoint,
12114 return the message which was associated to the exception, if
12115 available. Return NULL if the message could not be retrieved.
12116
e547c119
JB
12117 Note: The exception message can be associated to an exception
12118 either through the use of the Raise_Exception function, or
12119 more simply (Ada 2005 and later), via:
12120
12121 raise Exception_Name with "exception message";
12122
12123 */
12124
6f46ac85 12125static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12126ada_exception_message_1 (void)
12127{
12128 struct value *e_msg_val;
e547c119 12129 int e_msg_len;
e547c119
JB
12130
12131 /* For runtimes that support this feature, the exception message
12132 is passed as an unbounded string argument called "message". */
12133 e_msg_val = parse_and_eval ("message");
12134 if (e_msg_val == NULL)
12135 return NULL; /* Exception message not supported. */
12136
12137 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
12138 gdb_assert (e_msg_val != NULL);
12139 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
12140
12141 /* If the message string is empty, then treat it as if there was
12142 no exception message. */
12143 if (e_msg_len <= 0)
12144 return NULL;
12145
15f3b077
TT
12146 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
12147 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
12148 e_msg_len);
12149 e_msg.get ()[e_msg_len] = '\0';
12150
12151 return e_msg;
e547c119
JB
12152}
12153
12154/* Same as ada_exception_message_1, except that all exceptions are
12155 contained here (returning NULL instead). */
12156
6f46ac85 12157static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12158ada_exception_message (void)
12159{
6f46ac85 12160 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 12161
a70b8144 12162 try
e547c119
JB
12163 {
12164 e_msg = ada_exception_message_1 ();
12165 }
230d2906 12166 catch (const gdb_exception_error &e)
e547c119 12167 {
6f46ac85 12168 e_msg.reset (nullptr);
e547c119 12169 }
e547c119
JB
12170
12171 return e_msg;
12172}
12173
f7f9143b
JB
12174/* Same as ada_exception_name_addr_1, except that it intercepts and contains
12175 any error that ada_exception_name_addr_1 might cause to be thrown.
12176 When an error is intercepted, a warning with the error message is printed,
12177 and zero is returned. */
12178
12179static CORE_ADDR
761269c8 12180ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
dda83cd7 12181 struct breakpoint *b)
f7f9143b 12182{
f7f9143b
JB
12183 CORE_ADDR result = 0;
12184
a70b8144 12185 try
f7f9143b
JB
12186 {
12187 result = ada_exception_name_addr_1 (ex, b);
12188 }
12189
230d2906 12190 catch (const gdb_exception_error &e)
f7f9143b 12191 {
3d6e9d23 12192 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
12193 return 0;
12194 }
12195
12196 return result;
12197}
12198
cb7de75e 12199static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
12200 (const char *excep_string,
12201 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
12202
12203/* Ada catchpoints.
12204
12205 In the case of catchpoints on Ada exceptions, the catchpoint will
12206 stop the target on every exception the program throws. When a user
12207 specifies the name of a specific exception, we translate this
12208 request into a condition expression (in text form), and then parse
12209 it into an expression stored in each of the catchpoint's locations.
12210 We then use this condition to check whether the exception that was
12211 raised is the one the user is interested in. If not, then the
12212 target is resumed again. We store the name of the requested
12213 exception, in order to be able to re-set the condition expression
12214 when symbols change. */
12215
12216/* An instance of this type is used to represent an Ada catchpoint
5625a286 12217 breakpoint location. */
28010a5d 12218
5625a286 12219class ada_catchpoint_location : public bp_location
28010a5d 12220{
5625a286 12221public:
5f486660 12222 ada_catchpoint_location (breakpoint *owner)
f06f1252 12223 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 12224 {}
28010a5d
PA
12225
12226 /* The condition that checks whether the exception that was raised
12227 is the specific exception the user specified on catchpoint
12228 creation. */
4d01a485 12229 expression_up excep_cond_expr;
28010a5d
PA
12230};
12231
c1fc2657 12232/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 12233
c1fc2657 12234struct ada_catchpoint : public breakpoint
28010a5d 12235{
37f6a7f4
TT
12236 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
12237 : m_kind (kind)
12238 {
12239 }
12240
28010a5d 12241 /* The name of the specific exception the user specified. */
bc18fbb5 12242 std::string excep_string;
37f6a7f4
TT
12243
12244 /* What kind of catchpoint this is. */
12245 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
12246};
12247
12248/* Parse the exception condition string in the context of each of the
12249 catchpoint's locations, and store them for later evaluation. */
12250
12251static void
9f757bf7 12252create_excep_cond_exprs (struct ada_catchpoint *c,
dda83cd7 12253 enum ada_exception_catchpoint_kind ex)
28010a5d 12254{
fccf9de1
TT
12255 struct bp_location *bl;
12256
28010a5d 12257 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12258 if (c->excep_string.empty ())
28010a5d
PA
12259 return;
12260
12261 /* Same if there are no locations... */
c1fc2657 12262 if (c->loc == NULL)
28010a5d
PA
12263 return;
12264
fccf9de1
TT
12265 /* Compute the condition expression in text form, from the specific
12266 expection we want to catch. */
12267 std::string cond_string
12268 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 12269
fccf9de1
TT
12270 /* Iterate over all the catchpoint's locations, and parse an
12271 expression for each. */
12272 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
12273 {
12274 struct ada_catchpoint_location *ada_loc
fccf9de1 12275 = (struct ada_catchpoint_location *) bl;
4d01a485 12276 expression_up exp;
28010a5d 12277
fccf9de1 12278 if (!bl->shlib_disabled)
28010a5d 12279 {
bbc13ae3 12280 const char *s;
28010a5d 12281
cb7de75e 12282 s = cond_string.c_str ();
a70b8144 12283 try
28010a5d 12284 {
fccf9de1
TT
12285 exp = parse_exp_1 (&s, bl->address,
12286 block_for_pc (bl->address),
036e657b 12287 0);
28010a5d 12288 }
230d2906 12289 catch (const gdb_exception_error &e)
849f2b52
JB
12290 {
12291 warning (_("failed to reevaluate internal exception condition "
12292 "for catchpoint %d: %s"),
3d6e9d23 12293 c->number, e.what ());
849f2b52 12294 }
28010a5d
PA
12295 }
12296
b22e99fd 12297 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12298 }
28010a5d
PA
12299}
12300
28010a5d
PA
12301/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12302 structure for all exception catchpoint kinds. */
12303
12304static struct bp_location *
37f6a7f4 12305allocate_location_exception (struct breakpoint *self)
28010a5d 12306{
5f486660 12307 return new ada_catchpoint_location (self);
28010a5d
PA
12308}
12309
12310/* Implement the RE_SET method in the breakpoint_ops structure for all
12311 exception catchpoint kinds. */
12312
12313static void
37f6a7f4 12314re_set_exception (struct breakpoint *b)
28010a5d
PA
12315{
12316 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12317
12318 /* Call the base class's method. This updates the catchpoint's
12319 locations. */
2060206e 12320 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12321
12322 /* Reparse the exception conditional expressions. One for each
12323 location. */
37f6a7f4 12324 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12325}
12326
12327/* Returns true if we should stop for this breakpoint hit. If the
12328 user specified a specific exception, we only want to cause a stop
12329 if the program thrown that exception. */
12330
12331static int
12332should_stop_exception (const struct bp_location *bl)
12333{
12334 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12335 const struct ada_catchpoint_location *ada_loc
12336 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12337 int stop;
12338
37f6a7f4
TT
12339 struct internalvar *var = lookup_internalvar ("_ada_exception");
12340 if (c->m_kind == ada_catch_assert)
12341 clear_internalvar (var);
12342 else
12343 {
12344 try
12345 {
12346 const char *expr;
12347
12348 if (c->m_kind == ada_catch_handlers)
12349 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12350 ".all.occurrence.id");
12351 else
12352 expr = "e";
12353
12354 struct value *exc = parse_and_eval (expr);
12355 set_internalvar (var, exc);
12356 }
12357 catch (const gdb_exception_error &ex)
12358 {
12359 clear_internalvar (var);
12360 }
12361 }
12362
28010a5d 12363 /* With no specific exception, should always stop. */
bc18fbb5 12364 if (c->excep_string.empty ())
28010a5d
PA
12365 return 1;
12366
12367 if (ada_loc->excep_cond_expr == NULL)
12368 {
12369 /* We will have a NULL expression if back when we were creating
12370 the expressions, this location's had failed to parse. */
12371 return 1;
12372 }
12373
12374 stop = 1;
a70b8144 12375 try
28010a5d
PA
12376 {
12377 struct value *mark;
12378
12379 mark = value_mark ();
4d01a485 12380 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12381 value_free_to_mark (mark);
12382 }
230d2906 12383 catch (const gdb_exception &ex)
492d29ea
PA
12384 {
12385 exception_fprintf (gdb_stderr, ex,
12386 _("Error in testing exception condition:\n"));
12387 }
492d29ea 12388
28010a5d
PA
12389 return stop;
12390}
12391
12392/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12393 for all exception catchpoint kinds. */
12394
12395static void
37f6a7f4 12396check_status_exception (bpstat bs)
28010a5d 12397{
b6433ede 12398 bs->stop = should_stop_exception (bs->bp_location_at.get ());
28010a5d
PA
12399}
12400
f7f9143b
JB
12401/* Implement the PRINT_IT method in the breakpoint_ops structure
12402 for all exception catchpoint kinds. */
12403
12404static enum print_stop_action
37f6a7f4 12405print_it_exception (bpstat bs)
f7f9143b 12406{
79a45e25 12407 struct ui_out *uiout = current_uiout;
348d480f
PA
12408 struct breakpoint *b = bs->breakpoint_at;
12409
956a9fb9 12410 annotate_catchpoint (b->number);
f7f9143b 12411
112e8700 12412 if (uiout->is_mi_like_p ())
f7f9143b 12413 {
112e8700 12414 uiout->field_string ("reason",
956a9fb9 12415 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12416 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12417 }
12418
112e8700
SM
12419 uiout->text (b->disposition == disp_del
12420 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12421 uiout->field_signed ("bkptno", b->number);
112e8700 12422 uiout->text (", ");
f7f9143b 12423
45db7c09
PA
12424 /* ada_exception_name_addr relies on the selected frame being the
12425 current frame. Need to do this here because this function may be
12426 called more than once when printing a stop, and below, we'll
12427 select the first frame past the Ada run-time (see
12428 ada_find_printable_frame). */
12429 select_frame (get_current_frame ());
12430
37f6a7f4
TT
12431 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12432 switch (c->m_kind)
f7f9143b 12433 {
761269c8
JB
12434 case ada_catch_exception:
12435 case ada_catch_exception_unhandled:
9f757bf7 12436 case ada_catch_handlers:
956a9fb9 12437 {
37f6a7f4 12438 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12439 char exception_name[256];
12440
12441 if (addr != 0)
12442 {
c714b426
PA
12443 read_memory (addr, (gdb_byte *) exception_name,
12444 sizeof (exception_name) - 1);
956a9fb9
JB
12445 exception_name [sizeof (exception_name) - 1] = '\0';
12446 }
12447 else
12448 {
12449 /* For some reason, we were unable to read the exception
12450 name. This could happen if the Runtime was compiled
12451 without debugging info, for instance. In that case,
12452 just replace the exception name by the generic string
12453 "exception" - it will read as "an exception" in the
12454 notification we are about to print. */
967cff16 12455 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12456 }
12457 /* In the case of unhandled exception breakpoints, we print
12458 the exception name as "unhandled EXCEPTION_NAME", to make
12459 it clearer to the user which kind of catchpoint just got
12460 hit. We used ui_out_text to make sure that this extra
12461 info does not pollute the exception name in the MI case. */
37f6a7f4 12462 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12463 uiout->text ("unhandled ");
12464 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12465 }
12466 break;
761269c8 12467 case ada_catch_assert:
956a9fb9
JB
12468 /* In this case, the name of the exception is not really
12469 important. Just print "failed assertion" to make it clearer
12470 that his program just hit an assertion-failure catchpoint.
12471 We used ui_out_text because this info does not belong in
12472 the MI output. */
112e8700 12473 uiout->text ("failed assertion");
956a9fb9 12474 break;
f7f9143b 12475 }
e547c119 12476
6f46ac85 12477 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12478 if (exception_message != NULL)
12479 {
e547c119 12480 uiout->text (" (");
6f46ac85 12481 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12482 uiout->text (")");
e547c119
JB
12483 }
12484
112e8700 12485 uiout->text (" at ");
956a9fb9 12486 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12487
12488 return PRINT_SRC_AND_LOC;
12489}
12490
12491/* Implement the PRINT_ONE method in the breakpoint_ops structure
12492 for all exception catchpoint kinds. */
12493
12494static void
37f6a7f4 12495print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12496{
79a45e25 12497 struct ui_out *uiout = current_uiout;
28010a5d 12498 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12499 struct value_print_options opts;
12500
12501 get_user_print_options (&opts);
f06f1252 12502
79a45b7d 12503 if (opts.addressprint)
f06f1252 12504 uiout->field_skip ("addr");
f7f9143b
JB
12505
12506 annotate_field (5);
37f6a7f4 12507 switch (c->m_kind)
f7f9143b 12508 {
761269c8 12509 case ada_catch_exception:
dda83cd7
SM
12510 if (!c->excep_string.empty ())
12511 {
bc18fbb5
TT
12512 std::string msg = string_printf (_("`%s' Ada exception"),
12513 c->excep_string.c_str ());
28010a5d 12514
dda83cd7
SM
12515 uiout->field_string ("what", msg);
12516 }
12517 else
12518 uiout->field_string ("what", "all Ada exceptions");
12519
12520 break;
f7f9143b 12521
761269c8 12522 case ada_catch_exception_unhandled:
dda83cd7
SM
12523 uiout->field_string ("what", "unhandled Ada exceptions");
12524 break;
f7f9143b 12525
9f757bf7 12526 case ada_catch_handlers:
dda83cd7
SM
12527 if (!c->excep_string.empty ())
12528 {
9f757bf7
XR
12529 uiout->field_fmt ("what",
12530 _("`%s' Ada exception handlers"),
bc18fbb5 12531 c->excep_string.c_str ());
dda83cd7
SM
12532 }
12533 else
9f757bf7 12534 uiout->field_string ("what", "all Ada exceptions handlers");
dda83cd7 12535 break;
9f757bf7 12536
761269c8 12537 case ada_catch_assert:
dda83cd7
SM
12538 uiout->field_string ("what", "failed Ada assertions");
12539 break;
f7f9143b
JB
12540
12541 default:
dda83cd7
SM
12542 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12543 break;
f7f9143b
JB
12544 }
12545}
12546
12547/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12548 for all exception catchpoint kinds. */
12549
12550static void
37f6a7f4 12551print_mention_exception (struct breakpoint *b)
f7f9143b 12552{
28010a5d 12553 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12554 struct ui_out *uiout = current_uiout;
28010a5d 12555
112e8700 12556 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
dda83cd7 12557 : _("Catchpoint "));
381befee 12558 uiout->field_signed ("bkptno", b->number);
112e8700 12559 uiout->text (": ");
00eb2c4a 12560
37f6a7f4 12561 switch (c->m_kind)
f7f9143b 12562 {
761269c8 12563 case ada_catch_exception:
dda83cd7 12564 if (!c->excep_string.empty ())
00eb2c4a 12565 {
862d101a 12566 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12567 c->excep_string.c_str ());
862d101a 12568 uiout->text (info.c_str ());
00eb2c4a 12569 }
dda83cd7
SM
12570 else
12571 uiout->text (_("all Ada exceptions"));
12572 break;
f7f9143b 12573
761269c8 12574 case ada_catch_exception_unhandled:
dda83cd7
SM
12575 uiout->text (_("unhandled Ada exceptions"));
12576 break;
9f757bf7
XR
12577
12578 case ada_catch_handlers:
dda83cd7 12579 if (!c->excep_string.empty ())
9f757bf7
XR
12580 {
12581 std::string info
12582 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12583 c->excep_string.c_str ());
9f757bf7
XR
12584 uiout->text (info.c_str ());
12585 }
dda83cd7
SM
12586 else
12587 uiout->text (_("all Ada exceptions handlers"));
12588 break;
9f757bf7 12589
761269c8 12590 case ada_catch_assert:
dda83cd7
SM
12591 uiout->text (_("failed Ada assertions"));
12592 break;
f7f9143b
JB
12593
12594 default:
dda83cd7
SM
12595 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12596 break;
f7f9143b
JB
12597 }
12598}
12599
6149aea9
PA
12600/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12601 for all exception catchpoint kinds. */
12602
12603static void
37f6a7f4 12604print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12605{
28010a5d
PA
12606 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12607
37f6a7f4 12608 switch (c->m_kind)
6149aea9 12609 {
761269c8 12610 case ada_catch_exception:
6149aea9 12611 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12612 if (!c->excep_string.empty ())
12613 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12614 break;
12615
761269c8 12616 case ada_catch_exception_unhandled:
78076abc 12617 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12618 break;
12619
9f757bf7
XR
12620 case ada_catch_handlers:
12621 fprintf_filtered (fp, "catch handlers");
12622 break;
12623
761269c8 12624 case ada_catch_assert:
6149aea9
PA
12625 fprintf_filtered (fp, "catch assert");
12626 break;
12627
12628 default:
12629 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12630 }
d9b3f62e 12631 print_recreate_thread (b, fp);
6149aea9
PA
12632}
12633
37f6a7f4 12634/* Virtual tables for various breakpoint types. */
2060206e 12635static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12636static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12637static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12638static struct breakpoint_ops catch_handlers_breakpoint_ops;
12639
f06f1252
TT
12640/* See ada-lang.h. */
12641
12642bool
12643is_ada_exception_catchpoint (breakpoint *bp)
12644{
12645 return (bp->ops == &catch_exception_breakpoint_ops
12646 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12647 || bp->ops == &catch_assert_breakpoint_ops
12648 || bp->ops == &catch_handlers_breakpoint_ops);
12649}
12650
f7f9143b
JB
12651/* Split the arguments specified in a "catch exception" command.
12652 Set EX to the appropriate catchpoint type.
28010a5d 12653 Set EXCEP_STRING to the name of the specific exception if
5845583d 12654 specified by the user.
9f757bf7
XR
12655 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12656 "catch handlers" command. False otherwise.
5845583d
JB
12657 If a condition is found at the end of the arguments, the condition
12658 expression is stored in COND_STRING (memory must be deallocated
12659 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12660
12661static void
a121b7c1 12662catch_ada_exception_command_split (const char *args,
9f757bf7 12663 bool is_catch_handlers_cmd,
dda83cd7 12664 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12665 std::string *excep_string,
12666 std::string *cond_string)
f7f9143b 12667{
bc18fbb5 12668 std::string exception_name;
f7f9143b 12669
bc18fbb5
TT
12670 exception_name = extract_arg (&args);
12671 if (exception_name == "if")
5845583d
JB
12672 {
12673 /* This is not an exception name; this is the start of a condition
12674 expression for a catchpoint on all exceptions. So, "un-get"
12675 this token, and set exception_name to NULL. */
bc18fbb5 12676 exception_name.clear ();
5845583d
JB
12677 args -= 2;
12678 }
f7f9143b 12679
5845583d 12680 /* Check to see if we have a condition. */
f7f9143b 12681
f1735a53 12682 args = skip_spaces (args);
61012eef 12683 if (startswith (args, "if")
5845583d
JB
12684 && (isspace (args[2]) || args[2] == '\0'))
12685 {
12686 args += 2;
f1735a53 12687 args = skip_spaces (args);
5845583d
JB
12688
12689 if (args[0] == '\0')
dda83cd7 12690 error (_("Condition missing after `if' keyword"));
bc18fbb5 12691 *cond_string = args;
5845583d
JB
12692
12693 args += strlen (args);
12694 }
12695
12696 /* Check that we do not have any more arguments. Anything else
12697 is unexpected. */
f7f9143b
JB
12698
12699 if (args[0] != '\0')
12700 error (_("Junk at end of expression"));
12701
9f757bf7
XR
12702 if (is_catch_handlers_cmd)
12703 {
12704 /* Catch handling of exceptions. */
12705 *ex = ada_catch_handlers;
12706 *excep_string = exception_name;
12707 }
bc18fbb5 12708 else if (exception_name.empty ())
f7f9143b
JB
12709 {
12710 /* Catch all exceptions. */
761269c8 12711 *ex = ada_catch_exception;
bc18fbb5 12712 excep_string->clear ();
f7f9143b 12713 }
bc18fbb5 12714 else if (exception_name == "unhandled")
f7f9143b
JB
12715 {
12716 /* Catch unhandled exceptions. */
761269c8 12717 *ex = ada_catch_exception_unhandled;
bc18fbb5 12718 excep_string->clear ();
f7f9143b
JB
12719 }
12720 else
12721 {
12722 /* Catch a specific exception. */
761269c8 12723 *ex = ada_catch_exception;
28010a5d 12724 *excep_string = exception_name;
f7f9143b
JB
12725 }
12726}
12727
12728/* Return the name of the symbol on which we should break in order to
12729 implement a catchpoint of the EX kind. */
12730
12731static const char *
761269c8 12732ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12733{
3eecfa55
JB
12734 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12735
12736 gdb_assert (data->exception_info != NULL);
0259addd 12737
f7f9143b
JB
12738 switch (ex)
12739 {
761269c8 12740 case ada_catch_exception:
dda83cd7
SM
12741 return (data->exception_info->catch_exception_sym);
12742 break;
761269c8 12743 case ada_catch_exception_unhandled:
dda83cd7
SM
12744 return (data->exception_info->catch_exception_unhandled_sym);
12745 break;
761269c8 12746 case ada_catch_assert:
dda83cd7
SM
12747 return (data->exception_info->catch_assert_sym);
12748 break;
9f757bf7 12749 case ada_catch_handlers:
dda83cd7
SM
12750 return (data->exception_info->catch_handlers_sym);
12751 break;
f7f9143b 12752 default:
dda83cd7
SM
12753 internal_error (__FILE__, __LINE__,
12754 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12755 }
12756}
12757
12758/* Return the breakpoint ops "virtual table" used for catchpoints
12759 of the EX kind. */
12760
c0a91b2b 12761static const struct breakpoint_ops *
761269c8 12762ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12763{
12764 switch (ex)
12765 {
761269c8 12766 case ada_catch_exception:
dda83cd7
SM
12767 return (&catch_exception_breakpoint_ops);
12768 break;
761269c8 12769 case ada_catch_exception_unhandled:
dda83cd7
SM
12770 return (&catch_exception_unhandled_breakpoint_ops);
12771 break;
761269c8 12772 case ada_catch_assert:
dda83cd7
SM
12773 return (&catch_assert_breakpoint_ops);
12774 break;
9f757bf7 12775 case ada_catch_handlers:
dda83cd7
SM
12776 return (&catch_handlers_breakpoint_ops);
12777 break;
f7f9143b 12778 default:
dda83cd7
SM
12779 internal_error (__FILE__, __LINE__,
12780 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12781 }
12782}
12783
12784/* Return the condition that will be used to match the current exception
12785 being raised with the exception that the user wants to catch. This
12786 assumes that this condition is used when the inferior just triggered
12787 an exception catchpoint.
cb7de75e 12788 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12789
cb7de75e 12790static std::string
9f757bf7 12791ada_exception_catchpoint_cond_string (const char *excep_string,
dda83cd7 12792 enum ada_exception_catchpoint_kind ex)
f7f9143b 12793{
3d0b0fa3 12794 int i;
fccf9de1 12795 bool is_standard_exc = false;
cb7de75e 12796 std::string result;
9f757bf7
XR
12797
12798 if (ex == ada_catch_handlers)
12799 {
12800 /* For exception handlers catchpoints, the condition string does
dda83cd7 12801 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12802 result = ("long_integer (GNAT_GCC_exception_Access"
12803 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12804 }
12805 else
fccf9de1 12806 result = "long_integer (e)";
3d0b0fa3 12807
0963b4bd 12808 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12809 runtime units that have been compiled without debugging info; if
28010a5d 12810 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12811 exception (e.g. "constraint_error") then, during the evaluation
12812 of the condition expression, the symbol lookup on this name would
0963b4bd 12813 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12814 may then be set only on user-defined exceptions which have the
12815 same not-fully-qualified name (e.g. my_package.constraint_error).
12816
12817 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12818 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12819 exception constraint_error" is rewritten into "catch exception
12820 standard.constraint_error".
12821
85102364 12822 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12823 the inferior program, then the only way to specify this exception as a
12824 breakpoint condition is to use its fully-qualified named:
fccf9de1 12825 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12826
12827 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12828 {
28010a5d 12829 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12830 {
fccf9de1 12831 is_standard_exc = true;
9f757bf7 12832 break;
3d0b0fa3
JB
12833 }
12834 }
9f757bf7 12835
fccf9de1
TT
12836 result += " = ";
12837
12838 if (is_standard_exc)
12839 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12840 else
12841 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12842
9f757bf7 12843 return result;
f7f9143b
JB
12844}
12845
12846/* Return the symtab_and_line that should be used to insert an exception
12847 catchpoint of the TYPE kind.
12848
28010a5d
PA
12849 ADDR_STRING returns the name of the function where the real
12850 breakpoint that implements the catchpoints is set, depending on the
12851 type of catchpoint we need to create. */
f7f9143b
JB
12852
12853static struct symtab_and_line
bc18fbb5 12854ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12855 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12856{
12857 const char *sym_name;
12858 struct symbol *sym;
f7f9143b 12859
0259addd
JB
12860 /* First, find out which exception support info to use. */
12861 ada_exception_support_info_sniffer ();
12862
12863 /* Then lookup the function on which we will break in order to catch
f7f9143b 12864 the Ada exceptions requested by the user. */
f7f9143b
JB
12865 sym_name = ada_exception_sym_name (ex);
12866 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12867
57aff202
JB
12868 if (sym == NULL)
12869 error (_("Catchpoint symbol not found: %s"), sym_name);
12870
12871 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12872 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12873
12874 /* Set ADDR_STRING. */
cc12f4a8 12875 *addr_string = sym_name;
f7f9143b 12876
f7f9143b 12877 /* Set OPS. */
4b9eee8c 12878 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12879
f17011e0 12880 return find_function_start_sal (sym, 1);
f7f9143b
JB
12881}
12882
b4a5b78b 12883/* Create an Ada exception catchpoint.
f7f9143b 12884
b4a5b78b 12885 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12886
bc18fbb5 12887 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12888 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12889 of the exception to which this catchpoint applies.
2df4d1d5 12890
bc18fbb5 12891 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12892
b4a5b78b
JB
12893 TEMPFLAG, if nonzero, means that the underlying breakpoint
12894 should be temporary.
28010a5d 12895
b4a5b78b 12896 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12897
349774ef 12898void
28010a5d 12899create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12900 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12901 const std::string &excep_string,
56ecd069 12902 const std::string &cond_string,
28010a5d 12903 int tempflag,
349774ef 12904 int disabled,
28010a5d
PA
12905 int from_tty)
12906{
cc12f4a8 12907 std::string addr_string;
b4a5b78b 12908 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12909 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12910
37f6a7f4 12911 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12912 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12913 ops, tempflag, disabled, from_tty);
28010a5d 12914 c->excep_string = excep_string;
9f757bf7 12915 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069 12916 if (!cond_string.empty ())
733d554a 12917 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
b270e6f9 12918 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12919}
12920
9ac4176b
PA
12921/* Implement the "catch exception" command. */
12922
12923static void
eb4c3f4a 12924catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12925 struct cmd_list_element *command)
12926{
a121b7c1 12927 const char *arg = arg_entry;
9ac4176b
PA
12928 struct gdbarch *gdbarch = get_current_arch ();
12929 int tempflag;
761269c8 12930 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12931 std::string excep_string;
56ecd069 12932 std::string cond_string;
9ac4176b
PA
12933
12934 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12935
12936 if (!arg)
12937 arg = "";
9f757bf7 12938 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12939 &cond_string);
9f757bf7
XR
12940 create_ada_exception_catchpoint (gdbarch, ex_kind,
12941 excep_string, cond_string,
12942 tempflag, 1 /* enabled */,
12943 from_tty);
12944}
12945
12946/* Implement the "catch handlers" command. */
12947
12948static void
12949catch_ada_handlers_command (const char *arg_entry, int from_tty,
12950 struct cmd_list_element *command)
12951{
12952 const char *arg = arg_entry;
12953 struct gdbarch *gdbarch = get_current_arch ();
12954 int tempflag;
12955 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12956 std::string excep_string;
56ecd069 12957 std::string cond_string;
9f757bf7
XR
12958
12959 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12960
12961 if (!arg)
12962 arg = "";
12963 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 12964 &cond_string);
b4a5b78b
JB
12965 create_ada_exception_catchpoint (gdbarch, ex_kind,
12966 excep_string, cond_string,
349774ef
JB
12967 tempflag, 1 /* enabled */,
12968 from_tty);
9ac4176b
PA
12969}
12970
71bed2db
TT
12971/* Completion function for the Ada "catch" commands. */
12972
12973static void
12974catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12975 const char *text, const char *word)
12976{
12977 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12978
12979 for (const ada_exc_info &info : exceptions)
12980 {
12981 if (startswith (info.name, word))
b02f78f9 12982 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
12983 }
12984}
12985
b4a5b78b 12986/* Split the arguments specified in a "catch assert" command.
5845583d 12987
b4a5b78b
JB
12988 ARGS contains the command's arguments (or the empty string if
12989 no arguments were passed).
5845583d
JB
12990
12991 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12992 (the memory needs to be deallocated after use). */
5845583d 12993
b4a5b78b 12994static void
56ecd069 12995catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 12996{
f1735a53 12997 args = skip_spaces (args);
f7f9143b 12998
5845583d 12999 /* Check whether a condition was provided. */
61012eef 13000 if (startswith (args, "if")
5845583d 13001 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 13002 {
5845583d 13003 args += 2;
f1735a53 13004 args = skip_spaces (args);
5845583d 13005 if (args[0] == '\0')
dda83cd7 13006 error (_("condition missing after `if' keyword"));
56ecd069 13007 cond_string.assign (args);
f7f9143b
JB
13008 }
13009
5845583d
JB
13010 /* Otherwise, there should be no other argument at the end of
13011 the command. */
13012 else if (args[0] != '\0')
13013 error (_("Junk at end of arguments."));
f7f9143b
JB
13014}
13015
9ac4176b
PA
13016/* Implement the "catch assert" command. */
13017
13018static void
eb4c3f4a 13019catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13020 struct cmd_list_element *command)
13021{
a121b7c1 13022 const char *arg = arg_entry;
9ac4176b
PA
13023 struct gdbarch *gdbarch = get_current_arch ();
13024 int tempflag;
56ecd069 13025 std::string cond_string;
9ac4176b
PA
13026
13027 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13028
13029 if (!arg)
13030 arg = "";
56ecd069 13031 catch_ada_assert_command_split (arg, cond_string);
761269c8 13032 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 13033 "", cond_string,
349774ef
JB
13034 tempflag, 1 /* enabled */,
13035 from_tty);
9ac4176b 13036}
778865d3
JB
13037
13038/* Return non-zero if the symbol SYM is an Ada exception object. */
13039
13040static int
13041ada_is_exception_sym (struct symbol *sym)
13042{
7d93a1e0 13043 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
13044
13045 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
dda83cd7
SM
13046 && SYMBOL_CLASS (sym) != LOC_BLOCK
13047 && SYMBOL_CLASS (sym) != LOC_CONST
13048 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13049 && type_name != NULL && strcmp (type_name, "exception") == 0);
778865d3
JB
13050}
13051
13052/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13053 Ada exception object. This matches all exceptions except the ones
13054 defined by the Ada language. */
13055
13056static int
13057ada_is_non_standard_exception_sym (struct symbol *sym)
13058{
13059 int i;
13060
13061 if (!ada_is_exception_sym (sym))
13062 return 0;
13063
13064 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 13065 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
13066 return 0; /* A standard exception. */
13067
13068 /* Numeric_Error is also a standard exception, so exclude it.
13069 See the STANDARD_EXC description for more details as to why
13070 this exception is not listed in that array. */
987012b8 13071 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
13072 return 0;
13073
13074 return 1;
13075}
13076
ab816a27 13077/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
13078 objects.
13079
13080 The comparison is determined first by exception name, and then
13081 by exception address. */
13082
ab816a27 13083bool
cc536b21 13084ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 13085{
778865d3
JB
13086 int result;
13087
ab816a27
TT
13088 result = strcmp (name, other.name);
13089 if (result < 0)
13090 return true;
13091 if (result == 0 && addr < other.addr)
13092 return true;
13093 return false;
13094}
778865d3 13095
ab816a27 13096bool
cc536b21 13097ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
13098{
13099 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
13100}
13101
13102/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13103 routine, but keeping the first SKIP elements untouched.
13104
13105 All duplicates are also removed. */
13106
13107static void
ab816a27 13108sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
13109 int skip)
13110{
ab816a27
TT
13111 std::sort (exceptions->begin () + skip, exceptions->end ());
13112 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
13113 exceptions->end ());
778865d3
JB
13114}
13115
778865d3
JB
13116/* Add all exceptions defined by the Ada standard whose name match
13117 a regular expression.
13118
13119 If PREG is not NULL, then this regexp_t object is used to
13120 perform the symbol name matching. Otherwise, no name-based
13121 filtering is performed.
13122
13123 EXCEPTIONS is a vector of exceptions to which matching exceptions
13124 gets pushed. */
13125
13126static void
2d7cc5c7 13127ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 13128 std::vector<ada_exc_info> *exceptions)
778865d3
JB
13129{
13130 int i;
13131
13132 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13133 {
13134 if (preg == NULL
2d7cc5c7 13135 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
13136 {
13137 struct bound_minimal_symbol msymbol
13138 = ada_lookup_simple_minsym (standard_exc[i]);
13139
13140 if (msymbol.minsym != NULL)
13141 {
13142 struct ada_exc_info info
77e371c0 13143 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 13144
ab816a27 13145 exceptions->push_back (info);
778865d3
JB
13146 }
13147 }
13148 }
13149}
13150
13151/* Add all Ada exceptions defined locally and accessible from the given
13152 FRAME.
13153
13154 If PREG is not NULL, then this regexp_t object is used to
13155 perform the symbol name matching. Otherwise, no name-based
13156 filtering is performed.
13157
13158 EXCEPTIONS is a vector of exceptions to which matching exceptions
13159 gets pushed. */
13160
13161static void
2d7cc5c7
PA
13162ada_add_exceptions_from_frame (compiled_regex *preg,
13163 struct frame_info *frame,
ab816a27 13164 std::vector<ada_exc_info> *exceptions)
778865d3 13165{
3977b71f 13166 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13167
13168 while (block != 0)
13169 {
13170 struct block_iterator iter;
13171 struct symbol *sym;
13172
13173 ALL_BLOCK_SYMBOLS (block, iter, sym)
13174 {
13175 switch (SYMBOL_CLASS (sym))
13176 {
13177 case LOC_TYPEDEF:
13178 case LOC_BLOCK:
13179 case LOC_CONST:
13180 break;
13181 default:
13182 if (ada_is_exception_sym (sym))
13183 {
987012b8 13184 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
13185 SYMBOL_VALUE_ADDRESS (sym)};
13186
ab816a27 13187 exceptions->push_back (info);
778865d3
JB
13188 }
13189 }
13190 }
13191 if (BLOCK_FUNCTION (block) != NULL)
13192 break;
13193 block = BLOCK_SUPERBLOCK (block);
13194 }
13195}
13196
14bc53a8
PA
13197/* Return true if NAME matches PREG or if PREG is NULL. */
13198
13199static bool
2d7cc5c7 13200name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
13201{
13202 return (preg == NULL
f945dedf 13203 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
13204}
13205
778865d3
JB
13206/* Add all exceptions defined globally whose name name match
13207 a regular expression, excluding standard exceptions.
13208
13209 The reason we exclude standard exceptions is that they need
13210 to be handled separately: Standard exceptions are defined inside
13211 a runtime unit which is normally not compiled with debugging info,
13212 and thus usually do not show up in our symbol search. However,
13213 if the unit was in fact built with debugging info, we need to
13214 exclude them because they would duplicate the entry we found
13215 during the special loop that specifically searches for those
13216 standard exceptions.
13217
13218 If PREG is not NULL, then this regexp_t object is used to
13219 perform the symbol name matching. Otherwise, no name-based
13220 filtering is performed.
13221
13222 EXCEPTIONS is a vector of exceptions to which matching exceptions
13223 gets pushed. */
13224
13225static void
2d7cc5c7 13226ada_add_global_exceptions (compiled_regex *preg,
ab816a27 13227 std::vector<ada_exc_info> *exceptions)
778865d3 13228{
14bc53a8
PA
13229 /* In Ada, the symbol "search name" is a linkage name, whereas the
13230 regular expression used to do the matching refers to the natural
13231 name. So match against the decoded name. */
13232 expand_symtabs_matching (NULL,
b5ec771e 13233 lookup_name_info::match_any (),
14bc53a8
PA
13234 [&] (const char *search_name)
13235 {
f945dedf
CB
13236 std::string decoded = ada_decode (search_name);
13237 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
13238 },
13239 NULL,
13240 VARIABLES_DOMAIN);
778865d3 13241
2030c079 13242 for (objfile *objfile : current_program_space->objfiles ())
778865d3 13243 {
b669c953 13244 for (compunit_symtab *s : objfile->compunits ())
778865d3 13245 {
d8aeb77f
TT
13246 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13247 int i;
778865d3 13248
d8aeb77f
TT
13249 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13250 {
582942f4 13251 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
13252 struct block_iterator iter;
13253 struct symbol *sym;
778865d3 13254
d8aeb77f
TT
13255 ALL_BLOCK_SYMBOLS (b, iter, sym)
13256 if (ada_is_non_standard_exception_sym (sym)
987012b8 13257 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
13258 {
13259 struct ada_exc_info info
987012b8 13260 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
13261
13262 exceptions->push_back (info);
13263 }
13264 }
778865d3
JB
13265 }
13266 }
13267}
13268
13269/* Implements ada_exceptions_list with the regular expression passed
13270 as a regex_t, rather than a string.
13271
13272 If not NULL, PREG is used to filter out exceptions whose names
13273 do not match. Otherwise, all exceptions are listed. */
13274
ab816a27 13275static std::vector<ada_exc_info>
2d7cc5c7 13276ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13277{
ab816a27 13278 std::vector<ada_exc_info> result;
778865d3
JB
13279 int prev_len;
13280
13281 /* First, list the known standard exceptions. These exceptions
13282 need to be handled separately, as they are usually defined in
13283 runtime units that have been compiled without debugging info. */
13284
13285 ada_add_standard_exceptions (preg, &result);
13286
13287 /* Next, find all exceptions whose scope is local and accessible
13288 from the currently selected frame. */
13289
13290 if (has_stack_frames ())
13291 {
ab816a27 13292 prev_len = result.size ();
778865d3
JB
13293 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13294 &result);
ab816a27 13295 if (result.size () > prev_len)
778865d3
JB
13296 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13297 }
13298
13299 /* Add all exceptions whose scope is global. */
13300
ab816a27 13301 prev_len = result.size ();
778865d3 13302 ada_add_global_exceptions (preg, &result);
ab816a27 13303 if (result.size () > prev_len)
778865d3
JB
13304 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13305
778865d3
JB
13306 return result;
13307}
13308
13309/* Return a vector of ada_exc_info.
13310
13311 If REGEXP is NULL, all exceptions are included in the result.
13312 Otherwise, it should contain a valid regular expression,
13313 and only the exceptions whose names match that regular expression
13314 are included in the result.
13315
13316 The exceptions are sorted in the following order:
13317 - Standard exceptions (defined by the Ada language), in
13318 alphabetical order;
13319 - Exceptions only visible from the current frame, in
13320 alphabetical order;
13321 - Exceptions whose scope is global, in alphabetical order. */
13322
ab816a27 13323std::vector<ada_exc_info>
778865d3
JB
13324ada_exceptions_list (const char *regexp)
13325{
2d7cc5c7
PA
13326 if (regexp == NULL)
13327 return ada_exceptions_list_1 (NULL);
778865d3 13328
2d7cc5c7
PA
13329 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13330 return ada_exceptions_list_1 (&reg);
778865d3
JB
13331}
13332
13333/* Implement the "info exceptions" command. */
13334
13335static void
1d12d88f 13336info_exceptions_command (const char *regexp, int from_tty)
778865d3 13337{
778865d3 13338 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13339
ab816a27 13340 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13341
13342 if (regexp != NULL)
13343 printf_filtered
13344 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13345 else
13346 printf_filtered (_("All defined Ada exceptions:\n"));
13347
ab816a27
TT
13348 for (const ada_exc_info &info : exceptions)
13349 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13350}
13351
dda83cd7 13352 /* Operators */
4c4b4cd2
PH
13353/* Information about operators given special treatment in functions
13354 below. */
13355/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13356
13357#define ADA_OPERATORS \
13358 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13359 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13360 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13361 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13362 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13363 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13364 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13365 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13366 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13367 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13368 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13369 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13370 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13371 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13372 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13373 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13374 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13375 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13376 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13377
13378static void
554794dc
SDJ
13379ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13380 int *argsp)
4c4b4cd2
PH
13381{
13382 switch (exp->elts[pc - 1].opcode)
13383 {
76a01679 13384 default:
4c4b4cd2
PH
13385 operator_length_standard (exp, pc, oplenp, argsp);
13386 break;
13387
13388#define OP_DEFN(op, len, args, binop) \
13389 case op: *oplenp = len; *argsp = args; break;
13390 ADA_OPERATORS;
13391#undef OP_DEFN
52ce6436
PH
13392
13393 case OP_AGGREGATE:
13394 *oplenp = 3;
13395 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13396 break;
13397
13398 case OP_CHOICES:
13399 *oplenp = 3;
13400 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13401 break;
4c4b4cd2
PH
13402 }
13403}
13404
c0201579
JK
13405/* Implementation of the exp_descriptor method operator_check. */
13406
13407static int
13408ada_operator_check (struct expression *exp, int pos,
13409 int (*objfile_func) (struct objfile *objfile, void *data),
13410 void *data)
13411{
13412 const union exp_element *const elts = exp->elts;
13413 struct type *type = NULL;
13414
13415 switch (elts[pos].opcode)
13416 {
13417 case UNOP_IN_RANGE:
13418 case UNOP_QUAL:
13419 type = elts[pos + 1].type;
13420 break;
13421
13422 default:
13423 return operator_check_standard (exp, pos, objfile_func, data);
13424 }
13425
13426 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13427
6ac37371
SM
13428 if (type != nullptr && type->objfile_owner () != nullptr
13429 && objfile_func (type->objfile_owner (), data))
c0201579
JK
13430 return 1;
13431
13432 return 0;
13433}
13434
4c4b4cd2
PH
13435/* As for operator_length, but assumes PC is pointing at the first
13436 element of the operator, and gives meaningful results only for the
52ce6436 13437 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13438
13439static void
76a01679 13440ada_forward_operator_length (struct expression *exp, int pc,
dda83cd7 13441 int *oplenp, int *argsp)
4c4b4cd2 13442{
76a01679 13443 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13444 {
13445 default:
13446 *oplenp = *argsp = 0;
13447 break;
52ce6436 13448
4c4b4cd2
PH
13449#define OP_DEFN(op, len, args, binop) \
13450 case op: *oplenp = len; *argsp = args; break;
13451 ADA_OPERATORS;
13452#undef OP_DEFN
52ce6436
PH
13453
13454 case OP_AGGREGATE:
13455 *oplenp = 3;
13456 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13457 break;
13458
13459 case OP_CHOICES:
13460 *oplenp = 3;
13461 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13462 break;
13463
13464 case OP_STRING:
13465 case OP_NAME:
13466 {
13467 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13468
52ce6436
PH
13469 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13470 *argsp = 0;
13471 break;
13472 }
4c4b4cd2
PH
13473 }
13474}
13475
13476static int
13477ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13478{
13479 enum exp_opcode op = exp->elts[elt].opcode;
13480 int oplen, nargs;
13481 int pc = elt;
13482 int i;
76a01679 13483
4c4b4cd2
PH
13484 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13485
76a01679 13486 switch (op)
4c4b4cd2 13487 {
76a01679 13488 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13489 case OP_ATR_FIRST:
13490 case OP_ATR_LAST:
13491 case OP_ATR_LENGTH:
13492 case OP_ATR_IMAGE:
13493 case OP_ATR_MAX:
13494 case OP_ATR_MIN:
13495 case OP_ATR_MODULUS:
13496 case OP_ATR_POS:
13497 case OP_ATR_SIZE:
13498 case OP_ATR_TAG:
13499 case OP_ATR_VAL:
13500 break;
13501
13502 case UNOP_IN_RANGE:
13503 case UNOP_QUAL:
323e0a4a
AC
13504 /* XXX: gdb_sprint_host_address, type_sprint */
13505 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13506 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13507 fprintf_filtered (stream, " (");
13508 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13509 fprintf_filtered (stream, ")");
13510 break;
13511 case BINOP_IN_BOUNDS:
52ce6436
PH
13512 fprintf_filtered (stream, " (%d)",
13513 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13514 break;
13515 case TERNOP_IN_RANGE:
13516 break;
13517
52ce6436
PH
13518 case OP_AGGREGATE:
13519 case OP_OTHERS:
13520 case OP_DISCRETE_RANGE:
13521 case OP_POSITIONAL:
13522 case OP_CHOICES:
13523 break;
13524
13525 case OP_NAME:
13526 case OP_STRING:
13527 {
13528 char *name = &exp->elts[elt + 2].string;
13529 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13530
52ce6436
PH
13531 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13532 break;
13533 }
13534
4c4b4cd2
PH
13535 default:
13536 return dump_subexp_body_standard (exp, stream, elt);
13537 }
13538
13539 elt += oplen;
13540 for (i = 0; i < nargs; i += 1)
13541 elt = dump_subexp (exp, stream, elt);
13542
13543 return elt;
13544}
13545
13546/* The Ada extension of print_subexp (q.v.). */
13547
76a01679
JB
13548static void
13549ada_print_subexp (struct expression *exp, int *pos,
dda83cd7 13550 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13551{
52ce6436 13552 int oplen, nargs, i;
4c4b4cd2
PH
13553 int pc = *pos;
13554 enum exp_opcode op = exp->elts[pc].opcode;
13555
13556 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13557
52ce6436 13558 *pos += oplen;
4c4b4cd2
PH
13559 switch (op)
13560 {
13561 default:
52ce6436 13562 *pos -= oplen;
4c4b4cd2
PH
13563 print_subexp_standard (exp, pos, stream, prec);
13564 return;
13565
13566 case OP_VAR_VALUE:
987012b8 13567 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13568 return;
13569
13570 case BINOP_IN_BOUNDS:
323e0a4a 13571 /* XXX: sprint_subexp */
4c4b4cd2 13572 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13573 fputs_filtered (" in ", stream);
4c4b4cd2 13574 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13575 fputs_filtered ("'range", stream);
4c4b4cd2 13576 if (exp->elts[pc + 1].longconst > 1)
dda83cd7
SM
13577 fprintf_filtered (stream, "(%ld)",
13578 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13579 return;
13580
13581 case TERNOP_IN_RANGE:
4c4b4cd2 13582 if (prec >= PREC_EQUAL)
dda83cd7 13583 fputs_filtered ("(", stream);
323e0a4a 13584 /* XXX: sprint_subexp */
4c4b4cd2 13585 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13586 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13587 print_subexp (exp, pos, stream, PREC_EQUAL);
13588 fputs_filtered (" .. ", stream);
13589 print_subexp (exp, pos, stream, PREC_EQUAL);
13590 if (prec >= PREC_EQUAL)
dda83cd7 13591 fputs_filtered (")", stream);
76a01679 13592 return;
4c4b4cd2
PH
13593
13594 case OP_ATR_FIRST:
13595 case OP_ATR_LAST:
13596 case OP_ATR_LENGTH:
13597 case OP_ATR_IMAGE:
13598 case OP_ATR_MAX:
13599 case OP_ATR_MIN:
13600 case OP_ATR_MODULUS:
13601 case OP_ATR_POS:
13602 case OP_ATR_SIZE:
13603 case OP_ATR_TAG:
13604 case OP_ATR_VAL:
4c4b4cd2 13605 if (exp->elts[*pos].opcode == OP_TYPE)
dda83cd7
SM
13606 {
13607 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13608 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
79d43c61 13609 &type_print_raw_options);
dda83cd7
SM
13610 *pos += 3;
13611 }
4c4b4cd2 13612 else
dda83cd7 13613 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13614 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13615 if (nargs > 1)
dda83cd7
SM
13616 {
13617 int tem;
13618
13619 for (tem = 1; tem < nargs; tem += 1)
13620 {
13621 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13622 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13623 }
13624 fputs_filtered (")", stream);
13625 }
4c4b4cd2 13626 return;
14f9c5c9 13627
4c4b4cd2 13628 case UNOP_QUAL:
4c4b4cd2
PH
13629 type_print (exp->elts[pc + 1].type, "", stream, 0);
13630 fputs_filtered ("'(", stream);
13631 print_subexp (exp, pos, stream, PREC_PREFIX);
13632 fputs_filtered (")", stream);
13633 return;
14f9c5c9 13634
4c4b4cd2 13635 case UNOP_IN_RANGE:
323e0a4a 13636 /* XXX: sprint_subexp */
4c4b4cd2 13637 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13638 fputs_filtered (" in ", stream);
79d43c61
TT
13639 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13640 &type_print_raw_options);
4c4b4cd2 13641 return;
52ce6436
PH
13642
13643 case OP_DISCRETE_RANGE:
13644 print_subexp (exp, pos, stream, PREC_SUFFIX);
13645 fputs_filtered ("..", stream);
13646 print_subexp (exp, pos, stream, PREC_SUFFIX);
13647 return;
13648
13649 case OP_OTHERS:
13650 fputs_filtered ("others => ", stream);
13651 print_subexp (exp, pos, stream, PREC_SUFFIX);
13652 return;
13653
13654 case OP_CHOICES:
13655 for (i = 0; i < nargs-1; i += 1)
13656 {
13657 if (i > 0)
13658 fputs_filtered ("|", stream);
13659 print_subexp (exp, pos, stream, PREC_SUFFIX);
13660 }
13661 fputs_filtered (" => ", stream);
13662 print_subexp (exp, pos, stream, PREC_SUFFIX);
13663 return;
13664
13665 case OP_POSITIONAL:
13666 print_subexp (exp, pos, stream, PREC_SUFFIX);
13667 return;
13668
13669 case OP_AGGREGATE:
13670 fputs_filtered ("(", stream);
13671 for (i = 0; i < nargs; i += 1)
13672 {
13673 if (i > 0)
13674 fputs_filtered (", ", stream);
13675 print_subexp (exp, pos, stream, PREC_SUFFIX);
13676 }
13677 fputs_filtered (")", stream);
13678 return;
4c4b4cd2
PH
13679 }
13680}
14f9c5c9
AS
13681
13682/* Table mapping opcodes into strings for printing operators
13683 and precedences of the operators. */
13684
d2e4a39e
AS
13685static const struct op_print ada_op_print_tab[] = {
13686 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13687 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13688 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13689 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13690 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13691 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13692 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13693 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13694 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13695 {">=", BINOP_GEQ, PREC_ORDER, 0},
13696 {">", BINOP_GTR, PREC_ORDER, 0},
13697 {"<", BINOP_LESS, PREC_ORDER, 0},
13698 {">>", BINOP_RSH, PREC_SHIFT, 0},
13699 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13700 {"+", BINOP_ADD, PREC_ADD, 0},
13701 {"-", BINOP_SUB, PREC_ADD, 0},
13702 {"&", BINOP_CONCAT, PREC_ADD, 0},
13703 {"*", BINOP_MUL, PREC_MUL, 0},
13704 {"/", BINOP_DIV, PREC_MUL, 0},
13705 {"rem", BINOP_REM, PREC_MUL, 0},
13706 {"mod", BINOP_MOD, PREC_MUL, 0},
13707 {"**", BINOP_EXP, PREC_REPEAT, 0},
13708 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13709 {"-", UNOP_NEG, PREC_PREFIX, 0},
13710 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13711 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13712 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13713 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13714 {".all", UNOP_IND, PREC_SUFFIX, 1},
13715 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13716 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13717 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9 13718};
6c038f32
PH
13719\f
13720 /* Language vector */
13721
6c038f32
PH
13722static const struct exp_descriptor ada_exp_descriptor = {
13723 ada_print_subexp,
13724 ada_operator_length,
c0201579 13725 ada_operator_check,
6c038f32
PH
13726 ada_dump_subexp_body,
13727 ada_evaluate_subexp
13728};
13729
b5ec771e
PA
13730/* symbol_name_matcher_ftype adapter for wild_match. */
13731
13732static bool
13733do_wild_match (const char *symbol_search_name,
13734 const lookup_name_info &lookup_name,
a207cff2 13735 completion_match_result *comp_match_res)
b5ec771e
PA
13736{
13737 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13738}
13739
13740/* symbol_name_matcher_ftype adapter for full_match. */
13741
13742static bool
13743do_full_match (const char *symbol_search_name,
13744 const lookup_name_info &lookup_name,
a207cff2 13745 completion_match_result *comp_match_res)
b5ec771e 13746{
959d6a67
TT
13747 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13748
13749 /* If both symbols start with "_ada_", just let the loop below
13750 handle the comparison. However, if only the symbol name starts
13751 with "_ada_", skip the prefix and let the match proceed as
13752 usual. */
13753 if (startswith (symbol_search_name, "_ada_")
13754 && !startswith (lname, "_ada"))
86b44259
TT
13755 symbol_search_name += 5;
13756
86b44259
TT
13757 int uscore_count = 0;
13758 while (*lname != '\0')
13759 {
13760 if (*symbol_search_name != *lname)
13761 {
13762 if (*symbol_search_name == 'B' && uscore_count == 2
13763 && symbol_search_name[1] == '_')
13764 {
13765 symbol_search_name += 2;
13766 while (isdigit (*symbol_search_name))
13767 ++symbol_search_name;
13768 if (symbol_search_name[0] == '_'
13769 && symbol_search_name[1] == '_')
13770 {
13771 symbol_search_name += 2;
13772 continue;
13773 }
13774 }
13775 return false;
13776 }
13777
13778 if (*symbol_search_name == '_')
13779 ++uscore_count;
13780 else
13781 uscore_count = 0;
13782
13783 ++symbol_search_name;
13784 ++lname;
13785 }
13786
13787 return is_name_suffix (symbol_search_name);
b5ec771e
PA
13788}
13789
a2cd4f14
JB
13790/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13791
13792static bool
13793do_exact_match (const char *symbol_search_name,
13794 const lookup_name_info &lookup_name,
13795 completion_match_result *comp_match_res)
13796{
13797 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13798}
13799
b5ec771e
PA
13800/* Build the Ada lookup name for LOOKUP_NAME. */
13801
13802ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13803{
e0802d59 13804 gdb::string_view user_name = lookup_name.name ();
b5ec771e 13805
6a780b67 13806 if (!user_name.empty () && user_name[0] == '<')
b5ec771e
PA
13807 {
13808 if (user_name.back () == '>')
e0802d59 13809 m_encoded_name
5ac58899 13810 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
b5ec771e 13811 else
e0802d59 13812 m_encoded_name
5ac58899 13813 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
b5ec771e
PA
13814 m_encoded_p = true;
13815 m_verbatim_p = true;
13816 m_wild_match_p = false;
13817 m_standard_p = false;
13818 }
13819 else
13820 {
13821 m_verbatim_p = false;
13822
e0802d59 13823 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13824
13825 if (!m_encoded_p)
13826 {
e0802d59 13827 const char *folded = ada_fold_name (user_name);
5c4258f4
TT
13828 m_encoded_name = ada_encode_1 (folded, false);
13829 if (m_encoded_name.empty ())
5ac58899 13830 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13831 }
13832 else
5ac58899 13833 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13834
13835 /* Handle the 'package Standard' special case. See description
13836 of m_standard_p. */
13837 if (startswith (m_encoded_name.c_str (), "standard__"))
13838 {
13839 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13840 m_standard_p = true;
13841 }
13842 else
13843 m_standard_p = false;
74ccd7f5 13844
b5ec771e
PA
13845 /* If the name contains a ".", then the user is entering a fully
13846 qualified entity name, and the match must not be done in wild
13847 mode. Similarly, if the user wants to complete what looks
13848 like an encoded name, the match must not be done in wild
13849 mode. Also, in the standard__ special case always do
13850 non-wild matching. */
13851 m_wild_match_p
13852 = (lookup_name.match_type () != symbol_name_match_type::FULL
13853 && !m_encoded_p
13854 && !m_standard_p
13855 && user_name.find ('.') == std::string::npos);
13856 }
13857}
13858
13859/* symbol_name_matcher_ftype method for Ada. This only handles
13860 completion mode. */
13861
13862static bool
13863ada_symbol_name_matches (const char *symbol_search_name,
13864 const lookup_name_info &lookup_name,
a207cff2 13865 completion_match_result *comp_match_res)
74ccd7f5 13866{
b5ec771e
PA
13867 return lookup_name.ada ().matches (symbol_search_name,
13868 lookup_name.match_type (),
a207cff2 13869 comp_match_res);
b5ec771e
PA
13870}
13871
de63c46b
PA
13872/* A name matcher that matches the symbol name exactly, with
13873 strcmp. */
13874
13875static bool
13876literal_symbol_name_matcher (const char *symbol_search_name,
13877 const lookup_name_info &lookup_name,
13878 completion_match_result *comp_match_res)
13879{
e0802d59 13880 gdb::string_view name_view = lookup_name.name ();
de63c46b 13881
e0802d59
TT
13882 if (lookup_name.completion_mode ()
13883 ? (strncmp (symbol_search_name, name_view.data (),
13884 name_view.size ()) == 0)
13885 : symbol_search_name == name_view)
de63c46b
PA
13886 {
13887 if (comp_match_res != NULL)
13888 comp_match_res->set_match (symbol_search_name);
13889 return true;
13890 }
13891 else
13892 return false;
13893}
13894
c9debfb9 13895/* Implement the "get_symbol_name_matcher" language_defn method for
b5ec771e
PA
13896 Ada. */
13897
13898static symbol_name_matcher_ftype *
13899ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13900{
de63c46b
PA
13901 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13902 return literal_symbol_name_matcher;
13903
b5ec771e
PA
13904 if (lookup_name.completion_mode ())
13905 return ada_symbol_name_matches;
74ccd7f5 13906 else
b5ec771e
PA
13907 {
13908 if (lookup_name.ada ().wild_match_p ())
13909 return do_wild_match;
a2cd4f14
JB
13910 else if (lookup_name.ada ().verbatim_p ())
13911 return do_exact_match;
b5ec771e
PA
13912 else
13913 return do_full_match;
13914 }
74ccd7f5
JB
13915}
13916
0874fd07
AB
13917/* Class representing the Ada language. */
13918
13919class ada_language : public language_defn
13920{
13921public:
13922 ada_language ()
0e25e767 13923 : language_defn (language_ada)
0874fd07 13924 { /* Nothing. */ }
5bd40f2a 13925
6f7664a9
AB
13926 /* See language.h. */
13927
13928 const char *name () const override
13929 { return "ada"; }
13930
13931 /* See language.h. */
13932
13933 const char *natural_name () const override
13934 { return "Ada"; }
13935
e171d6f1
AB
13936 /* See language.h. */
13937
13938 const std::vector<const char *> &filename_extensions () const override
13939 {
13940 static const std::vector<const char *> extensions
13941 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13942 return extensions;
13943 }
13944
5bd40f2a
AB
13945 /* Print an array element index using the Ada syntax. */
13946
13947 void print_array_index (struct type *index_type,
13948 LONGEST index,
13949 struct ui_file *stream,
13950 const value_print_options *options) const override
13951 {
13952 struct value *index_value = val_atr (index_type, index);
13953
00c696a6 13954 value_print (index_value, stream, options);
5bd40f2a
AB
13955 fprintf_filtered (stream, " => ");
13956 }
15e5fd35
AB
13957
13958 /* Implement the "read_var_value" language_defn method for Ada. */
13959
13960 struct value *read_var_value (struct symbol *var,
13961 const struct block *var_block,
13962 struct frame_info *frame) const override
13963 {
13964 /* The only case where default_read_var_value is not sufficient
13965 is when VAR is a renaming... */
13966 if (frame != nullptr)
13967 {
13968 const struct block *frame_block = get_frame_block (frame, NULL);
13969 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13970 return ada_read_renaming_var_value (var, frame_block);
13971 }
13972
13973 /* This is a typical case where we expect the default_read_var_value
13974 function to work. */
13975 return language_defn::read_var_value (var, var_block, frame);
13976 }
1fb314aa
AB
13977
13978 /* See language.h. */
13979 void language_arch_info (struct gdbarch *gdbarch,
13980 struct language_arch_info *lai) const override
13981 {
13982 const struct builtin_type *builtin = builtin_type (gdbarch);
13983
7bea47f0
AB
13984 /* Helper function to allow shorter lines below. */
13985 auto add = [&] (struct type *t)
13986 {
13987 lai->add_primitive_type (t);
13988 };
13989
13990 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13991 0, "integer"));
13992 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13993 0, "long_integer"));
13994 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13995 0, "short_integer"));
13996 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13997 0, "character");
13998 lai->set_string_char_type (char_type);
13999 add (char_type);
14000 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
14001 "float", gdbarch_float_format (gdbarch)));
14002 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
14003 "long_float", gdbarch_double_format (gdbarch)));
14004 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
14005 0, "long_long_integer"));
14006 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
14007 "long_long_float",
14008 gdbarch_long_double_format (gdbarch)));
14009 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14010 0, "natural"));
14011 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
14012 0, "positive"));
14013 add (builtin->builtin_void);
14014
14015 struct type *system_addr_ptr
1fb314aa
AB
14016 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
14017 "void"));
7bea47f0
AB
14018 system_addr_ptr->set_name ("system__address");
14019 add (system_addr_ptr);
1fb314aa
AB
14020
14021 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
14022 type. This is a signed integral type whose size is the same as
14023 the size of addresses. */
7bea47f0
AB
14024 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
14025 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
14026 "storage_offset"));
1fb314aa 14027
7bea47f0 14028 lai->set_bool_type (builtin->builtin_bool);
1fb314aa 14029 }
4009ee92
AB
14030
14031 /* See language.h. */
14032
14033 bool iterate_over_symbols
14034 (const struct block *block, const lookup_name_info &name,
14035 domain_enum domain,
14036 gdb::function_view<symbol_found_callback_ftype> callback) const override
14037 {
d1183b06
TT
14038 std::vector<struct block_symbol> results
14039 = ada_lookup_symbol_list_worker (name, block, domain, 0);
4009ee92
AB
14040 for (block_symbol &sym : results)
14041 {
14042 if (!callback (&sym))
14043 return false;
14044 }
14045
14046 return true;
14047 }
6f827019
AB
14048
14049 /* See language.h. */
14050 bool sniff_from_mangled_name (const char *mangled,
14051 char **out) const override
14052 {
14053 std::string demangled = ada_decode (mangled);
14054
14055 *out = NULL;
14056
14057 if (demangled != mangled && demangled[0] != '<')
14058 {
14059 /* Set the gsymbol language to Ada, but still return 0.
14060 Two reasons for that:
14061
14062 1. For Ada, we prefer computing the symbol's decoded name
14063 on the fly rather than pre-compute it, in order to save
14064 memory (Ada projects are typically very large).
14065
14066 2. There are some areas in the definition of the GNAT
14067 encoding where, with a bit of bad luck, we might be able
14068 to decode a non-Ada symbol, generating an incorrect
14069 demangled name (Eg: names ending with "TB" for instance
14070 are identified as task bodies and so stripped from
14071 the decoded name returned).
14072
14073 Returning true, here, but not setting *DEMANGLED, helps us get
14074 a little bit of the best of both worlds. Because we're last,
14075 we should not affect any of the other languages that were
14076 able to demangle the symbol before us; we get to correctly
14077 tag Ada symbols as such; and even if we incorrectly tagged a
14078 non-Ada symbol, which should be rare, any routing through the
14079 Ada language should be transparent (Ada tries to behave much
14080 like C/C++ with non-Ada symbols). */
14081 return true;
14082 }
14083
14084 return false;
14085 }
fbfb0a46
AB
14086
14087 /* See language.h. */
14088
5399db93 14089 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d
AB
14090 {
14091 return ada_la_decode (mangled, options);
14092 }
14093
14094 /* See language.h. */
14095
fbfb0a46
AB
14096 void print_type (struct type *type, const char *varstring,
14097 struct ui_file *stream, int show, int level,
14098 const struct type_print_options *flags) const override
14099 {
14100 ada_print_type (type, varstring, stream, show, level, flags);
14101 }
c9debfb9 14102
53fc67f8
AB
14103 /* See language.h. */
14104
14105 const char *word_break_characters (void) const override
14106 {
14107 return ada_completer_word_break_characters;
14108 }
14109
7e56227d
AB
14110 /* See language.h. */
14111
14112 void collect_symbol_completion_matches (completion_tracker &tracker,
14113 complete_symbol_mode mode,
14114 symbol_name_match_type name_match_type,
14115 const char *text, const char *word,
14116 enum type_code code) const override
14117 {
14118 struct symbol *sym;
14119 const struct block *b, *surrounding_static_block = 0;
14120 struct block_iterator iter;
14121
14122 gdb_assert (code == TYPE_CODE_UNDEF);
14123
14124 lookup_name_info lookup_name (text, name_match_type, true);
14125
14126 /* First, look at the partial symtab symbols. */
14127 expand_symtabs_matching (NULL,
14128 lookup_name,
14129 NULL,
14130 NULL,
14131 ALL_DOMAIN);
14132
14133 /* At this point scan through the misc symbol vectors and add each
14134 symbol you find to the list. Eventually we want to ignore
14135 anything that isn't a text symbol (everything else will be
14136 handled by the psymtab code above). */
14137
14138 for (objfile *objfile : current_program_space->objfiles ())
14139 {
14140 for (minimal_symbol *msymbol : objfile->msymbols ())
14141 {
14142 QUIT;
14143
14144 if (completion_skip_symbol (mode, msymbol))
14145 continue;
14146
14147 language symbol_language = msymbol->language ();
14148
14149 /* Ada minimal symbols won't have their language set to Ada. If
14150 we let completion_list_add_name compare using the
14151 default/C-like matcher, then when completing e.g., symbols in a
14152 package named "pck", we'd match internal Ada symbols like
14153 "pckS", which are invalid in an Ada expression, unless you wrap
14154 them in '<' '>' to request a verbatim match.
14155
14156 Unfortunately, some Ada encoded names successfully demangle as
14157 C++ symbols (using an old mangling scheme), such as "name__2Xn"
14158 -> "Xn::name(void)" and thus some Ada minimal symbols end up
14159 with the wrong language set. Paper over that issue here. */
14160 if (symbol_language == language_auto
14161 || symbol_language == language_cplus)
14162 symbol_language = language_ada;
14163
14164 completion_list_add_name (tracker,
14165 symbol_language,
14166 msymbol->linkage_name (),
14167 lookup_name, text, word);
14168 }
14169 }
14170
14171 /* Search upwards from currently selected frame (so that we can
14172 complete on local vars. */
14173
14174 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
14175 {
14176 if (!BLOCK_SUPERBLOCK (b))
14177 surrounding_static_block = b; /* For elmin of dups */
14178
14179 ALL_BLOCK_SYMBOLS (b, iter, sym)
14180 {
14181 if (completion_skip_symbol (mode, sym))
14182 continue;
14183
14184 completion_list_add_name (tracker,
14185 sym->language (),
14186 sym->linkage_name (),
14187 lookup_name, text, word);
14188 }
14189 }
14190
14191 /* Go through the symtabs and check the externs and statics for
14192 symbols which match. */
14193
14194 for (objfile *objfile : current_program_space->objfiles ())
14195 {
14196 for (compunit_symtab *s : objfile->compunits ())
14197 {
14198 QUIT;
14199 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
14200 ALL_BLOCK_SYMBOLS (b, iter, sym)
14201 {
14202 if (completion_skip_symbol (mode, sym))
14203 continue;
14204
14205 completion_list_add_name (tracker,
14206 sym->language (),
14207 sym->linkage_name (),
14208 lookup_name, text, word);
14209 }
14210 }
14211 }
14212
14213 for (objfile *objfile : current_program_space->objfiles ())
14214 {
14215 for (compunit_symtab *s : objfile->compunits ())
14216 {
14217 QUIT;
14218 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
14219 /* Don't do this block twice. */
14220 if (b == surrounding_static_block)
14221 continue;
14222 ALL_BLOCK_SYMBOLS (b, iter, sym)
14223 {
14224 if (completion_skip_symbol (mode, sym))
14225 continue;
14226
14227 completion_list_add_name (tracker,
14228 sym->language (),
14229 sym->linkage_name (),
14230 lookup_name, text, word);
14231 }
14232 }
14233 }
14234 }
14235
f16a9f57
AB
14236 /* See language.h. */
14237
14238 gdb::unique_xmalloc_ptr<char> watch_location_expression
14239 (struct type *type, CORE_ADDR addr) const override
14240 {
14241 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
14242 std::string name = type_to_string (type);
14243 return gdb::unique_xmalloc_ptr<char>
14244 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
14245 }
14246
a1d1fa3e
AB
14247 /* See language.h. */
14248
14249 void value_print (struct value *val, struct ui_file *stream,
14250 const struct value_print_options *options) const override
14251 {
14252 return ada_value_print (val, stream, options);
14253 }
14254
ebe2334e
AB
14255 /* See language.h. */
14256
14257 void value_print_inner
14258 (struct value *val, struct ui_file *stream, int recurse,
14259 const struct value_print_options *options) const override
14260 {
14261 return ada_value_print_inner (val, stream, recurse, options);
14262 }
14263
a78a19b1
AB
14264 /* See language.h. */
14265
14266 struct block_symbol lookup_symbol_nonlocal
14267 (const char *name, const struct block *block,
14268 const domain_enum domain) const override
14269 {
14270 struct block_symbol sym;
14271
14272 sym = ada_lookup_symbol (name, block_static_block (block), domain);
14273 if (sym.symbol != NULL)
14274 return sym;
14275
14276 /* If we haven't found a match at this point, try the primitive
14277 types. In other languages, this search is performed before
14278 searching for global symbols in order to short-circuit that
14279 global-symbol search if it happens that the name corresponds
14280 to a primitive type. But we cannot do the same in Ada, because
14281 it is perfectly legitimate for a program to declare a type which
14282 has the same name as a standard type. If looking up a type in
14283 that situation, we have traditionally ignored the primitive type
14284 in favor of user-defined types. This is why, unlike most other
14285 languages, we search the primitive types this late and only after
14286 having searched the global symbols without success. */
14287
14288 if (domain == VAR_DOMAIN)
14289 {
14290 struct gdbarch *gdbarch;
14291
14292 if (block == NULL)
14293 gdbarch = target_gdbarch ();
14294 else
14295 gdbarch = block_gdbarch (block);
14296 sym.symbol
14297 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
14298 if (sym.symbol != NULL)
14299 return sym;
14300 }
14301
14302 return {};
14303 }
14304
87afa652
AB
14305 /* See language.h. */
14306
14307 int parser (struct parser_state *ps) const override
14308 {
14309 warnings_issued = 0;
14310 return ada_parse (ps);
14311 }
14312
1bf9c363
AB
14313 /* See language.h.
14314
14315 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14316 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14317 namespace) and converts operators that are user-defined into
14318 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
14319 a preferred result type [at the moment, only type void has any
14320 effect---causing procedures to be preferred over functions in calls].
14321 A null CONTEXT_TYPE indicates that a non-void return type is
14322 preferred. May change (expand) *EXP. */
14323
c5c41205
TT
14324 void post_parser (expression_up *expp, struct parser_state *ps)
14325 const override
1bf9c363
AB
14326 {
14327 struct type *context_type = NULL;
14328 int pc = 0;
14329
c5c41205 14330 if (ps->void_context_p)
1bf9c363
AB
14331 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14332
c5c41205
TT
14333 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
14334 ps->block_tracker);
1bf9c363
AB
14335 }
14336
ec8cec5b
AB
14337 /* See language.h. */
14338
14339 void emitchar (int ch, struct type *chtype,
14340 struct ui_file *stream, int quoter) const override
14341 {
14342 ada_emit_char (ch, chtype, stream, quoter, 1);
14343 }
14344
52b50f2c
AB
14345 /* See language.h. */
14346
14347 void printchar (int ch, struct type *chtype,
14348 struct ui_file *stream) const override
14349 {
14350 ada_printchar (ch, chtype, stream);
14351 }
14352
d711ee67
AB
14353 /* See language.h. */
14354
14355 void printstr (struct ui_file *stream, struct type *elttype,
14356 const gdb_byte *string, unsigned int length,
14357 const char *encoding, int force_ellipses,
14358 const struct value_print_options *options) const override
14359 {
14360 ada_printstr (stream, elttype, string, length, encoding,
14361 force_ellipses, options);
14362 }
14363
4ffc13fb
AB
14364 /* See language.h. */
14365
14366 void print_typedef (struct type *type, struct symbol *new_symbol,
14367 struct ui_file *stream) const override
14368 {
14369 ada_print_typedef (type, new_symbol, stream);
14370 }
14371
39e7ecca
AB
14372 /* See language.h. */
14373
14374 bool is_string_type_p (struct type *type) const override
14375 {
14376 return ada_is_string_type (type);
14377 }
14378
22e3f3ed
AB
14379 /* See language.h. */
14380
14381 const char *struct_too_deep_ellipsis () const override
14382 { return "(...)"; }
39e7ecca 14383
67bd3fd5
AB
14384 /* See language.h. */
14385
14386 bool c_style_arrays_p () const override
14387 { return false; }
14388
d3355e4d
AB
14389 /* See language.h. */
14390
14391 bool store_sym_names_in_linkage_form_p () const override
14392 { return true; }
14393
b63a3f3f
AB
14394 /* See language.h. */
14395
14396 const struct lang_varobj_ops *varobj_ops () const override
14397 { return &ada_varobj_ops; }
14398
5aba6ebe
AB
14399 /* See language.h. */
14400
14401 const struct exp_descriptor *expression_ops () const override
14402 { return &ada_exp_descriptor; }
14403
b7c6e27d
AB
14404 /* See language.h. */
14405
14406 const struct op_print *opcode_print_table () const override
14407 { return ada_op_print_tab; }
14408
c9debfb9
AB
14409protected:
14410 /* See language.h. */
14411
14412 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14413 (const lookup_name_info &lookup_name) const override
14414 {
14415 return ada_get_symbol_name_matcher (lookup_name);
14416 }
0874fd07
AB
14417};
14418
14419/* Single instance of the Ada language class. */
14420
14421static ada_language ada_language_defn;
14422
5bf03f13
JB
14423/* Command-list for the "set/show ada" prefix command. */
14424static struct cmd_list_element *set_ada_list;
14425static struct cmd_list_element *show_ada_list;
14426
2060206e
PA
14427static void
14428initialize_ada_catchpoint_ops (void)
14429{
14430 struct breakpoint_ops *ops;
14431
14432 initialize_breakpoint_ops ();
14433
14434 ops = &catch_exception_breakpoint_ops;
14435 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14436 ops->allocate_location = allocate_location_exception;
14437 ops->re_set = re_set_exception;
14438 ops->check_status = check_status_exception;
14439 ops->print_it = print_it_exception;
14440 ops->print_one = print_one_exception;
14441 ops->print_mention = print_mention_exception;
14442 ops->print_recreate = print_recreate_exception;
2060206e
PA
14443
14444 ops = &catch_exception_unhandled_breakpoint_ops;
14445 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14446 ops->allocate_location = allocate_location_exception;
14447 ops->re_set = re_set_exception;
14448 ops->check_status = check_status_exception;
14449 ops->print_it = print_it_exception;
14450 ops->print_one = print_one_exception;
14451 ops->print_mention = print_mention_exception;
14452 ops->print_recreate = print_recreate_exception;
2060206e
PA
14453
14454 ops = &catch_assert_breakpoint_ops;
14455 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14456 ops->allocate_location = allocate_location_exception;
14457 ops->re_set = re_set_exception;
14458 ops->check_status = check_status_exception;
14459 ops->print_it = print_it_exception;
14460 ops->print_one = print_one_exception;
14461 ops->print_mention = print_mention_exception;
14462 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14463
14464 ops = &catch_handlers_breakpoint_ops;
14465 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14466 ops->allocate_location = allocate_location_exception;
14467 ops->re_set = re_set_exception;
14468 ops->check_status = check_status_exception;
14469 ops->print_it = print_it_exception;
14470 ops->print_one = print_one_exception;
14471 ops->print_mention = print_mention_exception;
14472 ops->print_recreate = print_recreate_exception;
2060206e
PA
14473}
14474
3d9434b5
JB
14475/* This module's 'new_objfile' observer. */
14476
14477static void
14478ada_new_objfile_observer (struct objfile *objfile)
14479{
14480 ada_clear_symbol_cache ();
14481}
14482
14483/* This module's 'free_objfile' observer. */
14484
14485static void
14486ada_free_objfile_observer (struct objfile *objfile)
14487{
14488 ada_clear_symbol_cache ();
14489}
14490
6c265988 14491void _initialize_ada_language ();
d2e4a39e 14492void
6c265988 14493_initialize_ada_language ()
14f9c5c9 14494{
2060206e
PA
14495 initialize_ada_catchpoint_ops ();
14496
0743fc83
TT
14497 add_basic_prefix_cmd ("ada", no_class,
14498 _("Prefix command for changing Ada-specific settings."),
14499 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14500
0743fc83
TT
14501 add_show_prefix_cmd ("ada", no_class,
14502 _("Generic command for showing Ada-specific settings."),
14503 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14504
14505 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
dda83cd7 14506 &trust_pad_over_xvs, _("\
590042fc
PW
14507Enable or disable an optimization trusting PAD types over XVS types."), _("\
14508Show whether an optimization trusting PAD types over XVS types is activated."),
dda83cd7 14509 _("\
5bf03f13
JB
14510This is related to the encoding used by the GNAT compiler. The debugger\n\
14511should normally trust the contents of PAD types, but certain older versions\n\
14512of GNAT have a bug that sometimes causes the information in the PAD type\n\
14513to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14514work around this bug. It is always safe to turn this option \"off\", but\n\
14515this incurs a slight performance penalty, so it is recommended to NOT change\n\
14516this option to \"off\" unless necessary."),
dda83cd7 14517 NULL, NULL, &set_ada_list, &show_ada_list);
5bf03f13 14518
d72413e6
PMR
14519 add_setshow_boolean_cmd ("print-signatures", class_vars,
14520 &print_signatures, _("\
14521Enable or disable the output of formal and return types for functions in the \
590042fc 14522overloads selection menu."), _("\
d72413e6 14523Show whether the output of formal and return types for functions in the \
590042fc 14524overloads selection menu is activated."),
d72413e6
PMR
14525 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14526
9ac4176b
PA
14527 add_catch_command ("exception", _("\
14528Catch Ada exceptions, when raised.\n\
9bf7038b 14529Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14530Without any argument, stop when any Ada exception is raised.\n\
14531If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14532being raised does not have a handler (and will therefore lead to the task's\n\
14533termination).\n\
14534Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14535raised is the same as ARG.\n\
14536CONDITION is a boolean expression that is evaluated to see whether the\n\
14537exception should cause a stop."),
9ac4176b 14538 catch_ada_exception_command,
71bed2db 14539 catch_ada_completer,
9ac4176b
PA
14540 CATCH_PERMANENT,
14541 CATCH_TEMPORARY);
9f757bf7
XR
14542
14543 add_catch_command ("handlers", _("\
14544Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14545Usage: catch handlers [ARG] [if CONDITION]\n\
14546Without any argument, stop when any Ada exception is handled.\n\
14547With an argument, catch only exceptions with the given name.\n\
14548CONDITION is a boolean expression that is evaluated to see whether the\n\
14549exception should cause a stop."),
9f757bf7 14550 catch_ada_handlers_command,
dda83cd7 14551 catch_ada_completer,
9f757bf7
XR
14552 CATCH_PERMANENT,
14553 CATCH_TEMPORARY);
9ac4176b
PA
14554 add_catch_command ("assert", _("\
14555Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14556Usage: catch assert [if CONDITION]\n\
14557CONDITION is a boolean expression that is evaluated to see whether the\n\
14558exception should cause a stop."),
9ac4176b 14559 catch_assert_command,
dda83cd7 14560 NULL,
9ac4176b
PA
14561 CATCH_PERMANENT,
14562 CATCH_TEMPORARY);
14563
6c038f32 14564 varsize_limit = 65536;
3fcded8f
JB
14565 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14566 &varsize_limit, _("\
14567Set the maximum number of bytes allowed in a variable-size object."), _("\
14568Show the maximum number of bytes allowed in a variable-size object."), _("\
14569Attempts to access an object whose size is not a compile-time constant\n\
14570and exceeds this limit will cause an error."),
14571 NULL, NULL, &setlist, &showlist);
6c038f32 14572
778865d3
JB
14573 add_info ("exceptions", info_exceptions_command,
14574 _("\
14575List all Ada exception names.\n\
9bf7038b 14576Usage: info exceptions [REGEXP]\n\
778865d3
JB
14577If a regular expression is passed as an argument, only those matching\n\
14578the regular expression are listed."));
14579
0743fc83
TT
14580 add_basic_prefix_cmd ("ada", class_maintenance,
14581 _("Set Ada maintenance-related variables."),
14582 &maint_set_ada_cmdlist, "maintenance set ada ",
14583 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14584
0743fc83
TT
14585 add_show_prefix_cmd ("ada", class_maintenance,
14586 _("Show Ada maintenance-related variables."),
14587 &maint_show_ada_cmdlist, "maintenance show ada ",
14588 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14589
14590 add_setshow_boolean_cmd
14591 ("ignore-descriptive-types", class_maintenance,
14592 &ada_ignore_descriptive_types_p,
14593 _("Set whether descriptive types generated by GNAT should be ignored."),
14594 _("Show whether descriptive types generated by GNAT should be ignored."),
14595 _("\
14596When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14597DWARF attribute."),
14598 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14599
459a2e4c
TT
14600 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14601 NULL, xcalloc, xfree);
6b69afc4 14602
3d9434b5 14603 /* The ada-lang observers. */
76727919
TT
14604 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14605 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14606 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14607}
This page took 3.729666 seconds and 4 git commands to generate.