Split out ada_binop_minmax
[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>
ccefe4c4 60
4c4b4cd2 61/* Define whether or not the C operator '/' truncates towards zero for
0963b4bd 62 differently signed operands (truncation direction is undefined in C).
4c4b4cd2
PH
63 Copied from valarith.c. */
64
65#ifndef TRUNCATION_TOWARDS_ZERO
66#define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2)
67#endif
68
d2e4a39e 69static struct type *desc_base_type (struct type *);
14f9c5c9 70
d2e4a39e 71static struct type *desc_bounds_type (struct type *);
14f9c5c9 72
d2e4a39e 73static struct value *desc_bounds (struct value *);
14f9c5c9 74
d2e4a39e 75static int fat_pntr_bounds_bitpos (struct type *);
14f9c5c9 76
d2e4a39e 77static int fat_pntr_bounds_bitsize (struct type *);
14f9c5c9 78
556bdfd4 79static struct type *desc_data_target_type (struct type *);
14f9c5c9 80
d2e4a39e 81static struct value *desc_data (struct value *);
14f9c5c9 82
d2e4a39e 83static int fat_pntr_data_bitpos (struct type *);
14f9c5c9 84
d2e4a39e 85static int fat_pntr_data_bitsize (struct type *);
14f9c5c9 86
d2e4a39e 87static struct value *desc_one_bound (struct value *, int, int);
14f9c5c9 88
d2e4a39e 89static int desc_bound_bitpos (struct type *, int, int);
14f9c5c9 90
d2e4a39e 91static int desc_bound_bitsize (struct type *, int, int);
14f9c5c9 92
d2e4a39e 93static struct type *desc_index_type (struct type *, int);
14f9c5c9 94
d2e4a39e 95static int desc_arity (struct type *);
14f9c5c9 96
d2e4a39e 97static int ada_type_match (struct type *, struct type *, int);
14f9c5c9 98
d2e4a39e 99static int ada_args_match (struct symbol *, struct value **, int);
14f9c5c9 100
40bc484c 101static struct value *make_array_descriptor (struct type *, struct value *);
14f9c5c9 102
d1183b06 103static void ada_add_block_symbols (std::vector<struct block_symbol> &,
b5ec771e
PA
104 const struct block *,
105 const lookup_name_info &lookup_name,
106 domain_enum, struct objfile *);
14f9c5c9 107
d1183b06
TT
108static void ada_add_all_symbols (std::vector<struct block_symbol> &,
109 const struct block *,
b5ec771e
PA
110 const lookup_name_info &lookup_name,
111 domain_enum, int, int *);
22cee43f 112
d1183b06 113static int is_nonfunction (const std::vector<struct block_symbol> &);
14f9c5c9 114
d1183b06
TT
115static void add_defn_to_vec (std::vector<struct block_symbol> &,
116 struct symbol *,
dda83cd7 117 const struct block *);
14f9c5c9 118
e9d9f57e 119static struct value *resolve_subexp (expression_up *, int *, int,
dda83cd7 120 struct type *, int,
699bd4cf 121 innermost_block_tracker *);
14f9c5c9 122
e9d9f57e 123static void replace_operator_with_call (expression_up *, int, int, int,
dda83cd7 124 struct symbol *, const struct block *);
14f9c5c9 125
d2e4a39e 126static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 127
4c4b4cd2 128static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 129
d2e4a39e 130static int numeric_type_p (struct type *);
14f9c5c9 131
d2e4a39e 132static int integer_type_p (struct type *);
14f9c5c9 133
d2e4a39e 134static int scalar_type_p (struct type *);
14f9c5c9 135
d2e4a39e 136static int discrete_type_p (struct type *);
14f9c5c9 137
a121b7c1 138static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
dda83cd7 139 int, int);
4c4b4cd2 140
d2e4a39e 141static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 142
b4ba55a1 143static struct type *ada_find_parallel_type_with_name (struct type *,
dda83cd7 144 const char *);
b4ba55a1 145
d2e4a39e 146static int is_dynamic_field (struct type *, int);
14f9c5c9 147
10a2c479 148static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 149 const gdb_byte *,
dda83cd7 150 CORE_ADDR, struct value *);
4c4b4cd2
PH
151
152static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 153
28c85d6c 154static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 155
d2e4a39e 156static struct type *to_static_fixed_type (struct type *);
f192137b 157static struct type *static_unwrap_type (struct type *type);
14f9c5c9 158
d2e4a39e 159static struct value *unwrap_value (struct value *);
14f9c5c9 160
ad82864c 161static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 162
ad82864c 163static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 164
ad82864c
JB
165static long decode_packed_array_bitsize (struct type *);
166
167static struct value *decode_constrained_packed_array (struct value *);
168
ad82864c 169static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 170
d2e4a39e 171static struct value *value_subscript_packed (struct value *, int,
dda83cd7 172 struct value **);
14f9c5c9 173
4c4b4cd2 174static struct value *coerce_unspec_val_to_type (struct value *,
dda83cd7 175 struct type *);
14f9c5c9 176
d2e4a39e 177static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 178
d2e4a39e 179static int equiv_types (struct type *, struct type *);
14f9c5c9 180
d2e4a39e 181static int is_name_suffix (const char *);
14f9c5c9 182
59c8a30b 183static int advance_wild_match (const char **, const char *, char);
73589123 184
b5ec771e 185static bool wild_match (const char *name, const char *patn);
14f9c5c9 186
d2e4a39e 187static struct value *ada_coerce_ref (struct value *);
14f9c5c9 188
4c4b4cd2
PH
189static LONGEST pos_atr (struct value *);
190
3cb382c9 191static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 192
53a47a3e
TT
193static struct value *val_atr (struct type *, LONGEST);
194
d2e4a39e 195static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 196
4c4b4cd2 197static struct symbol *standard_lookup (const char *, const struct block *,
dda83cd7 198 domain_enum);
14f9c5c9 199
108d56a4 200static struct value *ada_search_struct_field (const char *, struct value *, int,
dda83cd7 201 struct type *);
4c4b4cd2 202
0d5cff50 203static int find_struct_field (const char *, struct type *, int,
dda83cd7 204 struct type **, int *, int *, int *, int *);
4c4b4cd2 205
d1183b06 206static int ada_resolve_function (std::vector<struct block_symbol> &,
dda83cd7
SM
207 struct value **, int, const char *,
208 struct type *, int);
4c4b4cd2 209
4c4b4cd2
PH
210static int ada_is_direct_array_type (struct type *);
211
52ce6436
PH
212static struct value *ada_index_struct_field (int, struct value *, int,
213 struct type *);
214
215static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
216 struct expression *,
217 int *, enum noside);
52ce6436 218
cf608cc4 219static void aggregate_assign_from_choices (struct value *, struct value *,
52ce6436 220 struct expression *,
cf608cc4
TT
221 int *, std::vector<LONGEST> &,
222 LONGEST, LONGEST);
52ce6436
PH
223
224static void aggregate_assign_positional (struct value *, struct value *,
225 struct expression *,
cf608cc4 226 int *, std::vector<LONGEST> &,
52ce6436
PH
227 LONGEST, LONGEST);
228
229
230static void aggregate_assign_others (struct value *, struct value *,
231 struct expression *,
cf608cc4
TT
232 int *, std::vector<LONGEST> &,
233 LONGEST, LONGEST);
52ce6436
PH
234
235
cf608cc4 236static void add_component_interval (LONGEST, LONGEST, std::vector<LONGEST> &);
52ce6436
PH
237
238
239static struct value *ada_evaluate_subexp (struct type *, struct expression *,
240 int *, enum noside);
241
242static void ada_forward_operator_length (struct expression *, int, int *,
243 int *);
852dff6c
JB
244
245static struct type *ada_find_any_type (const char *name);
b5ec771e
PA
246
247static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
248 (const lookup_name_info &lookup_name);
249
4c4b4cd2
PH
250\f
251
ee01b665
JB
252/* The result of a symbol lookup to be stored in our symbol cache. */
253
254struct cache_entry
255{
256 /* The name used to perform the lookup. */
257 const char *name;
258 /* The namespace used during the lookup. */
fe978cb0 259 domain_enum domain;
ee01b665
JB
260 /* The symbol returned by the lookup, or NULL if no matching symbol
261 was found. */
262 struct symbol *sym;
263 /* The block where the symbol was found, or NULL if no matching
264 symbol was found. */
265 const struct block *block;
266 /* A pointer to the next entry with the same hash. */
267 struct cache_entry *next;
268};
269
270/* The Ada symbol cache, used to store the result of Ada-mode symbol
271 lookups in the course of executing the user's commands.
272
273 The cache is implemented using a simple, fixed-sized hash.
274 The size is fixed on the grounds that there are not likely to be
275 all that many symbols looked up during any given session, regardless
276 of the size of the symbol table. If we decide to go to a resizable
277 table, let's just use the stuff from libiberty instead. */
278
279#define HASH_SIZE 1009
280
281struct ada_symbol_cache
282{
283 /* An obstack used to store the entries in our cache. */
bdcccc56 284 struct auto_obstack cache_space;
ee01b665
JB
285
286 /* The root of the hash table used to implement our symbol cache. */
bdcccc56 287 struct cache_entry *root[HASH_SIZE] {};
ee01b665
JB
288};
289
4c4b4cd2 290/* Maximum-sized dynamic type. */
14f9c5c9
AS
291static unsigned int varsize_limit;
292
67cb5b2d 293static const char ada_completer_word_break_characters[] =
4c4b4cd2
PH
294#ifdef VMS
295 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
296#else
14f9c5c9 297 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 298#endif
14f9c5c9 299
4c4b4cd2 300/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 301static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 302 = "__gnat_ada_main_program_name";
14f9c5c9 303
4c4b4cd2
PH
304/* Limit on the number of warnings to raise per expression evaluation. */
305static int warning_limit = 2;
306
307/* Number of warning messages issued; reset to 0 by cleanups after
308 expression evaluation. */
309static int warnings_issued = 0;
310
27087b7f 311static const char * const known_runtime_file_name_patterns[] = {
4c4b4cd2
PH
312 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
313};
314
27087b7f 315static const char * const known_auxiliary_function_name_patterns[] = {
4c4b4cd2
PH
316 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
317};
318
c6044dd1
JB
319/* Maintenance-related settings for this module. */
320
321static struct cmd_list_element *maint_set_ada_cmdlist;
322static struct cmd_list_element *maint_show_ada_cmdlist;
323
c6044dd1
JB
324/* The "maintenance ada set/show ignore-descriptive-type" value. */
325
491144b5 326static bool ada_ignore_descriptive_types_p = false;
c6044dd1 327
e802dbe0
JB
328 /* Inferior-specific data. */
329
330/* Per-inferior data for this module. */
331
332struct ada_inferior_data
333{
334 /* The ada__tags__type_specific_data type, which is used when decoding
335 tagged types. With older versions of GNAT, this type was directly
336 accessible through a component ("tsd") in the object tag. But this
337 is no longer the case, so we cache it for each inferior. */
f37b313d 338 struct type *tsd_type = nullptr;
3eecfa55
JB
339
340 /* The exception_support_info data. This data is used to determine
341 how to implement support for Ada exception catchpoints in a given
342 inferior. */
f37b313d 343 const struct exception_support_info *exception_info = nullptr;
e802dbe0
JB
344};
345
346/* Our key to this module's inferior data. */
f37b313d 347static const struct inferior_key<ada_inferior_data> ada_inferior_data;
e802dbe0
JB
348
349/* Return our inferior data for the given inferior (INF).
350
351 This function always returns a valid pointer to an allocated
352 ada_inferior_data structure. If INF's inferior data has not
353 been previously set, this functions creates a new one with all
354 fields set to zero, sets INF's inferior to it, and then returns
355 a pointer to that newly allocated ada_inferior_data. */
356
357static struct ada_inferior_data *
358get_ada_inferior_data (struct inferior *inf)
359{
360 struct ada_inferior_data *data;
361
f37b313d 362 data = ada_inferior_data.get (inf);
e802dbe0 363 if (data == NULL)
f37b313d 364 data = ada_inferior_data.emplace (inf);
e802dbe0
JB
365
366 return data;
367}
368
369/* Perform all necessary cleanups regarding our module's inferior data
370 that is required after the inferior INF just exited. */
371
372static void
373ada_inferior_exit (struct inferior *inf)
374{
f37b313d 375 ada_inferior_data.clear (inf);
e802dbe0
JB
376}
377
ee01b665
JB
378
379 /* program-space-specific data. */
380
381/* This module's per-program-space data. */
382struct ada_pspace_data
383{
384 /* The Ada symbol cache. */
bdcccc56 385 std::unique_ptr<ada_symbol_cache> sym_cache;
ee01b665
JB
386};
387
388/* Key to our per-program-space data. */
f37b313d 389static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
ee01b665
JB
390
391/* Return this module's data for the given program space (PSPACE).
392 If not is found, add a zero'ed one now.
393
394 This function always returns a valid object. */
395
396static struct ada_pspace_data *
397get_ada_pspace_data (struct program_space *pspace)
398{
399 struct ada_pspace_data *data;
400
f37b313d 401 data = ada_pspace_data_handle.get (pspace);
ee01b665 402 if (data == NULL)
f37b313d 403 data = ada_pspace_data_handle.emplace (pspace);
ee01b665
JB
404
405 return data;
406}
407
dda83cd7 408 /* Utilities */
4c4b4cd2 409
720d1a40 410/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 411 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
412
413 Normally, we really expect a typedef type to only have 1 typedef layer.
414 In other words, we really expect the target type of a typedef type to be
415 a non-typedef type. This is particularly true for Ada units, because
416 the language does not have a typedef vs not-typedef distinction.
417 In that respect, the Ada compiler has been trying to eliminate as many
418 typedef definitions in the debugging information, since they generally
419 do not bring any extra information (we still use typedef under certain
420 circumstances related mostly to the GNAT encoding).
421
422 Unfortunately, we have seen situations where the debugging information
423 generated by the compiler leads to such multiple typedef layers. For
424 instance, consider the following example with stabs:
425
426 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
427 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
428
429 This is an error in the debugging information which causes type
430 pck__float_array___XUP to be defined twice, and the second time,
431 it is defined as a typedef of a typedef.
432
433 This is on the fringe of legality as far as debugging information is
434 concerned, and certainly unexpected. But it is easy to handle these
435 situations correctly, so we can afford to be lenient in this case. */
436
437static struct type *
438ada_typedef_target_type (struct type *type)
439{
78134374 440 while (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
441 type = TYPE_TARGET_TYPE (type);
442 return type;
443}
444
41d27058
JB
445/* Given DECODED_NAME a string holding a symbol name in its
446 decoded form (ie using the Ada dotted notation), returns
447 its unqualified name. */
448
449static const char *
450ada_unqualified_name (const char *decoded_name)
451{
2b0f535a
JB
452 const char *result;
453
454 /* If the decoded name starts with '<', it means that the encoded
455 name does not follow standard naming conventions, and thus that
456 it is not your typical Ada symbol name. Trying to unqualify it
457 is therefore pointless and possibly erroneous. */
458 if (decoded_name[0] == '<')
459 return decoded_name;
460
461 result = strrchr (decoded_name, '.');
41d27058
JB
462 if (result != NULL)
463 result++; /* Skip the dot... */
464 else
465 result = decoded_name;
466
467 return result;
468}
469
39e7af3e 470/* Return a string starting with '<', followed by STR, and '>'. */
41d27058 471
39e7af3e 472static std::string
41d27058
JB
473add_angle_brackets (const char *str)
474{
39e7af3e 475 return string_printf ("<%s>", str);
41d27058 476}
96d887e8 477
14f9c5c9 478/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 479 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
480
481static int
ebf56fd3 482field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
483{
484 int len = strlen (target);
5b4ee69b 485
d2e4a39e 486 return
4c4b4cd2
PH
487 (strncmp (field_name, target, len) == 0
488 && (field_name[len] == '\0'
dda83cd7
SM
489 || (startswith (field_name + len, "___")
490 && strcmp (field_name + strlen (field_name) - 6,
491 "___XVN") != 0)));
14f9c5c9
AS
492}
493
494
872c8b51
JB
495/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
496 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
497 and return its index. This function also handles fields whose name
498 have ___ suffixes because the compiler sometimes alters their name
499 by adding such a suffix to represent fields with certain constraints.
500 If the field could not be found, return a negative number if
501 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
502
503int
504ada_get_field_index (const struct type *type, const char *field_name,
dda83cd7 505 int maybe_missing)
4c4b4cd2
PH
506{
507 int fieldno;
872c8b51
JB
508 struct type *struct_type = check_typedef ((struct type *) type);
509
1f704f76 510 for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
872c8b51 511 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
512 return fieldno;
513
514 if (!maybe_missing)
323e0a4a 515 error (_("Unable to find field %s in struct %s. Aborting"),
dda83cd7 516 field_name, struct_type->name ());
4c4b4cd2
PH
517
518 return -1;
519}
520
521/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
522
523int
d2e4a39e 524ada_name_prefix_len (const char *name)
14f9c5c9
AS
525{
526 if (name == NULL)
527 return 0;
d2e4a39e 528 else
14f9c5c9 529 {
d2e4a39e 530 const char *p = strstr (name, "___");
5b4ee69b 531
14f9c5c9 532 if (p == NULL)
dda83cd7 533 return strlen (name);
14f9c5c9 534 else
dda83cd7 535 return p - name;
14f9c5c9
AS
536 }
537}
538
4c4b4cd2
PH
539/* Return non-zero if SUFFIX is a suffix of STR.
540 Return zero if STR is null. */
541
14f9c5c9 542static int
d2e4a39e 543is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
544{
545 int len1, len2;
5b4ee69b 546
14f9c5c9
AS
547 if (str == NULL)
548 return 0;
549 len1 = strlen (str);
550 len2 = strlen (suffix);
4c4b4cd2 551 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
552}
553
4c4b4cd2
PH
554/* The contents of value VAL, treated as a value of type TYPE. The
555 result is an lval in memory if VAL is. */
14f9c5c9 556
d2e4a39e 557static struct value *
4c4b4cd2 558coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 559{
61ee279c 560 type = ada_check_typedef (type);
df407dfe 561 if (value_type (val) == type)
4c4b4cd2 562 return val;
d2e4a39e 563 else
14f9c5c9 564 {
4c4b4cd2
PH
565 struct value *result;
566
567 /* Make sure that the object size is not unreasonable before
dda83cd7 568 trying to allocate some memory for it. */
c1b5a1a6 569 ada_ensure_varsize_limit (type);
4c4b4cd2 570
f73e424f
TT
571 if (value_optimized_out (val))
572 result = allocate_optimized_out_value (type);
573 else if (value_lazy (val)
574 /* Be careful not to make a lazy not_lval value. */
575 || (VALUE_LVAL (val) != not_lval
576 && TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))))
41e8491f
JK
577 result = allocate_value_lazy (type);
578 else
579 {
580 result = allocate_value (type);
f73e424f 581 value_contents_copy (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 582 }
74bcbdf3 583 set_value_component_location (result, val);
9bbda503
AC
584 set_value_bitsize (result, value_bitsize (val));
585 set_value_bitpos (result, value_bitpos (val));
c408a94f
TT
586 if (VALUE_LVAL (result) == lval_memory)
587 set_value_address (result, value_address (val));
14f9c5c9
AS
588 return result;
589 }
590}
591
fc1a4b47
AC
592static const gdb_byte *
593cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
594{
595 if (valaddr == NULL)
596 return NULL;
597 else
598 return valaddr + offset;
599}
600
601static CORE_ADDR
ebf56fd3 602cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
603{
604 if (address == 0)
605 return 0;
d2e4a39e 606 else
14f9c5c9
AS
607 return address + offset;
608}
609
4c4b4cd2
PH
610/* Issue a warning (as for the definition of warning in utils.c, but
611 with exactly one argument rather than ...), unless the limit on the
612 number of warnings has passed during the evaluation of the current
613 expression. */
a2249542 614
77109804
AC
615/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
616 provided by "complaint". */
a0b31db1 617static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 618
14f9c5c9 619static void
a2249542 620lim_warning (const char *format, ...)
14f9c5c9 621{
a2249542 622 va_list args;
a2249542 623
5b4ee69b 624 va_start (args, format);
4c4b4cd2
PH
625 warnings_issued += 1;
626 if (warnings_issued <= warning_limit)
a2249542
MK
627 vwarning (format, args);
628
629 va_end (args);
4c4b4cd2
PH
630}
631
714e53ab
PH
632/* Issue an error if the size of an object of type T is unreasonable,
633 i.e. if it would be a bad idea to allocate a value of this type in
634 GDB. */
635
c1b5a1a6
JB
636void
637ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
638{
639 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 640 error (_("object size is larger than varsize-limit"));
714e53ab
PH
641}
642
0963b4bd 643/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 644static LONGEST
c3e5cd34 645max_of_size (int size)
4c4b4cd2 646{
76a01679 647 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 648
76a01679 649 return top_bit | (top_bit - 1);
4c4b4cd2
PH
650}
651
0963b4bd 652/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 653static LONGEST
c3e5cd34 654min_of_size (int size)
4c4b4cd2 655{
c3e5cd34 656 return -max_of_size (size) - 1;
4c4b4cd2
PH
657}
658
0963b4bd 659/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 660static ULONGEST
c3e5cd34 661umax_of_size (int size)
4c4b4cd2 662{
76a01679 663 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 664
76a01679 665 return top_bit | (top_bit - 1);
4c4b4cd2
PH
666}
667
0963b4bd 668/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
669static LONGEST
670max_of_type (struct type *t)
4c4b4cd2 671{
c6d940a9 672 if (t->is_unsigned ())
c3e5cd34
PH
673 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
674 else
675 return max_of_size (TYPE_LENGTH (t));
676}
677
0963b4bd 678/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
679static LONGEST
680min_of_type (struct type *t)
681{
c6d940a9 682 if (t->is_unsigned ())
c3e5cd34
PH
683 return 0;
684 else
685 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
686}
687
688/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
689LONGEST
690ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 691{
b249d2c2 692 type = resolve_dynamic_type (type, {}, 0);
78134374 693 switch (type->code ())
4c4b4cd2
PH
694 {
695 case TYPE_CODE_RANGE:
d1fd641e
SM
696 {
697 const dynamic_prop &high = type->bounds ()->high;
698
699 if (high.kind () == PROP_CONST)
700 return high.const_val ();
701 else
702 {
703 gdb_assert (high.kind () == PROP_UNDEFINED);
704
705 /* This happens when trying to evaluate a type's dynamic bound
706 without a live target. There is nothing relevant for us to
707 return here, so return 0. */
708 return 0;
709 }
710 }
4c4b4cd2 711 case TYPE_CODE_ENUM:
1f704f76 712 return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
690cc4eb
PH
713 case TYPE_CODE_BOOL:
714 return 1;
715 case TYPE_CODE_CHAR:
76a01679 716 case TYPE_CODE_INT:
690cc4eb 717 return max_of_type (type);
4c4b4cd2 718 default:
43bbcdc2 719 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
720 }
721}
722
14e75d8e 723/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
724LONGEST
725ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 726{
b249d2c2 727 type = resolve_dynamic_type (type, {}, 0);
78134374 728 switch (type->code ())
4c4b4cd2
PH
729 {
730 case TYPE_CODE_RANGE:
d1fd641e
SM
731 {
732 const dynamic_prop &low = type->bounds ()->low;
733
734 if (low.kind () == PROP_CONST)
735 return low.const_val ();
736 else
737 {
738 gdb_assert (low.kind () == PROP_UNDEFINED);
739
740 /* This happens when trying to evaluate a type's dynamic bound
741 without a live target. There is nothing relevant for us to
742 return here, so return 0. */
743 return 0;
744 }
745 }
4c4b4cd2 746 case TYPE_CODE_ENUM:
14e75d8e 747 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
748 case TYPE_CODE_BOOL:
749 return 0;
750 case TYPE_CODE_CHAR:
76a01679 751 case TYPE_CODE_INT:
690cc4eb 752 return min_of_type (type);
4c4b4cd2 753 default:
43bbcdc2 754 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
755 }
756}
757
758/* The identity on non-range types. For range types, the underlying
76a01679 759 non-range scalar type. */
4c4b4cd2
PH
760
761static struct type *
18af8284 762get_base_type (struct type *type)
4c4b4cd2 763{
78134374 764 while (type != NULL && type->code () == TYPE_CODE_RANGE)
4c4b4cd2 765 {
76a01679 766 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
dda83cd7 767 return type;
4c4b4cd2
PH
768 type = TYPE_TARGET_TYPE (type);
769 }
770 return type;
14f9c5c9 771}
41246937
JB
772
773/* Return a decoded version of the given VALUE. This means returning
774 a value whose type is obtained by applying all the GNAT-specific
85102364 775 encodings, making the resulting type a static but standard description
41246937
JB
776 of the initial type. */
777
778struct value *
779ada_get_decoded_value (struct value *value)
780{
781 struct type *type = ada_check_typedef (value_type (value));
782
783 if (ada_is_array_descriptor_type (type)
784 || (ada_is_constrained_packed_array_type (type)
dda83cd7 785 && type->code () != TYPE_CODE_PTR))
41246937 786 {
78134374 787 if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
dda83cd7 788 value = ada_coerce_to_simple_array_ptr (value);
41246937 789 else
dda83cd7 790 value = ada_coerce_to_simple_array (value);
41246937
JB
791 }
792 else
793 value = ada_to_fixed_value (value);
794
795 return value;
796}
797
798/* Same as ada_get_decoded_value, but with the given TYPE.
799 Because there is no associated actual value for this type,
800 the resulting type might be a best-effort approximation in
801 the case of dynamic types. */
802
803struct type *
804ada_get_decoded_type (struct type *type)
805{
806 type = to_static_fixed_type (type);
807 if (ada_is_constrained_packed_array_type (type))
808 type = ada_coerce_to_simple_array_type (type);
809 return type;
810}
811
4c4b4cd2 812\f
76a01679 813
dda83cd7 814 /* Language Selection */
14f9c5c9
AS
815
816/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 817 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 818
de93309a 819static enum language
ccefe4c4 820ada_update_initial_language (enum language lang)
14f9c5c9 821{
cafb3438 822 if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
4c4b4cd2 823 return language_ada;
14f9c5c9
AS
824
825 return lang;
826}
96d887e8
PH
827
828/* If the main procedure is written in Ada, then return its name.
829 The result is good until the next call. Return NULL if the main
830 procedure doesn't appear to be in Ada. */
831
832char *
833ada_main_name (void)
834{
3b7344d5 835 struct bound_minimal_symbol msym;
e83e4e24 836 static gdb::unique_xmalloc_ptr<char> main_program_name;
6c038f32 837
96d887e8
PH
838 /* For Ada, the name of the main procedure is stored in a specific
839 string constant, generated by the binder. Look for that symbol,
840 extract its address, and then read that string. If we didn't find
841 that string, then most probably the main procedure is not written
842 in Ada. */
843 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
844
3b7344d5 845 if (msym.minsym != NULL)
96d887e8 846 {
66920317 847 CORE_ADDR main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 848 if (main_program_name_addr == 0)
dda83cd7 849 error (_("Invalid address for Ada main program name."));
96d887e8 850
66920317 851 main_program_name = target_read_string (main_program_name_addr, 1024);
e83e4e24 852 return main_program_name.get ();
96d887e8
PH
853 }
854
855 /* The main procedure doesn't seem to be in Ada. */
856 return NULL;
857}
14f9c5c9 858\f
dda83cd7 859 /* Symbols */
d2e4a39e 860
4c4b4cd2
PH
861/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
862 of NULLs. */
14f9c5c9 863
d2e4a39e
AS
864const struct ada_opname_map ada_opname_table[] = {
865 {"Oadd", "\"+\"", BINOP_ADD},
866 {"Osubtract", "\"-\"", BINOP_SUB},
867 {"Omultiply", "\"*\"", BINOP_MUL},
868 {"Odivide", "\"/\"", BINOP_DIV},
869 {"Omod", "\"mod\"", BINOP_MOD},
870 {"Orem", "\"rem\"", BINOP_REM},
871 {"Oexpon", "\"**\"", BINOP_EXP},
872 {"Olt", "\"<\"", BINOP_LESS},
873 {"Ole", "\"<=\"", BINOP_LEQ},
874 {"Ogt", "\">\"", BINOP_GTR},
875 {"Oge", "\">=\"", BINOP_GEQ},
876 {"Oeq", "\"=\"", BINOP_EQUAL},
877 {"One", "\"/=\"", BINOP_NOTEQUAL},
878 {"Oand", "\"and\"", BINOP_BITWISE_AND},
879 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
880 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
881 {"Oconcat", "\"&\"", BINOP_CONCAT},
882 {"Oabs", "\"abs\"", UNOP_ABS},
883 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
884 {"Oadd", "\"+\"", UNOP_PLUS},
885 {"Osubtract", "\"-\"", UNOP_NEG},
886 {NULL, NULL}
14f9c5c9
AS
887};
888
5c4258f4 889/* The "encoded" form of DECODED, according to GNAT conventions. If
b5ec771e 890 THROW_ERRORS, throw an error if invalid operator name is found.
5c4258f4 891 Otherwise, return the empty string in that case. */
4c4b4cd2 892
5c4258f4 893static std::string
b5ec771e 894ada_encode_1 (const char *decoded, bool throw_errors)
14f9c5c9 895{
4c4b4cd2 896 if (decoded == NULL)
5c4258f4 897 return {};
14f9c5c9 898
5c4258f4
TT
899 std::string encoding_buffer;
900 for (const char *p = decoded; *p != '\0'; p += 1)
14f9c5c9 901 {
cdc7bb92 902 if (*p == '.')
5c4258f4 903 encoding_buffer.append ("__");
14f9c5c9 904 else if (*p == '"')
dda83cd7
SM
905 {
906 const struct ada_opname_map *mapping;
907
908 for (mapping = ada_opname_table;
909 mapping->encoded != NULL
910 && !startswith (p, mapping->decoded); mapping += 1)
911 ;
912 if (mapping->encoded == NULL)
b5ec771e
PA
913 {
914 if (throw_errors)
915 error (_("invalid Ada operator name: %s"), p);
916 else
5c4258f4 917 return {};
b5ec771e 918 }
5c4258f4 919 encoding_buffer.append (mapping->encoded);
dda83cd7
SM
920 break;
921 }
d2e4a39e 922 else
5c4258f4 923 encoding_buffer.push_back (*p);
14f9c5c9
AS
924 }
925
4c4b4cd2 926 return encoding_buffer;
14f9c5c9
AS
927}
928
5c4258f4 929/* The "encoded" form of DECODED, according to GNAT conventions. */
b5ec771e 930
5c4258f4 931std::string
b5ec771e
PA
932ada_encode (const char *decoded)
933{
934 return ada_encode_1 (decoded, true);
935}
936
14f9c5c9 937/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
938 quotes, unfolded, but with the quotes stripped away. Result good
939 to next call. */
940
5f9febe0 941static const char *
e0802d59 942ada_fold_name (gdb::string_view name)
14f9c5c9 943{
5f9febe0 944 static std::string fold_storage;
14f9c5c9 945
6a780b67 946 if (!name.empty () && name[0] == '\'')
01573d73 947 fold_storage = gdb::to_string (name.substr (1, name.size () - 2));
14f9c5c9
AS
948 else
949 {
01573d73 950 fold_storage = gdb::to_string (name);
5f9febe0
TT
951 for (int i = 0; i < name.size (); i += 1)
952 fold_storage[i] = tolower (fold_storage[i]);
14f9c5c9
AS
953 }
954
5f9febe0 955 return fold_storage.c_str ();
14f9c5c9
AS
956}
957
529cad9c
PH
958/* Return nonzero if C is either a digit or a lowercase alphabet character. */
959
960static int
961is_lower_alphanum (const char c)
962{
963 return (isdigit (c) || (isalpha (c) && islower (c)));
964}
965
c90092fe
JB
966/* ENCODED is the linkage name of a symbol and LEN contains its length.
967 This function saves in LEN the length of that same symbol name but
968 without either of these suffixes:
29480c32
JB
969 . .{DIGIT}+
970 . ${DIGIT}+
971 . ___{DIGIT}+
972 . __{DIGIT}+.
c90092fe 973
29480c32
JB
974 These are suffixes introduced by the compiler for entities such as
975 nested subprogram for instance, in order to avoid name clashes.
976 They do not serve any purpose for the debugger. */
977
978static void
979ada_remove_trailing_digits (const char *encoded, int *len)
980{
981 if (*len > 1 && isdigit (encoded[*len - 1]))
982 {
983 int i = *len - 2;
5b4ee69b 984
29480c32 985 while (i > 0 && isdigit (encoded[i]))
dda83cd7 986 i--;
29480c32 987 if (i >= 0 && encoded[i] == '.')
dda83cd7 988 *len = i;
29480c32 989 else if (i >= 0 && encoded[i] == '$')
dda83cd7 990 *len = i;
61012eef 991 else if (i >= 2 && startswith (encoded + i - 2, "___"))
dda83cd7 992 *len = i - 2;
61012eef 993 else if (i >= 1 && startswith (encoded + i - 1, "__"))
dda83cd7 994 *len = i - 1;
29480c32
JB
995 }
996}
997
998/* Remove the suffix introduced by the compiler for protected object
999 subprograms. */
1000
1001static void
1002ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1003{
1004 /* Remove trailing N. */
1005
1006 /* Protected entry subprograms are broken into two
1007 separate subprograms: The first one is unprotected, and has
1008 a 'N' suffix; the second is the protected version, and has
0963b4bd 1009 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1010 the protection. Since the P subprograms are internally generated,
1011 we leave these names undecoded, giving the user a clue that this
1012 entity is internal. */
1013
1014 if (*len > 1
1015 && encoded[*len - 1] == 'N'
1016 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1017 *len = *len - 1;
1018}
1019
1020/* If ENCODED follows the GNAT entity encoding conventions, then return
1021 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
f945dedf 1022 replaced by ENCODED. */
14f9c5c9 1023
f945dedf 1024std::string
4c4b4cd2 1025ada_decode (const char *encoded)
14f9c5c9
AS
1026{
1027 int i, j;
1028 int len0;
d2e4a39e 1029 const char *p;
14f9c5c9 1030 int at_start_name;
f945dedf 1031 std::string decoded;
d2e4a39e 1032
0d81f350
JG
1033 /* With function descriptors on PPC64, the value of a symbol named
1034 ".FN", if it exists, is the entry point of the function "FN". */
1035 if (encoded[0] == '.')
1036 encoded += 1;
1037
29480c32
JB
1038 /* The name of the Ada main procedure starts with "_ada_".
1039 This prefix is not part of the decoded name, so skip this part
1040 if we see this prefix. */
61012eef 1041 if (startswith (encoded, "_ada_"))
4c4b4cd2 1042 encoded += 5;
14f9c5c9 1043
29480c32
JB
1044 /* If the name starts with '_', then it is not a properly encoded
1045 name, so do not attempt to decode it. Similarly, if the name
1046 starts with '<', the name should not be decoded. */
4c4b4cd2 1047 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1048 goto Suppress;
1049
4c4b4cd2 1050 len0 = strlen (encoded);
4c4b4cd2 1051
29480c32
JB
1052 ada_remove_trailing_digits (encoded, &len0);
1053 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1054
4c4b4cd2
PH
1055 /* Remove the ___X.* suffix if present. Do not forget to verify that
1056 the suffix is located before the current "end" of ENCODED. We want
1057 to avoid re-matching parts of ENCODED that have previously been
1058 marked as discarded (by decrementing LEN0). */
1059 p = strstr (encoded, "___");
1060 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1061 {
1062 if (p[3] == 'X')
dda83cd7 1063 len0 = p - encoded;
14f9c5c9 1064 else
dda83cd7 1065 goto Suppress;
14f9c5c9 1066 }
4c4b4cd2 1067
29480c32
JB
1068 /* Remove any trailing TKB suffix. It tells us that this symbol
1069 is for the body of a task, but that information does not actually
1070 appear in the decoded name. */
1071
61012eef 1072 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1073 len0 -= 3;
76a01679 1074
a10967fa
JB
1075 /* Remove any trailing TB suffix. The TB suffix is slightly different
1076 from the TKB suffix because it is used for non-anonymous task
1077 bodies. */
1078
61012eef 1079 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1080 len0 -= 2;
1081
29480c32
JB
1082 /* Remove trailing "B" suffixes. */
1083 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1084
61012eef 1085 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1086 len0 -= 1;
1087
4c4b4cd2 1088 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1089
f945dedf 1090 decoded.resize (2 * len0 + 1, 'X');
14f9c5c9 1091
29480c32
JB
1092 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1093
4c4b4cd2 1094 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1095 {
4c4b4cd2
PH
1096 i = len0 - 2;
1097 while ((i >= 0 && isdigit (encoded[i]))
dda83cd7
SM
1098 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1099 i -= 1;
4c4b4cd2 1100 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
dda83cd7 1101 len0 = i - 1;
4c4b4cd2 1102 else if (encoded[i] == '$')
dda83cd7 1103 len0 = i;
d2e4a39e 1104 }
14f9c5c9 1105
29480c32
JB
1106 /* The first few characters that are not alphabetic are not part
1107 of any encoding we use, so we can copy them over verbatim. */
1108
4c4b4cd2
PH
1109 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1110 decoded[j] = encoded[i];
14f9c5c9
AS
1111
1112 at_start_name = 1;
1113 while (i < len0)
1114 {
29480c32 1115 /* Is this a symbol function? */
4c4b4cd2 1116 if (at_start_name && encoded[i] == 'O')
dda83cd7
SM
1117 {
1118 int k;
1119
1120 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1121 {
1122 int op_len = strlen (ada_opname_table[k].encoded);
1123 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1124 op_len - 1) == 0)
1125 && !isalnum (encoded[i + op_len]))
1126 {
1127 strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
1128 at_start_name = 0;
1129 i += op_len;
1130 j += strlen (ada_opname_table[k].decoded);
1131 break;
1132 }
1133 }
1134 if (ada_opname_table[k].encoded != NULL)
1135 continue;
1136 }
14f9c5c9
AS
1137 at_start_name = 0;
1138
529cad9c 1139 /* Replace "TK__" with "__", which will eventually be translated
dda83cd7 1140 into "." (just below). */
529cad9c 1141
61012eef 1142 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
dda83cd7 1143 i += 2;
529cad9c 1144
29480c32 1145 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
dda83cd7
SM
1146 be translated into "." (just below). These are internal names
1147 generated for anonymous blocks inside which our symbol is nested. */
29480c32
JB
1148
1149 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
dda83cd7
SM
1150 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1151 && isdigit (encoded [i+4]))
1152 {
1153 int k = i + 5;
1154
1155 while (k < len0 && isdigit (encoded[k]))
1156 k++; /* Skip any extra digit. */
1157
1158 /* Double-check that the "__B_{DIGITS}+" sequence we found
1159 is indeed followed by "__". */
1160 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1161 i = k;
1162 }
29480c32 1163
529cad9c
PH
1164 /* Remove _E{DIGITS}+[sb] */
1165
1166 /* Just as for protected object subprograms, there are 2 categories
dda83cd7
SM
1167 of subprograms created by the compiler for each entry. The first
1168 one implements the actual entry code, and has a suffix following
1169 the convention above; the second one implements the barrier and
1170 uses the same convention as above, except that the 'E' is replaced
1171 by a 'B'.
529cad9c 1172
dda83cd7
SM
1173 Just as above, we do not decode the name of barrier functions
1174 to give the user a clue that the code he is debugging has been
1175 internally generated. */
529cad9c
PH
1176
1177 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
dda83cd7
SM
1178 && isdigit (encoded[i+2]))
1179 {
1180 int k = i + 3;
1181
1182 while (k < len0 && isdigit (encoded[k]))
1183 k++;
1184
1185 if (k < len0
1186 && (encoded[k] == 'b' || encoded[k] == 's'))
1187 {
1188 k++;
1189 /* Just as an extra precaution, make sure that if this
1190 suffix is followed by anything else, it is a '_'.
1191 Otherwise, we matched this sequence by accident. */
1192 if (k == len0
1193 || (k < len0 && encoded[k] == '_'))
1194 i = k;
1195 }
1196 }
529cad9c
PH
1197
1198 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
dda83cd7 1199 the GNAT front-end in protected object subprograms. */
529cad9c
PH
1200
1201 if (i < len0 + 3
dda83cd7
SM
1202 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1203 {
1204 /* Backtrack a bit up until we reach either the begining of
1205 the encoded name, or "__". Make sure that we only find
1206 digits or lowercase characters. */
1207 const char *ptr = encoded + i - 1;
1208
1209 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1210 ptr--;
1211 if (ptr < encoded
1212 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1213 i++;
1214 }
529cad9c 1215
4c4b4cd2 1216 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
dda83cd7
SM
1217 {
1218 /* This is a X[bn]* sequence not separated from the previous
1219 part of the name with a non-alpha-numeric character (in other
1220 words, immediately following an alpha-numeric character), then
1221 verify that it is placed at the end of the encoded name. If
1222 not, then the encoding is not valid and we should abort the
1223 decoding. Otherwise, just skip it, it is used in body-nested
1224 package names. */
1225 do
1226 i += 1;
1227 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1228 if (i < len0)
1229 goto Suppress;
1230 }
cdc7bb92 1231 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
dda83cd7
SM
1232 {
1233 /* Replace '__' by '.'. */
1234 decoded[j] = '.';
1235 at_start_name = 1;
1236 i += 2;
1237 j += 1;
1238 }
14f9c5c9 1239 else
dda83cd7
SM
1240 {
1241 /* It's a character part of the decoded name, so just copy it
1242 over. */
1243 decoded[j] = encoded[i];
1244 i += 1;
1245 j += 1;
1246 }
14f9c5c9 1247 }
f945dedf 1248 decoded.resize (j);
14f9c5c9 1249
29480c32
JB
1250 /* Decoded names should never contain any uppercase character.
1251 Double-check this, and abort the decoding if we find one. */
1252
f945dedf 1253 for (i = 0; i < decoded.length(); ++i)
4c4b4cd2 1254 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1255 goto Suppress;
1256
f945dedf 1257 return decoded;
14f9c5c9
AS
1258
1259Suppress:
4c4b4cd2 1260 if (encoded[0] == '<')
f945dedf 1261 decoded = encoded;
14f9c5c9 1262 else
f945dedf 1263 decoded = '<' + std::string(encoded) + '>';
4c4b4cd2
PH
1264 return decoded;
1265
1266}
1267
1268/* Table for keeping permanent unique copies of decoded names. Once
1269 allocated, names in this table are never released. While this is a
1270 storage leak, it should not be significant unless there are massive
1271 changes in the set of decoded names in successive versions of a
1272 symbol table loaded during a single session. */
1273static struct htab *decoded_names_store;
1274
1275/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1276 in the language-specific part of GSYMBOL, if it has not been
1277 previously computed. Tries to save the decoded name in the same
1278 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1279 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1280 GSYMBOL).
4c4b4cd2
PH
1281 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1282 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1283 when a decoded name is cached in it. */
4c4b4cd2 1284
45e6c716 1285const char *
f85f34ed 1286ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1287{
f85f34ed
TT
1288 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1289 const char **resultp =
615b3f62 1290 &gsymbol->language_specific.demangled_name;
5b4ee69b 1291
f85f34ed 1292 if (!gsymbol->ada_mangled)
4c4b4cd2 1293 {
4d4eaa30 1294 std::string decoded = ada_decode (gsymbol->linkage_name ());
f85f34ed 1295 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1296
f85f34ed 1297 gsymbol->ada_mangled = 1;
5b4ee69b 1298
f85f34ed 1299 if (obstack != NULL)
f945dedf 1300 *resultp = obstack_strdup (obstack, decoded.c_str ());
f85f34ed 1301 else
dda83cd7 1302 {
f85f34ed
TT
1303 /* Sometimes, we can't find a corresponding objfile, in
1304 which case, we put the result on the heap. Since we only
1305 decode when needed, we hope this usually does not cause a
1306 significant memory leak (FIXME). */
1307
dda83cd7
SM
1308 char **slot = (char **) htab_find_slot (decoded_names_store,
1309 decoded.c_str (), INSERT);
5b4ee69b 1310
dda83cd7
SM
1311 if (*slot == NULL)
1312 *slot = xstrdup (decoded.c_str ());
1313 *resultp = *slot;
1314 }
4c4b4cd2 1315 }
14f9c5c9 1316
4c4b4cd2
PH
1317 return *resultp;
1318}
76a01679 1319
2c0b251b 1320static char *
76a01679 1321ada_la_decode (const char *encoded, int options)
4c4b4cd2 1322{
f945dedf 1323 return xstrdup (ada_decode (encoded).c_str ());
14f9c5c9
AS
1324}
1325
14f9c5c9 1326\f
d2e4a39e 1327
dda83cd7 1328 /* Arrays */
14f9c5c9 1329
28c85d6c
JB
1330/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1331 generated by the GNAT compiler to describe the index type used
1332 for each dimension of an array, check whether it follows the latest
1333 known encoding. If not, fix it up to conform to the latest encoding.
1334 Otherwise, do nothing. This function also does nothing if
1335 INDEX_DESC_TYPE is NULL.
1336
85102364 1337 The GNAT encoding used to describe the array index type evolved a bit.
28c85d6c
JB
1338 Initially, the information would be provided through the name of each
1339 field of the structure type only, while the type of these fields was
1340 described as unspecified and irrelevant. The debugger was then expected
1341 to perform a global type lookup using the name of that field in order
1342 to get access to the full index type description. Because these global
1343 lookups can be very expensive, the encoding was later enhanced to make
1344 the global lookup unnecessary by defining the field type as being
1345 the full index type description.
1346
1347 The purpose of this routine is to allow us to support older versions
1348 of the compiler by detecting the use of the older encoding, and by
1349 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1350 we essentially replace each field's meaningless type by the associated
1351 index subtype). */
1352
1353void
1354ada_fixup_array_indexes_type (struct type *index_desc_type)
1355{
1356 int i;
1357
1358 if (index_desc_type == NULL)
1359 return;
1f704f76 1360 gdb_assert (index_desc_type->num_fields () > 0);
28c85d6c
JB
1361
1362 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1363 to check one field only, no need to check them all). If not, return
1364 now.
1365
1366 If our INDEX_DESC_TYPE was generated using the older encoding,
1367 the field type should be a meaningless integer type whose name
1368 is not equal to the field name. */
940da03e
SM
1369 if (index_desc_type->field (0).type ()->name () != NULL
1370 && strcmp (index_desc_type->field (0).type ()->name (),
dda83cd7 1371 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
28c85d6c
JB
1372 return;
1373
1374 /* Fixup each field of INDEX_DESC_TYPE. */
1f704f76 1375 for (i = 0; i < index_desc_type->num_fields (); i++)
28c85d6c 1376 {
0d5cff50 1377 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1378 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1379
1380 if (raw_type)
5d14b6e5 1381 index_desc_type->field (i).set_type (raw_type);
28c85d6c
JB
1382 }
1383}
1384
4c4b4cd2
PH
1385/* The desc_* routines return primitive portions of array descriptors
1386 (fat pointers). */
14f9c5c9
AS
1387
1388/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1389 level of indirection, if needed. */
1390
d2e4a39e
AS
1391static struct type *
1392desc_base_type (struct type *type)
14f9c5c9
AS
1393{
1394 if (type == NULL)
1395 return NULL;
61ee279c 1396 type = ada_check_typedef (type);
78134374 1397 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
1398 type = ada_typedef_target_type (type);
1399
1265e4aa 1400 if (type != NULL
78134374 1401 && (type->code () == TYPE_CODE_PTR
dda83cd7 1402 || type->code () == TYPE_CODE_REF))
61ee279c 1403 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1404 else
1405 return type;
1406}
1407
4c4b4cd2
PH
1408/* True iff TYPE indicates a "thin" array pointer type. */
1409
14f9c5c9 1410static int
d2e4a39e 1411is_thin_pntr (struct type *type)
14f9c5c9 1412{
d2e4a39e 1413 return
14f9c5c9
AS
1414 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1415 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1416}
1417
4c4b4cd2
PH
1418/* The descriptor type for thin pointer type TYPE. */
1419
d2e4a39e
AS
1420static struct type *
1421thin_descriptor_type (struct type *type)
14f9c5c9 1422{
d2e4a39e 1423 struct type *base_type = desc_base_type (type);
5b4ee69b 1424
14f9c5c9
AS
1425 if (base_type == NULL)
1426 return NULL;
1427 if (is_suffix (ada_type_name (base_type), "___XVE"))
1428 return base_type;
d2e4a39e 1429 else
14f9c5c9 1430 {
d2e4a39e 1431 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1432
14f9c5c9 1433 if (alt_type == NULL)
dda83cd7 1434 return base_type;
14f9c5c9 1435 else
dda83cd7 1436 return alt_type;
14f9c5c9
AS
1437 }
1438}
1439
4c4b4cd2
PH
1440/* A pointer to the array data for thin-pointer value VAL. */
1441
d2e4a39e
AS
1442static struct value *
1443thin_data_pntr (struct value *val)
14f9c5c9 1444{
828292f2 1445 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1446 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1447
556bdfd4
UW
1448 data_type = lookup_pointer_type (data_type);
1449
78134374 1450 if (type->code () == TYPE_CODE_PTR)
556bdfd4 1451 return value_cast (data_type, value_copy (val));
d2e4a39e 1452 else
42ae5230 1453 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1454}
1455
4c4b4cd2
PH
1456/* True iff TYPE indicates a "thick" array pointer type. */
1457
14f9c5c9 1458static int
d2e4a39e 1459is_thick_pntr (struct type *type)
14f9c5c9
AS
1460{
1461 type = desc_base_type (type);
78134374 1462 return (type != NULL && type->code () == TYPE_CODE_STRUCT
dda83cd7 1463 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1464}
1465
4c4b4cd2
PH
1466/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1467 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1468
d2e4a39e
AS
1469static struct type *
1470desc_bounds_type (struct type *type)
14f9c5c9 1471{
d2e4a39e 1472 struct type *r;
14f9c5c9
AS
1473
1474 type = desc_base_type (type);
1475
1476 if (type == NULL)
1477 return NULL;
1478 else if (is_thin_pntr (type))
1479 {
1480 type = thin_descriptor_type (type);
1481 if (type == NULL)
dda83cd7 1482 return NULL;
14f9c5c9
AS
1483 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1484 if (r != NULL)
dda83cd7 1485 return ada_check_typedef (r);
14f9c5c9 1486 }
78134374 1487 else if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
1488 {
1489 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1490 if (r != NULL)
dda83cd7 1491 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1492 }
1493 return NULL;
1494}
1495
1496/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1497 one, a pointer to its bounds data. Otherwise NULL. */
1498
d2e4a39e
AS
1499static struct value *
1500desc_bounds (struct value *arr)
14f9c5c9 1501{
df407dfe 1502 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1503
d2e4a39e 1504 if (is_thin_pntr (type))
14f9c5c9 1505 {
d2e4a39e 1506 struct type *bounds_type =
dda83cd7 1507 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1508 LONGEST addr;
1509
4cdfadb1 1510 if (bounds_type == NULL)
dda83cd7 1511 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1512
1513 /* NOTE: The following calculation is not really kosher, but
dda83cd7
SM
1514 since desc_type is an XVE-encoded type (and shouldn't be),
1515 the correct calculation is a real pain. FIXME (and fix GCC). */
78134374 1516 if (type->code () == TYPE_CODE_PTR)
dda83cd7 1517 addr = value_as_long (arr);
d2e4a39e 1518 else
dda83cd7 1519 addr = value_address (arr);
14f9c5c9 1520
d2e4a39e 1521 return
dda83cd7
SM
1522 value_from_longest (lookup_pointer_type (bounds_type),
1523 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1524 }
1525
1526 else if (is_thick_pntr (type))
05e522ef
JB
1527 {
1528 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1529 _("Bad GNAT array descriptor"));
1530 struct type *p_bounds_type = value_type (p_bounds);
1531
1532 if (p_bounds_type
78134374 1533 && p_bounds_type->code () == TYPE_CODE_PTR)
05e522ef
JB
1534 {
1535 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1536
e46d3488 1537 if (target_type->is_stub ())
05e522ef
JB
1538 p_bounds = value_cast (lookup_pointer_type
1539 (ada_check_typedef (target_type)),
1540 p_bounds);
1541 }
1542 else
1543 error (_("Bad GNAT array descriptor"));
1544
1545 return p_bounds;
1546 }
14f9c5c9
AS
1547 else
1548 return NULL;
1549}
1550
4c4b4cd2
PH
1551/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1552 position of the field containing the address of the bounds data. */
1553
14f9c5c9 1554static int
d2e4a39e 1555fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1556{
1557 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1558}
1559
1560/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1561 size of the field containing the address of the bounds data. */
1562
14f9c5c9 1563static int
d2e4a39e 1564fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1565{
1566 type = desc_base_type (type);
1567
d2e4a39e 1568 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1569 return TYPE_FIELD_BITSIZE (type, 1);
1570 else
940da03e 1571 return 8 * TYPE_LENGTH (ada_check_typedef (type->field (1).type ()));
14f9c5c9
AS
1572}
1573
4c4b4cd2 1574/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1575 pointer to one, the type of its array data (a array-with-no-bounds type);
1576 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1577 data. */
4c4b4cd2 1578
d2e4a39e 1579static struct type *
556bdfd4 1580desc_data_target_type (struct type *type)
14f9c5c9
AS
1581{
1582 type = desc_base_type (type);
1583
4c4b4cd2 1584 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1585 if (is_thin_pntr (type))
940da03e 1586 return desc_base_type (thin_descriptor_type (type)->field (1).type ());
14f9c5c9 1587 else if (is_thick_pntr (type))
556bdfd4
UW
1588 {
1589 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1590
1591 if (data_type
78134374 1592 && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
05e522ef 1593 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1594 }
1595
1596 return NULL;
14f9c5c9
AS
1597}
1598
1599/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1600 its array data. */
4c4b4cd2 1601
d2e4a39e
AS
1602static struct value *
1603desc_data (struct value *arr)
14f9c5c9 1604{
df407dfe 1605 struct type *type = value_type (arr);
5b4ee69b 1606
14f9c5c9
AS
1607 if (is_thin_pntr (type))
1608 return thin_data_pntr (arr);
1609 else if (is_thick_pntr (type))
d2e4a39e 1610 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
dda83cd7 1611 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1612 else
1613 return NULL;
1614}
1615
1616
1617/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1618 position of the field containing the address of the data. */
1619
14f9c5c9 1620static int
d2e4a39e 1621fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1622{
1623 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1624}
1625
1626/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1627 size of the field containing the address of the data. */
1628
14f9c5c9 1629static int
d2e4a39e 1630fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1631{
1632 type = desc_base_type (type);
1633
1634 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1635 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1636 else
940da03e 1637 return TARGET_CHAR_BIT * TYPE_LENGTH (type->field (0).type ());
14f9c5c9
AS
1638}
1639
4c4b4cd2 1640/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1641 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1642 bound, if WHICH is 1. The first bound is I=1. */
1643
d2e4a39e
AS
1644static struct value *
1645desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1646{
250106a7
TT
1647 char bound_name[20];
1648 xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1649 which ? 'U' : 'L', i - 1);
1650 return value_struct_elt (&bounds, NULL, bound_name, NULL,
dda83cd7 1651 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1652}
1653
1654/* If BOUNDS is an array-bounds structure type, return the bit position
1655 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1656 bound, if WHICH is 1. The first bound is I=1. */
1657
14f9c5c9 1658static int
d2e4a39e 1659desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1660{
d2e4a39e 1661 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1662}
1663
1664/* If BOUNDS is an array-bounds structure type, return the bit field size
1665 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1666 bound, if WHICH is 1. The first bound is I=1. */
1667
76a01679 1668static int
d2e4a39e 1669desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1670{
1671 type = desc_base_type (type);
1672
d2e4a39e
AS
1673 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1674 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1675 else
940da03e 1676 return 8 * TYPE_LENGTH (type->field (2 * i + which - 2).type ());
14f9c5c9
AS
1677}
1678
1679/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1680 Ith bound (numbering from 1). Otherwise, NULL. */
1681
d2e4a39e
AS
1682static struct type *
1683desc_index_type (struct type *type, int i)
14f9c5c9
AS
1684{
1685 type = desc_base_type (type);
1686
78134374 1687 if (type->code () == TYPE_CODE_STRUCT)
250106a7
TT
1688 {
1689 char bound_name[20];
1690 xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1691 return lookup_struct_elt_type (type, bound_name, 1);
1692 }
d2e4a39e 1693 else
14f9c5c9
AS
1694 return NULL;
1695}
1696
4c4b4cd2
PH
1697/* The number of index positions in the array-bounds type TYPE.
1698 Return 0 if TYPE is NULL. */
1699
14f9c5c9 1700static int
d2e4a39e 1701desc_arity (struct type *type)
14f9c5c9
AS
1702{
1703 type = desc_base_type (type);
1704
1705 if (type != NULL)
1f704f76 1706 return type->num_fields () / 2;
14f9c5c9
AS
1707 return 0;
1708}
1709
4c4b4cd2
PH
1710/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1711 an array descriptor type (representing an unconstrained array
1712 type). */
1713
76a01679
JB
1714static int
1715ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1716{
1717 if (type == NULL)
1718 return 0;
61ee279c 1719 type = ada_check_typedef (type);
78134374 1720 return (type->code () == TYPE_CODE_ARRAY
dda83cd7 1721 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1722}
1723
52ce6436 1724/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1725 * to one. */
52ce6436 1726
2c0b251b 1727static int
52ce6436
PH
1728ada_is_array_type (struct type *type)
1729{
78134374
SM
1730 while (type != NULL
1731 && (type->code () == TYPE_CODE_PTR
1732 || type->code () == TYPE_CODE_REF))
52ce6436
PH
1733 type = TYPE_TARGET_TYPE (type);
1734 return ada_is_direct_array_type (type);
1735}
1736
4c4b4cd2 1737/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1738
14f9c5c9 1739int
4c4b4cd2 1740ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1741{
1742 if (type == NULL)
1743 return 0;
61ee279c 1744 type = ada_check_typedef (type);
78134374
SM
1745 return (type->code () == TYPE_CODE_ARRAY
1746 || (type->code () == TYPE_CODE_PTR
1747 && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1748 == TYPE_CODE_ARRAY)));
14f9c5c9
AS
1749}
1750
4c4b4cd2
PH
1751/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1752
14f9c5c9 1753int
4c4b4cd2 1754ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1755{
556bdfd4 1756 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1757
1758 if (type == NULL)
1759 return 0;
61ee279c 1760 type = ada_check_typedef (type);
556bdfd4 1761 return (data_type != NULL
78134374 1762 && data_type->code () == TYPE_CODE_ARRAY
556bdfd4 1763 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1764}
1765
1766/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1767 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1768 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1769 is still needed. */
1770
14f9c5c9 1771int
ebf56fd3 1772ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1773{
d2e4a39e 1774 return
14f9c5c9 1775 type != NULL
78134374 1776 && type->code () == TYPE_CODE_STRUCT
14f9c5c9 1777 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
dda83cd7 1778 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
4c4b4cd2 1779 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1780}
1781
1782
4c4b4cd2 1783/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1784 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1785 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1786 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1787 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1788 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1789 a descriptor. */
de93309a
SM
1790
1791static struct type *
d2e4a39e 1792ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1793{
ad82864c
JB
1794 if (ada_is_constrained_packed_array_type (value_type (arr)))
1795 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1796
df407dfe
AC
1797 if (!ada_is_array_descriptor_type (value_type (arr)))
1798 return value_type (arr);
d2e4a39e
AS
1799
1800 if (!bounds)
ad82864c
JB
1801 {
1802 struct type *array_type =
1803 ada_check_typedef (desc_data_target_type (value_type (arr)));
1804
1805 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1806 TYPE_FIELD_BITSIZE (array_type, 0) =
1807 decode_packed_array_bitsize (value_type (arr));
1808
1809 return array_type;
1810 }
14f9c5c9
AS
1811 else
1812 {
d2e4a39e 1813 struct type *elt_type;
14f9c5c9 1814 int arity;
d2e4a39e 1815 struct value *descriptor;
14f9c5c9 1816
df407dfe
AC
1817 elt_type = ada_array_element_type (value_type (arr), -1);
1818 arity = ada_array_arity (value_type (arr));
14f9c5c9 1819
d2e4a39e 1820 if (elt_type == NULL || arity == 0)
dda83cd7 1821 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1822
1823 descriptor = desc_bounds (arr);
d2e4a39e 1824 if (value_as_long (descriptor) == 0)
dda83cd7 1825 return NULL;
d2e4a39e 1826 while (arity > 0)
dda83cd7
SM
1827 {
1828 struct type *range_type = alloc_type_copy (value_type (arr));
1829 struct type *array_type = alloc_type_copy (value_type (arr));
1830 struct value *low = desc_one_bound (descriptor, arity, 0);
1831 struct value *high = desc_one_bound (descriptor, arity, 1);
1832
1833 arity -= 1;
1834 create_static_range_type (range_type, value_type (low),
0c9c3474
SA
1835 longest_to_int (value_as_long (low)),
1836 longest_to_int (value_as_long (high)));
dda83cd7 1837 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1838
1839 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1840 {
1841 /* We need to store the element packed bitsize, as well as
dda83cd7 1842 recompute the array size, because it was previously
e67ad678
JB
1843 computed based on the unpacked element size. */
1844 LONGEST lo = value_as_long (low);
1845 LONGEST hi = value_as_long (high);
1846
1847 TYPE_FIELD_BITSIZE (elt_type, 0) =
1848 decode_packed_array_bitsize (value_type (arr));
1849 /* If the array has no element, then the size is already
dda83cd7 1850 zero, and does not need to be recomputed. */
e67ad678
JB
1851 if (lo < hi)
1852 {
1853 int array_bitsize =
dda83cd7 1854 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
e67ad678
JB
1855
1856 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1857 }
1858 }
dda83cd7 1859 }
14f9c5c9
AS
1860
1861 return lookup_pointer_type (elt_type);
1862 }
1863}
1864
1865/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1866 Otherwise, returns either a standard GDB array with bounds set
1867 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1868 GDB array. Returns NULL if ARR is a null fat pointer. */
1869
d2e4a39e
AS
1870struct value *
1871ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1872{
df407dfe 1873 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1874 {
d2e4a39e 1875 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1876
14f9c5c9 1877 if (arrType == NULL)
dda83cd7 1878 return NULL;
14f9c5c9
AS
1879 return value_cast (arrType, value_copy (desc_data (arr)));
1880 }
ad82864c
JB
1881 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1882 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1883 else
1884 return arr;
1885}
1886
1887/* If ARR does not represent an array, returns ARR unchanged.
1888 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1889 be ARR itself if it already is in the proper form). */
1890
720d1a40 1891struct value *
d2e4a39e 1892ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 1893{
df407dfe 1894 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1895 {
d2e4a39e 1896 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 1897
14f9c5c9 1898 if (arrVal == NULL)
dda83cd7 1899 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 1900 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
1901 return value_ind (arrVal);
1902 }
ad82864c
JB
1903 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1904 return decode_constrained_packed_array (arr);
d2e4a39e 1905 else
14f9c5c9
AS
1906 return arr;
1907}
1908
1909/* If TYPE represents a GNAT array type, return it translated to an
1910 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
1911 packing). For other types, is the identity. */
1912
d2e4a39e
AS
1913struct type *
1914ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 1915{
ad82864c
JB
1916 if (ada_is_constrained_packed_array_type (type))
1917 return decode_constrained_packed_array_type (type);
17280b9f
UW
1918
1919 if (ada_is_array_descriptor_type (type))
556bdfd4 1920 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
1921
1922 return type;
14f9c5c9
AS
1923}
1924
4c4b4cd2
PH
1925/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
1926
ad82864c 1927static int
57567375 1928ada_is_gnat_encoded_packed_array_type (struct type *type)
14f9c5c9
AS
1929{
1930 if (type == NULL)
1931 return 0;
4c4b4cd2 1932 type = desc_base_type (type);
61ee279c 1933 type = ada_check_typedef (type);
d2e4a39e 1934 return
14f9c5c9
AS
1935 ada_type_name (type) != NULL
1936 && strstr (ada_type_name (type), "___XP") != NULL;
1937}
1938
ad82864c
JB
1939/* Non-zero iff TYPE represents a standard GNAT constrained
1940 packed-array type. */
1941
1942int
1943ada_is_constrained_packed_array_type (struct type *type)
1944{
57567375 1945 return ada_is_gnat_encoded_packed_array_type (type)
ad82864c
JB
1946 && !ada_is_array_descriptor_type (type);
1947}
1948
1949/* Non-zero iff TYPE represents an array descriptor for a
1950 unconstrained packed-array type. */
1951
1952static int
1953ada_is_unconstrained_packed_array_type (struct type *type)
1954{
57567375
TT
1955 if (!ada_is_array_descriptor_type (type))
1956 return 0;
1957
1958 if (ada_is_gnat_encoded_packed_array_type (type))
1959 return 1;
1960
1961 /* If we saw GNAT encodings, then the above code is sufficient.
1962 However, with minimal encodings, we will just have a thick
1963 pointer instead. */
1964 if (is_thick_pntr (type))
1965 {
1966 type = desc_base_type (type);
1967 /* The structure's first field is a pointer to an array, so this
1968 fetches the array type. */
1969 type = TYPE_TARGET_TYPE (type->field (0).type ());
1970 /* Now we can see if the array elements are packed. */
1971 return TYPE_FIELD_BITSIZE (type, 0) > 0;
1972 }
1973
1974 return 0;
ad82864c
JB
1975}
1976
c9a28cbe
TT
1977/* Return true if TYPE is a (Gnat-encoded) constrained packed array
1978 type, or if it is an ordinary (non-Gnat-encoded) packed array. */
1979
1980static bool
1981ada_is_any_packed_array_type (struct type *type)
1982{
1983 return (ada_is_constrained_packed_array_type (type)
1984 || (type->code () == TYPE_CODE_ARRAY
1985 && TYPE_FIELD_BITSIZE (type, 0) % 8 != 0));
1986}
1987
ad82864c
JB
1988/* Given that TYPE encodes a packed array type (constrained or unconstrained),
1989 return the size of its elements in bits. */
1990
1991static long
1992decode_packed_array_bitsize (struct type *type)
1993{
0d5cff50
DE
1994 const char *raw_name;
1995 const char *tail;
ad82864c
JB
1996 long bits;
1997
720d1a40
JB
1998 /* Access to arrays implemented as fat pointers are encoded as a typedef
1999 of the fat pointer type. We need the name of the fat pointer type
2000 to do the decoding, so strip the typedef layer. */
78134374 2001 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
2002 type = ada_typedef_target_type (type);
2003
2004 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2005 if (!raw_name)
2006 raw_name = ada_type_name (desc_base_type (type));
2007
2008 if (!raw_name)
2009 return 0;
2010
2011 tail = strstr (raw_name, "___XP");
57567375
TT
2012 if (tail == nullptr)
2013 {
2014 gdb_assert (is_thick_pntr (type));
2015 /* The structure's first field is a pointer to an array, so this
2016 fetches the array type. */
2017 type = TYPE_TARGET_TYPE (type->field (0).type ());
2018 /* Now we can see if the array elements are packed. */
2019 return TYPE_FIELD_BITSIZE (type, 0);
2020 }
ad82864c
JB
2021
2022 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2023 {
2024 lim_warning
2025 (_("could not understand bit size information on packed array"));
2026 return 0;
2027 }
2028
2029 return bits;
2030}
2031
14f9c5c9
AS
2032/* Given that TYPE is a standard GDB array type with all bounds filled
2033 in, and that the element size of its ultimate scalar constituents
2034 (that is, either its elements, or, if it is an array of arrays, its
2035 elements' elements, etc.) is *ELT_BITS, return an identical type,
2036 but with the bit sizes of its elements (and those of any
2037 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2038 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2039 in bits.
2040
2041 Note that, for arrays whose index type has an XA encoding where
2042 a bound references a record discriminant, getting that discriminant,
2043 and therefore the actual value of that bound, is not possible
2044 because none of the given parameters gives us access to the record.
2045 This function assumes that it is OK in the context where it is being
2046 used to return an array whose bounds are still dynamic and where
2047 the length is arbitrary. */
4c4b4cd2 2048
d2e4a39e 2049static struct type *
ad82864c 2050constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2051{
d2e4a39e
AS
2052 struct type *new_elt_type;
2053 struct type *new_type;
99b1c762
JB
2054 struct type *index_type_desc;
2055 struct type *index_type;
14f9c5c9
AS
2056 LONGEST low_bound, high_bound;
2057
61ee279c 2058 type = ada_check_typedef (type);
78134374 2059 if (type->code () != TYPE_CODE_ARRAY)
14f9c5c9
AS
2060 return type;
2061
99b1c762
JB
2062 index_type_desc = ada_find_parallel_type (type, "___XA");
2063 if (index_type_desc)
940da03e 2064 index_type = to_fixed_range_type (index_type_desc->field (0).type (),
99b1c762
JB
2065 NULL);
2066 else
3d967001 2067 index_type = type->index_type ();
99b1c762 2068
e9bb382b 2069 new_type = alloc_type_copy (type);
ad82864c
JB
2070 new_elt_type =
2071 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2072 elt_bits);
99b1c762 2073 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9 2074 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
d0e39ea2 2075 new_type->set_name (ada_type_name (type));
14f9c5c9 2076
78134374 2077 if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
4a46959e 2078 && is_dynamic_type (check_typedef (index_type)))
1f8d2881 2079 || !get_discrete_bounds (index_type, &low_bound, &high_bound))
14f9c5c9
AS
2080 low_bound = high_bound = 0;
2081 if (high_bound < low_bound)
2082 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2083 else
14f9c5c9
AS
2084 {
2085 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2086 TYPE_LENGTH (new_type) =
dda83cd7 2087 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2088 }
2089
9cdd0d12 2090 new_type->set_is_fixed_instance (true);
14f9c5c9
AS
2091 return new_type;
2092}
2093
ad82864c
JB
2094/* The array type encoded by TYPE, where
2095 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2096
d2e4a39e 2097static struct type *
ad82864c 2098decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2099{
0d5cff50 2100 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2101 char *name;
0d5cff50 2102 const char *tail;
d2e4a39e 2103 struct type *shadow_type;
14f9c5c9 2104 long bits;
14f9c5c9 2105
727e3d2e
JB
2106 if (!raw_name)
2107 raw_name = ada_type_name (desc_base_type (type));
2108
2109 if (!raw_name)
2110 return NULL;
2111
2112 name = (char *) alloca (strlen (raw_name) + 1);
2113 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2114 type = desc_base_type (type);
2115
14f9c5c9
AS
2116 memcpy (name, raw_name, tail - raw_name);
2117 name[tail - raw_name] = '\000';
2118
b4ba55a1
JB
2119 shadow_type = ada_find_parallel_type_with_name (type, name);
2120
2121 if (shadow_type == NULL)
14f9c5c9 2122 {
323e0a4a 2123 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2124 return NULL;
2125 }
f168693b 2126 shadow_type = check_typedef (shadow_type);
14f9c5c9 2127
78134374 2128 if (shadow_type->code () != TYPE_CODE_ARRAY)
14f9c5c9 2129 {
0963b4bd
MS
2130 lim_warning (_("could not understand bounds "
2131 "information on packed array"));
14f9c5c9
AS
2132 return NULL;
2133 }
d2e4a39e 2134
ad82864c
JB
2135 bits = decode_packed_array_bitsize (type);
2136 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2137}
2138
a7400e44
TT
2139/* Helper function for decode_constrained_packed_array. Set the field
2140 bitsize on a series of packed arrays. Returns the number of
2141 elements in TYPE. */
2142
2143static LONGEST
2144recursively_update_array_bitsize (struct type *type)
2145{
2146 gdb_assert (type->code () == TYPE_CODE_ARRAY);
2147
2148 LONGEST low, high;
1f8d2881 2149 if (!get_discrete_bounds (type->index_type (), &low, &high)
a7400e44
TT
2150 || low > high)
2151 return 0;
2152 LONGEST our_len = high - low + 1;
2153
2154 struct type *elt_type = TYPE_TARGET_TYPE (type);
2155 if (elt_type->code () == TYPE_CODE_ARRAY)
2156 {
2157 LONGEST elt_len = recursively_update_array_bitsize (elt_type);
2158 LONGEST elt_bitsize = elt_len * TYPE_FIELD_BITSIZE (elt_type, 0);
2159 TYPE_FIELD_BITSIZE (type, 0) = elt_bitsize;
2160
2161 TYPE_LENGTH (type) = ((our_len * elt_bitsize + HOST_CHAR_BIT - 1)
2162 / HOST_CHAR_BIT);
2163 }
2164
2165 return our_len;
2166}
2167
ad82864c
JB
2168/* Given that ARR is a struct value *indicating a GNAT constrained packed
2169 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2170 standard GDB array type except that the BITSIZEs of the array
2171 target types are set to the number of bits in each element, and the
4c4b4cd2 2172 type length is set appropriately. */
14f9c5c9 2173
d2e4a39e 2174static struct value *
ad82864c 2175decode_constrained_packed_array (struct value *arr)
14f9c5c9 2176{
4c4b4cd2 2177 struct type *type;
14f9c5c9 2178
11aa919a
PMR
2179 /* If our value is a pointer, then dereference it. Likewise if
2180 the value is a reference. Make sure that this operation does not
2181 cause the target type to be fixed, as this would indirectly cause
2182 this array to be decoded. The rest of the routine assumes that
2183 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2184 and "value_ind" routines to perform the dereferencing, as opposed
2185 to using "ada_coerce_ref" or "ada_value_ind". */
2186 arr = coerce_ref (arr);
78134374 2187 if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
284614f0 2188 arr = value_ind (arr);
4c4b4cd2 2189
ad82864c 2190 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2191 if (type == NULL)
2192 {
323e0a4a 2193 error (_("can't unpack array"));
14f9c5c9
AS
2194 return NULL;
2195 }
61ee279c 2196
a7400e44
TT
2197 /* Decoding the packed array type could not correctly set the field
2198 bitsizes for any dimension except the innermost, because the
2199 bounds may be variable and were not passed to that function. So,
2200 we further resolve the array bounds here and then update the
2201 sizes. */
2202 const gdb_byte *valaddr = value_contents_for_printing (arr);
2203 CORE_ADDR address = value_address (arr);
2204 gdb::array_view<const gdb_byte> view
2205 = gdb::make_array_view (valaddr, TYPE_LENGTH (type));
2206 type = resolve_dynamic_type (type, view, address);
2207 recursively_update_array_bitsize (type);
2208
d5a22e77 2209 if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
32c9a795 2210 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2211 {
2212 /* This is a (right-justified) modular type representing a packed
2213 array with no wrapper. In order to interpret the value through
2214 the (left-justified) packed array type we just built, we must
2215 first left-justify it. */
2216 int bit_size, bit_pos;
2217 ULONGEST mod;
2218
df407dfe 2219 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2220 bit_size = 0;
2221 while (mod > 0)
2222 {
2223 bit_size += 1;
2224 mod >>= 1;
2225 }
df407dfe 2226 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2227 arr = ada_value_primitive_packed_val (arr, NULL,
2228 bit_pos / HOST_CHAR_BIT,
2229 bit_pos % HOST_CHAR_BIT,
2230 bit_size,
2231 type);
2232 }
2233
4c4b4cd2 2234 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2235}
2236
2237
2238/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2239 given in IND. ARR must be a simple array. */
14f9c5c9 2240
d2e4a39e
AS
2241static struct value *
2242value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2243{
2244 int i;
2245 int bits, elt_off, bit_off;
2246 long elt_total_bit_offset;
d2e4a39e
AS
2247 struct type *elt_type;
2248 struct value *v;
14f9c5c9
AS
2249
2250 bits = 0;
2251 elt_total_bit_offset = 0;
df407dfe 2252 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2253 for (i = 0; i < arity; i += 1)
14f9c5c9 2254 {
78134374 2255 if (elt_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
2256 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2257 error
2258 (_("attempt to do packed indexing of "
0963b4bd 2259 "something other than a packed array"));
14f9c5c9 2260 else
dda83cd7
SM
2261 {
2262 struct type *range_type = elt_type->index_type ();
2263 LONGEST lowerbound, upperbound;
2264 LONGEST idx;
2265
1f8d2881 2266 if (!get_discrete_bounds (range_type, &lowerbound, &upperbound))
dda83cd7
SM
2267 {
2268 lim_warning (_("don't know bounds of array"));
2269 lowerbound = upperbound = 0;
2270 }
2271
2272 idx = pos_atr (ind[i]);
2273 if (idx < lowerbound || idx > upperbound)
2274 lim_warning (_("packed array index %ld out of bounds"),
0963b4bd 2275 (long) idx);
dda83cd7
SM
2276 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2277 elt_total_bit_offset += (idx - lowerbound) * bits;
2278 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
2279 }
14f9c5c9
AS
2280 }
2281 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2282 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2283
2284 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
dda83cd7 2285 bits, elt_type);
14f9c5c9
AS
2286 return v;
2287}
2288
4c4b4cd2 2289/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2290
2291static int
d2e4a39e 2292has_negatives (struct type *type)
14f9c5c9 2293{
78134374 2294 switch (type->code ())
d2e4a39e
AS
2295 {
2296 default:
2297 return 0;
2298 case TYPE_CODE_INT:
c6d940a9 2299 return !type->is_unsigned ();
d2e4a39e 2300 case TYPE_CODE_RANGE:
5537ddd0 2301 return type->bounds ()->low.const_val () - type->bounds ()->bias < 0;
d2e4a39e 2302 }
14f9c5c9 2303}
d2e4a39e 2304
f93fca70 2305/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
5b639dea 2306 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
f93fca70 2307 the unpacked buffer.
14f9c5c9 2308
5b639dea
JB
2309 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2310 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2311
f93fca70
JB
2312 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2313 zero otherwise.
14f9c5c9 2314
f93fca70 2315 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2316
f93fca70
JB
2317 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2318
2319static void
2320ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2321 gdb_byte *unpacked, int unpacked_len,
2322 int is_big_endian, int is_signed_type,
2323 int is_scalar)
2324{
a1c95e6b
JB
2325 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2326 int src_idx; /* Index into the source area */
2327 int src_bytes_left; /* Number of source bytes left to process. */
2328 int srcBitsLeft; /* Number of source bits left to move */
2329 int unusedLS; /* Number of bits in next significant
dda83cd7 2330 byte of source that are unused */
a1c95e6b 2331
a1c95e6b
JB
2332 int unpacked_idx; /* Index into the unpacked buffer */
2333 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2334
4c4b4cd2 2335 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2336 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2337 unsigned char sign;
a1c95e6b 2338
4c4b4cd2
PH
2339 /* Transmit bytes from least to most significant; delta is the direction
2340 the indices move. */
f93fca70 2341 int delta = is_big_endian ? -1 : 1;
14f9c5c9 2342
5b639dea
JB
2343 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2344 bits from SRC. .*/
2345 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2346 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2347 bit_size, unpacked_len);
2348
14f9c5c9 2349 srcBitsLeft = bit_size;
086ca51f 2350 src_bytes_left = src_len;
f93fca70 2351 unpacked_bytes_left = unpacked_len;
14f9c5c9 2352 sign = 0;
f93fca70
JB
2353
2354 if (is_big_endian)
14f9c5c9 2355 {
086ca51f 2356 src_idx = src_len - 1;
f93fca70
JB
2357 if (is_signed_type
2358 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
dda83cd7 2359 sign = ~0;
d2e4a39e
AS
2360
2361 unusedLS =
dda83cd7
SM
2362 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2363 % HOST_CHAR_BIT;
14f9c5c9 2364
f93fca70
JB
2365 if (is_scalar)
2366 {
dda83cd7
SM
2367 accumSize = 0;
2368 unpacked_idx = unpacked_len - 1;
f93fca70
JB
2369 }
2370 else
2371 {
dda83cd7
SM
2372 /* Non-scalar values must be aligned at a byte boundary... */
2373 accumSize =
2374 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2375 /* ... And are placed at the beginning (most-significant) bytes
2376 of the target. */
2377 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2378 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2379 }
14f9c5c9 2380 }
d2e4a39e 2381 else
14f9c5c9
AS
2382 {
2383 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2384
086ca51f 2385 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2386 unusedLS = bit_offset;
2387 accumSize = 0;
2388
f93fca70 2389 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
dda83cd7 2390 sign = ~0;
14f9c5c9 2391 }
d2e4a39e 2392
14f9c5c9 2393 accum = 0;
086ca51f 2394 while (src_bytes_left > 0)
14f9c5c9
AS
2395 {
2396 /* Mask for removing bits of the next source byte that are not
dda83cd7 2397 part of the value. */
d2e4a39e 2398 unsigned int unusedMSMask =
dda83cd7
SM
2399 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2400 1;
4c4b4cd2 2401 /* Sign-extend bits for this byte. */
14f9c5c9 2402 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2403
d2e4a39e 2404 accum |=
dda83cd7 2405 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2406 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2407 if (accumSize >= HOST_CHAR_BIT)
dda83cd7
SM
2408 {
2409 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
2410 accumSize -= HOST_CHAR_BIT;
2411 accum >>= HOST_CHAR_BIT;
2412 unpacked_bytes_left -= 1;
2413 unpacked_idx += delta;
2414 }
14f9c5c9
AS
2415 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2416 unusedLS = 0;
086ca51f
JB
2417 src_bytes_left -= 1;
2418 src_idx += delta;
14f9c5c9 2419 }
086ca51f 2420 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2421 {
2422 accum |= sign << accumSize;
db297a65 2423 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
14f9c5c9 2424 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2425 if (accumSize < 0)
2426 accumSize = 0;
14f9c5c9 2427 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2428 unpacked_bytes_left -= 1;
2429 unpacked_idx += delta;
14f9c5c9 2430 }
f93fca70
JB
2431}
2432
2433/* Create a new value of type TYPE from the contents of OBJ starting
2434 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2435 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2436 assigning through the result will set the field fetched from.
2437 VALADDR is ignored unless OBJ is NULL, in which case,
2438 VALADDR+OFFSET must address the start of storage containing the
2439 packed value. The value returned in this case is never an lval.
2440 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2441
2442struct value *
2443ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2444 long offset, int bit_offset, int bit_size,
dda83cd7 2445 struct type *type)
f93fca70
JB
2446{
2447 struct value *v;
bfb1c796 2448 const gdb_byte *src; /* First byte containing data to unpack */
f93fca70 2449 gdb_byte *unpacked;
220475ed 2450 const int is_scalar = is_scalar_type (type);
d5a22e77 2451 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d5722aa2 2452 gdb::byte_vector staging;
f93fca70
JB
2453
2454 type = ada_check_typedef (type);
2455
d0a9e810 2456 if (obj == NULL)
bfb1c796 2457 src = valaddr + offset;
d0a9e810 2458 else
bfb1c796 2459 src = value_contents (obj) + offset;
d0a9e810
JB
2460
2461 if (is_dynamic_type (type))
2462 {
2463 /* The length of TYPE might by dynamic, so we need to resolve
2464 TYPE in order to know its actual size, which we then use
2465 to create the contents buffer of the value we return.
2466 The difficulty is that the data containing our object is
2467 packed, and therefore maybe not at a byte boundary. So, what
2468 we do, is unpack the data into a byte-aligned buffer, and then
2469 use that buffer as our object's value for resolving the type. */
d5722aa2
PA
2470 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2471 staging.resize (staging_len);
d0a9e810
JB
2472
2473 ada_unpack_from_contents (src, bit_offset, bit_size,
dda83cd7 2474 staging.data (), staging.size (),
d0a9e810
JB
2475 is_big_endian, has_negatives (type),
2476 is_scalar);
b249d2c2 2477 type = resolve_dynamic_type (type, staging, 0);
0cafa88c
JB
2478 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2479 {
2480 /* This happens when the length of the object is dynamic,
2481 and is actually smaller than the space reserved for it.
2482 For instance, in an array of variant records, the bit_size
2483 we're given is the array stride, which is constant and
2484 normally equal to the maximum size of its element.
2485 But, in reality, each element only actually spans a portion
2486 of that stride. */
2487 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2488 }
d0a9e810
JB
2489 }
2490
f93fca70
JB
2491 if (obj == NULL)
2492 {
2493 v = allocate_value (type);
bfb1c796 2494 src = valaddr + offset;
f93fca70
JB
2495 }
2496 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2497 {
0cafa88c 2498 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
bfb1c796 2499 gdb_byte *buf;
0cafa88c 2500
f93fca70 2501 v = value_at (type, value_address (obj) + offset);
bfb1c796
PA
2502 buf = (gdb_byte *) alloca (src_len);
2503 read_memory (value_address (v), buf, src_len);
2504 src = buf;
f93fca70
JB
2505 }
2506 else
2507 {
2508 v = allocate_value (type);
bfb1c796 2509 src = value_contents (obj) + offset;
f93fca70
JB
2510 }
2511
2512 if (obj != NULL)
2513 {
2514 long new_offset = offset;
2515
2516 set_value_component_location (v, obj);
2517 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2518 set_value_bitsize (v, bit_size);
2519 if (value_bitpos (v) >= HOST_CHAR_BIT)
dda83cd7 2520 {
f93fca70 2521 ++new_offset;
dda83cd7
SM
2522 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2523 }
f93fca70
JB
2524 set_value_offset (v, new_offset);
2525
2526 /* Also set the parent value. This is needed when trying to
2527 assign a new value (in inferior memory). */
2528 set_value_parent (v, obj);
2529 }
2530 else
2531 set_value_bitsize (v, bit_size);
bfb1c796 2532 unpacked = value_contents_writeable (v);
f93fca70
JB
2533
2534 if (bit_size == 0)
2535 {
2536 memset (unpacked, 0, TYPE_LENGTH (type));
2537 return v;
2538 }
2539
d5722aa2 2540 if (staging.size () == TYPE_LENGTH (type))
f93fca70 2541 {
d0a9e810
JB
2542 /* Small short-cut: If we've unpacked the data into a buffer
2543 of the same size as TYPE's length, then we can reuse that,
2544 instead of doing the unpacking again. */
d5722aa2 2545 memcpy (unpacked, staging.data (), staging.size ());
f93fca70 2546 }
d0a9e810
JB
2547 else
2548 ada_unpack_from_contents (src, bit_offset, bit_size,
2549 unpacked, TYPE_LENGTH (type),
2550 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2551
14f9c5c9
AS
2552 return v;
2553}
d2e4a39e 2554
14f9c5c9
AS
2555/* Store the contents of FROMVAL into the location of TOVAL.
2556 Return a new value with the location of TOVAL and contents of
2557 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2558 floating-point or non-scalar types. */
14f9c5c9 2559
d2e4a39e
AS
2560static struct value *
2561ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2562{
df407dfe
AC
2563 struct type *type = value_type (toval);
2564 int bits = value_bitsize (toval);
14f9c5c9 2565
52ce6436
PH
2566 toval = ada_coerce_ref (toval);
2567 fromval = ada_coerce_ref (fromval);
2568
2569 if (ada_is_direct_array_type (value_type (toval)))
2570 toval = ada_coerce_to_simple_array (toval);
2571 if (ada_is_direct_array_type (value_type (fromval)))
2572 fromval = ada_coerce_to_simple_array (fromval);
2573
88e3b34b 2574 if (!deprecated_value_modifiable (toval))
323e0a4a 2575 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2576
d2e4a39e 2577 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2578 && bits > 0
78134374 2579 && (type->code () == TYPE_CODE_FLT
dda83cd7 2580 || type->code () == TYPE_CODE_STRUCT))
14f9c5c9 2581 {
df407dfe
AC
2582 int len = (value_bitpos (toval)
2583 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2584 int from_size;
224c3ddb 2585 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2586 struct value *val;
42ae5230 2587 CORE_ADDR to_addr = value_address (toval);
14f9c5c9 2588
78134374 2589 if (type->code () == TYPE_CODE_FLT)
dda83cd7 2590 fromval = value_cast (type, fromval);
14f9c5c9 2591
52ce6436 2592 read_memory (to_addr, buffer, len);
aced2898
PH
2593 from_size = value_bitsize (fromval);
2594 if (from_size == 0)
2595 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
d48e62f4 2596
d5a22e77 2597 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d48e62f4
TT
2598 ULONGEST from_offset = 0;
2599 if (is_big_endian && is_scalar_type (value_type (fromval)))
2600 from_offset = from_size - bits;
2601 copy_bitwise (buffer, value_bitpos (toval),
2602 value_contents (fromval), from_offset,
2603 bits, is_big_endian);
972daa01 2604 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2605
14f9c5c9 2606 val = value_copy (toval);
0fd88904 2607 memcpy (value_contents_raw (val), value_contents (fromval),
dda83cd7 2608 TYPE_LENGTH (type));
04624583 2609 deprecated_set_value_type (val, type);
d2e4a39e 2610
14f9c5c9
AS
2611 return val;
2612 }
2613
2614 return value_assign (toval, fromval);
2615}
2616
2617
7c512744
JB
2618/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2619 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2620 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2621 COMPONENT, and not the inferior's memory. The current contents
2622 of COMPONENT are ignored.
2623
2624 Although not part of the initial design, this function also works
2625 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2626 had a null address, and COMPONENT had an address which is equal to
2627 its offset inside CONTAINER. */
2628
52ce6436
PH
2629static void
2630value_assign_to_component (struct value *container, struct value *component,
2631 struct value *val)
2632{
2633 LONGEST offset_in_container =
42ae5230 2634 (LONGEST) (value_address (component) - value_address (container));
7c512744 2635 int bit_offset_in_container =
52ce6436
PH
2636 value_bitpos (component) - value_bitpos (container);
2637 int bits;
7c512744 2638
52ce6436
PH
2639 val = value_cast (value_type (component), val);
2640
2641 if (value_bitsize (component) == 0)
2642 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2643 else
2644 bits = value_bitsize (component);
2645
d5a22e77 2646 if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2a62dfa9
JB
2647 {
2648 int src_offset;
2649
2650 if (is_scalar_type (check_typedef (value_type (component))))
dda83cd7 2651 src_offset
2a62dfa9
JB
2652 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2653 else
2654 src_offset = 0;
a99bc3d2
JB
2655 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2656 value_bitpos (container) + bit_offset_in_container,
2657 value_contents (val), src_offset, bits, 1);
2a62dfa9 2658 }
52ce6436 2659 else
a99bc3d2
JB
2660 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2661 value_bitpos (container) + bit_offset_in_container,
2662 value_contents (val), 0, bits, 0);
7c512744
JB
2663}
2664
736ade86
XR
2665/* Determine if TYPE is an access to an unconstrained array. */
2666
d91e9ea8 2667bool
736ade86
XR
2668ada_is_access_to_unconstrained_array (struct type *type)
2669{
78134374 2670 return (type->code () == TYPE_CODE_TYPEDEF
736ade86
XR
2671 && is_thick_pntr (ada_typedef_target_type (type)));
2672}
2673
4c4b4cd2
PH
2674/* The value of the element of array ARR at the ARITY indices given in IND.
2675 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2676 thereto. */
2677
d2e4a39e
AS
2678struct value *
2679ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2680{
2681 int k;
d2e4a39e
AS
2682 struct value *elt;
2683 struct type *elt_type;
14f9c5c9
AS
2684
2685 elt = ada_coerce_to_simple_array (arr);
2686
df407dfe 2687 elt_type = ada_check_typedef (value_type (elt));
78134374 2688 if (elt_type->code () == TYPE_CODE_ARRAY
14f9c5c9
AS
2689 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2690 return value_subscript_packed (elt, arity, ind);
2691
2692 for (k = 0; k < arity; k += 1)
2693 {
b9c50e9a
XR
2694 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2695
78134374 2696 if (elt_type->code () != TYPE_CODE_ARRAY)
dda83cd7 2697 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2698
2497b498 2699 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2700
2701 if (ada_is_access_to_unconstrained_array (saved_elt_type)
78134374 2702 && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
b9c50e9a
XR
2703 {
2704 /* The element is a typedef to an unconstrained array,
2705 except that the value_subscript call stripped the
2706 typedef layer. The typedef layer is GNAT's way to
2707 specify that the element is, at the source level, an
2708 access to the unconstrained array, rather than the
2709 unconstrained array. So, we need to restore that
2710 typedef layer, which we can do by forcing the element's
2711 type back to its original type. Otherwise, the returned
2712 value is going to be printed as the array, rather
2713 than as an access. Another symptom of the same issue
2714 would be that an expression trying to dereference the
2715 element would also be improperly rejected. */
2716 deprecated_set_value_type (elt, saved_elt_type);
2717 }
2718
2719 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2720 }
b9c50e9a 2721
14f9c5c9
AS
2722 return elt;
2723}
2724
deede10c
JB
2725/* Assuming ARR is a pointer to a GDB array, the value of the element
2726 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2727 Does not read the entire array into memory.
2728
2729 Note: Unlike what one would expect, this function is used instead of
2730 ada_value_subscript for basically all non-packed array types. The reason
2731 for this is that a side effect of doing our own pointer arithmetics instead
2732 of relying on value_subscript is that there is no implicit typedef peeling.
2733 This is important for arrays of array accesses, where it allows us to
2734 preserve the fact that the array's element is an array access, where the
2735 access part os encoded in a typedef layer. */
14f9c5c9 2736
2c0b251b 2737static struct value *
deede10c 2738ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2739{
2740 int k;
919e6dbe 2741 struct value *array_ind = ada_value_ind (arr);
deede10c 2742 struct type *type
919e6dbe
PMR
2743 = check_typedef (value_enclosing_type (array_ind));
2744
78134374 2745 if (type->code () == TYPE_CODE_ARRAY
919e6dbe
PMR
2746 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2747 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2748
2749 for (k = 0; k < arity; k += 1)
2750 {
2751 LONGEST lwb, upb;
14f9c5c9 2752
78134374 2753 if (type->code () != TYPE_CODE_ARRAY)
dda83cd7 2754 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2755 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
dda83cd7 2756 value_copy (arr));
3d967001 2757 get_discrete_bounds (type->index_type (), &lwb, &upb);
53a47a3e 2758 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2759 type = TYPE_TARGET_TYPE (type);
2760 }
2761
2762 return value_ind (arr);
2763}
2764
0b5d8877 2765/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2766 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2767 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2768 this array is LOW, as per Ada rules. */
0b5d8877 2769static struct value *
f5938064 2770ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
dda83cd7 2771 int low, int high)
0b5d8877 2772{
b0dd7688 2773 struct type *type0 = ada_check_typedef (type);
3d967001 2774 struct type *base_index_type = TYPE_TARGET_TYPE (type0->index_type ());
0c9c3474 2775 struct type *index_type
aa715135 2776 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2777 struct type *slice_type = create_array_type_with_stride
2778 (NULL, TYPE_TARGET_TYPE (type0), index_type,
24e99c6c 2779 type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2780 TYPE_FIELD_BITSIZE (type0, 0));
3d967001 2781 int base_low = ada_discrete_type_low_bound (type0->index_type ());
6244c119 2782 gdb::optional<LONGEST> base_low_pos, low_pos;
aa715135
JG
2783 CORE_ADDR base;
2784
6244c119
SM
2785 low_pos = discrete_position (base_index_type, low);
2786 base_low_pos = discrete_position (base_index_type, base_low);
2787
2788 if (!low_pos.has_value () || !base_low_pos.has_value ())
aa715135
JG
2789 {
2790 warning (_("unable to get positions in slice, use bounds instead"));
2791 low_pos = low;
2792 base_low_pos = base_low;
2793 }
5b4ee69b 2794
7ff5b937
TT
2795 ULONGEST stride = TYPE_FIELD_BITSIZE (slice_type, 0) / 8;
2796 if (stride == 0)
2797 stride = TYPE_LENGTH (TYPE_TARGET_TYPE (type0));
2798
6244c119 2799 base = value_as_address (array_ptr) + (*low_pos - *base_low_pos) * stride;
f5938064 2800 return value_at_lazy (slice_type, base);
0b5d8877
PH
2801}
2802
2803
2804static struct value *
2805ada_value_slice (struct value *array, int low, int high)
2806{
b0dd7688 2807 struct type *type = ada_check_typedef (value_type (array));
3d967001 2808 struct type *base_index_type = TYPE_TARGET_TYPE (type->index_type ());
0c9c3474 2809 struct type *index_type
3d967001 2810 = create_static_range_type (NULL, type->index_type (), low, high);
9fe561ab
JB
2811 struct type *slice_type = create_array_type_with_stride
2812 (NULL, TYPE_TARGET_TYPE (type), index_type,
24e99c6c 2813 type->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2814 TYPE_FIELD_BITSIZE (type, 0));
6244c119
SM
2815 gdb::optional<LONGEST> low_pos, high_pos;
2816
5b4ee69b 2817
6244c119
SM
2818 low_pos = discrete_position (base_index_type, low);
2819 high_pos = discrete_position (base_index_type, high);
2820
2821 if (!low_pos.has_value () || !high_pos.has_value ())
aa715135
JG
2822 {
2823 warning (_("unable to get positions in slice, use bounds instead"));
2824 low_pos = low;
2825 high_pos = high;
2826 }
2827
2828 return value_cast (slice_type,
6244c119 2829 value_slice (array, low, *high_pos - *low_pos + 1));
0b5d8877
PH
2830}
2831
14f9c5c9
AS
2832/* If type is a record type in the form of a standard GNAT array
2833 descriptor, returns the number of dimensions for type. If arr is a
2834 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2835 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2836
2837int
d2e4a39e 2838ada_array_arity (struct type *type)
14f9c5c9
AS
2839{
2840 int arity;
2841
2842 if (type == NULL)
2843 return 0;
2844
2845 type = desc_base_type (type);
2846
2847 arity = 0;
78134374 2848 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9 2849 return desc_arity (desc_bounds_type (type));
d2e4a39e 2850 else
78134374 2851 while (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2852 {
dda83cd7
SM
2853 arity += 1;
2854 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2855 }
d2e4a39e 2856
14f9c5c9
AS
2857 return arity;
2858}
2859
2860/* If TYPE is a record type in the form of a standard GNAT array
2861 descriptor or a simple array type, returns the element type for
2862 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2863 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2864
d2e4a39e
AS
2865struct type *
2866ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2867{
2868 type = desc_base_type (type);
2869
78134374 2870 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
2871 {
2872 int k;
d2e4a39e 2873 struct type *p_array_type;
14f9c5c9 2874
556bdfd4 2875 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2876
2877 k = ada_array_arity (type);
2878 if (k == 0)
dda83cd7 2879 return NULL;
d2e4a39e 2880
4c4b4cd2 2881 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2882 if (nindices >= 0 && k > nindices)
dda83cd7 2883 k = nindices;
d2e4a39e 2884 while (k > 0 && p_array_type != NULL)
dda83cd7
SM
2885 {
2886 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
2887 k -= 1;
2888 }
14f9c5c9
AS
2889 return p_array_type;
2890 }
78134374 2891 else if (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2892 {
78134374 2893 while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
dda83cd7
SM
2894 {
2895 type = TYPE_TARGET_TYPE (type);
2896 nindices -= 1;
2897 }
14f9c5c9
AS
2898 return type;
2899 }
2900
2901 return NULL;
2902}
2903
4c4b4cd2 2904/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2905 Does not examine memory. Throws an error if N is invalid or TYPE
2906 is not an array type. NAME is the name of the Ada attribute being
2907 evaluated ('range, 'first, 'last, or 'length); it is used in building
2908 the error message. */
14f9c5c9 2909
1eea4ebd
UW
2910static struct type *
2911ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2912{
4c4b4cd2
PH
2913 struct type *result_type;
2914
14f9c5c9
AS
2915 type = desc_base_type (type);
2916
1eea4ebd
UW
2917 if (n < 0 || n > ada_array_arity (type))
2918 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2919
4c4b4cd2 2920 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2921 {
2922 int i;
2923
2924 for (i = 1; i < n; i += 1)
dda83cd7 2925 type = TYPE_TARGET_TYPE (type);
3d967001 2926 result_type = TYPE_TARGET_TYPE (type->index_type ());
4c4b4cd2 2927 /* FIXME: The stabs type r(0,0);bound;bound in an array type
dda83cd7
SM
2928 has a target type of TYPE_CODE_UNDEF. We compensate here, but
2929 perhaps stabsread.c would make more sense. */
78134374 2930 if (result_type && result_type->code () == TYPE_CODE_UNDEF)
dda83cd7 2931 result_type = NULL;
14f9c5c9 2932 }
d2e4a39e 2933 else
1eea4ebd
UW
2934 {
2935 result_type = desc_index_type (desc_bounds_type (type), n);
2936 if (result_type == NULL)
2937 error (_("attempt to take bound of something that is not an array"));
2938 }
2939
2940 return result_type;
14f9c5c9
AS
2941}
2942
2943/* Given that arr is an array type, returns the lower bound of the
2944 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2945 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2946 array-descriptor type. It works for other arrays with bounds supplied
2947 by run-time quantities other than discriminants. */
14f9c5c9 2948
abb68b3e 2949static LONGEST
fb5e3d5c 2950ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2951{
8a48ac95 2952 struct type *type, *index_type_desc, *index_type;
1ce677a4 2953 int i;
262452ec
JK
2954
2955 gdb_assert (which == 0 || which == 1);
14f9c5c9 2956
ad82864c
JB
2957 if (ada_is_constrained_packed_array_type (arr_type))
2958 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2959
4c4b4cd2 2960 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2961 return (LONGEST) - which;
14f9c5c9 2962
78134374 2963 if (arr_type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
2964 type = TYPE_TARGET_TYPE (arr_type);
2965 else
2966 type = arr_type;
2967
22c4c60c 2968 if (type->is_fixed_instance ())
bafffb51
JB
2969 {
2970 /* The array has already been fixed, so we do not need to
2971 check the parallel ___XA type again. That encoding has
2972 already been applied, so ignore it now. */
2973 index_type_desc = NULL;
2974 }
2975 else
2976 {
2977 index_type_desc = ada_find_parallel_type (type, "___XA");
2978 ada_fixup_array_indexes_type (index_type_desc);
2979 }
2980
262452ec 2981 if (index_type_desc != NULL)
940da03e 2982 index_type = to_fixed_range_type (index_type_desc->field (n - 1).type (),
28c85d6c 2983 NULL);
262452ec 2984 else
8a48ac95
JB
2985 {
2986 struct type *elt_type = check_typedef (type);
2987
2988 for (i = 1; i < n; i++)
2989 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
2990
3d967001 2991 index_type = elt_type->index_type ();
8a48ac95 2992 }
262452ec 2993
43bbcdc2
PH
2994 return
2995 (LONGEST) (which == 0
dda83cd7
SM
2996 ? ada_discrete_type_low_bound (index_type)
2997 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
2998}
2999
3000/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3001 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3002 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3003 supplied by run-time quantities other than discriminants. */
14f9c5c9 3004
1eea4ebd 3005static LONGEST
4dc81987 3006ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3007{
eb479039
JB
3008 struct type *arr_type;
3009
78134374 3010 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3011 arr = value_ind (arr);
3012 arr_type = value_enclosing_type (arr);
14f9c5c9 3013
ad82864c
JB
3014 if (ada_is_constrained_packed_array_type (arr_type))
3015 return ada_array_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3016 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3017 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3018 else
1eea4ebd 3019 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3020}
3021
3022/* Given that arr is an array value, returns the length of the
3023 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3024 supplied by run-time quantities other than discriminants.
3025 Does not work for arrays indexed by enumeration types with representation
3026 clauses at the moment. */
14f9c5c9 3027
1eea4ebd 3028static LONGEST
d2e4a39e 3029ada_array_length (struct value *arr, int n)
14f9c5c9 3030{
aa715135
JG
3031 struct type *arr_type, *index_type;
3032 int low, high;
eb479039 3033
78134374 3034 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3035 arr = value_ind (arr);
3036 arr_type = value_enclosing_type (arr);
14f9c5c9 3037
ad82864c
JB
3038 if (ada_is_constrained_packed_array_type (arr_type))
3039 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3040
4c4b4cd2 3041 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3042 {
3043 low = ada_array_bound_from_type (arr_type, n, 0);
3044 high = ada_array_bound_from_type (arr_type, n, 1);
3045 }
14f9c5c9 3046 else
aa715135
JG
3047 {
3048 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3049 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3050 }
3051
f168693b 3052 arr_type = check_typedef (arr_type);
7150d33c 3053 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3054 if (index_type != NULL)
3055 {
3056 struct type *base_type;
78134374 3057 if (index_type->code () == TYPE_CODE_RANGE)
aa715135
JG
3058 base_type = TYPE_TARGET_TYPE (index_type);
3059 else
3060 base_type = index_type;
3061
3062 low = pos_atr (value_from_longest (base_type, low));
3063 high = pos_atr (value_from_longest (base_type, high));
3064 }
3065 return high - low + 1;
4c4b4cd2
PH
3066}
3067
bff8c71f
TT
3068/* An array whose type is that of ARR_TYPE (an array type), with
3069 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3070 less than LOW, then LOW-1 is used. */
4c4b4cd2
PH
3071
3072static struct value *
bff8c71f 3073empty_array (struct type *arr_type, int low, int high)
4c4b4cd2 3074{
b0dd7688 3075 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3076 struct type *index_type
3077 = create_static_range_type
dda83cd7 3078 (NULL, TYPE_TARGET_TYPE (arr_type0->index_type ()), low,
bff8c71f 3079 high < low ? low - 1 : high);
b0dd7688 3080 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3081
0b5d8877 3082 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3083}
14f9c5c9 3084\f
d2e4a39e 3085
dda83cd7 3086 /* Name resolution */
14f9c5c9 3087
4c4b4cd2
PH
3088/* The "decoded" name for the user-definable Ada operator corresponding
3089 to OP. */
14f9c5c9 3090
d2e4a39e 3091static const char *
4c4b4cd2 3092ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3093{
3094 int i;
3095
4c4b4cd2 3096 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3097 {
3098 if (ada_opname_table[i].op == op)
dda83cd7 3099 return ada_opname_table[i].decoded;
14f9c5c9 3100 }
323e0a4a 3101 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3102}
3103
de93309a
SM
3104/* Returns true (non-zero) iff decoded name N0 should appear before N1
3105 in a listing of choices during disambiguation (see sort_choices, below).
3106 The idea is that overloadings of a subprogram name from the
3107 same package should sort in their source order. We settle for ordering
3108 such symbols by their trailing number (__N or $N). */
14f9c5c9 3109
de93309a
SM
3110static int
3111encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9 3112{
de93309a
SM
3113 if (N1 == NULL)
3114 return 0;
3115 else if (N0 == NULL)
3116 return 1;
3117 else
3118 {
3119 int k0, k1;
30b15541 3120
de93309a 3121 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
dda83cd7 3122 ;
de93309a 3123 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
dda83cd7 3124 ;
de93309a 3125 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
dda83cd7
SM
3126 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3127 {
3128 int n0, n1;
3129
3130 n0 = k0;
3131 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3132 n0 -= 1;
3133 n1 = k1;
3134 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3135 n1 -= 1;
3136 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3137 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3138 }
de93309a
SM
3139 return (strcmp (N0, N1) < 0);
3140 }
14f9c5c9
AS
3141}
3142
de93309a
SM
3143/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3144 encoded names. */
14f9c5c9 3145
de93309a
SM
3146static void
3147sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3148{
14f9c5c9 3149 int i;
14f9c5c9 3150
de93309a 3151 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3152 {
de93309a
SM
3153 struct block_symbol sym = syms[i];
3154 int j;
3155
3156 for (j = i - 1; j >= 0; j -= 1)
dda83cd7
SM
3157 {
3158 if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3159 sym.symbol->linkage_name ()))
3160 break;
3161 syms[j + 1] = syms[j];
3162 }
de93309a
SM
3163 syms[j + 1] = sym;
3164 }
3165}
14f9c5c9 3166
de93309a
SM
3167/* Whether GDB should display formals and return types for functions in the
3168 overloads selection menu. */
3169static bool print_signatures = true;
4c4b4cd2 3170
de93309a
SM
3171/* Print the signature for SYM on STREAM according to the FLAGS options. For
3172 all but functions, the signature is just the name of the symbol. For
3173 functions, this is the name of the function, the list of types for formals
3174 and the return type (if any). */
4c4b4cd2 3175
de93309a
SM
3176static void
3177ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3178 const struct type_print_options *flags)
3179{
3180 struct type *type = SYMBOL_TYPE (sym);
14f9c5c9 3181
987012b8 3182 fprintf_filtered (stream, "%s", sym->print_name ());
de93309a
SM
3183 if (!print_signatures
3184 || type == NULL
78134374 3185 || type->code () != TYPE_CODE_FUNC)
de93309a 3186 return;
4c4b4cd2 3187
1f704f76 3188 if (type->num_fields () > 0)
de93309a
SM
3189 {
3190 int i;
14f9c5c9 3191
de93309a 3192 fprintf_filtered (stream, " (");
1f704f76 3193 for (i = 0; i < type->num_fields (); ++i)
de93309a
SM
3194 {
3195 if (i > 0)
3196 fprintf_filtered (stream, "; ");
940da03e 3197 ada_print_type (type->field (i).type (), NULL, stream, -1, 0,
de93309a
SM
3198 flags);
3199 }
3200 fprintf_filtered (stream, ")");
3201 }
3202 if (TYPE_TARGET_TYPE (type) != NULL
78134374 3203 && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
de93309a
SM
3204 {
3205 fprintf_filtered (stream, " return ");
3206 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3207 }
3208}
14f9c5c9 3209
de93309a
SM
3210/* Read and validate a set of numeric choices from the user in the
3211 range 0 .. N_CHOICES-1. Place the results in increasing
3212 order in CHOICES[0 .. N-1], and return N.
14f9c5c9 3213
de93309a
SM
3214 The user types choices as a sequence of numbers on one line
3215 separated by blanks, encoding them as follows:
14f9c5c9 3216
de93309a
SM
3217 + A choice of 0 means to cancel the selection, throwing an error.
3218 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3219 + The user chooses k by typing k+IS_ALL_CHOICE+1.
14f9c5c9 3220
de93309a 3221 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9 3222
de93309a
SM
3223 ANNOTATION_SUFFIX, if present, is used to annotate the input
3224 prompts (for use with the -f switch). */
14f9c5c9 3225
de93309a
SM
3226static int
3227get_selections (int *choices, int n_choices, int max_results,
dda83cd7 3228 int is_all_choice, const char *annotation_suffix)
de93309a 3229{
992a7040 3230 const char *args;
de93309a
SM
3231 const char *prompt;
3232 int n_chosen;
3233 int first_choice = is_all_choice ? 2 : 1;
14f9c5c9 3234
de93309a
SM
3235 prompt = getenv ("PS2");
3236 if (prompt == NULL)
3237 prompt = "> ";
4c4b4cd2 3238
de93309a 3239 args = command_line_input (prompt, annotation_suffix);
4c4b4cd2 3240
de93309a
SM
3241 if (args == NULL)
3242 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3243
de93309a 3244 n_chosen = 0;
4c4b4cd2 3245
de93309a
SM
3246 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3247 order, as given in args. Choices are validated. */
3248 while (1)
14f9c5c9 3249 {
de93309a
SM
3250 char *args2;
3251 int choice, j;
76a01679 3252
de93309a
SM
3253 args = skip_spaces (args);
3254 if (*args == '\0' && n_chosen == 0)
dda83cd7 3255 error_no_arg (_("one or more choice numbers"));
de93309a 3256 else if (*args == '\0')
dda83cd7 3257 break;
76a01679 3258
de93309a
SM
3259 choice = strtol (args, &args2, 10);
3260 if (args == args2 || choice < 0
dda83cd7
SM
3261 || choice > n_choices + first_choice - 1)
3262 error (_("Argument must be choice number"));
de93309a 3263 args = args2;
76a01679 3264
de93309a 3265 if (choice == 0)
dda83cd7 3266 error (_("cancelled"));
76a01679 3267
de93309a 3268 if (choice < first_choice)
dda83cd7
SM
3269 {
3270 n_chosen = n_choices;
3271 for (j = 0; j < n_choices; j += 1)
3272 choices[j] = j;
3273 break;
3274 }
de93309a 3275 choice -= first_choice;
76a01679 3276
de93309a 3277 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
dda83cd7
SM
3278 {
3279 }
4c4b4cd2 3280
de93309a 3281 if (j < 0 || choice != choices[j])
dda83cd7
SM
3282 {
3283 int k;
4c4b4cd2 3284
dda83cd7
SM
3285 for (k = n_chosen - 1; k > j; k -= 1)
3286 choices[k + 1] = choices[k];
3287 choices[j + 1] = choice;
3288 n_chosen += 1;
3289 }
14f9c5c9
AS
3290 }
3291
de93309a
SM
3292 if (n_chosen > max_results)
3293 error (_("Select no more than %d of the above"), max_results);
3294
3295 return n_chosen;
14f9c5c9
AS
3296}
3297
de93309a
SM
3298/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3299 by asking the user (if necessary), returning the number selected,
3300 and setting the first elements of SYMS items. Error if no symbols
3301 selected. */
3302
3303/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3304 to be re-integrated one of these days. */
14f9c5c9
AS
3305
3306static int
de93309a 3307user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9 3308{
de93309a
SM
3309 int i;
3310 int *chosen = XALLOCAVEC (int , nsyms);
3311 int n_chosen;
3312 int first_choice = (max_results == 1) ? 1 : 2;
3313 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9 3314
de93309a
SM
3315 if (max_results < 1)
3316 error (_("Request to select 0 symbols!"));
3317 if (nsyms <= 1)
3318 return nsyms;
14f9c5c9 3319
de93309a
SM
3320 if (select_mode == multiple_symbols_cancel)
3321 error (_("\
3322canceled because the command is ambiguous\n\
3323See set/show multiple-symbol."));
14f9c5c9 3324
de93309a
SM
3325 /* If select_mode is "all", then return all possible symbols.
3326 Only do that if more than one symbol can be selected, of course.
3327 Otherwise, display the menu as usual. */
3328 if (select_mode == multiple_symbols_all && max_results > 1)
3329 return nsyms;
14f9c5c9 3330
de93309a
SM
3331 printf_filtered (_("[0] cancel\n"));
3332 if (max_results > 1)
3333 printf_filtered (_("[1] all\n"));
14f9c5c9 3334
de93309a 3335 sort_choices (syms, nsyms);
14f9c5c9 3336
de93309a
SM
3337 for (i = 0; i < nsyms; i += 1)
3338 {
3339 if (syms[i].symbol == NULL)
dda83cd7 3340 continue;
14f9c5c9 3341
de93309a 3342 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
dda83cd7
SM
3343 {
3344 struct symtab_and_line sal =
3345 find_function_start_sal (syms[i].symbol, 1);
14f9c5c9 3346
de93309a
SM
3347 printf_filtered ("[%d] ", i + first_choice);
3348 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3349 &type_print_raw_options);
3350 if (sal.symtab == NULL)
3351 printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3352 metadata_style.style ().ptr (), nullptr, sal.line);
3353 else
3354 printf_filtered
3355 (_(" at %ps:%d\n"),
3356 styled_string (file_name_style.style (),
3357 symtab_to_filename_for_display (sal.symtab)),
3358 sal.line);
dda83cd7
SM
3359 continue;
3360 }
76a01679 3361 else
dda83cd7
SM
3362 {
3363 int is_enumeral =
3364 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3365 && SYMBOL_TYPE (syms[i].symbol) != NULL
3366 && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
de93309a 3367 struct symtab *symtab = NULL;
4c4b4cd2 3368
de93309a
SM
3369 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3370 symtab = symbol_symtab (syms[i].symbol);
3371
dda83cd7 3372 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
de93309a
SM
3373 {
3374 printf_filtered ("[%d] ", i + first_choice);
3375 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3376 &type_print_raw_options);
3377 printf_filtered (_(" at %s:%d\n"),
3378 symtab_to_filename_for_display (symtab),
3379 SYMBOL_LINE (syms[i].symbol));
3380 }
dda83cd7
SM
3381 else if (is_enumeral
3382 && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
3383 {
3384 printf_filtered (("[%d] "), i + first_choice);
3385 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3386 gdb_stdout, -1, 0, &type_print_raw_options);
3387 printf_filtered (_("'(%s) (enumeral)\n"),
987012b8 3388 syms[i].symbol->print_name ());
dda83cd7 3389 }
de93309a
SM
3390 else
3391 {
3392 printf_filtered ("[%d] ", i + first_choice);
3393 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3394 &type_print_raw_options);
3395
3396 if (symtab != NULL)
3397 printf_filtered (is_enumeral
3398 ? _(" in %s (enumeral)\n")
3399 : _(" at %s:?\n"),
3400 symtab_to_filename_for_display (symtab));
3401 else
3402 printf_filtered (is_enumeral
3403 ? _(" (enumeral)\n")
3404 : _(" at ?\n"));
3405 }
dda83cd7 3406 }
14f9c5c9 3407 }
14f9c5c9 3408
de93309a 3409 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
dda83cd7 3410 "overload-choice");
14f9c5c9 3411
de93309a
SM
3412 for (i = 0; i < n_chosen; i += 1)
3413 syms[i] = syms[chosen[i]];
14f9c5c9 3414
de93309a
SM
3415 return n_chosen;
3416}
14f9c5c9 3417
de93309a
SM
3418/* Resolve the operator of the subexpression beginning at
3419 position *POS of *EXPP. "Resolving" consists of replacing
3420 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3421 with their resolutions, replacing built-in operators with
3422 function calls to user-defined operators, where appropriate, and,
3423 when DEPROCEDURE_P is non-zero, converting function-valued variables
3424 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3425 are as in ada_resolve, above. */
14f9c5c9 3426
de93309a
SM
3427static struct value *
3428resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
dda83cd7 3429 struct type *context_type, int parse_completion,
de93309a 3430 innermost_block_tracker *tracker)
14f9c5c9 3431{
de93309a
SM
3432 int pc = *pos;
3433 int i;
3434 struct expression *exp; /* Convenience: == *expp. */
3435 enum exp_opcode op = (*expp)->elts[pc].opcode;
3436 struct value **argvec; /* Vector of operand types (alloca'ed). */
3437 int nargs; /* Number of operands. */
3438 int oplen;
19184910
TT
3439 /* If we're resolving an expression like ARRAY(ARG...), then we set
3440 this to the type of the array, so we can use the index types as
3441 the expected types for resolution. */
3442 struct type *array_type = nullptr;
3443 /* The arity of ARRAY_TYPE. */
3444 int array_arity = 0;
14f9c5c9 3445
de93309a
SM
3446 argvec = NULL;
3447 nargs = 0;
3448 exp = expp->get ();
4c4b4cd2 3449
de93309a
SM
3450 /* Pass one: resolve operands, saving their types and updating *pos,
3451 if needed. */
3452 switch (op)
3453 {
3454 case OP_FUNCALL:
3455 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
dda83cd7
SM
3456 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3457 *pos += 7;
de93309a 3458 else
dda83cd7
SM
3459 {
3460 *pos += 3;
19184910
TT
3461 struct value *lhs = resolve_subexp (expp, pos, 0, NULL,
3462 parse_completion, tracker);
3463 struct type *lhstype = ada_check_typedef (value_type (lhs));
3464 array_arity = ada_array_arity (lhstype);
3465 if (array_arity > 0)
3466 array_type = lhstype;
dda83cd7 3467 }
de93309a
SM
3468 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3469 break;
14f9c5c9 3470
de93309a
SM
3471 case UNOP_ADDR:
3472 *pos += 1;
3473 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3474 break;
3475
3476 case UNOP_QUAL:
3477 *pos += 3;
3478 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3479 parse_completion, tracker);
3480 break;
3481
3482 case OP_ATR_MODULUS:
3483 case OP_ATR_SIZE:
3484 case OP_ATR_TAG:
3485 case OP_ATR_FIRST:
3486 case OP_ATR_LAST:
3487 case OP_ATR_LENGTH:
3488 case OP_ATR_POS:
3489 case OP_ATR_VAL:
3490 case OP_ATR_MIN:
3491 case OP_ATR_MAX:
3492 case TERNOP_IN_RANGE:
3493 case BINOP_IN_BOUNDS:
3494 case UNOP_IN_RANGE:
3495 case OP_AGGREGATE:
3496 case OP_OTHERS:
3497 case OP_CHOICES:
3498 case OP_POSITIONAL:
3499 case OP_DISCRETE_RANGE:
3500 case OP_NAME:
3501 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3502 *pos += oplen;
3503 break;
3504
3505 case BINOP_ASSIGN:
3506 {
dda83cd7
SM
3507 struct value *arg1;
3508
3509 *pos += 1;
3510 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3511 if (arg1 == NULL)
3512 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3513 else
3514 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
de93309a 3515 tracker);
dda83cd7 3516 break;
de93309a
SM
3517 }
3518
3519 case UNOP_CAST:
3520 *pos += 3;
3521 nargs = 1;
3522 break;
3523
3524 case BINOP_ADD:
3525 case BINOP_SUB:
3526 case BINOP_MUL:
3527 case BINOP_DIV:
3528 case BINOP_REM:
3529 case BINOP_MOD:
3530 case BINOP_EXP:
3531 case BINOP_CONCAT:
3532 case BINOP_LOGICAL_AND:
3533 case BINOP_LOGICAL_OR:
3534 case BINOP_BITWISE_AND:
3535 case BINOP_BITWISE_IOR:
3536 case BINOP_BITWISE_XOR:
3537
3538 case BINOP_EQUAL:
3539 case BINOP_NOTEQUAL:
3540 case BINOP_LESS:
3541 case BINOP_GTR:
3542 case BINOP_LEQ:
3543 case BINOP_GEQ:
3544
3545 case BINOP_REPEAT:
3546 case BINOP_SUBSCRIPT:
3547 case BINOP_COMMA:
3548 *pos += 1;
3549 nargs = 2;
3550 break;
3551
3552 case UNOP_NEG:
3553 case UNOP_PLUS:
3554 case UNOP_LOGICAL_NOT:
3555 case UNOP_ABS:
3556 case UNOP_IND:
3557 *pos += 1;
3558 nargs = 1;
3559 break;
3560
3561 case OP_LONG:
3562 case OP_FLOAT:
3563 case OP_VAR_VALUE:
3564 case OP_VAR_MSYM_VALUE:
3565 *pos += 4;
3566 break;
3567
3568 case OP_TYPE:
3569 case OP_BOOL:
3570 case OP_LAST:
3571 case OP_INTERNALVAR:
3572 *pos += 3;
3573 break;
3574
3575 case UNOP_MEMVAL:
3576 *pos += 3;
3577 nargs = 1;
3578 break;
3579
3580 case OP_REGISTER:
3581 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3582 break;
3583
3584 case STRUCTOP_STRUCT:
3585 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3586 nargs = 1;
3587 break;
3588
3589 case TERNOP_SLICE:
3590 *pos += 1;
3591 nargs = 3;
3592 break;
3593
3594 case OP_STRING:
3595 break;
3596
3597 default:
3598 error (_("Unexpected operator during name resolution"));
14f9c5c9 3599 }
14f9c5c9 3600
de93309a
SM
3601 argvec = XALLOCAVEC (struct value *, nargs + 1);
3602 for (i = 0; i < nargs; i += 1)
19184910
TT
3603 {
3604 struct type *subtype = nullptr;
3605 if (i < array_arity)
3606 subtype = ada_index_type (array_type, i + 1, "array type");
3607 argvec[i] = resolve_subexp (expp, pos, 1, subtype, parse_completion,
3608 tracker);
3609 }
de93309a
SM
3610 argvec[i] = NULL;
3611 exp = expp->get ();
4c4b4cd2 3612
de93309a
SM
3613 /* Pass two: perform any resolution on principal operator. */
3614 switch (op)
14f9c5c9 3615 {
de93309a
SM
3616 default:
3617 break;
5b4ee69b 3618
de93309a
SM
3619 case OP_VAR_VALUE:
3620 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7 3621 {
d1183b06
TT
3622 std::vector<struct block_symbol> candidates
3623 = ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
3624 exp->elts[pc + 1].block, VAR_DOMAIN);
886d459f
TT
3625
3626 if (std::any_of (candidates.begin (),
3627 candidates.end (),
3628 [] (block_symbol &sym)
3629 {
3630 switch (SYMBOL_CLASS (sym.symbol))
3631 {
3632 case LOC_REGISTER:
3633 case LOC_ARG:
3634 case LOC_REF_ARG:
3635 case LOC_REGPARM_ADDR:
3636 case LOC_LOCAL:
3637 case LOC_COMPUTED:
3638 return true;
3639 default:
3640 return false;
3641 }
3642 }))
dda83cd7
SM
3643 {
3644 /* Types tend to get re-introduced locally, so if there
3645 are any local symbols that are not types, first filter
3646 out all types. */
886d459f
TT
3647 candidates.erase
3648 (std::remove_if
3649 (candidates.begin (),
3650 candidates.end (),
3651 [] (block_symbol &sym)
dda83cd7 3652 {
886d459f
TT
3653 return SYMBOL_CLASS (sym.symbol) == LOC_TYPEDEF;
3654 }),
3655 candidates.end ());
dda83cd7
SM
3656 }
3657
d1183b06 3658 if (candidates.empty ())
dda83cd7
SM
3659 error (_("No definition found for %s"),
3660 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3661 else if (candidates.size () == 1)
dda83cd7 3662 i = 0;
d1183b06 3663 else if (deprocedure_p && !is_nonfunction (candidates))
dda83cd7
SM
3664 {
3665 i = ada_resolve_function
d1183b06 3666 (candidates, NULL, 0,
dda83cd7
SM
3667 exp->elts[pc + 2].symbol->linkage_name (),
3668 context_type, parse_completion);
3669 if (i < 0)
3670 error (_("Could not find a match for %s"),
3671 exp->elts[pc + 2].symbol->print_name ());
3672 }
3673 else
3674 {
3675 printf_filtered (_("Multiple matches for %s\n"),
3676 exp->elts[pc + 2].symbol->print_name ());
d1183b06 3677 user_select_syms (candidates.data (), candidates.size (), 1);
dda83cd7
SM
3678 i = 0;
3679 }
3680
3681 exp->elts[pc + 1].block = candidates[i].block;
3682 exp->elts[pc + 2].symbol = candidates[i].symbol;
de93309a 3683 tracker->update (candidates[i]);
dda83cd7 3684 }
14f9c5c9 3685
de93309a 3686 if (deprocedure_p
dda83cd7
SM
3687 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
3688 == TYPE_CODE_FUNC))
3689 {
3690 replace_operator_with_call (expp, pc, 0, 4,
3691 exp->elts[pc + 2].symbol,
3692 exp->elts[pc + 1].block);
3693 exp = expp->get ();
3694 }
de93309a
SM
3695 break;
3696
3697 case OP_FUNCALL:
3698 {
dda83cd7
SM
3699 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3700 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3701 {
d1183b06
TT
3702 std::vector<struct block_symbol> candidates
3703 = ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
3704 exp->elts[pc + 4].block, VAR_DOMAIN);
dda83cd7 3705
d1183b06 3706 if (candidates.size () == 1)
dda83cd7
SM
3707 i = 0;
3708 else
3709 {
3710 i = ada_resolve_function
d1183b06 3711 (candidates,
dda83cd7
SM
3712 argvec, nargs,
3713 exp->elts[pc + 5].symbol->linkage_name (),
3714 context_type, parse_completion);
3715 if (i < 0)
3716 error (_("Could not find a match for %s"),
3717 exp->elts[pc + 5].symbol->print_name ());
3718 }
3719
3720 exp->elts[pc + 4].block = candidates[i].block;
3721 exp->elts[pc + 5].symbol = candidates[i].symbol;
de93309a 3722 tracker->update (candidates[i]);
dda83cd7 3723 }
de93309a
SM
3724 }
3725 break;
3726 case BINOP_ADD:
3727 case BINOP_SUB:
3728 case BINOP_MUL:
3729 case BINOP_DIV:
3730 case BINOP_REM:
3731 case BINOP_MOD:
3732 case BINOP_CONCAT:
3733 case BINOP_BITWISE_AND:
3734 case BINOP_BITWISE_IOR:
3735 case BINOP_BITWISE_XOR:
3736 case BINOP_EQUAL:
3737 case BINOP_NOTEQUAL:
3738 case BINOP_LESS:
3739 case BINOP_GTR:
3740 case BINOP_LEQ:
3741 case BINOP_GEQ:
3742 case BINOP_EXP:
3743 case UNOP_NEG:
3744 case UNOP_PLUS:
3745 case UNOP_LOGICAL_NOT:
3746 case UNOP_ABS:
3747 if (possible_user_operator_p (op, argvec))
dda83cd7 3748 {
d1183b06
TT
3749 std::vector<struct block_symbol> candidates
3750 = ada_lookup_symbol_list (ada_decoded_op_name (op),
3751 NULL, VAR_DOMAIN);
d72413e6 3752
d1183b06 3753 i = ada_resolve_function (candidates, argvec,
de93309a
SM
3754 nargs, ada_decoded_op_name (op), NULL,
3755 parse_completion);
dda83cd7
SM
3756 if (i < 0)
3757 break;
d72413e6 3758
de93309a
SM
3759 replace_operator_with_call (expp, pc, nargs, 1,
3760 candidates[i].symbol,
3761 candidates[i].block);
dda83cd7
SM
3762 exp = expp->get ();
3763 }
de93309a 3764 break;
d72413e6 3765
de93309a
SM
3766 case OP_TYPE:
3767 case OP_REGISTER:
3768 return NULL;
d72413e6 3769 }
d72413e6 3770
de93309a
SM
3771 *pos = pc;
3772 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3773 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3774 exp->elts[pc + 1].objfile,
3775 exp->elts[pc + 2].msymbol);
3776 else
3777 return evaluate_subexp_type (exp, pos);
3778}
14f9c5c9 3779
de93309a
SM
3780/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3781 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3782 a non-pointer. */
3783/* The term "match" here is rather loose. The match is heuristic and
3784 liberal. */
14f9c5c9 3785
de93309a
SM
3786static int
3787ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3788{
de93309a
SM
3789 ftype = ada_check_typedef (ftype);
3790 atype = ada_check_typedef (atype);
14f9c5c9 3791
78134374 3792 if (ftype->code () == TYPE_CODE_REF)
de93309a 3793 ftype = TYPE_TARGET_TYPE (ftype);
78134374 3794 if (atype->code () == TYPE_CODE_REF)
de93309a 3795 atype = TYPE_TARGET_TYPE (atype);
14f9c5c9 3796
78134374 3797 switch (ftype->code ())
14f9c5c9 3798 {
de93309a 3799 default:
78134374 3800 return ftype->code () == atype->code ();
de93309a 3801 case TYPE_CODE_PTR:
78134374 3802 if (atype->code () == TYPE_CODE_PTR)
dda83cd7
SM
3803 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3804 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3805 else
dda83cd7
SM
3806 return (may_deref
3807 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
de93309a
SM
3808 case TYPE_CODE_INT:
3809 case TYPE_CODE_ENUM:
3810 case TYPE_CODE_RANGE:
78134374 3811 switch (atype->code ())
dda83cd7
SM
3812 {
3813 case TYPE_CODE_INT:
3814 case TYPE_CODE_ENUM:
3815 case TYPE_CODE_RANGE:
3816 return 1;
3817 default:
3818 return 0;
3819 }
d2e4a39e 3820
de93309a 3821 case TYPE_CODE_ARRAY:
78134374 3822 return (atype->code () == TYPE_CODE_ARRAY
dda83cd7 3823 || ada_is_array_descriptor_type (atype));
14f9c5c9 3824
de93309a
SM
3825 case TYPE_CODE_STRUCT:
3826 if (ada_is_array_descriptor_type (ftype))
dda83cd7
SM
3827 return (atype->code () == TYPE_CODE_ARRAY
3828 || ada_is_array_descriptor_type (atype));
de93309a 3829 else
dda83cd7
SM
3830 return (atype->code () == TYPE_CODE_STRUCT
3831 && !ada_is_array_descriptor_type (atype));
14f9c5c9 3832
de93309a
SM
3833 case TYPE_CODE_UNION:
3834 case TYPE_CODE_FLT:
78134374 3835 return (atype->code () == ftype->code ());
de93309a 3836 }
14f9c5c9
AS
3837}
3838
de93309a
SM
3839/* Return non-zero if the formals of FUNC "sufficiently match" the
3840 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3841 may also be an enumeral, in which case it is treated as a 0-
3842 argument function. */
14f9c5c9 3843
de93309a
SM
3844static int
3845ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3846{
3847 int i;
3848 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3849
de93309a 3850 if (SYMBOL_CLASS (func) == LOC_CONST
78134374 3851 && func_type->code () == TYPE_CODE_ENUM)
de93309a 3852 return (n_actuals == 0);
78134374 3853 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
de93309a 3854 return 0;
14f9c5c9 3855
1f704f76 3856 if (func_type->num_fields () != n_actuals)
de93309a 3857 return 0;
14f9c5c9 3858
de93309a
SM
3859 for (i = 0; i < n_actuals; i += 1)
3860 {
3861 if (actuals[i] == NULL)
dda83cd7 3862 return 0;
de93309a 3863 else
dda83cd7
SM
3864 {
3865 struct type *ftype = ada_check_typedef (func_type->field (i).type ());
3866 struct type *atype = ada_check_typedef (value_type (actuals[i]));
14f9c5c9 3867
dda83cd7
SM
3868 if (!ada_type_match (ftype, atype, 1))
3869 return 0;
3870 }
de93309a
SM
3871 }
3872 return 1;
3873}
d2e4a39e 3874
de93309a
SM
3875/* False iff function type FUNC_TYPE definitely does not produce a value
3876 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3877 FUNC_TYPE is not a valid function type with a non-null return type
3878 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
14f9c5c9 3879
de93309a
SM
3880static int
3881return_match (struct type *func_type, struct type *context_type)
3882{
3883 struct type *return_type;
d2e4a39e 3884
de93309a
SM
3885 if (func_type == NULL)
3886 return 1;
14f9c5c9 3887
78134374 3888 if (func_type->code () == TYPE_CODE_FUNC)
de93309a
SM
3889 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3890 else
3891 return_type = get_base_type (func_type);
3892 if (return_type == NULL)
3893 return 1;
76a01679 3894
de93309a 3895 context_type = get_base_type (context_type);
14f9c5c9 3896
78134374 3897 if (return_type->code () == TYPE_CODE_ENUM)
de93309a
SM
3898 return context_type == NULL || return_type == context_type;
3899 else if (context_type == NULL)
78134374 3900 return return_type->code () != TYPE_CODE_VOID;
de93309a 3901 else
78134374 3902 return return_type->code () == context_type->code ();
de93309a 3903}
14f9c5c9 3904
14f9c5c9 3905
1bfa81ac 3906/* Returns the index in SYMS that contains the symbol for the
de93309a
SM
3907 function (if any) that matches the types of the NARGS arguments in
3908 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3909 that returns that type, then eliminate matches that don't. If
3910 CONTEXT_TYPE is void and there is at least one match that does not
3911 return void, eliminate all matches that do.
14f9c5c9 3912
de93309a
SM
3913 Asks the user if there is more than one match remaining. Returns -1
3914 if there is no such symbol or none is selected. NAME is used
3915 solely for messages. May re-arrange and modify SYMS in
3916 the process; the index returned is for the modified vector. */
14f9c5c9 3917
de93309a 3918static int
d1183b06
TT
3919ada_resolve_function (std::vector<struct block_symbol> &syms,
3920 struct value **args, int nargs,
dda83cd7 3921 const char *name, struct type *context_type,
de93309a
SM
3922 int parse_completion)
3923{
3924 int fallback;
3925 int k;
3926 int m; /* Number of hits */
14f9c5c9 3927
de93309a
SM
3928 m = 0;
3929 /* In the first pass of the loop, we only accept functions matching
3930 context_type. If none are found, we add a second pass of the loop
3931 where every function is accepted. */
3932 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3933 {
d1183b06 3934 for (k = 0; k < syms.size (); k += 1)
dda83cd7
SM
3935 {
3936 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
5b4ee69b 3937
dda83cd7
SM
3938 if (ada_args_match (syms[k].symbol, args, nargs)
3939 && (fallback || return_match (type, context_type)))
3940 {
3941 syms[m] = syms[k];
3942 m += 1;
3943 }
3944 }
14f9c5c9
AS
3945 }
3946
de93309a
SM
3947 /* If we got multiple matches, ask the user which one to use. Don't do this
3948 interactive thing during completion, though, as the purpose of the
3949 completion is providing a list of all possible matches. Prompting the
3950 user to filter it down would be completely unexpected in this case. */
3951 if (m == 0)
3952 return -1;
3953 else if (m > 1 && !parse_completion)
3954 {
3955 printf_filtered (_("Multiple matches for %s\n"), name);
d1183b06 3956 user_select_syms (syms.data (), m, 1);
de93309a
SM
3957 return 0;
3958 }
3959 return 0;
14f9c5c9
AS
3960}
3961
4c4b4cd2
PH
3962/* Replace the operator of length OPLEN at position PC in *EXPP with a call
3963 on the function identified by SYM and BLOCK, and taking NARGS
3964 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
3965
3966static void
e9d9f57e 3967replace_operator_with_call (expression_up *expp, int pc, int nargs,
dda83cd7
SM
3968 int oplen, struct symbol *sym,
3969 const struct block *block)
14f9c5c9 3970{
00158a68
TT
3971 /* We want to add 6 more elements (3 for funcall, 4 for function
3972 symbol, -OPLEN for operator being replaced) to the
3973 expression. */
e9d9f57e 3974 struct expression *exp = expp->get ();
00158a68 3975 int save_nelts = exp->nelts;
f51f9f1d
TV
3976 int extra_elts = 7 - oplen;
3977 exp->nelts += extra_elts;
14f9c5c9 3978
f51f9f1d
TV
3979 if (extra_elts > 0)
3980 exp->resize (exp->nelts);
00158a68
TT
3981 memmove (exp->elts + pc + 7, exp->elts + pc + oplen,
3982 EXP_ELEM_TO_BYTES (save_nelts - pc - oplen));
f51f9f1d
TV
3983 if (extra_elts < 0)
3984 exp->resize (exp->nelts);
14f9c5c9 3985
00158a68
TT
3986 exp->elts[pc].opcode = exp->elts[pc + 2].opcode = OP_FUNCALL;
3987 exp->elts[pc + 1].longconst = (LONGEST) nargs;
14f9c5c9 3988
00158a68
TT
3989 exp->elts[pc + 3].opcode = exp->elts[pc + 6].opcode = OP_VAR_VALUE;
3990 exp->elts[pc + 4].block = block;
3991 exp->elts[pc + 5].symbol = sym;
d2e4a39e 3992}
14f9c5c9
AS
3993
3994/* Type-class predicates */
3995
4c4b4cd2
PH
3996/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
3997 or FLOAT). */
14f9c5c9
AS
3998
3999static int
d2e4a39e 4000numeric_type_p (struct type *type)
14f9c5c9
AS
4001{
4002 if (type == NULL)
4003 return 0;
d2e4a39e
AS
4004 else
4005 {
78134374 4006 switch (type->code ())
dda83cd7
SM
4007 {
4008 case TYPE_CODE_INT:
4009 case TYPE_CODE_FLT:
4010 return 1;
4011 case TYPE_CODE_RANGE:
4012 return (type == TYPE_TARGET_TYPE (type)
4013 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4014 default:
4015 return 0;
4016 }
d2e4a39e 4017 }
14f9c5c9
AS
4018}
4019
4c4b4cd2 4020/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4021
4022static int
d2e4a39e 4023integer_type_p (struct type *type)
14f9c5c9
AS
4024{
4025 if (type == NULL)
4026 return 0;
d2e4a39e
AS
4027 else
4028 {
78134374 4029 switch (type->code ())
dda83cd7
SM
4030 {
4031 case TYPE_CODE_INT:
4032 return 1;
4033 case TYPE_CODE_RANGE:
4034 return (type == TYPE_TARGET_TYPE (type)
4035 || integer_type_p (TYPE_TARGET_TYPE (type)));
4036 default:
4037 return 0;
4038 }
d2e4a39e 4039 }
14f9c5c9
AS
4040}
4041
4c4b4cd2 4042/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4043
4044static int
d2e4a39e 4045scalar_type_p (struct type *type)
14f9c5c9
AS
4046{
4047 if (type == NULL)
4048 return 0;
d2e4a39e
AS
4049 else
4050 {
78134374 4051 switch (type->code ())
dda83cd7
SM
4052 {
4053 case TYPE_CODE_INT:
4054 case TYPE_CODE_RANGE:
4055 case TYPE_CODE_ENUM:
4056 case TYPE_CODE_FLT:
4057 return 1;
4058 default:
4059 return 0;
4060 }
d2e4a39e 4061 }
14f9c5c9
AS
4062}
4063
4c4b4cd2 4064/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4065
4066static int
d2e4a39e 4067discrete_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 case TYPE_CODE_RANGE:
4077 case TYPE_CODE_ENUM:
4078 case TYPE_CODE_BOOL:
4079 return 1;
4080 default:
4081 return 0;
4082 }
d2e4a39e 4083 }
14f9c5c9
AS
4084}
4085
4c4b4cd2
PH
4086/* Returns non-zero if OP with operands in the vector ARGS could be
4087 a user-defined function. Errs on the side of pre-defined operators
4088 (i.e., result 0). */
14f9c5c9
AS
4089
4090static int
d2e4a39e 4091possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4092{
76a01679 4093 struct type *type0 =
df407dfe 4094 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4095 struct type *type1 =
df407dfe 4096 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4097
4c4b4cd2
PH
4098 if (type0 == NULL)
4099 return 0;
4100
14f9c5c9
AS
4101 switch (op)
4102 {
4103 default:
4104 return 0;
4105
4106 case BINOP_ADD:
4107 case BINOP_SUB:
4108 case BINOP_MUL:
4109 case BINOP_DIV:
d2e4a39e 4110 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4111
4112 case BINOP_REM:
4113 case BINOP_MOD:
4114 case BINOP_BITWISE_AND:
4115 case BINOP_BITWISE_IOR:
4116 case BINOP_BITWISE_XOR:
d2e4a39e 4117 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4118
4119 case BINOP_EQUAL:
4120 case BINOP_NOTEQUAL:
4121 case BINOP_LESS:
4122 case BINOP_GTR:
4123 case BINOP_LEQ:
4124 case BINOP_GEQ:
d2e4a39e 4125 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4126
4127 case BINOP_CONCAT:
ee90b9ab 4128 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4129
4130 case BINOP_EXP:
d2e4a39e 4131 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4132
4133 case UNOP_NEG:
4134 case UNOP_PLUS:
4135 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4136 case UNOP_ABS:
4137 return (!numeric_type_p (type0));
14f9c5c9
AS
4138
4139 }
4140}
4141\f
dda83cd7 4142 /* Renaming */
14f9c5c9 4143
aeb5907d
JB
4144/* NOTES:
4145
4146 1. In the following, we assume that a renaming type's name may
4147 have an ___XD suffix. It would be nice if this went away at some
4148 point.
4149 2. We handle both the (old) purely type-based representation of
4150 renamings and the (new) variable-based encoding. At some point,
4151 it is devoutly to be hoped that the former goes away
4152 (FIXME: hilfinger-2007-07-09).
4153 3. Subprogram renamings are not implemented, although the XRS
4154 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4155
4156/* If SYM encodes a renaming,
4157
4158 <renaming> renames <renamed entity>,
4159
4160 sets *LEN to the length of the renamed entity's name,
4161 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4162 the string describing the subcomponent selected from the renamed
0963b4bd 4163 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4164 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4165 are undefined). Otherwise, returns a value indicating the category
4166 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4167 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4168 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4169 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4170 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4171 may be NULL, in which case they are not assigned.
4172
4173 [Currently, however, GCC does not generate subprogram renamings.] */
4174
4175enum ada_renaming_category
4176ada_parse_renaming (struct symbol *sym,
4177 const char **renamed_entity, int *len,
4178 const char **renaming_expr)
4179{
4180 enum ada_renaming_category kind;
4181 const char *info;
4182 const char *suffix;
4183
4184 if (sym == NULL)
4185 return ADA_NOT_RENAMING;
4186 switch (SYMBOL_CLASS (sym))
14f9c5c9 4187 {
aeb5907d
JB
4188 default:
4189 return ADA_NOT_RENAMING;
aeb5907d
JB
4190 case LOC_LOCAL:
4191 case LOC_STATIC:
4192 case LOC_COMPUTED:
4193 case LOC_OPTIMIZED_OUT:
987012b8 4194 info = strstr (sym->linkage_name (), "___XR");
aeb5907d
JB
4195 if (info == NULL)
4196 return ADA_NOT_RENAMING;
4197 switch (info[5])
4198 {
4199 case '_':
4200 kind = ADA_OBJECT_RENAMING;
4201 info += 6;
4202 break;
4203 case 'E':
4204 kind = ADA_EXCEPTION_RENAMING;
4205 info += 7;
4206 break;
4207 case 'P':
4208 kind = ADA_PACKAGE_RENAMING;
4209 info += 7;
4210 break;
4211 case 'S':
4212 kind = ADA_SUBPROGRAM_RENAMING;
4213 info += 7;
4214 break;
4215 default:
4216 return ADA_NOT_RENAMING;
4217 }
14f9c5c9 4218 }
4c4b4cd2 4219
de93309a
SM
4220 if (renamed_entity != NULL)
4221 *renamed_entity = info;
4222 suffix = strstr (info, "___XE");
4223 if (suffix == NULL || suffix == info)
4224 return ADA_NOT_RENAMING;
4225 if (len != NULL)
4226 *len = strlen (info) - strlen (suffix);
4227 suffix += 5;
4228 if (renaming_expr != NULL)
4229 *renaming_expr = suffix;
4230 return kind;
4231}
4232
4233/* Compute the value of the given RENAMING_SYM, which is expected to
4234 be a symbol encoding a renaming expression. BLOCK is the block
4235 used to evaluate the renaming. */
4236
4237static struct value *
4238ada_read_renaming_var_value (struct symbol *renaming_sym,
4239 const struct block *block)
4240{
4241 const char *sym_name;
4242
987012b8 4243 sym_name = renaming_sym->linkage_name ();
de93309a
SM
4244 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4245 return evaluate_expression (expr.get ());
4246}
4247\f
4248
dda83cd7 4249 /* Evaluation: Function Calls */
de93309a
SM
4250
4251/* Return an lvalue containing the value VAL. This is the identity on
4252 lvalues, and otherwise has the side-effect of allocating memory
4253 in the inferior where a copy of the value contents is copied. */
4254
4255static struct value *
4256ensure_lval (struct value *val)
4257{
4258 if (VALUE_LVAL (val) == not_lval
4259 || VALUE_LVAL (val) == lval_internalvar)
4260 {
4261 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4262 const CORE_ADDR addr =
dda83cd7 4263 value_as_long (value_allocate_space_in_inferior (len));
de93309a
SM
4264
4265 VALUE_LVAL (val) = lval_memory;
4266 set_value_address (val, addr);
4267 write_memory (addr, value_contents (val), len);
4268 }
4269
4270 return val;
4271}
4272
4273/* Given ARG, a value of type (pointer or reference to a)*
4274 structure/union, extract the component named NAME from the ultimate
4275 target structure/union and return it as a value with its
4276 appropriate type.
4277
4278 The routine searches for NAME among all members of the structure itself
4279 and (recursively) among all members of any wrapper members
4280 (e.g., '_parent').
4281
4282 If NO_ERR, then simply return NULL in case of error, rather than
4283 calling error. */
4284
4285static struct value *
4286ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4287{
4288 struct type *t, *t1;
4289 struct value *v;
4290 int check_tag;
4291
4292 v = NULL;
4293 t1 = t = ada_check_typedef (value_type (arg));
78134374 4294 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4295 {
4296 t1 = TYPE_TARGET_TYPE (t);
4297 if (t1 == NULL)
4298 goto BadValue;
4299 t1 = ada_check_typedef (t1);
78134374 4300 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4301 {
4302 arg = coerce_ref (arg);
4303 t = t1;
4304 }
de93309a
SM
4305 }
4306
78134374 4307 while (t->code () == TYPE_CODE_PTR)
de93309a
SM
4308 {
4309 t1 = TYPE_TARGET_TYPE (t);
4310 if (t1 == NULL)
4311 goto BadValue;
4312 t1 = ada_check_typedef (t1);
78134374 4313 if (t1->code () == TYPE_CODE_PTR)
dda83cd7
SM
4314 {
4315 arg = value_ind (arg);
4316 t = t1;
4317 }
de93309a 4318 else
dda83cd7 4319 break;
de93309a 4320 }
aeb5907d 4321
78134374 4322 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
de93309a 4323 goto BadValue;
52ce6436 4324
de93309a
SM
4325 if (t1 == t)
4326 v = ada_search_struct_field (name, arg, 0, t);
4327 else
4328 {
4329 int bit_offset, bit_size, byte_offset;
4330 struct type *field_type;
4331 CORE_ADDR address;
a5ee536b 4332
78134374 4333 if (t->code () == TYPE_CODE_PTR)
de93309a
SM
4334 address = value_address (ada_value_ind (arg));
4335 else
4336 address = value_address (ada_coerce_ref (arg));
d2e4a39e 4337
de93309a 4338 /* Check to see if this is a tagged type. We also need to handle
dda83cd7
SM
4339 the case where the type is a reference to a tagged type, but
4340 we have to be careful to exclude pointers to tagged types.
4341 The latter should be shown as usual (as a pointer), whereas
4342 a reference should mostly be transparent to the user. */
14f9c5c9 4343
de93309a 4344 if (ada_is_tagged_type (t1, 0)
dda83cd7
SM
4345 || (t1->code () == TYPE_CODE_REF
4346 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4347 {
4348 /* We first try to find the searched field in the current type.
de93309a 4349 If not found then let's look in the fixed type. */
14f9c5c9 4350
dda83cd7
SM
4351 if (!find_struct_field (name, t1, 0,
4352 &field_type, &byte_offset, &bit_offset,
4353 &bit_size, NULL))
de93309a
SM
4354 check_tag = 1;
4355 else
4356 check_tag = 0;
dda83cd7 4357 }
de93309a
SM
4358 else
4359 check_tag = 0;
c3e5cd34 4360
de93309a
SM
4361 /* Convert to fixed type in all cases, so that we have proper
4362 offsets to each field in unconstrained record types. */
4363 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4364 address, NULL, check_tag);
4365
24aa1b02
TT
4366 /* Resolve the dynamic type as well. */
4367 arg = value_from_contents_and_address (t1, nullptr, address);
4368 t1 = value_type (arg);
4369
de93309a 4370 if (find_struct_field (name, t1, 0,
dda83cd7
SM
4371 &field_type, &byte_offset, &bit_offset,
4372 &bit_size, NULL))
4373 {
4374 if (bit_size != 0)
4375 {
4376 if (t->code () == TYPE_CODE_REF)
4377 arg = ada_coerce_ref (arg);
4378 else
4379 arg = ada_value_ind (arg);
4380 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4381 bit_offset, bit_size,
4382 field_type);
4383 }
4384 else
4385 v = value_at_lazy (field_type, address + byte_offset);
4386 }
c3e5cd34 4387 }
14f9c5c9 4388
de93309a
SM
4389 if (v != NULL || no_err)
4390 return v;
4391 else
4392 error (_("There is no member named %s."), name);
4393
4394 BadValue:
4395 if (no_err)
4396 return NULL;
4397 else
4398 error (_("Attempt to extract a component of "
4399 "a value that is not a record."));
14f9c5c9
AS
4400}
4401
4402/* Return the value ACTUAL, converted to be an appropriate value for a
4403 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4404 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4405 values not residing in memory, updating it as needed. */
14f9c5c9 4406
a93c0eb6 4407struct value *
40bc484c 4408ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4409{
df407dfe 4410 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4411 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e 4412 struct type *formal_target =
78134374 4413 formal_type->code () == TYPE_CODE_PTR
61ee279c 4414 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e 4415 struct type *actual_target =
78134374 4416 actual_type->code () == TYPE_CODE_PTR
61ee279c 4417 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4418
4c4b4cd2 4419 if (ada_is_array_descriptor_type (formal_target)
78134374 4420 && actual_target->code () == TYPE_CODE_ARRAY)
40bc484c 4421 return make_array_descriptor (formal_type, actual);
78134374
SM
4422 else if (formal_type->code () == TYPE_CODE_PTR
4423 || formal_type->code () == TYPE_CODE_REF)
14f9c5c9 4424 {
a84a8a0d 4425 struct value *result;
5b4ee69b 4426
78134374 4427 if (formal_target->code () == TYPE_CODE_ARRAY
dda83cd7 4428 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4429 result = desc_data (actual);
78134374 4430 else if (formal_type->code () != TYPE_CODE_PTR)
dda83cd7
SM
4431 {
4432 if (VALUE_LVAL (actual) != lval_memory)
4433 {
4434 struct value *val;
4435
4436 actual_type = ada_check_typedef (value_type (actual));
4437 val = allocate_value (actual_type);
4438 memcpy ((char *) value_contents_raw (val),
4439 (char *) value_contents (actual),
4440 TYPE_LENGTH (actual_type));
4441 actual = ensure_lval (val);
4442 }
4443 result = value_addr (actual);
4444 }
a84a8a0d
JB
4445 else
4446 return actual;
b1af9e97 4447 return value_cast_pointers (formal_type, result, 0);
14f9c5c9 4448 }
78134374 4449 else if (actual_type->code () == TYPE_CODE_PTR)
14f9c5c9 4450 return ada_value_ind (actual);
8344af1e
JB
4451 else if (ada_is_aligner_type (formal_type))
4452 {
4453 /* We need to turn this parameter into an aligner type
4454 as well. */
4455 struct value *aligner = allocate_value (formal_type);
4456 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4457
4458 value_assign_to_component (aligner, component, actual);
4459 return aligner;
4460 }
14f9c5c9
AS
4461
4462 return actual;
4463}
4464
438c98a1
JB
4465/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4466 type TYPE. This is usually an inefficient no-op except on some targets
4467 (such as AVR) where the representation of a pointer and an address
4468 differs. */
4469
4470static CORE_ADDR
4471value_pointer (struct value *value, struct type *type)
4472{
438c98a1 4473 unsigned len = TYPE_LENGTH (type);
224c3ddb 4474 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4475 CORE_ADDR addr;
4476
4477 addr = value_address (value);
8ee511af 4478 gdbarch_address_to_pointer (type->arch (), type, buf, addr);
34877895 4479 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
438c98a1
JB
4480 return addr;
4481}
4482
14f9c5c9 4483
4c4b4cd2
PH
4484/* Push a descriptor of type TYPE for array value ARR on the stack at
4485 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4486 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4487 to-descriptor type rather than a descriptor type), a struct value *
4488 representing a pointer to this descriptor. */
14f9c5c9 4489
d2e4a39e 4490static struct value *
40bc484c 4491make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4492{
d2e4a39e
AS
4493 struct type *bounds_type = desc_bounds_type (type);
4494 struct type *desc_type = desc_base_type (type);
4495 struct value *descriptor = allocate_value (desc_type);
4496 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4497 int i;
d2e4a39e 4498
0963b4bd
MS
4499 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4500 i > 0; i -= 1)
14f9c5c9 4501 {
19f220c3
JK
4502 modify_field (value_type (bounds), value_contents_writeable (bounds),
4503 ada_array_bound (arr, i, 0),
4504 desc_bound_bitpos (bounds_type, i, 0),
4505 desc_bound_bitsize (bounds_type, i, 0));
4506 modify_field (value_type (bounds), value_contents_writeable (bounds),
4507 ada_array_bound (arr, i, 1),
4508 desc_bound_bitpos (bounds_type, i, 1),
4509 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4510 }
d2e4a39e 4511
40bc484c 4512 bounds = ensure_lval (bounds);
d2e4a39e 4513
19f220c3
JK
4514 modify_field (value_type (descriptor),
4515 value_contents_writeable (descriptor),
4516 value_pointer (ensure_lval (arr),
940da03e 4517 desc_type->field (0).type ()),
19f220c3
JK
4518 fat_pntr_data_bitpos (desc_type),
4519 fat_pntr_data_bitsize (desc_type));
4520
4521 modify_field (value_type (descriptor),
4522 value_contents_writeable (descriptor),
4523 value_pointer (bounds,
940da03e 4524 desc_type->field (1).type ()),
19f220c3
JK
4525 fat_pntr_bounds_bitpos (desc_type),
4526 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4527
40bc484c 4528 descriptor = ensure_lval (descriptor);
14f9c5c9 4529
78134374 4530 if (type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
4531 return value_addr (descriptor);
4532 else
4533 return descriptor;
4534}
14f9c5c9 4535\f
dda83cd7 4536 /* Symbol Cache Module */
3d9434b5 4537
3d9434b5 4538/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4539 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4540 on the type of entity being printed, the cache can make it as much
4541 as an order of magnitude faster than without it.
4542
4543 The descriptive type DWARF extension has significantly reduced
4544 the need for this cache, at least when DWARF is being used. However,
4545 even in this case, some expensive name-based symbol searches are still
4546 sometimes necessary - to find an XVZ variable, mostly. */
4547
ee01b665
JB
4548/* Return the symbol cache associated to the given program space PSPACE.
4549 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4550
ee01b665
JB
4551static struct ada_symbol_cache *
4552ada_get_symbol_cache (struct program_space *pspace)
4553{
4554 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4555
bdcccc56
TT
4556 if (pspace_data->sym_cache == nullptr)
4557 pspace_data->sym_cache.reset (new ada_symbol_cache);
ee01b665 4558
bdcccc56 4559 return pspace_data->sym_cache.get ();
ee01b665 4560}
3d9434b5
JB
4561
4562/* Clear all entries from the symbol cache. */
4563
4564static void
bdcccc56 4565ada_clear_symbol_cache ()
3d9434b5 4566{
bdcccc56
TT
4567 struct ada_pspace_data *pspace_data
4568 = get_ada_pspace_data (current_program_space);
ee01b665 4569
bdcccc56
TT
4570 if (pspace_data->sym_cache != nullptr)
4571 pspace_data->sym_cache.reset ();
3d9434b5
JB
4572}
4573
fe978cb0 4574/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4575 Return it if found, or NULL otherwise. */
4576
4577static struct cache_entry **
fe978cb0 4578find_entry (const char *name, domain_enum domain)
3d9434b5 4579{
ee01b665
JB
4580 struct ada_symbol_cache *sym_cache
4581 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4582 int h = msymbol_hash (name) % HASH_SIZE;
4583 struct cache_entry **e;
4584
ee01b665 4585 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4586 {
fe978cb0 4587 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
dda83cd7 4588 return e;
3d9434b5
JB
4589 }
4590 return NULL;
4591}
4592
fe978cb0 4593/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4594 Return 1 if found, 0 otherwise.
4595
4596 If an entry was found and SYM is not NULL, set *SYM to the entry's
4597 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4598
96d887e8 4599static int
fe978cb0 4600lookup_cached_symbol (const char *name, domain_enum domain,
dda83cd7 4601 struct symbol **sym, const struct block **block)
96d887e8 4602{
fe978cb0 4603 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4604
4605 if (e == NULL)
4606 return 0;
4607 if (sym != NULL)
4608 *sym = (*e)->sym;
4609 if (block != NULL)
4610 *block = (*e)->block;
4611 return 1;
96d887e8
PH
4612}
4613
3d9434b5 4614/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4615 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4616
96d887e8 4617static void
fe978cb0 4618cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
dda83cd7 4619 const struct block *block)
96d887e8 4620{
ee01b665
JB
4621 struct ada_symbol_cache *sym_cache
4622 = ada_get_symbol_cache (current_program_space);
3d9434b5 4623 int h;
3d9434b5
JB
4624 struct cache_entry *e;
4625
1994afbf
DE
4626 /* Symbols for builtin types don't have a block.
4627 For now don't cache such symbols. */
4628 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4629 return;
4630
3d9434b5
JB
4631 /* If the symbol is a local symbol, then do not cache it, as a search
4632 for that symbol depends on the context. To determine whether
4633 the symbol is local or not, we check the block where we found it
4634 against the global and static blocks of its associated symtab. */
4635 if (sym
08be3fe3 4636 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4637 GLOBAL_BLOCK) != block
08be3fe3 4638 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4639 STATIC_BLOCK) != block)
3d9434b5
JB
4640 return;
4641
4642 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4643 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4644 e->next = sym_cache->root[h];
4645 sym_cache->root[h] = e;
2ef5453b 4646 e->name = obstack_strdup (&sym_cache->cache_space, name);
3d9434b5 4647 e->sym = sym;
fe978cb0 4648 e->domain = domain;
3d9434b5 4649 e->block = block;
96d887e8 4650}
4c4b4cd2 4651\f
dda83cd7 4652 /* Symbol Lookup */
4c4b4cd2 4653
b5ec771e
PA
4654/* Return the symbol name match type that should be used used when
4655 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4656
4657 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4658 for Ada lookups. */
c0431670 4659
b5ec771e
PA
4660static symbol_name_match_type
4661name_match_type_from_name (const char *lookup_name)
c0431670 4662{
b5ec771e
PA
4663 return (strstr (lookup_name, "__") == NULL
4664 ? symbol_name_match_type::WILD
4665 : symbol_name_match_type::FULL);
c0431670
JB
4666}
4667
4c4b4cd2
PH
4668/* Return the result of a standard (literal, C-like) lookup of NAME in
4669 given DOMAIN, visible from lexical block BLOCK. */
4670
4671static struct symbol *
4672standard_lookup (const char *name, const struct block *block,
dda83cd7 4673 domain_enum domain)
4c4b4cd2 4674{
acbd605d 4675 /* Initialize it just to avoid a GCC false warning. */
6640a367 4676 struct block_symbol sym = {};
4c4b4cd2 4677
d12307c1
PMR
4678 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4679 return sym.symbol;
a2cd4f14 4680 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4681 cache_symbol (name, domain, sym.symbol, sym.block);
4682 return sym.symbol;
4c4b4cd2
PH
4683}
4684
4685
4686/* Non-zero iff there is at least one non-function/non-enumeral symbol
1bfa81ac 4687 in the symbol fields of SYMS. We treat enumerals as functions,
4c4b4cd2
PH
4688 since they contend in overloading in the same way. */
4689static int
d1183b06 4690is_nonfunction (const std::vector<struct block_symbol> &syms)
4c4b4cd2 4691{
d1183b06
TT
4692 for (const block_symbol &sym : syms)
4693 if (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_FUNC
4694 && (SYMBOL_TYPE (sym.symbol)->code () != TYPE_CODE_ENUM
4695 || SYMBOL_CLASS (sym.symbol) != LOC_CONST))
14f9c5c9
AS
4696 return 1;
4697
4698 return 0;
4699}
4700
4701/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4702 struct types. Otherwise, they may not. */
14f9c5c9
AS
4703
4704static int
d2e4a39e 4705equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4706{
d2e4a39e 4707 if (type0 == type1)
14f9c5c9 4708 return 1;
d2e4a39e 4709 if (type0 == NULL || type1 == NULL
78134374 4710 || type0->code () != type1->code ())
14f9c5c9 4711 return 0;
78134374
SM
4712 if ((type0->code () == TYPE_CODE_STRUCT
4713 || type0->code () == TYPE_CODE_ENUM)
14f9c5c9 4714 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4715 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4716 return 1;
d2e4a39e 4717
14f9c5c9
AS
4718 return 0;
4719}
4720
4721/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4722 no more defined than that of SYM1. */
14f9c5c9
AS
4723
4724static int
d2e4a39e 4725lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4726{
4727 if (sym0 == sym1)
4728 return 1;
176620f1 4729 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4730 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4731 return 0;
4732
d2e4a39e 4733 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4734 {
4735 case LOC_UNDEF:
4736 return 1;
4737 case LOC_TYPEDEF:
4738 {
dda83cd7
SM
4739 struct type *type0 = SYMBOL_TYPE (sym0);
4740 struct type *type1 = SYMBOL_TYPE (sym1);
4741 const char *name0 = sym0->linkage_name ();
4742 const char *name1 = sym1->linkage_name ();
4743 int len0 = strlen (name0);
4744
4745 return
4746 type0->code () == type1->code ()
4747 && (equiv_types (type0, type1)
4748 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
4749 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4750 }
4751 case LOC_CONST:
4752 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
dda83cd7 4753 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4b610737
TT
4754
4755 case LOC_STATIC:
4756 {
dda83cd7
SM
4757 const char *name0 = sym0->linkage_name ();
4758 const char *name1 = sym1->linkage_name ();
4759 return (strcmp (name0, name1) == 0
4760 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4b610737
TT
4761 }
4762
d2e4a39e
AS
4763 default:
4764 return 0;
14f9c5c9
AS
4765 }
4766}
4767
d1183b06
TT
4768/* Append (SYM,BLOCK) to the end of the array of struct block_symbol
4769 records in RESULT. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4770
4771static void
d1183b06 4772add_defn_to_vec (std::vector<struct block_symbol> &result,
dda83cd7
SM
4773 struct symbol *sym,
4774 const struct block *block)
14f9c5c9 4775{
529cad9c
PH
4776 /* Do not try to complete stub types, as the debugger is probably
4777 already scanning all symbols matching a certain name at the
4778 time when this function is called. Trying to replace the stub
4779 type by its associated full type will cause us to restart a scan
4780 which may lead to an infinite recursion. Instead, the client
4781 collecting the matching symbols will end up collecting several
4782 matches, with at least one of them complete. It can then filter
4783 out the stub ones if needed. */
4784
d1183b06 4785 for (int i = result.size () - 1; i >= 0; i -= 1)
4c4b4cd2 4786 {
d1183b06 4787 if (lesseq_defined_than (sym, result[i].symbol))
dda83cd7 4788 return;
d1183b06 4789 else if (lesseq_defined_than (result[i].symbol, sym))
dda83cd7 4790 {
d1183b06
TT
4791 result[i].symbol = sym;
4792 result[i].block = block;
dda83cd7
SM
4793 return;
4794 }
4c4b4cd2
PH
4795 }
4796
d1183b06
TT
4797 struct block_symbol info;
4798 info.symbol = sym;
4799 info.block = block;
4800 result.push_back (info);
4c4b4cd2
PH
4801}
4802
7c7b6655
TT
4803/* Return a bound minimal symbol matching NAME according to Ada
4804 decoding rules. Returns an invalid symbol if there is no such
4805 minimal symbol. Names prefixed with "standard__" are handled
4806 specially: "standard__" is first stripped off, and only static and
4807 global symbols are searched. */
4c4b4cd2 4808
7c7b6655 4809struct bound_minimal_symbol
96d887e8 4810ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4811{
7c7b6655 4812 struct bound_minimal_symbol result;
4c4b4cd2 4813
7c7b6655
TT
4814 memset (&result, 0, sizeof (result));
4815
b5ec771e
PA
4816 symbol_name_match_type match_type = name_match_type_from_name (name);
4817 lookup_name_info lookup_name (name, match_type);
4818
4819 symbol_name_matcher_ftype *match_name
4820 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4821
2030c079 4822 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4823 {
7932255d 4824 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf 4825 {
c9d95fa3 4826 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
5325b9bf
TT
4827 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4828 {
4829 result.minsym = msymbol;
4830 result.objfile = objfile;
4831 break;
4832 }
4833 }
4834 }
4c4b4cd2 4835
7c7b6655 4836 return result;
96d887e8 4837}
4c4b4cd2 4838
96d887e8
PH
4839/* For all subprograms that statically enclose the subprogram of the
4840 selected frame, add symbols matching identifier NAME in DOMAIN
1bfa81ac 4841 and their blocks to the list of data in RESULT, as for
48b78332
JB
4842 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4843 with a wildcard prefix. */
4c4b4cd2 4844
96d887e8 4845static void
d1183b06 4846add_symbols_from_enclosing_procs (std::vector<struct block_symbol> &result,
b5ec771e
PA
4847 const lookup_name_info &lookup_name,
4848 domain_enum domain)
96d887e8 4849{
96d887e8 4850}
14f9c5c9 4851
96d887e8
PH
4852/* True if TYPE is definitely an artificial type supplied to a symbol
4853 for which no debugging information was given in the symbol file. */
14f9c5c9 4854
96d887e8
PH
4855static int
4856is_nondebugging_type (struct type *type)
4857{
0d5cff50 4858 const char *name = ada_type_name (type);
5b4ee69b 4859
96d887e8
PH
4860 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4861}
4c4b4cd2 4862
8f17729f
JB
4863/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4864 that are deemed "identical" for practical purposes.
4865
4866 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4867 types and that their number of enumerals is identical (in other
1f704f76 4868 words, type1->num_fields () == type2->num_fields ()). */
8f17729f
JB
4869
4870static int
4871ada_identical_enum_types_p (struct type *type1, struct type *type2)
4872{
4873 int i;
4874
4875 /* The heuristic we use here is fairly conservative. We consider
4876 that 2 enumerate types are identical if they have the same
4877 number of enumerals and that all enumerals have the same
4878 underlying value and name. */
4879
4880 /* All enums in the type should have an identical underlying value. */
1f704f76 4881 for (i = 0; i < type1->num_fields (); i++)
14e75d8e 4882 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4883 return 0;
4884
4885 /* All enumerals should also have the same name (modulo any numerical
4886 suffix). */
1f704f76 4887 for (i = 0; i < type1->num_fields (); i++)
8f17729f 4888 {
0d5cff50
DE
4889 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4890 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4891 int len_1 = strlen (name_1);
4892 int len_2 = strlen (name_2);
4893
4894 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4895 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4896 if (len_1 != len_2
dda83cd7 4897 || strncmp (TYPE_FIELD_NAME (type1, i),
8f17729f
JB
4898 TYPE_FIELD_NAME (type2, i),
4899 len_1) != 0)
4900 return 0;
4901 }
4902
4903 return 1;
4904}
4905
4906/* Return nonzero if all the symbols in SYMS are all enumeral symbols
4907 that are deemed "identical" for practical purposes. Sometimes,
4908 enumerals are not strictly identical, but their types are so similar
4909 that they can be considered identical.
4910
4911 For instance, consider the following code:
4912
4913 type Color is (Black, Red, Green, Blue, White);
4914 type RGB_Color is new Color range Red .. Blue;
4915
4916 Type RGB_Color is a subrange of an implicit type which is a copy
4917 of type Color. If we call that implicit type RGB_ColorB ("B" is
4918 for "Base Type"), then type RGB_ColorB is a copy of type Color.
4919 As a result, when an expression references any of the enumeral
4920 by name (Eg. "print green"), the expression is technically
4921 ambiguous and the user should be asked to disambiguate. But
4922 doing so would only hinder the user, since it wouldn't matter
4923 what choice he makes, the outcome would always be the same.
4924 So, for practical purposes, we consider them as the same. */
4925
4926static int
54d343a2 4927symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
4928{
4929 int i;
4930
4931 /* Before performing a thorough comparison check of each type,
4932 we perform a series of inexpensive checks. We expect that these
4933 checks will quickly fail in the vast majority of cases, and thus
4934 help prevent the unnecessary use of a more expensive comparison.
4935 Said comparison also expects us to make some of these checks
4936 (see ada_identical_enum_types_p). */
4937
4938 /* Quick check: All symbols should have an enum type. */
54d343a2 4939 for (i = 0; i < syms.size (); i++)
78134374 4940 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
8f17729f
JB
4941 return 0;
4942
4943 /* Quick check: They should all have the same value. */
54d343a2 4944 for (i = 1; i < syms.size (); i++)
d12307c1 4945 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
4946 return 0;
4947
4948 /* Quick check: They should all have the same number of enumerals. */
54d343a2 4949 for (i = 1; i < syms.size (); i++)
1f704f76 4950 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
dda83cd7 4951 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
8f17729f
JB
4952 return 0;
4953
4954 /* All the sanity checks passed, so we might have a set of
4955 identical enumeration types. Perform a more complete
4956 comparison of the type of each symbol. */
54d343a2 4957 for (i = 1; i < syms.size (); i++)
d12307c1 4958 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
dda83cd7 4959 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
4960 return 0;
4961
4962 return 1;
4963}
4964
54d343a2 4965/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
4966 duplicate other symbols in the list (The only case I know of where
4967 this happens is when object files containing stabs-in-ecoff are
4968 linked with files containing ordinary ecoff debugging symbols (or no
1bfa81ac 4969 debugging symbols)). Modifies SYMS to squeeze out deleted entries. */
4c4b4cd2 4970
d1183b06 4971static void
54d343a2 4972remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
4973{
4974 int i, j;
4c4b4cd2 4975
8f17729f
JB
4976 /* We should never be called with less than 2 symbols, as there
4977 cannot be any extra symbol in that case. But it's easy to
4978 handle, since we have nothing to do in that case. */
54d343a2 4979 if (syms->size () < 2)
d1183b06 4980 return;
8f17729f 4981
96d887e8 4982 i = 0;
54d343a2 4983 while (i < syms->size ())
96d887e8 4984 {
a35ddb44 4985 int remove_p = 0;
339c13b6
JB
4986
4987 /* If two symbols have the same name and one of them is a stub type,
dda83cd7 4988 the get rid of the stub. */
339c13b6 4989
e46d3488 4990 if (SYMBOL_TYPE ((*syms)[i].symbol)->is_stub ()
dda83cd7
SM
4991 && (*syms)[i].symbol->linkage_name () != NULL)
4992 {
4993 for (j = 0; j < syms->size (); j++)
4994 {
4995 if (j != i
4996 && !SYMBOL_TYPE ((*syms)[j].symbol)->is_stub ()
4997 && (*syms)[j].symbol->linkage_name () != NULL
4998 && strcmp ((*syms)[i].symbol->linkage_name (),
4999 (*syms)[j].symbol->linkage_name ()) == 0)
5000 remove_p = 1;
5001 }
5002 }
339c13b6
JB
5003
5004 /* Two symbols with the same name, same class and same address
dda83cd7 5005 should be identical. */
339c13b6 5006
987012b8 5007 else if ((*syms)[i].symbol->linkage_name () != NULL
dda83cd7
SM
5008 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5009 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
5010 {
5011 for (j = 0; j < syms->size (); j += 1)
5012 {
5013 if (i != j
5014 && (*syms)[j].symbol->linkage_name () != NULL
5015 && strcmp ((*syms)[i].symbol->linkage_name (),
5016 (*syms)[j].symbol->linkage_name ()) == 0
5017 && SYMBOL_CLASS ((*syms)[i].symbol)
54d343a2 5018 == SYMBOL_CLASS ((*syms)[j].symbol)
dda83cd7
SM
5019 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5020 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
5021 remove_p = 1;
5022 }
5023 }
339c13b6 5024
a35ddb44 5025 if (remove_p)
54d343a2 5026 syms->erase (syms->begin () + i);
1b788fb6
TT
5027 else
5028 i += 1;
14f9c5c9 5029 }
8f17729f
JB
5030
5031 /* If all the remaining symbols are identical enumerals, then
5032 just keep the first one and discard the rest.
5033
5034 Unlike what we did previously, we do not discard any entry
5035 unless they are ALL identical. This is because the symbol
5036 comparison is not a strict comparison, but rather a practical
5037 comparison. If all symbols are considered identical, then
5038 we can just go ahead and use the first one and discard the rest.
5039 But if we cannot reduce the list to a single element, we have
5040 to ask the user to disambiguate anyways. And if we have to
5041 present a multiple-choice menu, it's less confusing if the list
5042 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5043 if (symbols_are_identical_enums (*syms))
5044 syms->resize (1);
14f9c5c9
AS
5045}
5046
96d887e8
PH
5047/* Given a type that corresponds to a renaming entity, use the type name
5048 to extract the scope (package name or function name, fully qualified,
5049 and following the GNAT encoding convention) where this renaming has been
49d83361 5050 defined. */
4c4b4cd2 5051
49d83361 5052static std::string
96d887e8 5053xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5054{
96d887e8 5055 /* The renaming types adhere to the following convention:
0963b4bd 5056 <scope>__<rename>___<XR extension>.
96d887e8
PH
5057 So, to extract the scope, we search for the "___XR" extension,
5058 and then backtrack until we find the first "__". */
76a01679 5059
7d93a1e0 5060 const char *name = renaming_type->name ();
108d56a4
SM
5061 const char *suffix = strstr (name, "___XR");
5062 const char *last;
14f9c5c9 5063
96d887e8
PH
5064 /* Now, backtrack a bit until we find the first "__". Start looking
5065 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5066
96d887e8
PH
5067 for (last = suffix - 3; last > name; last--)
5068 if (last[0] == '_' && last[1] == '_')
5069 break;
76a01679 5070
96d887e8 5071 /* Make a copy of scope and return it. */
49d83361 5072 return std::string (name, last);
4c4b4cd2
PH
5073}
5074
96d887e8 5075/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5076
96d887e8
PH
5077static int
5078is_package_name (const char *name)
4c4b4cd2 5079{
96d887e8
PH
5080 /* Here, We take advantage of the fact that no symbols are generated
5081 for packages, while symbols are generated for each function.
5082 So the condition for NAME represent a package becomes equivalent
5083 to NAME not existing in our list of symbols. There is only one
5084 small complication with library-level functions (see below). */
4c4b4cd2 5085
96d887e8
PH
5086 /* If it is a function that has not been defined at library level,
5087 then we should be able to look it up in the symbols. */
5088 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5089 return 0;
14f9c5c9 5090
96d887e8
PH
5091 /* Library-level function names start with "_ada_". See if function
5092 "_ada_" followed by NAME can be found. */
14f9c5c9 5093
96d887e8 5094 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5095 functions names cannot contain "__" in them. */
96d887e8
PH
5096 if (strstr (name, "__") != NULL)
5097 return 0;
4c4b4cd2 5098
528e1572 5099 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5100
528e1572 5101 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5102}
14f9c5c9 5103
96d887e8 5104/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5105 not visible from FUNCTION_NAME. */
14f9c5c9 5106
96d887e8 5107static int
0d5cff50 5108old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5109{
aeb5907d
JB
5110 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5111 return 0;
5112
49d83361 5113 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5114
96d887e8 5115 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5116 if (is_package_name (scope.c_str ()))
5117 return 0;
14f9c5c9 5118
96d887e8
PH
5119 /* Check that the rename is in the current function scope by checking
5120 that its name starts with SCOPE. */
76a01679 5121
96d887e8
PH
5122 /* If the function name starts with "_ada_", it means that it is
5123 a library-level function. Strip this prefix before doing the
5124 comparison, as the encoding for the renaming does not contain
5125 this prefix. */
61012eef 5126 if (startswith (function_name, "_ada_"))
96d887e8 5127 function_name += 5;
f26caa11 5128
49d83361 5129 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5130}
5131
aeb5907d
JB
5132/* Remove entries from SYMS that corresponds to a renaming entity that
5133 is not visible from the function associated with CURRENT_BLOCK or
5134 that is superfluous due to the presence of more specific renaming
5135 information. Places surviving symbols in the initial entries of
d1183b06
TT
5136 SYMS.
5137
96d887e8 5138 Rationale:
aeb5907d
JB
5139 First, in cases where an object renaming is implemented as a
5140 reference variable, GNAT may produce both the actual reference
5141 variable and the renaming encoding. In this case, we discard the
5142 latter.
5143
5144 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5145 entity. Unfortunately, STABS currently does not support the definition
5146 of types that are local to a given lexical block, so all renamings types
5147 are emitted at library level. As a consequence, if an application
5148 contains two renaming entities using the same name, and a user tries to
5149 print the value of one of these entities, the result of the ada symbol
5150 lookup will also contain the wrong renaming type.
f26caa11 5151
96d887e8
PH
5152 This function partially covers for this limitation by attempting to
5153 remove from the SYMS list renaming symbols that should be visible
5154 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5155 method with the current information available. The implementation
5156 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5157
5158 - When the user tries to print a rename in a function while there
dda83cd7
SM
5159 is another rename entity defined in a package: Normally, the
5160 rename in the function has precedence over the rename in the
5161 package, so the latter should be removed from the list. This is
5162 currently not the case.
5163
96d887e8 5164 - This function will incorrectly remove valid renames if
dda83cd7
SM
5165 the CURRENT_BLOCK corresponds to a function which symbol name
5166 has been changed by an "Export" pragma. As a consequence,
5167 the user will be unable to print such rename entities. */
4c4b4cd2 5168
d1183b06 5169static void
54d343a2
TT
5170remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5171 const struct block *current_block)
4c4b4cd2
PH
5172{
5173 struct symbol *current_function;
0d5cff50 5174 const char *current_function_name;
4c4b4cd2 5175 int i;
aeb5907d
JB
5176 int is_new_style_renaming;
5177
5178 /* If there is both a renaming foo___XR... encoded as a variable and
5179 a simple variable foo in the same block, discard the latter.
0963b4bd 5180 First, zero out such symbols, then compress. */
aeb5907d 5181 is_new_style_renaming = 0;
54d343a2 5182 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5183 {
54d343a2
TT
5184 struct symbol *sym = (*syms)[i].symbol;
5185 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5186 const char *name;
5187 const char *suffix;
5188
5189 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5190 continue;
987012b8 5191 name = sym->linkage_name ();
aeb5907d
JB
5192 suffix = strstr (name, "___XR");
5193
5194 if (suffix != NULL)
5195 {
5196 int name_len = suffix - name;
5197 int j;
5b4ee69b 5198
aeb5907d 5199 is_new_style_renaming = 1;
54d343a2
TT
5200 for (j = 0; j < syms->size (); j += 1)
5201 if (i != j && (*syms)[j].symbol != NULL
987012b8 5202 && strncmp (name, (*syms)[j].symbol->linkage_name (),
aeb5907d 5203 name_len) == 0
54d343a2
TT
5204 && block == (*syms)[j].block)
5205 (*syms)[j].symbol = NULL;
aeb5907d
JB
5206 }
5207 }
5208 if (is_new_style_renaming)
5209 {
5210 int j, k;
5211
54d343a2
TT
5212 for (j = k = 0; j < syms->size (); j += 1)
5213 if ((*syms)[j].symbol != NULL)
aeb5907d 5214 {
54d343a2 5215 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5216 k += 1;
5217 }
d1183b06
TT
5218 syms->resize (k);
5219 return;
aeb5907d 5220 }
4c4b4cd2
PH
5221
5222 /* Extract the function name associated to CURRENT_BLOCK.
5223 Abort if unable to do so. */
76a01679 5224
4c4b4cd2 5225 if (current_block == NULL)
d1183b06 5226 return;
76a01679 5227
7f0df278 5228 current_function = block_linkage_function (current_block);
4c4b4cd2 5229 if (current_function == NULL)
d1183b06 5230 return;
4c4b4cd2 5231
987012b8 5232 current_function_name = current_function->linkage_name ();
4c4b4cd2 5233 if (current_function_name == NULL)
d1183b06 5234 return;
4c4b4cd2
PH
5235
5236 /* Check each of the symbols, and remove it from the list if it is
5237 a type corresponding to a renaming that is out of the scope of
5238 the current block. */
5239
5240 i = 0;
54d343a2 5241 while (i < syms->size ())
4c4b4cd2 5242 {
54d343a2 5243 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
dda83cd7
SM
5244 == ADA_OBJECT_RENAMING
5245 && old_renaming_is_invisible ((*syms)[i].symbol,
54d343a2
TT
5246 current_function_name))
5247 syms->erase (syms->begin () + i);
4c4b4cd2 5248 else
dda83cd7 5249 i += 1;
4c4b4cd2 5250 }
4c4b4cd2
PH
5251}
5252
d1183b06 5253/* Add to RESULT all symbols from BLOCK (and its super-blocks)
339c13b6
JB
5254 whose name and domain match NAME and DOMAIN respectively.
5255 If no match was found, then extend the search to "enclosing"
5256 routines (in other words, if we're inside a nested function,
5257 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5258 If WILD_MATCH_P is nonzero, perform the naming matching in
5259 "wild" mode (see function "wild_match" for more info).
339c13b6 5260
d1183b06 5261 Note: This function assumes that RESULT has 0 (zero) element in it. */
339c13b6
JB
5262
5263static void
d1183b06 5264ada_add_local_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5265 const lookup_name_info &lookup_name,
5266 const struct block *block, domain_enum domain)
339c13b6
JB
5267{
5268 int block_depth = 0;
5269
5270 while (block != NULL)
5271 {
5272 block_depth += 1;
d1183b06 5273 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
339c13b6
JB
5274
5275 /* If we found a non-function match, assume that's the one. */
d1183b06 5276 if (is_nonfunction (result))
dda83cd7 5277 return;
339c13b6
JB
5278
5279 block = BLOCK_SUPERBLOCK (block);
5280 }
5281
5282 /* If no luck so far, try to find NAME as a local symbol in some lexically
5283 enclosing subprogram. */
d1183b06
TT
5284 if (result.empty () && block_depth > 2)
5285 add_symbols_from_enclosing_procs (result, lookup_name, domain);
339c13b6
JB
5286}
5287
ccefe4c4 5288/* An object of this type is used as the user_data argument when
40658b94 5289 calling the map_matching_symbols method. */
ccefe4c4 5290
40658b94 5291struct match_data
ccefe4c4 5292{
1bfa81ac
TT
5293 explicit match_data (std::vector<struct block_symbol> *rp)
5294 : resultp (rp)
5295 {
5296 }
5297 DISABLE_COPY_AND_ASSIGN (match_data);
5298
5299 struct objfile *objfile = nullptr;
d1183b06 5300 std::vector<struct block_symbol> *resultp;
1bfa81ac 5301 struct symbol *arg_sym = nullptr;
1178743e 5302 bool found_sym = false;
ccefe4c4
TT
5303};
5304
199b4314
TT
5305/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5306 to a list of symbols. DATA is a pointer to a struct match_data *
1bfa81ac 5307 containing the vector that collects the symbol list, the file that SYM
40658b94
PH
5308 must come from, a flag indicating whether a non-argument symbol has
5309 been found in the current block, and the last argument symbol
5310 passed in SYM within the current block (if any). When SYM is null,
5311 marking the end of a block, the argument symbol is added if no
5312 other has been found. */
ccefe4c4 5313
199b4314
TT
5314static bool
5315aux_add_nonlocal_symbols (struct block_symbol *bsym,
5316 struct match_data *data)
ccefe4c4 5317{
199b4314
TT
5318 const struct block *block = bsym->block;
5319 struct symbol *sym = bsym->symbol;
5320
40658b94
PH
5321 if (sym == NULL)
5322 {
5323 if (!data->found_sym && data->arg_sym != NULL)
d1183b06 5324 add_defn_to_vec (*data->resultp,
40658b94
PH
5325 fixup_symbol_section (data->arg_sym, data->objfile),
5326 block);
1178743e 5327 data->found_sym = false;
40658b94
PH
5328 data->arg_sym = NULL;
5329 }
5330 else
5331 {
5332 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
199b4314 5333 return true;
40658b94
PH
5334 else if (SYMBOL_IS_ARGUMENT (sym))
5335 data->arg_sym = sym;
5336 else
5337 {
1178743e 5338 data->found_sym = true;
d1183b06 5339 add_defn_to_vec (*data->resultp,
40658b94
PH
5340 fixup_symbol_section (sym, data->objfile),
5341 block);
5342 }
5343 }
199b4314 5344 return true;
40658b94
PH
5345}
5346
b5ec771e
PA
5347/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5348 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
1bfa81ac 5349 symbols to RESULT. Return whether we found such symbols. */
22cee43f
PMR
5350
5351static int
d1183b06 5352ada_add_block_renamings (std::vector<struct block_symbol> &result,
22cee43f 5353 const struct block *block,
b5ec771e
PA
5354 const lookup_name_info &lookup_name,
5355 domain_enum domain)
22cee43f
PMR
5356{
5357 struct using_direct *renaming;
d1183b06 5358 int defns_mark = result.size ();
22cee43f 5359
b5ec771e
PA
5360 symbol_name_matcher_ftype *name_match
5361 = ada_get_symbol_name_matcher (lookup_name);
5362
22cee43f
PMR
5363 for (renaming = block_using (block);
5364 renaming != NULL;
5365 renaming = renaming->next)
5366 {
5367 const char *r_name;
22cee43f
PMR
5368
5369 /* Avoid infinite recursions: skip this renaming if we are actually
5370 already traversing it.
5371
5372 Currently, symbol lookup in Ada don't use the namespace machinery from
5373 C++/Fortran support: skip namespace imports that use them. */
5374 if (renaming->searched
5375 || (renaming->import_src != NULL
5376 && renaming->import_src[0] != '\0')
5377 || (renaming->import_dest != NULL
5378 && renaming->import_dest[0] != '\0'))
5379 continue;
5380 renaming->searched = 1;
5381
5382 /* TODO: here, we perform another name-based symbol lookup, which can
5383 pull its own multiple overloads. In theory, we should be able to do
5384 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5385 not a simple name. But in order to do this, we would need to enhance
5386 the DWARF reader to associate a symbol to this renaming, instead of a
5387 name. So, for now, we do something simpler: re-use the C++/Fortran
5388 namespace machinery. */
5389 r_name = (renaming->alias != NULL
5390 ? renaming->alias
5391 : renaming->declaration);
b5ec771e
PA
5392 if (name_match (r_name, lookup_name, NULL))
5393 {
5394 lookup_name_info decl_lookup_name (renaming->declaration,
5395 lookup_name.match_type ());
d1183b06 5396 ada_add_all_symbols (result, block, decl_lookup_name, domain,
b5ec771e
PA
5397 1, NULL);
5398 }
22cee43f
PMR
5399 renaming->searched = 0;
5400 }
d1183b06 5401 return result.size () != defns_mark;
22cee43f
PMR
5402}
5403
db230ce3
JB
5404/* Implements compare_names, but only applying the comparision using
5405 the given CASING. */
5b4ee69b 5406
40658b94 5407static int
db230ce3
JB
5408compare_names_with_case (const char *string1, const char *string2,
5409 enum case_sensitivity casing)
40658b94
PH
5410{
5411 while (*string1 != '\0' && *string2 != '\0')
5412 {
db230ce3
JB
5413 char c1, c2;
5414
40658b94
PH
5415 if (isspace (*string1) || isspace (*string2))
5416 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5417
5418 if (casing == case_sensitive_off)
5419 {
5420 c1 = tolower (*string1);
5421 c2 = tolower (*string2);
5422 }
5423 else
5424 {
5425 c1 = *string1;
5426 c2 = *string2;
5427 }
5428 if (c1 != c2)
40658b94 5429 break;
db230ce3 5430
40658b94
PH
5431 string1 += 1;
5432 string2 += 1;
5433 }
db230ce3 5434
40658b94
PH
5435 switch (*string1)
5436 {
5437 case '(':
5438 return strcmp_iw_ordered (string1, string2);
5439 case '_':
5440 if (*string2 == '\0')
5441 {
052874e8 5442 if (is_name_suffix (string1))
40658b94
PH
5443 return 0;
5444 else
1a1d5513 5445 return 1;
40658b94 5446 }
dbb8534f 5447 /* FALLTHROUGH */
40658b94
PH
5448 default:
5449 if (*string2 == '(')
5450 return strcmp_iw_ordered (string1, string2);
5451 else
db230ce3
JB
5452 {
5453 if (casing == case_sensitive_off)
5454 return tolower (*string1) - tolower (*string2);
5455 else
5456 return *string1 - *string2;
5457 }
40658b94 5458 }
ccefe4c4
TT
5459}
5460
db230ce3
JB
5461/* Compare STRING1 to STRING2, with results as for strcmp.
5462 Compatible with strcmp_iw_ordered in that...
5463
5464 strcmp_iw_ordered (STRING1, STRING2) <= 0
5465
5466 ... implies...
5467
5468 compare_names (STRING1, STRING2) <= 0
5469
5470 (they may differ as to what symbols compare equal). */
5471
5472static int
5473compare_names (const char *string1, const char *string2)
5474{
5475 int result;
5476
5477 /* Similar to what strcmp_iw_ordered does, we need to perform
5478 a case-insensitive comparison first, and only resort to
5479 a second, case-sensitive, comparison if the first one was
5480 not sufficient to differentiate the two strings. */
5481
5482 result = compare_names_with_case (string1, string2, case_sensitive_off);
5483 if (result == 0)
5484 result = compare_names_with_case (string1, string2, case_sensitive_on);
5485
5486 return result;
5487}
5488
b5ec771e
PA
5489/* Convenience function to get at the Ada encoded lookup name for
5490 LOOKUP_NAME, as a C string. */
5491
5492static const char *
5493ada_lookup_name (const lookup_name_info &lookup_name)
5494{
5495 return lookup_name.ada ().lookup_name ().c_str ();
5496}
5497
1bfa81ac 5498/* Add to RESULT all non-local symbols whose name and domain match
b5ec771e
PA
5499 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5500 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5501 symbols otherwise. */
339c13b6
JB
5502
5503static void
d1183b06 5504add_nonlocal_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5505 const lookup_name_info &lookup_name,
5506 domain_enum domain, int global)
339c13b6 5507{
1bfa81ac 5508 struct match_data data (&result);
339c13b6 5509
b5ec771e
PA
5510 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5511
199b4314
TT
5512 auto callback = [&] (struct block_symbol *bsym)
5513 {
5514 return aux_add_nonlocal_symbols (bsym, &data);
5515 };
5516
2030c079 5517 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5518 {
5519 data.objfile = objfile;
5520
1228719f
TT
5521 if (objfile->sf != nullptr)
5522 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5523 domain, global, callback,
5524 (is_wild_match
5525 ? NULL : compare_names));
22cee43f 5526
b669c953 5527 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5528 {
5529 const struct block *global_block
5530 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5531
d1183b06 5532 if (ada_add_block_renamings (result, global_block, lookup_name,
b5ec771e 5533 domain))
1178743e 5534 data.found_sym = true;
22cee43f 5535 }
40658b94
PH
5536 }
5537
d1183b06 5538 if (result.empty () && global && !is_wild_match)
40658b94 5539 {
b5ec771e 5540 const char *name = ada_lookup_name (lookup_name);
e0802d59
TT
5541 std::string bracket_name = std::string ("<_ada_") + name + '>';
5542 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
b5ec771e 5543
2030c079 5544 for (objfile *objfile : current_program_space->objfiles ())
dda83cd7 5545 {
40658b94 5546 data.objfile = objfile;
1228719f
TT
5547 if (objfile->sf != nullptr)
5548 objfile->sf->qf->map_matching_symbols (objfile, name1,
5549 domain, global, callback,
5550 compare_names);
40658b94
PH
5551 }
5552 }
339c13b6
JB
5553}
5554
b5ec771e
PA
5555/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5556 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
1bfa81ac 5557 returning the number of matches. Add these to RESULT.
4eeaa230 5558
22cee43f
PMR
5559 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5560 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5561 is the one match returned (no other matches in that or
d9680e73 5562 enclosing blocks is returned). If there are any matches in or
22cee43f 5563 surrounding BLOCK, then these alone are returned.
4eeaa230 5564
b5ec771e
PA
5565 Names prefixed with "standard__" are handled specially:
5566 "standard__" is first stripped off (by the lookup_name
5567 constructor), and only static and global symbols are searched.
14f9c5c9 5568
22cee43f
PMR
5569 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5570 to lookup global symbols. */
5571
5572static void
d1183b06 5573ada_add_all_symbols (std::vector<struct block_symbol> &result,
22cee43f 5574 const struct block *block,
b5ec771e 5575 const lookup_name_info &lookup_name,
22cee43f
PMR
5576 domain_enum domain,
5577 int full_search,
5578 int *made_global_lookup_p)
14f9c5c9
AS
5579{
5580 struct symbol *sym;
14f9c5c9 5581
22cee43f
PMR
5582 if (made_global_lookup_p)
5583 *made_global_lookup_p = 0;
339c13b6
JB
5584
5585 /* Special case: If the user specifies a symbol name inside package
5586 Standard, do a non-wild matching of the symbol name without
5587 the "standard__" prefix. This was primarily introduced in order
5588 to allow the user to specifically access the standard exceptions
5589 using, for instance, Standard.Constraint_Error when Constraint_Error
5590 is ambiguous (due to the user defining its own Constraint_Error
5591 entity inside its program). */
b5ec771e
PA
5592 if (lookup_name.ada ().standard_p ())
5593 block = NULL;
4c4b4cd2 5594
339c13b6 5595 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5596
4eeaa230
DE
5597 if (block != NULL)
5598 {
5599 if (full_search)
d1183b06 5600 ada_add_local_symbols (result, lookup_name, block, domain);
4eeaa230
DE
5601 else
5602 {
5603 /* In the !full_search case we're are being called by
4009ee92 5604 iterate_over_symbols, and we don't want to search
4eeaa230 5605 superblocks. */
d1183b06 5606 ada_add_block_symbols (result, block, lookup_name, domain, NULL);
4eeaa230 5607 }
d1183b06 5608 if (!result.empty () || !full_search)
22cee43f 5609 return;
4eeaa230 5610 }
d2e4a39e 5611
339c13b6
JB
5612 /* No non-global symbols found. Check our cache to see if we have
5613 already performed this search before. If we have, then return
5614 the same result. */
5615
b5ec771e
PA
5616 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5617 domain, &sym, &block))
4c4b4cd2
PH
5618 {
5619 if (sym != NULL)
d1183b06 5620 add_defn_to_vec (result, sym, block);
22cee43f 5621 return;
4c4b4cd2 5622 }
14f9c5c9 5623
22cee43f
PMR
5624 if (made_global_lookup_p)
5625 *made_global_lookup_p = 1;
b1eedac9 5626
339c13b6
JB
5627 /* Search symbols from all global blocks. */
5628
d1183b06 5629 add_nonlocal_symbols (result, lookup_name, domain, 1);
d2e4a39e 5630
4c4b4cd2 5631 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5632 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5633
d1183b06
TT
5634 if (result.empty ())
5635 add_nonlocal_symbols (result, lookup_name, domain, 0);
22cee43f
PMR
5636}
5637
b5ec771e 5638/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
d1183b06
TT
5639 is non-zero, enclosing scope and in global scopes.
5640
5641 Returns (SYM,BLOCK) tuples, indicating the symbols found and the
5642 blocks and symbol tables (if any) in which they were found.
22cee43f
PMR
5643
5644 When full_search is non-zero, any non-function/non-enumeral
5645 symbol match within the nest of blocks whose innermost member is BLOCK,
5646 is the one match returned (no other matches in that or
5647 enclosing blocks is returned). If there are any matches in or
5648 surrounding BLOCK, then these alone are returned.
5649
5650 Names prefixed with "standard__" are handled specially: "standard__"
5651 is first stripped off, and only static and global symbols are searched. */
5652
d1183b06 5653static std::vector<struct block_symbol>
b5ec771e
PA
5654ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5655 const struct block *block,
22cee43f 5656 domain_enum domain,
22cee43f
PMR
5657 int full_search)
5658{
22cee43f 5659 int syms_from_global_search;
d1183b06 5660 std::vector<struct block_symbol> results;
22cee43f 5661
d1183b06 5662 ada_add_all_symbols (results, block, lookup_name,
b5ec771e 5663 domain, full_search, &syms_from_global_search);
14f9c5c9 5664
d1183b06 5665 remove_extra_symbols (&results);
4c4b4cd2 5666
d1183b06 5667 if (results.empty () && full_search && syms_from_global_search)
b5ec771e 5668 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5669
d1183b06 5670 if (results.size () == 1 && full_search && syms_from_global_search)
b5ec771e 5671 cache_symbol (ada_lookup_name (lookup_name), domain,
d1183b06 5672 results[0].symbol, results[0].block);
ec6a20c2 5673
d1183b06
TT
5674 remove_irrelevant_renamings (&results, block);
5675 return results;
14f9c5c9
AS
5676}
5677
b5ec771e 5678/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
d1183b06 5679 in global scopes, returning (SYM,BLOCK) tuples.
ec6a20c2 5680
4eeaa230
DE
5681 See ada_lookup_symbol_list_worker for further details. */
5682
d1183b06 5683std::vector<struct block_symbol>
b5ec771e 5684ada_lookup_symbol_list (const char *name, const struct block *block,
d1183b06 5685 domain_enum domain)
4eeaa230 5686{
b5ec771e
PA
5687 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5688 lookup_name_info lookup_name (name, name_match_type);
5689
d1183b06 5690 return ada_lookup_symbol_list_worker (lookup_name, block, domain, 1);
4eeaa230
DE
5691}
5692
4e5c77fe
JB
5693/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5694 to 1, but choosing the first symbol found if there are multiple
5695 choices.
5696
5e2336be
JB
5697 The result is stored in *INFO, which must be non-NULL.
5698 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5699
5700void
5701ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5702 domain_enum domain,
d12307c1 5703 struct block_symbol *info)
14f9c5c9 5704{
b5ec771e
PA
5705 /* Since we already have an encoded name, wrap it in '<>' to force a
5706 verbatim match. Otherwise, if the name happens to not look like
5707 an encoded name (because it doesn't include a "__"),
5708 ada_lookup_name_info would re-encode/fold it again, and that
5709 would e.g., incorrectly lowercase object renaming names like
5710 "R28b" -> "r28b". */
12932e2c 5711 std::string verbatim = add_angle_brackets (name);
b5ec771e 5712
5e2336be 5713 gdb_assert (info != NULL);
65392b3e 5714 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
4e5c77fe 5715}
aeb5907d
JB
5716
5717/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5718 scope and in global scopes, or NULL if none. NAME is folded and
5719 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
65392b3e 5720 choosing the first symbol if there are multiple choices. */
4e5c77fe 5721
d12307c1 5722struct block_symbol
aeb5907d 5723ada_lookup_symbol (const char *name, const struct block *block0,
dda83cd7 5724 domain_enum domain)
aeb5907d 5725{
d1183b06
TT
5726 std::vector<struct block_symbol> candidates
5727 = ada_lookup_symbol_list (name, block0, domain);
f98fc17b 5728
d1183b06 5729 if (candidates.empty ())
54d343a2 5730 return {};
f98fc17b
PA
5731
5732 block_symbol info = candidates[0];
5733 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5734 return info;
4c4b4cd2 5735}
14f9c5c9 5736
14f9c5c9 5737
4c4b4cd2
PH
5738/* True iff STR is a possible encoded suffix of a normal Ada name
5739 that is to be ignored for matching purposes. Suffixes of parallel
5740 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5741 are given by any of the regular expressions:
4c4b4cd2 5742
babe1480
JB
5743 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5744 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5745 TKB [subprogram suffix for task bodies]
babe1480 5746 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5747 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5748
5749 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5750 match is performed. This sequence is used to differentiate homonyms,
5751 is an optional part of a valid name suffix. */
4c4b4cd2 5752
14f9c5c9 5753static int
d2e4a39e 5754is_name_suffix (const char *str)
14f9c5c9
AS
5755{
5756 int k;
4c4b4cd2
PH
5757 const char *matching;
5758 const int len = strlen (str);
5759
babe1480
JB
5760 /* Skip optional leading __[0-9]+. */
5761
4c4b4cd2
PH
5762 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5763 {
babe1480
JB
5764 str += 3;
5765 while (isdigit (str[0]))
dda83cd7 5766 str += 1;
4c4b4cd2 5767 }
babe1480
JB
5768
5769 /* [.$][0-9]+ */
4c4b4cd2 5770
babe1480 5771 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5772 {
babe1480 5773 matching = str + 1;
4c4b4cd2 5774 while (isdigit (matching[0]))
dda83cd7 5775 matching += 1;
4c4b4cd2 5776 if (matching[0] == '\0')
dda83cd7 5777 return 1;
4c4b4cd2
PH
5778 }
5779
5780 /* ___[0-9]+ */
babe1480 5781
4c4b4cd2
PH
5782 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5783 {
5784 matching = str + 3;
5785 while (isdigit (matching[0]))
dda83cd7 5786 matching += 1;
4c4b4cd2 5787 if (matching[0] == '\0')
dda83cd7 5788 return 1;
4c4b4cd2
PH
5789 }
5790
9ac7f98e
JB
5791 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5792
5793 if (strcmp (str, "TKB") == 0)
5794 return 1;
5795
529cad9c
PH
5796#if 0
5797 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5798 with a N at the end. Unfortunately, the compiler uses the same
5799 convention for other internal types it creates. So treating
529cad9c 5800 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5801 some regressions. For instance, consider the case of an enumerated
5802 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5803 name ends with N.
5804 Having a single character like this as a suffix carrying some
0963b4bd 5805 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5806 to be something like "_N" instead. In the meantime, do not do
5807 the following check. */
5808 /* Protected Object Subprograms */
5809 if (len == 1 && str [0] == 'N')
5810 return 1;
5811#endif
5812
5813 /* _E[0-9]+[bs]$ */
5814 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5815 {
5816 matching = str + 3;
5817 while (isdigit (matching[0]))
dda83cd7 5818 matching += 1;
529cad9c 5819 if ((matching[0] == 'b' || matching[0] == 's')
dda83cd7
SM
5820 && matching [1] == '\0')
5821 return 1;
529cad9c
PH
5822 }
5823
4c4b4cd2
PH
5824 /* ??? We should not modify STR directly, as we are doing below. This
5825 is fine in this case, but may become problematic later if we find
5826 that this alternative did not work, and want to try matching
5827 another one from the begining of STR. Since we modified it, we
5828 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
5829 if (str[0] == 'X')
5830 {
5831 str += 1;
d2e4a39e 5832 while (str[0] != '_' && str[0] != '\0')
dda83cd7
SM
5833 {
5834 if (str[0] != 'n' && str[0] != 'b')
5835 return 0;
5836 str += 1;
5837 }
14f9c5c9 5838 }
babe1480 5839
14f9c5c9
AS
5840 if (str[0] == '\000')
5841 return 1;
babe1480 5842
d2e4a39e 5843 if (str[0] == '_')
14f9c5c9
AS
5844 {
5845 if (str[1] != '_' || str[2] == '\000')
dda83cd7 5846 return 0;
d2e4a39e 5847 if (str[2] == '_')
dda83cd7
SM
5848 {
5849 if (strcmp (str + 3, "JM") == 0)
5850 return 1;
5851 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
5852 the LJM suffix in favor of the JM one. But we will
5853 still accept LJM as a valid suffix for a reasonable
5854 amount of time, just to allow ourselves to debug programs
5855 compiled using an older version of GNAT. */
5856 if (strcmp (str + 3, "LJM") == 0)
5857 return 1;
5858 if (str[3] != 'X')
5859 return 0;
5860 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
5861 || str[4] == 'U' || str[4] == 'P')
5862 return 1;
5863 if (str[4] == 'R' && str[5] != 'T')
5864 return 1;
5865 return 0;
5866 }
4c4b4cd2 5867 if (!isdigit (str[2]))
dda83cd7 5868 return 0;
4c4b4cd2 5869 for (k = 3; str[k] != '\0'; k += 1)
dda83cd7
SM
5870 if (!isdigit (str[k]) && str[k] != '_')
5871 return 0;
14f9c5c9
AS
5872 return 1;
5873 }
4c4b4cd2 5874 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 5875 {
4c4b4cd2 5876 for (k = 2; str[k] != '\0'; k += 1)
dda83cd7
SM
5877 if (!isdigit (str[k]) && str[k] != '_')
5878 return 0;
14f9c5c9
AS
5879 return 1;
5880 }
5881 return 0;
5882}
d2e4a39e 5883
aeb5907d
JB
5884/* Return non-zero if the string starting at NAME and ending before
5885 NAME_END contains no capital letters. */
529cad9c
PH
5886
5887static int
5888is_valid_name_for_wild_match (const char *name0)
5889{
f945dedf 5890 std::string decoded_name = ada_decode (name0);
529cad9c
PH
5891 int i;
5892
5823c3ef
JB
5893 /* If the decoded name starts with an angle bracket, it means that
5894 NAME0 does not follow the GNAT encoding format. It should then
5895 not be allowed as a possible wild match. */
5896 if (decoded_name[0] == '<')
5897 return 0;
5898
529cad9c
PH
5899 for (i=0; decoded_name[i] != '\0'; i++)
5900 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
5901 return 0;
5902
5903 return 1;
5904}
5905
59c8a30b
JB
5906/* Advance *NAMEP to next occurrence in the string NAME0 of the TARGET0
5907 character which could start a simple name. Assumes that *NAMEP points
5908 somewhere inside the string beginning at NAME0. */
4c4b4cd2 5909
14f9c5c9 5910static int
59c8a30b 5911advance_wild_match (const char **namep, const char *name0, char target0)
14f9c5c9 5912{
73589123 5913 const char *name = *namep;
5b4ee69b 5914
5823c3ef 5915 while (1)
14f9c5c9 5916 {
59c8a30b 5917 char t0, t1;
73589123
PH
5918
5919 t0 = *name;
5920 if (t0 == '_')
5921 {
5922 t1 = name[1];
5923 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
5924 {
5925 name += 1;
61012eef 5926 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
5927 break;
5928 else
5929 name += 1;
5930 }
aa27d0b3
JB
5931 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
5932 || name[2] == target0))
73589123
PH
5933 {
5934 name += 2;
5935 break;
5936 }
86b44259
TT
5937 else if (t1 == '_' && name[2] == 'B' && name[3] == '_')
5938 {
5939 /* Names like "pkg__B_N__name", where N is a number, are
5940 block-local. We can handle these by simply skipping
5941 the "B_" here. */
5942 name += 4;
5943 }
73589123
PH
5944 else
5945 return 0;
5946 }
5947 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
5948 name += 1;
5949 else
5823c3ef 5950 return 0;
73589123
PH
5951 }
5952
5953 *namep = name;
5954 return 1;
5955}
5956
b5ec771e
PA
5957/* Return true iff NAME encodes a name of the form prefix.PATN.
5958 Ignores any informational suffixes of NAME (i.e., for which
5959 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
5960 simple name. */
73589123 5961
b5ec771e 5962static bool
73589123
PH
5963wild_match (const char *name, const char *patn)
5964{
22e048c9 5965 const char *p;
73589123
PH
5966 const char *name0 = name;
5967
5968 while (1)
5969 {
5970 const char *match = name;
5971
5972 if (*name == *patn)
5973 {
5974 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
5975 if (*p != *name)
5976 break;
5977 if (*p == '\0' && is_name_suffix (name))
b5ec771e 5978 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
5979
5980 if (name[-1] == '_')
5981 name -= 1;
5982 }
5983 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 5984 return false;
96d887e8 5985 }
96d887e8
PH
5986}
5987
d1183b06 5988/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to RESULT (if
b5ec771e 5989 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
5990
5991static void
d1183b06 5992ada_add_block_symbols (std::vector<struct block_symbol> &result,
b5ec771e
PA
5993 const struct block *block,
5994 const lookup_name_info &lookup_name,
5995 domain_enum domain, struct objfile *objfile)
96d887e8 5996{
8157b174 5997 struct block_iterator iter;
96d887e8
PH
5998 /* A matching argument symbol, if any. */
5999 struct symbol *arg_sym;
6000 /* Set true when we find a matching non-argument symbol. */
1178743e 6001 bool found_sym;
96d887e8
PH
6002 struct symbol *sym;
6003
6004 arg_sym = NULL;
1178743e 6005 found_sym = false;
b5ec771e
PA
6006 for (sym = block_iter_match_first (block, lookup_name, &iter);
6007 sym != NULL;
6008 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6009 {
c1b5c1eb 6010 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
b5ec771e
PA
6011 {
6012 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6013 {
6014 if (SYMBOL_IS_ARGUMENT (sym))
6015 arg_sym = sym;
6016 else
6017 {
1178743e 6018 found_sym = true;
d1183b06 6019 add_defn_to_vec (result,
b5ec771e
PA
6020 fixup_symbol_section (sym, objfile),
6021 block);
6022 }
6023 }
6024 }
96d887e8
PH
6025 }
6026
22cee43f
PMR
6027 /* Handle renamings. */
6028
d1183b06 6029 if (ada_add_block_renamings (result, block, lookup_name, domain))
1178743e 6030 found_sym = true;
22cee43f 6031
96d887e8
PH
6032 if (!found_sym && arg_sym != NULL)
6033 {
d1183b06 6034 add_defn_to_vec (result,
dda83cd7
SM
6035 fixup_symbol_section (arg_sym, objfile),
6036 block);
96d887e8
PH
6037 }
6038
b5ec771e 6039 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6040 {
6041 arg_sym = NULL;
1178743e 6042 found_sym = false;
b5ec771e
PA
6043 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6044 const char *name = ada_lookup_name.c_str ();
6045 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6046
6047 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6048 {
dda83cd7
SM
6049 if (symbol_matches_domain (sym->language (),
6050 SYMBOL_DOMAIN (sym), domain))
6051 {
6052 int cmp;
6053
6054 cmp = (int) '_' - (int) sym->linkage_name ()[0];
6055 if (cmp == 0)
6056 {
6057 cmp = !startswith (sym->linkage_name (), "_ada_");
6058 if (cmp == 0)
6059 cmp = strncmp (name, sym->linkage_name () + 5,
6060 name_len);
6061 }
6062
6063 if (cmp == 0
6064 && is_name_suffix (sym->linkage_name () + name_len + 5))
6065 {
2a2d4dc3
AS
6066 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6067 {
6068 if (SYMBOL_IS_ARGUMENT (sym))
6069 arg_sym = sym;
6070 else
6071 {
1178743e 6072 found_sym = true;
d1183b06 6073 add_defn_to_vec (result,
2a2d4dc3
AS
6074 fixup_symbol_section (sym, objfile),
6075 block);
6076 }
6077 }
dda83cd7
SM
6078 }
6079 }
76a01679 6080 }
96d887e8
PH
6081
6082 /* NOTE: This really shouldn't be needed for _ada_ symbols.
dda83cd7 6083 They aren't parameters, right? */
96d887e8 6084 if (!found_sym && arg_sym != NULL)
dda83cd7 6085 {
d1183b06 6086 add_defn_to_vec (result,
dda83cd7
SM
6087 fixup_symbol_section (arg_sym, objfile),
6088 block);
6089 }
96d887e8
PH
6090 }
6091}
6092\f
41d27058 6093
dda83cd7 6094 /* Symbol Completion */
41d27058 6095
b5ec771e 6096/* See symtab.h. */
41d27058 6097
b5ec771e
PA
6098bool
6099ada_lookup_name_info::matches
6100 (const char *sym_name,
6101 symbol_name_match_type match_type,
a207cff2 6102 completion_match_result *comp_match_res) const
41d27058 6103{
b5ec771e
PA
6104 bool match = false;
6105 const char *text = m_encoded_name.c_str ();
6106 size_t text_len = m_encoded_name.size ();
41d27058
JB
6107
6108 /* First, test against the fully qualified name of the symbol. */
6109
6110 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6111 match = true;
41d27058 6112
f945dedf 6113 std::string decoded_name = ada_decode (sym_name);
b5ec771e 6114 if (match && !m_encoded_p)
41d27058
JB
6115 {
6116 /* One needed check before declaring a positive match is to verify
dda83cd7
SM
6117 that iff we are doing a verbatim match, the decoded version
6118 of the symbol name starts with '<'. Otherwise, this symbol name
6119 is not a suitable completion. */
41d27058 6120
f945dedf 6121 bool has_angle_bracket = (decoded_name[0] == '<');
b5ec771e 6122 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6123 }
6124
b5ec771e 6125 if (match && !m_verbatim_p)
41d27058
JB
6126 {
6127 /* When doing non-verbatim match, another check that needs to
dda83cd7
SM
6128 be done is to verify that the potentially matching symbol name
6129 does not include capital letters, because the ada-mode would
6130 not be able to understand these symbol names without the
6131 angle bracket notation. */
41d27058
JB
6132 const char *tmp;
6133
6134 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6135 if (*tmp != '\0')
b5ec771e 6136 match = false;
41d27058
JB
6137 }
6138
6139 /* Second: Try wild matching... */
6140
b5ec771e 6141 if (!match && m_wild_match_p)
41d27058
JB
6142 {
6143 /* Since we are doing wild matching, this means that TEXT
dda83cd7
SM
6144 may represent an unqualified symbol name. We therefore must
6145 also compare TEXT against the unqualified name of the symbol. */
f945dedf 6146 sym_name = ada_unqualified_name (decoded_name.c_str ());
41d27058
JB
6147
6148 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6149 match = true;
41d27058
JB
6150 }
6151
b5ec771e 6152 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6153
6154 if (!match)
b5ec771e 6155 return false;
41d27058 6156
a207cff2 6157 if (comp_match_res != NULL)
b5ec771e 6158 {
a207cff2 6159 std::string &match_str = comp_match_res->match.storage ();
41d27058 6160
b5ec771e 6161 if (!m_encoded_p)
a207cff2 6162 match_str = ada_decode (sym_name);
b5ec771e
PA
6163 else
6164 {
6165 if (m_verbatim_p)
6166 match_str = add_angle_brackets (sym_name);
6167 else
6168 match_str = sym_name;
41d27058 6169
b5ec771e 6170 }
a207cff2
PA
6171
6172 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6173 }
6174
b5ec771e 6175 return true;
41d27058
JB
6176}
6177
dda83cd7 6178 /* Field Access */
96d887e8 6179
73fb9985
JB
6180/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6181 for tagged types. */
6182
6183static int
6184ada_is_dispatch_table_ptr_type (struct type *type)
6185{
0d5cff50 6186 const char *name;
73fb9985 6187
78134374 6188 if (type->code () != TYPE_CODE_PTR)
73fb9985
JB
6189 return 0;
6190
7d93a1e0 6191 name = TYPE_TARGET_TYPE (type)->name ();
73fb9985
JB
6192 if (name == NULL)
6193 return 0;
6194
6195 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6196}
6197
ac4a2da4
JG
6198/* Return non-zero if TYPE is an interface tag. */
6199
6200static int
6201ada_is_interface_tag (struct type *type)
6202{
7d93a1e0 6203 const char *name = type->name ();
ac4a2da4
JG
6204
6205 if (name == NULL)
6206 return 0;
6207
6208 return (strcmp (name, "ada__tags__interface_tag") == 0);
6209}
6210
963a6417
PH
6211/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6212 to be invisible to users. */
96d887e8 6213
963a6417
PH
6214int
6215ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6216{
1f704f76 6217 if (field_num < 0 || field_num > type->num_fields ())
963a6417 6218 return 1;
ffde82bf 6219
73fb9985
JB
6220 /* Check the name of that field. */
6221 {
6222 const char *name = TYPE_FIELD_NAME (type, field_num);
6223
6224 /* Anonymous field names should not be printed.
6225 brobecker/2007-02-20: I don't think this can actually happen
30baf67b 6226 but we don't want to print the value of anonymous fields anyway. */
73fb9985
JB
6227 if (name == NULL)
6228 return 1;
6229
ffde82bf
JB
6230 /* Normally, fields whose name start with an underscore ("_")
6231 are fields that have been internally generated by the compiler,
6232 and thus should not be printed. The "_parent" field is special,
6233 however: This is a field internally generated by the compiler
6234 for tagged types, and it contains the components inherited from
6235 the parent type. This field should not be printed as is, but
6236 should not be ignored either. */
61012eef 6237 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6238 return 1;
6239 }
6240
ac4a2da4
JG
6241 /* If this is the dispatch table of a tagged type or an interface tag,
6242 then ignore. */
73fb9985 6243 if (ada_is_tagged_type (type, 1)
940da03e
SM
6244 && (ada_is_dispatch_table_ptr_type (type->field (field_num).type ())
6245 || ada_is_interface_tag (type->field (field_num).type ())))
73fb9985
JB
6246 return 1;
6247
6248 /* Not a special field, so it should not be ignored. */
6249 return 0;
963a6417 6250}
96d887e8 6251
963a6417 6252/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6253 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6254
963a6417
PH
6255int
6256ada_is_tagged_type (struct type *type, int refok)
6257{
988f6b3d 6258 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6259}
96d887e8 6260
963a6417 6261/* True iff TYPE represents the type of X'Tag */
96d887e8 6262
963a6417
PH
6263int
6264ada_is_tag_type (struct type *type)
6265{
460efde1
JB
6266 type = ada_check_typedef (type);
6267
78134374 6268 if (type == NULL || type->code () != TYPE_CODE_PTR)
963a6417
PH
6269 return 0;
6270 else
96d887e8 6271 {
963a6417 6272 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6273
963a6417 6274 return (name != NULL
dda83cd7 6275 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6276 }
96d887e8
PH
6277}
6278
963a6417 6279/* The type of the tag on VAL. */
76a01679 6280
de93309a 6281static struct type *
963a6417 6282ada_tag_type (struct value *val)
96d887e8 6283{
988f6b3d 6284 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6285}
96d887e8 6286
b50d69b5
JG
6287/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6288 retired at Ada 05). */
6289
6290static int
6291is_ada95_tag (struct value *tag)
6292{
6293 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6294}
6295
963a6417 6296/* The value of the tag on VAL. */
96d887e8 6297
de93309a 6298static struct value *
963a6417
PH
6299ada_value_tag (struct value *val)
6300{
03ee6b2e 6301 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6302}
6303
963a6417
PH
6304/* The value of the tag on the object of type TYPE whose contents are
6305 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6306 ADDRESS. */
96d887e8 6307
963a6417 6308static struct value *
10a2c479 6309value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6310 const gdb_byte *valaddr,
dda83cd7 6311 CORE_ADDR address)
96d887e8 6312{
b5385fc0 6313 int tag_byte_offset;
963a6417 6314 struct type *tag_type;
5b4ee69b 6315
963a6417 6316 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
dda83cd7 6317 NULL, NULL, NULL))
96d887e8 6318 {
fc1a4b47 6319 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6320 ? NULL
6321 : valaddr + tag_byte_offset);
963a6417 6322 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6323
963a6417 6324 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6325 }
963a6417
PH
6326 return NULL;
6327}
96d887e8 6328
963a6417
PH
6329static struct type *
6330type_from_tag (struct value *tag)
6331{
f5272a3b 6332 gdb::unique_xmalloc_ptr<char> type_name = ada_tag_name (tag);
5b4ee69b 6333
963a6417 6334 if (type_name != NULL)
5c4258f4 6335 return ada_find_any_type (ada_encode (type_name.get ()).c_str ());
963a6417
PH
6336 return NULL;
6337}
96d887e8 6338
b50d69b5
JG
6339/* Given a value OBJ of a tagged type, return a value of this
6340 type at the base address of the object. The base address, as
6341 defined in Ada.Tags, it is the address of the primary tag of
6342 the object, and therefore where the field values of its full
6343 view can be fetched. */
6344
6345struct value *
6346ada_tag_value_at_base_address (struct value *obj)
6347{
b50d69b5
JG
6348 struct value *val;
6349 LONGEST offset_to_top = 0;
6350 struct type *ptr_type, *obj_type;
6351 struct value *tag;
6352 CORE_ADDR base_address;
6353
6354 obj_type = value_type (obj);
6355
6356 /* It is the responsability of the caller to deref pointers. */
6357
78134374 6358 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
b50d69b5
JG
6359 return obj;
6360
6361 tag = ada_value_tag (obj);
6362 if (!tag)
6363 return obj;
6364
6365 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6366
6367 if (is_ada95_tag (tag))
6368 return obj;
6369
08f49010
XR
6370 ptr_type = language_lookup_primitive_type
6371 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6372 ptr_type = lookup_pointer_type (ptr_type);
6373 val = value_cast (ptr_type, tag);
6374 if (!val)
6375 return obj;
6376
6377 /* It is perfectly possible that an exception be raised while
6378 trying to determine the base address, just like for the tag;
6379 see ada_tag_name for more details. We do not print the error
6380 message for the same reason. */
6381
a70b8144 6382 try
b50d69b5
JG
6383 {
6384 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6385 }
6386
230d2906 6387 catch (const gdb_exception_error &e)
492d29ea
PA
6388 {
6389 return obj;
6390 }
b50d69b5
JG
6391
6392 /* If offset is null, nothing to do. */
6393
6394 if (offset_to_top == 0)
6395 return obj;
6396
6397 /* -1 is a special case in Ada.Tags; however, what should be done
6398 is not quite clear from the documentation. So do nothing for
6399 now. */
6400
6401 if (offset_to_top == -1)
6402 return obj;
6403
08f49010
XR
6404 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6405 from the base address. This was however incompatible with
6406 C++ dispatch table: C++ uses a *negative* value to *add*
6407 to the base address. Ada's convention has therefore been
6408 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6409 use the same convention. Here, we support both cases by
6410 checking the sign of OFFSET_TO_TOP. */
6411
6412 if (offset_to_top > 0)
6413 offset_to_top = -offset_to_top;
6414
6415 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6416 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6417
6418 /* Make sure that we have a proper tag at the new address.
6419 Otherwise, offset_to_top is bogus (which can happen when
6420 the object is not initialized yet). */
6421
6422 if (!tag)
6423 return obj;
6424
6425 obj_type = type_from_tag (tag);
6426
6427 if (!obj_type)
6428 return obj;
6429
6430 return value_from_contents_and_address (obj_type, NULL, base_address);
6431}
6432
1b611343
JB
6433/* Return the "ada__tags__type_specific_data" type. */
6434
6435static struct type *
6436ada_get_tsd_type (struct inferior *inf)
963a6417 6437{
1b611343 6438 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6439
1b611343
JB
6440 if (data->tsd_type == 0)
6441 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6442 return data->tsd_type;
6443}
529cad9c 6444
1b611343
JB
6445/* Return the TSD (type-specific data) associated to the given TAG.
6446 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6447
1b611343 6448 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6449
1b611343
JB
6450static struct value *
6451ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6452{
4c4b4cd2 6453 struct value *val;
1b611343 6454 struct type *type;
5b4ee69b 6455
1b611343
JB
6456 /* First option: The TSD is simply stored as a field of our TAG.
6457 Only older versions of GNAT would use this format, but we have
6458 to test it first, because there are no visible markers for
6459 the current approach except the absence of that field. */
529cad9c 6460
1b611343
JB
6461 val = ada_value_struct_elt (tag, "tsd", 1);
6462 if (val)
6463 return val;
e802dbe0 6464
1b611343
JB
6465 /* Try the second representation for the dispatch table (in which
6466 there is no explicit 'tsd' field in the referent of the tag pointer,
6467 and instead the tsd pointer is stored just before the dispatch
6468 table. */
e802dbe0 6469
1b611343
JB
6470 type = ada_get_tsd_type (current_inferior());
6471 if (type == NULL)
6472 return NULL;
6473 type = lookup_pointer_type (lookup_pointer_type (type));
6474 val = value_cast (type, tag);
6475 if (val == NULL)
6476 return NULL;
6477 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6478}
6479
1b611343
JB
6480/* Given the TSD of a tag (type-specific data), return a string
6481 containing the name of the associated type.
6482
f5272a3b 6483 May return NULL if we are unable to determine the tag name. */
1b611343 6484
f5272a3b 6485static gdb::unique_xmalloc_ptr<char>
1b611343 6486ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6487{
529cad9c 6488 char *p;
1b611343 6489 struct value *val;
529cad9c 6490
1b611343 6491 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6492 if (val == NULL)
1b611343 6493 return NULL;
66920317
TT
6494 gdb::unique_xmalloc_ptr<char> buffer
6495 = target_read_string (value_as_address (val), INT_MAX);
6496 if (buffer == nullptr)
f5272a3b
TT
6497 return nullptr;
6498
6499 for (p = buffer.get (); *p != '\0'; ++p)
6500 {
6501 if (isalpha (*p))
6502 *p = tolower (*p);
6503 }
6504
6505 return buffer;
4c4b4cd2
PH
6506}
6507
6508/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6509 a C string.
6510
6511 Return NULL if the TAG is not an Ada tag, or if we were unable to
f5272a3b 6512 determine the name of that tag. */
4c4b4cd2 6513
f5272a3b 6514gdb::unique_xmalloc_ptr<char>
4c4b4cd2
PH
6515ada_tag_name (struct value *tag)
6516{
f5272a3b 6517 gdb::unique_xmalloc_ptr<char> name;
5b4ee69b 6518
df407dfe 6519 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6520 return NULL;
1b611343
JB
6521
6522 /* It is perfectly possible that an exception be raised while trying
6523 to determine the TAG's name, even under normal circumstances:
6524 The associated variable may be uninitialized or corrupted, for
6525 instance. We do not let any exception propagate past this point.
6526 instead we return NULL.
6527
6528 We also do not print the error message either (which often is very
6529 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6530 the caller print a more meaningful message if necessary. */
a70b8144 6531 try
1b611343
JB
6532 {
6533 struct value *tsd = ada_get_tsd_from_tag (tag);
6534
6535 if (tsd != NULL)
6536 name = ada_tag_name_from_tsd (tsd);
6537 }
230d2906 6538 catch (const gdb_exception_error &e)
492d29ea
PA
6539 {
6540 }
1b611343
JB
6541
6542 return name;
4c4b4cd2
PH
6543}
6544
6545/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6546
d2e4a39e 6547struct type *
ebf56fd3 6548ada_parent_type (struct type *type)
14f9c5c9
AS
6549{
6550 int i;
6551
61ee279c 6552 type = ada_check_typedef (type);
14f9c5c9 6553
78134374 6554 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
6555 return NULL;
6556
1f704f76 6557 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 6558 if (ada_is_parent_field (type, i))
0c1f74cf 6559 {
dda83cd7 6560 struct type *parent_type = type->field (i).type ();
0c1f74cf 6561
dda83cd7
SM
6562 /* If the _parent field is a pointer, then dereference it. */
6563 if (parent_type->code () == TYPE_CODE_PTR)
6564 parent_type = TYPE_TARGET_TYPE (parent_type);
6565 /* If there is a parallel XVS type, get the actual base type. */
6566 parent_type = ada_get_base_type (parent_type);
0c1f74cf 6567
dda83cd7 6568 return ada_check_typedef (parent_type);
0c1f74cf 6569 }
14f9c5c9
AS
6570
6571 return NULL;
6572}
6573
4c4b4cd2
PH
6574/* True iff field number FIELD_NUM of structure type TYPE contains the
6575 parent-type (inherited) fields of a derived type. Assumes TYPE is
6576 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6577
6578int
ebf56fd3 6579ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6580{
61ee279c 6581 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6582
4c4b4cd2 6583 return (name != NULL
dda83cd7
SM
6584 && (startswith (name, "PARENT")
6585 || startswith (name, "_parent")));
14f9c5c9
AS
6586}
6587
4c4b4cd2 6588/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6589 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6590 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6591 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6592 structures. */
14f9c5c9
AS
6593
6594int
ebf56fd3 6595ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6596{
d2e4a39e 6597 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6598
dddc0e16
JB
6599 if (name != NULL && strcmp (name, "RETVAL") == 0)
6600 {
6601 /* This happens in functions with "out" or "in out" parameters
6602 which are passed by copy. For such functions, GNAT describes
6603 the function's return type as being a struct where the return
6604 value is in a field called RETVAL, and where the other "out"
6605 or "in out" parameters are fields of that struct. This is not
6606 a wrapper. */
6607 return 0;
6608 }
6609
d2e4a39e 6610 return (name != NULL
dda83cd7
SM
6611 && (startswith (name, "PARENT")
6612 || strcmp (name, "REP") == 0
6613 || startswith (name, "_parent")
6614 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6615}
6616
4c4b4cd2
PH
6617/* True iff field number FIELD_NUM of structure or union type TYPE
6618 is a variant wrapper. Assumes TYPE is a structure type with at least
6619 FIELD_NUM+1 fields. */
14f9c5c9
AS
6620
6621int
ebf56fd3 6622ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6623{
8ecb59f8
TT
6624 /* Only Ada types are eligible. */
6625 if (!ADA_TYPE_P (type))
6626 return 0;
6627
940da03e 6628 struct type *field_type = type->field (field_num).type ();
5b4ee69b 6629
78134374
SM
6630 return (field_type->code () == TYPE_CODE_UNION
6631 || (is_dynamic_field (type, field_num)
6632 && (TYPE_TARGET_TYPE (field_type)->code ()
c3e5cd34 6633 == TYPE_CODE_UNION)));
14f9c5c9
AS
6634}
6635
6636/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6637 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6638 returns the type of the controlling discriminant for the variant.
6639 May return NULL if the type could not be found. */
14f9c5c9 6640
d2e4a39e 6641struct type *
ebf56fd3 6642ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6643{
a121b7c1 6644 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6645
988f6b3d 6646 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
6647}
6648
4c4b4cd2 6649/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6650 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6651 represents a 'when others' clause; otherwise 0. */
14f9c5c9 6652
de93309a 6653static int
ebf56fd3 6654ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6655{
d2e4a39e 6656 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6657
14f9c5c9
AS
6658 return (name != NULL && name[0] == 'O');
6659}
6660
6661/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6662 returns the name of the discriminant controlling the variant.
6663 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6664
a121b7c1 6665const char *
ebf56fd3 6666ada_variant_discrim_name (struct type *type0)
14f9c5c9 6667{
5f9febe0 6668 static std::string result;
d2e4a39e
AS
6669 struct type *type;
6670 const char *name;
6671 const char *discrim_end;
6672 const char *discrim_start;
14f9c5c9 6673
78134374 6674 if (type0->code () == TYPE_CODE_PTR)
14f9c5c9
AS
6675 type = TYPE_TARGET_TYPE (type0);
6676 else
6677 type = type0;
6678
6679 name = ada_type_name (type);
6680
6681 if (name == NULL || name[0] == '\000')
6682 return "";
6683
6684 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6685 discrim_end -= 1)
6686 {
61012eef 6687 if (startswith (discrim_end, "___XVN"))
dda83cd7 6688 break;
14f9c5c9
AS
6689 }
6690 if (discrim_end == name)
6691 return "";
6692
d2e4a39e 6693 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
6694 discrim_start -= 1)
6695 {
d2e4a39e 6696 if (discrim_start == name + 1)
dda83cd7 6697 return "";
76a01679 6698 if ((discrim_start > name + 3
dda83cd7
SM
6699 && startswith (discrim_start - 3, "___"))
6700 || discrim_start[-1] == '.')
6701 break;
14f9c5c9
AS
6702 }
6703
5f9febe0
TT
6704 result = std::string (discrim_start, discrim_end - discrim_start);
6705 return result.c_str ();
14f9c5c9
AS
6706}
6707
4c4b4cd2
PH
6708/* Scan STR for a subtype-encoded number, beginning at position K.
6709 Put the position of the character just past the number scanned in
6710 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
6711 Return 1 if there was a valid number at the given position, and 0
6712 otherwise. A "subtype-encoded" number consists of the absolute value
6713 in decimal, followed by the letter 'm' to indicate a negative number.
6714 Assumes 0m does not occur. */
14f9c5c9
AS
6715
6716int
d2e4a39e 6717ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
6718{
6719 ULONGEST RU;
6720
d2e4a39e 6721 if (!isdigit (str[k]))
14f9c5c9
AS
6722 return 0;
6723
4c4b4cd2 6724 /* Do it the hard way so as not to make any assumption about
14f9c5c9 6725 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 6726 LONGEST. */
14f9c5c9
AS
6727 RU = 0;
6728 while (isdigit (str[k]))
6729 {
d2e4a39e 6730 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
6731 k += 1;
6732 }
6733
d2e4a39e 6734 if (str[k] == 'm')
14f9c5c9
AS
6735 {
6736 if (R != NULL)
dda83cd7 6737 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
6738 k += 1;
6739 }
6740 else if (R != NULL)
6741 *R = (LONGEST) RU;
6742
4c4b4cd2 6743 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
6744 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
6745 number representable as a LONGEST (although either would probably work
6746 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 6747 above is always equivalent to the negative of RU. */
14f9c5c9
AS
6748
6749 if (new_k != NULL)
6750 *new_k = k;
6751 return 1;
6752}
6753
4c4b4cd2
PH
6754/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
6755 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
6756 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 6757
de93309a 6758static int
ebf56fd3 6759ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 6760{
d2e4a39e 6761 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
6762 int p;
6763
6764 p = 0;
6765 while (1)
6766 {
d2e4a39e 6767 switch (name[p])
dda83cd7
SM
6768 {
6769 case '\0':
6770 return 0;
6771 case 'S':
6772 {
6773 LONGEST W;
6774
6775 if (!ada_scan_number (name, p + 1, &W, &p))
6776 return 0;
6777 if (val == W)
6778 return 1;
6779 break;
6780 }
6781 case 'R':
6782 {
6783 LONGEST L, U;
6784
6785 if (!ada_scan_number (name, p + 1, &L, &p)
6786 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
6787 return 0;
6788 if (val >= L && val <= U)
6789 return 1;
6790 break;
6791 }
6792 case 'O':
6793 return 1;
6794 default:
6795 return 0;
6796 }
4c4b4cd2
PH
6797 }
6798}
6799
0963b4bd 6800/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
6801
6802/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
6803 ARG_TYPE, extract and return the value of one of its (non-static)
6804 fields. FIELDNO says which field. Differs from value_primitive_field
6805 only in that it can handle packed values of arbitrary type. */
14f9c5c9 6806
5eb68a39 6807struct value *
d2e4a39e 6808ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
dda83cd7 6809 struct type *arg_type)
14f9c5c9 6810{
14f9c5c9
AS
6811 struct type *type;
6812
61ee279c 6813 arg_type = ada_check_typedef (arg_type);
940da03e 6814 type = arg_type->field (fieldno).type ();
14f9c5c9 6815
4504bbde
TT
6816 /* Handle packed fields. It might be that the field is not packed
6817 relative to its containing structure, but the structure itself is
6818 packed; in this case we must take the bit-field path. */
6819 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
14f9c5c9
AS
6820 {
6821 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
6822 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 6823
0fd88904 6824 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
dda83cd7
SM
6825 offset + bit_pos / 8,
6826 bit_pos % 8, bit_size, type);
14f9c5c9
AS
6827 }
6828 else
6829 return value_primitive_field (arg1, offset, fieldno, arg_type);
6830}
6831
52ce6436
PH
6832/* Find field with name NAME in object of type TYPE. If found,
6833 set the following for each argument that is non-null:
6834 - *FIELD_TYPE_P to the field's type;
6835 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
6836 an object of that type;
6837 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
6838 - *BIT_SIZE_P to its size in bits if the field is packed, and
6839 0 otherwise;
6840 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
6841 fields up to but not including the desired field, or by the total
6842 number of fields if not found. A NULL value of NAME never
6843 matches; the function just counts visible fields in this case.
6844
828d5846
XR
6845 Notice that we need to handle when a tagged record hierarchy
6846 has some components with the same name, like in this scenario:
6847
6848 type Top_T is tagged record
dda83cd7
SM
6849 N : Integer := 1;
6850 U : Integer := 974;
6851 A : Integer := 48;
828d5846
XR
6852 end record;
6853
6854 type Middle_T is new Top.Top_T with record
dda83cd7
SM
6855 N : Character := 'a';
6856 C : Integer := 3;
828d5846
XR
6857 end record;
6858
6859 type Bottom_T is new Middle.Middle_T with record
dda83cd7
SM
6860 N : Float := 4.0;
6861 C : Character := '5';
6862 X : Integer := 6;
6863 A : Character := 'J';
828d5846
XR
6864 end record;
6865
6866 Let's say we now have a variable declared and initialized as follow:
6867
6868 TC : Top_A := new Bottom_T;
6869
6870 And then we use this variable to call this function
6871
6872 procedure Assign (Obj: in out Top_T; TV : Integer);
6873
6874 as follow:
6875
6876 Assign (Top_T (B), 12);
6877
6878 Now, we're in the debugger, and we're inside that procedure
6879 then and we want to print the value of obj.c:
6880
6881 Usually, the tagged record or one of the parent type owns the
6882 component to print and there's no issue but in this particular
6883 case, what does it mean to ask for Obj.C? Since the actual
6884 type for object is type Bottom_T, it could mean two things: type
6885 component C from the Middle_T view, but also component C from
6886 Bottom_T. So in that "undefined" case, when the component is
6887 not found in the non-resolved type (which includes all the
6888 components of the parent type), then resolve it and see if we
6889 get better luck once expanded.
6890
6891 In the case of homonyms in the derived tagged type, we don't
6892 guaranty anything, and pick the one that's easiest for us
6893 to program.
6894
0963b4bd 6895 Returns 1 if found, 0 otherwise. */
52ce6436 6896
4c4b4cd2 6897static int
0d5cff50 6898find_struct_field (const char *name, struct type *type, int offset,
dda83cd7
SM
6899 struct type **field_type_p,
6900 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
52ce6436 6901 int *index_p)
4c4b4cd2
PH
6902{
6903 int i;
828d5846 6904 int parent_offset = -1;
4c4b4cd2 6905
61ee279c 6906 type = ada_check_typedef (type);
76a01679 6907
52ce6436
PH
6908 if (field_type_p != NULL)
6909 *field_type_p = NULL;
6910 if (byte_offset_p != NULL)
d5d6fca5 6911 *byte_offset_p = 0;
52ce6436
PH
6912 if (bit_offset_p != NULL)
6913 *bit_offset_p = 0;
6914 if (bit_size_p != NULL)
6915 *bit_size_p = 0;
6916
1f704f76 6917 for (i = 0; i < type->num_fields (); i += 1)
4c4b4cd2
PH
6918 {
6919 int bit_pos = TYPE_FIELD_BITPOS (type, i);
6920 int fld_offset = offset + bit_pos / 8;
0d5cff50 6921 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 6922
4c4b4cd2 6923 if (t_field_name == NULL)
dda83cd7 6924 continue;
4c4b4cd2 6925
828d5846 6926 else if (ada_is_parent_field (type, i))
dda83cd7 6927 {
828d5846
XR
6928 /* This is a field pointing us to the parent type of a tagged
6929 type. As hinted in this function's documentation, we give
6930 preference to fields in the current record first, so what
6931 we do here is just record the index of this field before
6932 we skip it. If it turns out we couldn't find our field
6933 in the current record, then we'll get back to it and search
6934 inside it whether the field might exist in the parent. */
6935
dda83cd7
SM
6936 parent_offset = i;
6937 continue;
6938 }
828d5846 6939
52ce6436 6940 else if (name != NULL && field_name_match (t_field_name, name))
dda83cd7
SM
6941 {
6942 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 6943
52ce6436 6944 if (field_type_p != NULL)
940da03e 6945 *field_type_p = type->field (i).type ();
52ce6436
PH
6946 if (byte_offset_p != NULL)
6947 *byte_offset_p = fld_offset;
6948 if (bit_offset_p != NULL)
6949 *bit_offset_p = bit_pos % 8;
6950 if (bit_size_p != NULL)
6951 *bit_size_p = bit_size;
dda83cd7
SM
6952 return 1;
6953 }
4c4b4cd2 6954 else if (ada_is_wrapper_field (type, i))
dda83cd7 6955 {
940da03e 6956 if (find_struct_field (name, type->field (i).type (), fld_offset,
52ce6436
PH
6957 field_type_p, byte_offset_p, bit_offset_p,
6958 bit_size_p, index_p))
dda83cd7
SM
6959 return 1;
6960 }
4c4b4cd2 6961 else if (ada_is_variant_part (type, i))
dda83cd7 6962 {
52ce6436
PH
6963 /* PNH: Wait. Do we ever execute this section, or is ARG always of
6964 fixed type?? */
dda83cd7
SM
6965 int j;
6966 struct type *field_type
940da03e 6967 = ada_check_typedef (type->field (i).type ());
4c4b4cd2 6968
dda83cd7
SM
6969 for (j = 0; j < field_type->num_fields (); j += 1)
6970 {
6971 if (find_struct_field (name, field_type->field (j).type (),
6972 fld_offset
6973 + TYPE_FIELD_BITPOS (field_type, j) / 8,
6974 field_type_p, byte_offset_p,
6975 bit_offset_p, bit_size_p, index_p))
6976 return 1;
6977 }
6978 }
52ce6436
PH
6979 else if (index_p != NULL)
6980 *index_p += 1;
4c4b4cd2 6981 }
828d5846
XR
6982
6983 /* Field not found so far. If this is a tagged type which
6984 has a parent, try finding that field in the parent now. */
6985
6986 if (parent_offset != -1)
6987 {
6988 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
6989 int fld_offset = offset + bit_pos / 8;
6990
940da03e 6991 if (find_struct_field (name, type->field (parent_offset).type (),
dda83cd7
SM
6992 fld_offset, field_type_p, byte_offset_p,
6993 bit_offset_p, bit_size_p, index_p))
6994 return 1;
828d5846
XR
6995 }
6996
4c4b4cd2
PH
6997 return 0;
6998}
6999
0963b4bd 7000/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7001
52ce6436
PH
7002static int
7003num_visible_fields (struct type *type)
7004{
7005 int n;
5b4ee69b 7006
52ce6436
PH
7007 n = 0;
7008 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7009 return n;
7010}
14f9c5c9 7011
4c4b4cd2 7012/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7013 and search in it assuming it has (class) type TYPE.
7014 If found, return value, else return NULL.
7015
828d5846
XR
7016 Searches recursively through wrapper fields (e.g., '_parent').
7017
7018 In the case of homonyms in the tagged types, please refer to the
7019 long explanation in find_struct_field's function documentation. */
14f9c5c9 7020
4c4b4cd2 7021static struct value *
108d56a4 7022ada_search_struct_field (const char *name, struct value *arg, int offset,
dda83cd7 7023 struct type *type)
14f9c5c9
AS
7024{
7025 int i;
828d5846 7026 int parent_offset = -1;
14f9c5c9 7027
5b4ee69b 7028 type = ada_check_typedef (type);
1f704f76 7029 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7030 {
0d5cff50 7031 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7032
7033 if (t_field_name == NULL)
dda83cd7 7034 continue;
14f9c5c9 7035
828d5846 7036 else if (ada_is_parent_field (type, i))
dda83cd7 7037 {
828d5846
XR
7038 /* This is a field pointing us to the parent type of a tagged
7039 type. As hinted in this function's documentation, we give
7040 preference to fields in the current record first, so what
7041 we do here is just record the index of this field before
7042 we skip it. If it turns out we couldn't find our field
7043 in the current record, then we'll get back to it and search
7044 inside it whether the field might exist in the parent. */
7045
dda83cd7
SM
7046 parent_offset = i;
7047 continue;
7048 }
828d5846 7049
14f9c5c9 7050 else if (field_name_match (t_field_name, name))
dda83cd7 7051 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7052
7053 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7054 {
7055 struct value *v = /* Do not let indent join lines here. */
7056 ada_search_struct_field (name, arg,
7057 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7058 type->field (i).type ());
5b4ee69b 7059
dda83cd7
SM
7060 if (v != NULL)
7061 return v;
7062 }
14f9c5c9
AS
7063
7064 else if (ada_is_variant_part (type, i))
dda83cd7 7065 {
0963b4bd 7066 /* PNH: Do we ever get here? See find_struct_field. */
dda83cd7
SM
7067 int j;
7068 struct type *field_type = ada_check_typedef (type->field (i).type ());
7069 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
4c4b4cd2 7070
dda83cd7
SM
7071 for (j = 0; j < field_type->num_fields (); j += 1)
7072 {
7073 struct value *v = ada_search_struct_field /* Force line
0963b4bd 7074 break. */
dda83cd7
SM
7075 (name, arg,
7076 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7077 field_type->field (j).type ());
5b4ee69b 7078
dda83cd7
SM
7079 if (v != NULL)
7080 return v;
7081 }
7082 }
14f9c5c9 7083 }
828d5846
XR
7084
7085 /* Field not found so far. If this is a tagged type which
7086 has a parent, try finding that field in the parent now. */
7087
7088 if (parent_offset != -1)
7089 {
7090 struct value *v = ada_search_struct_field (
7091 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
940da03e 7092 type->field (parent_offset).type ());
828d5846
XR
7093
7094 if (v != NULL)
dda83cd7 7095 return v;
828d5846
XR
7096 }
7097
14f9c5c9
AS
7098 return NULL;
7099}
d2e4a39e 7100
52ce6436
PH
7101static struct value *ada_index_struct_field_1 (int *, struct value *,
7102 int, struct type *);
7103
7104
7105/* Return field #INDEX in ARG, where the index is that returned by
7106 * find_struct_field through its INDEX_P argument. Adjust the address
7107 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7108 * If found, return value, else return NULL. */
52ce6436
PH
7109
7110static struct value *
7111ada_index_struct_field (int index, struct value *arg, int offset,
7112 struct type *type)
7113{
7114 return ada_index_struct_field_1 (&index, arg, offset, type);
7115}
7116
7117
7118/* Auxiliary function for ada_index_struct_field. Like
7119 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7120 * *INDEX_P. */
52ce6436
PH
7121
7122static struct value *
7123ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7124 struct type *type)
7125{
7126 int i;
7127 type = ada_check_typedef (type);
7128
1f704f76 7129 for (i = 0; i < type->num_fields (); i += 1)
52ce6436
PH
7130 {
7131 if (TYPE_FIELD_NAME (type, i) == NULL)
dda83cd7 7132 continue;
52ce6436 7133 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7134 {
7135 struct value *v = /* Do not let indent join lines here. */
7136 ada_index_struct_field_1 (index_p, arg,
52ce6436 7137 offset + TYPE_FIELD_BITPOS (type, i) / 8,
940da03e 7138 type->field (i).type ());
5b4ee69b 7139
dda83cd7
SM
7140 if (v != NULL)
7141 return v;
7142 }
52ce6436
PH
7143
7144 else if (ada_is_variant_part (type, i))
dda83cd7 7145 {
52ce6436 7146 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7147 find_struct_field. */
52ce6436 7148 error (_("Cannot assign this kind of variant record"));
dda83cd7 7149 }
52ce6436 7150 else if (*index_p == 0)
dda83cd7 7151 return ada_value_primitive_field (arg, offset, i, type);
52ce6436
PH
7152 else
7153 *index_p -= 1;
7154 }
7155 return NULL;
7156}
7157
3b4de39c 7158/* Return a string representation of type TYPE. */
99bbb428 7159
3b4de39c 7160static std::string
99bbb428
PA
7161type_as_string (struct type *type)
7162{
d7e74731 7163 string_file tmp_stream;
99bbb428 7164
d7e74731 7165 type_print (type, "", &tmp_stream, -1);
99bbb428 7166
d7e74731 7167 return std::move (tmp_stream.string ());
99bbb428
PA
7168}
7169
14f9c5c9 7170/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7171 If DISPP is non-null, add its byte displacement from the beginning of a
7172 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7173 work for packed fields).
7174
7175 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7176 followed by "___".
14f9c5c9 7177
0963b4bd 7178 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7179 be a (pointer or reference)+ to a struct or union, and the
7180 ultimate target type will be searched.
14f9c5c9
AS
7181
7182 Looks recursively into variant clauses and parent types.
7183
828d5846
XR
7184 In the case of homonyms in the tagged types, please refer to the
7185 long explanation in find_struct_field's function documentation.
7186
4c4b4cd2
PH
7187 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7188 TYPE is not a type of the right kind. */
14f9c5c9 7189
4c4b4cd2 7190static struct type *
a121b7c1 7191ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
dda83cd7 7192 int noerr)
14f9c5c9
AS
7193{
7194 int i;
828d5846 7195 int parent_offset = -1;
14f9c5c9
AS
7196
7197 if (name == NULL)
7198 goto BadName;
7199
76a01679 7200 if (refok && type != NULL)
4c4b4cd2
PH
7201 while (1)
7202 {
dda83cd7
SM
7203 type = ada_check_typedef (type);
7204 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
7205 break;
7206 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7207 }
14f9c5c9 7208
76a01679 7209 if (type == NULL
78134374
SM
7210 || (type->code () != TYPE_CODE_STRUCT
7211 && type->code () != TYPE_CODE_UNION))
14f9c5c9 7212 {
4c4b4cd2 7213 if (noerr)
dda83cd7 7214 return NULL;
99bbb428 7215
3b4de39c
PA
7216 error (_("Type %s is not a structure or union type"),
7217 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7218 }
7219
7220 type = to_static_fixed_type (type);
7221
1f704f76 7222 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7223 {
0d5cff50 7224 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7225 struct type *t;
d2e4a39e 7226
14f9c5c9 7227 if (t_field_name == NULL)
dda83cd7 7228 continue;
14f9c5c9 7229
828d5846 7230 else if (ada_is_parent_field (type, i))
dda83cd7 7231 {
828d5846
XR
7232 /* This is a field pointing us to the parent type of a tagged
7233 type. As hinted in this function's documentation, we give
7234 preference to fields in the current record first, so what
7235 we do here is just record the index of this field before
7236 we skip it. If it turns out we couldn't find our field
7237 in the current record, then we'll get back to it and search
7238 inside it whether the field might exist in the parent. */
7239
dda83cd7
SM
7240 parent_offset = i;
7241 continue;
7242 }
828d5846 7243
14f9c5c9 7244 else if (field_name_match (t_field_name, name))
940da03e 7245 return type->field (i).type ();
14f9c5c9
AS
7246
7247 else if (ada_is_wrapper_field (type, i))
dda83cd7
SM
7248 {
7249 t = ada_lookup_struct_elt_type (type->field (i).type (), name,
7250 0, 1);
7251 if (t != NULL)
988f6b3d 7252 return t;
dda83cd7 7253 }
14f9c5c9
AS
7254
7255 else if (ada_is_variant_part (type, i))
dda83cd7
SM
7256 {
7257 int j;
7258 struct type *field_type = ada_check_typedef (type->field (i).type ());
4c4b4cd2 7259
dda83cd7
SM
7260 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
7261 {
b1f33ddd 7262 /* FIXME pnh 2008/01/26: We check for a field that is
dda83cd7 7263 NOT wrapped in a struct, since the compiler sometimes
b1f33ddd 7264 generates these for unchecked variant types. Revisit
dda83cd7 7265 if the compiler changes this practice. */
0d5cff50 7266 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7267
b1f33ddd
JB
7268 if (v_field_name != NULL
7269 && field_name_match (v_field_name, name))
940da03e 7270 t = field_type->field (j).type ();
b1f33ddd 7271 else
940da03e 7272 t = ada_lookup_struct_elt_type (field_type->field (j).type (),
988f6b3d 7273 name, 0, 1);
b1f33ddd 7274
dda83cd7 7275 if (t != NULL)
988f6b3d 7276 return t;
dda83cd7
SM
7277 }
7278 }
14f9c5c9
AS
7279
7280 }
7281
828d5846
XR
7282 /* Field not found so far. If this is a tagged type which
7283 has a parent, try finding that field in the parent now. */
7284
7285 if (parent_offset != -1)
7286 {
dda83cd7 7287 struct type *t;
828d5846 7288
dda83cd7
SM
7289 t = ada_lookup_struct_elt_type (type->field (parent_offset).type (),
7290 name, 0, 1);
7291 if (t != NULL)
828d5846
XR
7292 return t;
7293 }
7294
14f9c5c9 7295BadName:
d2e4a39e 7296 if (!noerr)
14f9c5c9 7297 {
2b2798cc 7298 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7299
7300 error (_("Type %s has no component named %s"),
3b4de39c 7301 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7302 }
7303
7304 return NULL;
7305}
7306
b1f33ddd
JB
7307/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7308 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7309 represents an unchecked union (that is, the variant part of a
0963b4bd 7310 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7311
7312static int
7313is_unchecked_variant (struct type *var_type, struct type *outer_type)
7314{
a121b7c1 7315 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7316
988f6b3d 7317 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7318}
7319
7320
14f9c5c9 7321/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
d8af9068 7322 within OUTER, determine which variant clause (field number in VAR_TYPE,
4c4b4cd2 7323 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7324
d2e4a39e 7325int
d8af9068 7326ada_which_variant_applies (struct type *var_type, struct value *outer)
14f9c5c9
AS
7327{
7328 int others_clause;
7329 int i;
a121b7c1 7330 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816 7331 struct value *discrim;
14f9c5c9
AS
7332 LONGEST discrim_val;
7333
012370f6
TT
7334 /* Using plain value_from_contents_and_address here causes problems
7335 because we will end up trying to resolve a type that is currently
7336 being constructed. */
0c281816
JB
7337 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7338 if (discrim == NULL)
14f9c5c9 7339 return -1;
0c281816 7340 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7341
7342 others_clause = -1;
1f704f76 7343 for (i = 0; i < var_type->num_fields (); i += 1)
14f9c5c9
AS
7344 {
7345 if (ada_is_others_clause (var_type, i))
dda83cd7 7346 others_clause = i;
14f9c5c9 7347 else if (ada_in_variant (discrim_val, var_type, i))
dda83cd7 7348 return i;
14f9c5c9
AS
7349 }
7350
7351 return others_clause;
7352}
d2e4a39e 7353\f
14f9c5c9
AS
7354
7355
dda83cd7 7356 /* Dynamic-Sized Records */
14f9c5c9
AS
7357
7358/* Strategy: The type ostensibly attached to a value with dynamic size
7359 (i.e., a size that is not statically recorded in the debugging
7360 data) does not accurately reflect the size or layout of the value.
7361 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7362 conventional types that are constructed on the fly. */
14f9c5c9
AS
7363
7364/* There is a subtle and tricky problem here. In general, we cannot
7365 determine the size of dynamic records without its data. However,
7366 the 'struct value' data structure, which GDB uses to represent
7367 quantities in the inferior process (the target), requires the size
7368 of the type at the time of its allocation in order to reserve space
7369 for GDB's internal copy of the data. That's why the
7370 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7371 rather than struct value*s.
14f9c5c9
AS
7372
7373 However, GDB's internal history variables ($1, $2, etc.) are
7374 struct value*s containing internal copies of the data that are not, in
7375 general, the same as the data at their corresponding addresses in
7376 the target. Fortunately, the types we give to these values are all
7377 conventional, fixed-size types (as per the strategy described
7378 above), so that we don't usually have to perform the
7379 'to_fixed_xxx_type' conversions to look at their values.
7380 Unfortunately, there is one exception: if one of the internal
7381 history variables is an array whose elements are unconstrained
7382 records, then we will need to create distinct fixed types for each
7383 element selected. */
7384
7385/* The upshot of all of this is that many routines take a (type, host
7386 address, target address) triple as arguments to represent a value.
7387 The host address, if non-null, is supposed to contain an internal
7388 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7389 target at the target address. */
14f9c5c9
AS
7390
7391/* Assuming that VAL0 represents a pointer value, the result of
7392 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7393 dynamic-sized types. */
14f9c5c9 7394
d2e4a39e
AS
7395struct value *
7396ada_value_ind (struct value *val0)
14f9c5c9 7397{
c48db5ca 7398 struct value *val = value_ind (val0);
5b4ee69b 7399
b50d69b5
JG
7400 if (ada_is_tagged_type (value_type (val), 0))
7401 val = ada_tag_value_at_base_address (val);
7402
4c4b4cd2 7403 return ada_to_fixed_value (val);
14f9c5c9
AS
7404}
7405
7406/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7407 qualifiers on VAL0. */
7408
d2e4a39e
AS
7409static struct value *
7410ada_coerce_ref (struct value *val0)
7411{
78134374 7412 if (value_type (val0)->code () == TYPE_CODE_REF)
d2e4a39e
AS
7413 {
7414 struct value *val = val0;
5b4ee69b 7415
994b9211 7416 val = coerce_ref (val);
b50d69b5
JG
7417
7418 if (ada_is_tagged_type (value_type (val), 0))
7419 val = ada_tag_value_at_base_address (val);
7420
4c4b4cd2 7421 return ada_to_fixed_value (val);
d2e4a39e
AS
7422 }
7423 else
14f9c5c9
AS
7424 return val0;
7425}
7426
4c4b4cd2 7427/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7428
7429static unsigned int
ebf56fd3 7430field_alignment (struct type *type, int f)
14f9c5c9 7431{
d2e4a39e 7432 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7433 int len;
14f9c5c9
AS
7434 int align_offset;
7435
64a1bf19
JB
7436 /* The field name should never be null, unless the debugging information
7437 is somehow malformed. In this case, we assume the field does not
7438 require any alignment. */
7439 if (name == NULL)
7440 return 1;
7441
7442 len = strlen (name);
7443
4c4b4cd2
PH
7444 if (!isdigit (name[len - 1]))
7445 return 1;
14f9c5c9 7446
d2e4a39e 7447 if (isdigit (name[len - 2]))
14f9c5c9
AS
7448 align_offset = len - 2;
7449 else
7450 align_offset = len - 1;
7451
61012eef 7452 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7453 return TARGET_CHAR_BIT;
7454
4c4b4cd2
PH
7455 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7456}
7457
852dff6c 7458/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7459
852dff6c
JB
7460static struct symbol *
7461ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7462{
7463 struct symbol *sym;
7464
7465 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7466 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7467 return sym;
7468
4186eb54
KS
7469 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7470 return sym;
14f9c5c9
AS
7471}
7472
dddfab26
UW
7473/* Find a type named NAME. Ignores ambiguity. This routine will look
7474 solely for types defined by debug info, it will not search the GDB
7475 primitive types. */
4c4b4cd2 7476
852dff6c 7477static struct type *
ebf56fd3 7478ada_find_any_type (const char *name)
14f9c5c9 7479{
852dff6c 7480 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7481
14f9c5c9 7482 if (sym != NULL)
dddfab26 7483 return SYMBOL_TYPE (sym);
14f9c5c9 7484
dddfab26 7485 return NULL;
14f9c5c9
AS
7486}
7487
739593e0
JB
7488/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7489 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7490 symbol, in which case it is returned. Otherwise, this looks for
7491 symbols whose name is that of NAME_SYM suffixed with "___XR".
7492 Return symbol if found, and NULL otherwise. */
4c4b4cd2 7493
c0e70c62
TT
7494static bool
7495ada_is_renaming_symbol (struct symbol *name_sym)
aeb5907d 7496{
987012b8 7497 const char *name = name_sym->linkage_name ();
c0e70c62 7498 return strstr (name, "___XR") != NULL;
4c4b4cd2
PH
7499}
7500
14f9c5c9 7501/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7502 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7503 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7504 otherwise return 0. */
7505
14f9c5c9 7506int
d2e4a39e 7507ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7508{
7509 if (type1 == NULL)
7510 return 1;
7511 else if (type0 == NULL)
7512 return 0;
78134374 7513 else if (type1->code () == TYPE_CODE_VOID)
14f9c5c9 7514 return 1;
78134374 7515 else if (type0->code () == TYPE_CODE_VOID)
14f9c5c9 7516 return 0;
7d93a1e0 7517 else if (type1->name () == NULL && type0->name () != NULL)
4c4b4cd2 7518 return 1;
ad82864c 7519 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7520 return 1;
4c4b4cd2 7521 else if (ada_is_array_descriptor_type (type0)
dda83cd7 7522 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7523 return 1;
aeb5907d
JB
7524 else
7525 {
7d93a1e0
SM
7526 const char *type0_name = type0->name ();
7527 const char *type1_name = type1->name ();
aeb5907d
JB
7528
7529 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7530 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7531 return 1;
7532 }
14f9c5c9
AS
7533 return 0;
7534}
7535
e86ca25f
TT
7536/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7537 null. */
4c4b4cd2 7538
0d5cff50 7539const char *
d2e4a39e 7540ada_type_name (struct type *type)
14f9c5c9 7541{
d2e4a39e 7542 if (type == NULL)
14f9c5c9 7543 return NULL;
7d93a1e0 7544 return type->name ();
14f9c5c9
AS
7545}
7546
b4ba55a1
JB
7547/* Search the list of "descriptive" types associated to TYPE for a type
7548 whose name is NAME. */
7549
7550static struct type *
7551find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7552{
931e5bc3 7553 struct type *result, *tmp;
b4ba55a1 7554
c6044dd1
JB
7555 if (ada_ignore_descriptive_types_p)
7556 return NULL;
7557
b4ba55a1
JB
7558 /* If there no descriptive-type info, then there is no parallel type
7559 to be found. */
7560 if (!HAVE_GNAT_AUX_INFO (type))
7561 return NULL;
7562
7563 result = TYPE_DESCRIPTIVE_TYPE (type);
7564 while (result != NULL)
7565 {
0d5cff50 7566 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7567
7568 if (result_name == NULL)
dda83cd7
SM
7569 {
7570 warning (_("unexpected null name on descriptive type"));
7571 return NULL;
7572 }
b4ba55a1
JB
7573
7574 /* If the names match, stop. */
7575 if (strcmp (result_name, name) == 0)
7576 break;
7577
7578 /* Otherwise, look at the next item on the list, if any. */
7579 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7580 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7581 else
7582 tmp = NULL;
7583
7584 /* If not found either, try after having resolved the typedef. */
7585 if (tmp != NULL)
7586 result = tmp;
b4ba55a1 7587 else
931e5bc3 7588 {
f168693b 7589 result = check_typedef (result);
931e5bc3
JG
7590 if (HAVE_GNAT_AUX_INFO (result))
7591 result = TYPE_DESCRIPTIVE_TYPE (result);
7592 else
7593 result = NULL;
7594 }
b4ba55a1
JB
7595 }
7596
7597 /* If we didn't find a match, see whether this is a packed array. With
7598 older compilers, the descriptive type information is either absent or
7599 irrelevant when it comes to packed arrays so the above lookup fails.
7600 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7601 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7602 return ada_find_any_type (name);
7603
7604 return result;
7605}
7606
7607/* Find a parallel type to TYPE with the specified NAME, using the
7608 descriptive type taken from the debugging information, if available,
7609 and otherwise using the (slower) name-based method. */
7610
7611static struct type *
7612ada_find_parallel_type_with_name (struct type *type, const char *name)
7613{
7614 struct type *result = NULL;
7615
7616 if (HAVE_GNAT_AUX_INFO (type))
7617 result = find_parallel_type_by_descriptive_type (type, name);
7618 else
7619 result = ada_find_any_type (name);
7620
7621 return result;
7622}
7623
7624/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7625 SUFFIX to the name of TYPE. */
14f9c5c9 7626
d2e4a39e 7627struct type *
ebf56fd3 7628ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7629{
0d5cff50 7630 char *name;
fe978cb0 7631 const char *type_name = ada_type_name (type);
14f9c5c9 7632 int len;
d2e4a39e 7633
fe978cb0 7634 if (type_name == NULL)
14f9c5c9
AS
7635 return NULL;
7636
fe978cb0 7637 len = strlen (type_name);
14f9c5c9 7638
b4ba55a1 7639 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7640
fe978cb0 7641 strcpy (name, type_name);
14f9c5c9
AS
7642 strcpy (name + len, suffix);
7643
b4ba55a1 7644 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7645}
7646
14f9c5c9 7647/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7648 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7649
d2e4a39e
AS
7650static struct type *
7651dynamic_template_type (struct type *type)
14f9c5c9 7652{
61ee279c 7653 type = ada_check_typedef (type);
14f9c5c9 7654
78134374 7655 if (type == NULL || type->code () != TYPE_CODE_STRUCT
d2e4a39e 7656 || ada_type_name (type) == NULL)
14f9c5c9 7657 return NULL;
d2e4a39e 7658 else
14f9c5c9
AS
7659 {
7660 int len = strlen (ada_type_name (type));
5b4ee69b 7661
4c4b4cd2 7662 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
dda83cd7 7663 return type;
14f9c5c9 7664 else
dda83cd7 7665 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7666 }
7667}
7668
7669/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7670 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7671
d2e4a39e
AS
7672static int
7673is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7674{
7675 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7676
d2e4a39e 7677 return name != NULL
940da03e 7678 && templ_type->field (field_num).type ()->code () == TYPE_CODE_PTR
14f9c5c9
AS
7679 && strstr (name, "___XVL") != NULL;
7680}
7681
4c4b4cd2
PH
7682/* The index of the variant field of TYPE, or -1 if TYPE does not
7683 represent a variant record type. */
14f9c5c9 7684
d2e4a39e 7685static int
4c4b4cd2 7686variant_field_index (struct type *type)
14f9c5c9
AS
7687{
7688 int f;
7689
78134374 7690 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
4c4b4cd2
PH
7691 return -1;
7692
1f704f76 7693 for (f = 0; f < type->num_fields (); f += 1)
4c4b4cd2
PH
7694 {
7695 if (ada_is_variant_part (type, f))
dda83cd7 7696 return f;
4c4b4cd2
PH
7697 }
7698 return -1;
14f9c5c9
AS
7699}
7700
4c4b4cd2
PH
7701/* A record type with no fields. */
7702
d2e4a39e 7703static struct type *
fe978cb0 7704empty_record (struct type *templ)
14f9c5c9 7705{
fe978cb0 7706 struct type *type = alloc_type_copy (templ);
5b4ee69b 7707
67607e24 7708 type->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7709 INIT_NONE_SPECIFIC (type);
d0e39ea2 7710 type->set_name ("<empty>");
14f9c5c9
AS
7711 TYPE_LENGTH (type) = 0;
7712 return type;
7713}
7714
7715/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
7716 the value of type TYPE at VALADDR or ADDRESS (see comments at
7717 the beginning of this section) VAL according to GNAT conventions.
7718 DVAL0 should describe the (portion of a) record that contains any
df407dfe 7719 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
7720 an outer-level type (i.e., as opposed to a branch of a variant.) A
7721 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 7722 of the variant.
14f9c5c9 7723
4c4b4cd2
PH
7724 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
7725 length are not statically known are discarded. As a consequence,
7726 VALADDR, ADDRESS and DVAL0 are ignored.
7727
7728 NOTE: Limitations: For now, we assume that dynamic fields and
7729 variants occupy whole numbers of bytes. However, they need not be
7730 byte-aligned. */
7731
7732struct type *
10a2c479 7733ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 7734 const gdb_byte *valaddr,
dda83cd7
SM
7735 CORE_ADDR address, struct value *dval0,
7736 int keep_dynamic_fields)
14f9c5c9 7737{
d2e4a39e
AS
7738 struct value *mark = value_mark ();
7739 struct value *dval;
7740 struct type *rtype;
14f9c5c9 7741 int nfields, bit_len;
4c4b4cd2 7742 int variant_field;
14f9c5c9 7743 long off;
d94e4f4f 7744 int fld_bit_len;
14f9c5c9
AS
7745 int f;
7746
4c4b4cd2
PH
7747 /* Compute the number of fields in this record type that are going
7748 to be processed: unless keep_dynamic_fields, this includes only
7749 fields whose position and length are static will be processed. */
7750 if (keep_dynamic_fields)
1f704f76 7751 nfields = type->num_fields ();
4c4b4cd2
PH
7752 else
7753 {
7754 nfields = 0;
1f704f76 7755 while (nfields < type->num_fields ()
dda83cd7
SM
7756 && !ada_is_variant_part (type, nfields)
7757 && !is_dynamic_field (type, nfields))
7758 nfields++;
4c4b4cd2
PH
7759 }
7760
e9bb382b 7761 rtype = alloc_type_copy (type);
67607e24 7762 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 7763 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 7764 rtype->set_num_fields (nfields);
3cabb6b0
SM
7765 rtype->set_fields
7766 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
d0e39ea2 7767 rtype->set_name (ada_type_name (type));
9cdd0d12 7768 rtype->set_is_fixed_instance (true);
14f9c5c9 7769
d2e4a39e
AS
7770 off = 0;
7771 bit_len = 0;
4c4b4cd2
PH
7772 variant_field = -1;
7773
14f9c5c9
AS
7774 for (f = 0; f < nfields; f += 1)
7775 {
a89febbd 7776 off = align_up (off, field_alignment (type, f))
6c038f32 7777 + TYPE_FIELD_BITPOS (type, f);
ceacbf6e 7778 SET_FIELD_BITPOS (rtype->field (f), off);
d2e4a39e 7779 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 7780
d2e4a39e 7781 if (ada_is_variant_part (type, f))
dda83cd7
SM
7782 {
7783 variant_field = f;
7784 fld_bit_len = 0;
7785 }
14f9c5c9 7786 else if (is_dynamic_field (type, f))
dda83cd7 7787 {
284614f0
JB
7788 const gdb_byte *field_valaddr = valaddr;
7789 CORE_ADDR field_address = address;
7790 struct type *field_type =
940da03e 7791 TYPE_TARGET_TYPE (type->field (f).type ());
284614f0 7792
dda83cd7 7793 if (dval0 == NULL)
b5304971
JG
7794 {
7795 /* rtype's length is computed based on the run-time
7796 value of discriminants. If the discriminants are not
7797 initialized, the type size may be completely bogus and
0963b4bd 7798 GDB may fail to allocate a value for it. So check the
b5304971 7799 size first before creating the value. */
c1b5a1a6 7800 ada_ensure_varsize_limit (rtype);
012370f6
TT
7801 /* Using plain value_from_contents_and_address here
7802 causes problems because we will end up trying to
7803 resolve a type that is currently being
7804 constructed. */
7805 dval = value_from_contents_and_address_unresolved (rtype,
7806 valaddr,
7807 address);
9f1f738a 7808 rtype = value_type (dval);
b5304971 7809 }
dda83cd7
SM
7810 else
7811 dval = dval0;
4c4b4cd2 7812
284614f0
JB
7813 /* If the type referenced by this field is an aligner type, we need
7814 to unwrap that aligner type, because its size might not be set.
7815 Keeping the aligner type would cause us to compute the wrong
7816 size for this field, impacting the offset of the all the fields
7817 that follow this one. */
7818 if (ada_is_aligner_type (field_type))
7819 {
7820 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
7821
7822 field_valaddr = cond_offset_host (field_valaddr, field_offset);
7823 field_address = cond_offset_target (field_address, field_offset);
7824 field_type = ada_aligned_type (field_type);
7825 }
7826
7827 field_valaddr = cond_offset_host (field_valaddr,
7828 off / TARGET_CHAR_BIT);
7829 field_address = cond_offset_target (field_address,
7830 off / TARGET_CHAR_BIT);
7831
7832 /* Get the fixed type of the field. Note that, in this case,
7833 we do not want to get the real type out of the tag: if
7834 the current field is the parent part of a tagged record,
7835 we will get the tag of the object. Clearly wrong: the real
7836 type of the parent is not the real type of the child. We
7837 would end up in an infinite loop. */
7838 field_type = ada_get_base_type (field_type);
7839 field_type = ada_to_fixed_type (field_type, field_valaddr,
7840 field_address, dval, 0);
27f2a97b
JB
7841 /* If the field size is already larger than the maximum
7842 object size, then the record itself will necessarily
7843 be larger than the maximum object size. We need to make
7844 this check now, because the size might be so ridiculously
7845 large (due to an uninitialized variable in the inferior)
7846 that it would cause an overflow when adding it to the
7847 record size. */
c1b5a1a6 7848 ada_ensure_varsize_limit (field_type);
284614f0 7849
5d14b6e5 7850 rtype->field (f).set_type (field_type);
dda83cd7 7851 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
7852 /* The multiplication can potentially overflow. But because
7853 the field length has been size-checked just above, and
7854 assuming that the maximum size is a reasonable value,
7855 an overflow should not happen in practice. So rather than
7856 adding overflow recovery code to this already complex code,
7857 we just assume that it's not going to happen. */
dda83cd7
SM
7858 fld_bit_len =
7859 TYPE_LENGTH (rtype->field (f).type ()) * TARGET_CHAR_BIT;
7860 }
14f9c5c9 7861 else
dda83cd7 7862 {
5ded5331
JB
7863 /* Note: If this field's type is a typedef, it is important
7864 to preserve the typedef layer.
7865
7866 Otherwise, we might be transforming a typedef to a fat
7867 pointer (encoding a pointer to an unconstrained array),
7868 into a basic fat pointer (encoding an unconstrained
7869 array). As both types are implemented using the same
7870 structure, the typedef is the only clue which allows us
7871 to distinguish between the two options. Stripping it
7872 would prevent us from printing this field appropriately. */
dda83cd7
SM
7873 rtype->field (f).set_type (type->field (f).type ());
7874 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
7875 if (TYPE_FIELD_BITSIZE (type, f) > 0)
7876 fld_bit_len =
7877 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
7878 else
5ded5331 7879 {
940da03e 7880 struct type *field_type = type->field (f).type ();
5ded5331
JB
7881
7882 /* We need to be careful of typedefs when computing
7883 the length of our field. If this is a typedef,
7884 get the length of the target type, not the length
7885 of the typedef. */
78134374 7886 if (field_type->code () == TYPE_CODE_TYPEDEF)
5ded5331
JB
7887 field_type = ada_typedef_target_type (field_type);
7888
dda83cd7
SM
7889 fld_bit_len =
7890 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
5ded5331 7891 }
dda83cd7 7892 }
14f9c5c9 7893 if (off + fld_bit_len > bit_len)
dda83cd7 7894 bit_len = off + fld_bit_len;
d94e4f4f 7895 off += fld_bit_len;
4c4b4cd2 7896 TYPE_LENGTH (rtype) =
dda83cd7 7897 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 7898 }
4c4b4cd2
PH
7899
7900 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 7901 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
7902 the record. This can happen in the presence of representation
7903 clauses. */
7904 if (variant_field >= 0)
7905 {
7906 struct type *branch_type;
7907
7908 off = TYPE_FIELD_BITPOS (rtype, variant_field);
7909
7910 if (dval0 == NULL)
9f1f738a 7911 {
012370f6
TT
7912 /* Using plain value_from_contents_and_address here causes
7913 problems because we will end up trying to resolve a type
7914 that is currently being constructed. */
7915 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
7916 address);
9f1f738a
SA
7917 rtype = value_type (dval);
7918 }
4c4b4cd2 7919 else
dda83cd7 7920 dval = dval0;
4c4b4cd2
PH
7921
7922 branch_type =
dda83cd7
SM
7923 to_fixed_variant_branch_type
7924 (type->field (variant_field).type (),
7925 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
7926 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
4c4b4cd2 7927 if (branch_type == NULL)
dda83cd7
SM
7928 {
7929 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
7930 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 7931 rtype->set_num_fields (rtype->num_fields () - 1);
dda83cd7 7932 }
4c4b4cd2 7933 else
dda83cd7
SM
7934 {
7935 rtype->field (variant_field).set_type (branch_type);
7936 TYPE_FIELD_NAME (rtype, variant_field) = "S";
7937 fld_bit_len =
7938 TYPE_LENGTH (rtype->field (variant_field).type ()) *
7939 TARGET_CHAR_BIT;
7940 if (off + fld_bit_len > bit_len)
7941 bit_len = off + fld_bit_len;
7942 TYPE_LENGTH (rtype) =
7943 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
7944 }
4c4b4cd2
PH
7945 }
7946
714e53ab
PH
7947 /* According to exp_dbug.ads, the size of TYPE for variable-size records
7948 should contain the alignment of that record, which should be a strictly
7949 positive value. If null or negative, then something is wrong, most
7950 probably in the debug info. In that case, we don't round up the size
0963b4bd 7951 of the resulting type. If this record is not part of another structure,
714e53ab
PH
7952 the current RTYPE length might be good enough for our purposes. */
7953 if (TYPE_LENGTH (type) <= 0)
7954 {
7d93a1e0 7955 if (rtype->name ())
cc1defb1 7956 warning (_("Invalid type size for `%s' detected: %s."),
7d93a1e0 7957 rtype->name (), pulongest (TYPE_LENGTH (type)));
323e0a4a 7958 else
cc1defb1
KS
7959 warning (_("Invalid type size for <unnamed> detected: %s."),
7960 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
7961 }
7962 else
7963 {
a89febbd
TT
7964 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
7965 TYPE_LENGTH (type));
714e53ab 7966 }
14f9c5c9
AS
7967
7968 value_free_to_mark (mark);
d2e4a39e 7969 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 7970 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
7971 return rtype;
7972}
7973
4c4b4cd2
PH
7974/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
7975 of 1. */
14f9c5c9 7976
d2e4a39e 7977static struct type *
fc1a4b47 7978template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 7979 CORE_ADDR address, struct value *dval0)
4c4b4cd2
PH
7980{
7981 return ada_template_to_fixed_record_type_1 (type, valaddr,
dda83cd7 7982 address, dval0, 1);
4c4b4cd2
PH
7983}
7984
7985/* An ordinary record type in which ___XVL-convention fields and
7986 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
7987 static approximations, containing all possible fields. Uses
7988 no runtime values. Useless for use in values, but that's OK,
7989 since the results are used only for type determinations. Works on both
7990 structs and unions. Representation note: to save space, we memorize
7991 the result of this function in the TYPE_TARGET_TYPE of the
7992 template type. */
7993
7994static struct type *
7995template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
7996{
7997 struct type *type;
7998 int nfields;
7999 int f;
8000
9e195661 8001 /* No need no do anything if the input type is already fixed. */
22c4c60c 8002 if (type0->is_fixed_instance ())
9e195661
PMR
8003 return type0;
8004
8005 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8006 if (TYPE_TARGET_TYPE (type0) != NULL)
8007 return TYPE_TARGET_TYPE (type0);
8008
9e195661 8009 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8010 type = type0;
1f704f76 8011 nfields = type0->num_fields ();
9e195661
PMR
8012
8013 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8014 recompute all over next time. */
8015 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8016
8017 for (f = 0; f < nfields; f += 1)
8018 {
940da03e 8019 struct type *field_type = type0->field (f).type ();
4c4b4cd2 8020 struct type *new_type;
14f9c5c9 8021
4c4b4cd2 8022 if (is_dynamic_field (type0, f))
460efde1
JB
8023 {
8024 field_type = ada_check_typedef (field_type);
dda83cd7 8025 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
460efde1 8026 }
14f9c5c9 8027 else
dda83cd7 8028 new_type = static_unwrap_type (field_type);
9e195661
PMR
8029
8030 if (new_type != field_type)
8031 {
8032 /* Clone TYPE0 only the first time we get a new field type. */
8033 if (type == type0)
8034 {
8035 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
78134374 8036 type->set_code (type0->code ());
8ecb59f8 8037 INIT_NONE_SPECIFIC (type);
5e33d5f4 8038 type->set_num_fields (nfields);
3cabb6b0
SM
8039
8040 field *fields =
8041 ((struct field *)
8042 TYPE_ALLOC (type, nfields * sizeof (struct field)));
80fc5e77 8043 memcpy (fields, type0->fields (),
9e195661 8044 sizeof (struct field) * nfields);
3cabb6b0
SM
8045 type->set_fields (fields);
8046
d0e39ea2 8047 type->set_name (ada_type_name (type0));
9cdd0d12 8048 type->set_is_fixed_instance (true);
9e195661
PMR
8049 TYPE_LENGTH (type) = 0;
8050 }
5d14b6e5 8051 type->field (f).set_type (new_type);
9e195661
PMR
8052 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8053 }
14f9c5c9 8054 }
9e195661 8055
14f9c5c9
AS
8056 return type;
8057}
8058
4c4b4cd2 8059/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8060 whose address in memory is ADDRESS, returns a revision of TYPE,
8061 which should be a non-dynamic-sized record, in which the variant
8062 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8063 for discriminant values in DVAL0, which can be NULL if the record
8064 contains the necessary discriminant values. */
8065
d2e4a39e 8066static struct type *
fc1a4b47 8067to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
dda83cd7 8068 CORE_ADDR address, struct value *dval0)
14f9c5c9 8069{
d2e4a39e 8070 struct value *mark = value_mark ();
4c4b4cd2 8071 struct value *dval;
d2e4a39e 8072 struct type *rtype;
14f9c5c9 8073 struct type *branch_type;
1f704f76 8074 int nfields = type->num_fields ();
4c4b4cd2 8075 int variant_field = variant_field_index (type);
14f9c5c9 8076
4c4b4cd2 8077 if (variant_field == -1)
14f9c5c9
AS
8078 return type;
8079
4c4b4cd2 8080 if (dval0 == NULL)
9f1f738a
SA
8081 {
8082 dval = value_from_contents_and_address (type, valaddr, address);
8083 type = value_type (dval);
8084 }
4c4b4cd2
PH
8085 else
8086 dval = dval0;
8087
e9bb382b 8088 rtype = alloc_type_copy (type);
67607e24 8089 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8090 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8091 rtype->set_num_fields (nfields);
3cabb6b0
SM
8092
8093 field *fields =
d2e4a39e 8094 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
80fc5e77 8095 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
3cabb6b0
SM
8096 rtype->set_fields (fields);
8097
d0e39ea2 8098 rtype->set_name (ada_type_name (type));
9cdd0d12 8099 rtype->set_is_fixed_instance (true);
14f9c5c9
AS
8100 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8101
4c4b4cd2 8102 branch_type = to_fixed_variant_branch_type
940da03e 8103 (type->field (variant_field).type (),
d2e4a39e 8104 cond_offset_host (valaddr,
dda83cd7
SM
8105 TYPE_FIELD_BITPOS (type, variant_field)
8106 / TARGET_CHAR_BIT),
d2e4a39e 8107 cond_offset_target (address,
dda83cd7
SM
8108 TYPE_FIELD_BITPOS (type, variant_field)
8109 / TARGET_CHAR_BIT), dval);
d2e4a39e 8110 if (branch_type == NULL)
14f9c5c9 8111 {
4c4b4cd2 8112 int f;
5b4ee69b 8113
4c4b4cd2 8114 for (f = variant_field + 1; f < nfields; f += 1)
dda83cd7 8115 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8116 rtype->set_num_fields (rtype->num_fields () - 1);
14f9c5c9
AS
8117 }
8118 else
8119 {
5d14b6e5 8120 rtype->field (variant_field).set_type (branch_type);
4c4b4cd2
PH
8121 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8122 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8123 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8124 }
940da03e 8125 TYPE_LENGTH (rtype) -= TYPE_LENGTH (type->field (variant_field).type ());
d2e4a39e 8126
4c4b4cd2 8127 value_free_to_mark (mark);
14f9c5c9
AS
8128 return rtype;
8129}
8130
8131/* An ordinary record type (with fixed-length fields) that describes
8132 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8133 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8134 should be in DVAL, a record value; it may be NULL if the object
8135 at ADDR itself contains any necessary discriminant values.
8136 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8137 values from the record are needed. Except in the case that DVAL,
8138 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8139 unchecked) is replaced by a particular branch of the variant.
8140
8141 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8142 is questionable and may be removed. It can arise during the
8143 processing of an unconstrained-array-of-record type where all the
8144 variant branches have exactly the same size. This is because in
8145 such cases, the compiler does not bother to use the XVS convention
8146 when encoding the record. I am currently dubious of this
8147 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8148
d2e4a39e 8149static struct type *
fc1a4b47 8150to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
dda83cd7 8151 CORE_ADDR address, struct value *dval)
14f9c5c9 8152{
d2e4a39e 8153 struct type *templ_type;
14f9c5c9 8154
22c4c60c 8155 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8156 return type0;
8157
d2e4a39e 8158 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8159
8160 if (templ_type != NULL)
8161 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8162 else if (variant_field_index (type0) >= 0)
8163 {
8164 if (dval == NULL && valaddr == NULL && address == 0)
dda83cd7 8165 return type0;
4c4b4cd2 8166 return to_record_with_fixed_variant_part (type0, valaddr, address,
dda83cd7 8167 dval);
4c4b4cd2 8168 }
14f9c5c9
AS
8169 else
8170 {
9cdd0d12 8171 type0->set_is_fixed_instance (true);
14f9c5c9
AS
8172 return type0;
8173 }
8174
8175}
8176
8177/* An ordinary record type (with fixed-length fields) that describes
8178 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8179 union type. Any necessary discriminants' values should be in DVAL,
8180 a record value. That is, this routine selects the appropriate
8181 branch of the union at ADDR according to the discriminant value
b1f33ddd 8182 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8183 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8184
d2e4a39e 8185static struct type *
fc1a4b47 8186to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
dda83cd7 8187 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8188{
8189 int which;
d2e4a39e
AS
8190 struct type *templ_type;
8191 struct type *var_type;
14f9c5c9 8192
78134374 8193 if (var_type0->code () == TYPE_CODE_PTR)
14f9c5c9 8194 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8195 else
14f9c5c9
AS
8196 var_type = var_type0;
8197
8198 templ_type = ada_find_parallel_type (var_type, "___XVU");
8199
8200 if (templ_type != NULL)
8201 var_type = templ_type;
8202
b1f33ddd
JB
8203 if (is_unchecked_variant (var_type, value_type (dval)))
8204 return var_type0;
d8af9068 8205 which = ada_which_variant_applies (var_type, dval);
14f9c5c9
AS
8206
8207 if (which < 0)
e9bb382b 8208 return empty_record (var_type);
14f9c5c9 8209 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8210 return to_fixed_record_type
940da03e 8211 (TYPE_TARGET_TYPE (var_type->field (which).type ()),
d2e4a39e 8212 valaddr, address, dval);
940da03e 8213 else if (variant_field_index (var_type->field (which).type ()) >= 0)
d2e4a39e
AS
8214 return
8215 to_fixed_record_type
940da03e 8216 (var_type->field (which).type (), valaddr, address, dval);
14f9c5c9 8217 else
940da03e 8218 return var_type->field (which).type ();
14f9c5c9
AS
8219}
8220
8908fca5
JB
8221/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8222 ENCODING_TYPE, a type following the GNAT conventions for discrete
8223 type encodings, only carries redundant information. */
8224
8225static int
8226ada_is_redundant_range_encoding (struct type *range_type,
8227 struct type *encoding_type)
8228{
108d56a4 8229 const char *bounds_str;
8908fca5
JB
8230 int n;
8231 LONGEST lo, hi;
8232
78134374 8233 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8908fca5 8234
78134374
SM
8235 if (get_base_type (range_type)->code ()
8236 != get_base_type (encoding_type)->code ())
005e2509
JB
8237 {
8238 /* The compiler probably used a simple base type to describe
8239 the range type instead of the range's actual base type,
8240 expecting us to get the real base type from the encoding
8241 anyway. In this situation, the encoding cannot be ignored
8242 as redundant. */
8243 return 0;
8244 }
8245
8908fca5
JB
8246 if (is_dynamic_type (range_type))
8247 return 0;
8248
7d93a1e0 8249 if (encoding_type->name () == NULL)
8908fca5
JB
8250 return 0;
8251
7d93a1e0 8252 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8908fca5
JB
8253 if (bounds_str == NULL)
8254 return 0;
8255
8256 n = 8; /* Skip "___XDLU_". */
8257 if (!ada_scan_number (bounds_str, n, &lo, &n))
8258 return 0;
5537ddd0 8259 if (range_type->bounds ()->low.const_val () != lo)
8908fca5
JB
8260 return 0;
8261
8262 n += 2; /* Skip the "__" separator between the two bounds. */
8263 if (!ada_scan_number (bounds_str, n, &hi, &n))
8264 return 0;
5537ddd0 8265 if (range_type->bounds ()->high.const_val () != hi)
8908fca5
JB
8266 return 0;
8267
8268 return 1;
8269}
8270
8271/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8272 a type following the GNAT encoding for describing array type
8273 indices, only carries redundant information. */
8274
8275static int
8276ada_is_redundant_index_type_desc (struct type *array_type,
8277 struct type *desc_type)
8278{
8279 struct type *this_layer = check_typedef (array_type);
8280 int i;
8281
1f704f76 8282 for (i = 0; i < desc_type->num_fields (); i++)
8908fca5 8283 {
3d967001 8284 if (!ada_is_redundant_range_encoding (this_layer->index_type (),
940da03e 8285 desc_type->field (i).type ()))
8908fca5
JB
8286 return 0;
8287 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8288 }
8289
8290 return 1;
8291}
8292
14f9c5c9
AS
8293/* Assuming that TYPE0 is an array type describing the type of a value
8294 at ADDR, and that DVAL describes a record containing any
8295 discriminants used in TYPE0, returns a type for the value that
8296 contains no dynamic components (that is, no components whose sizes
8297 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8298 true, gives an error message if the resulting type's size is over
4c4b4cd2 8299 varsize_limit. */
14f9c5c9 8300
d2e4a39e
AS
8301static struct type *
8302to_fixed_array_type (struct type *type0, struct value *dval,
dda83cd7 8303 int ignore_too_big)
14f9c5c9 8304{
d2e4a39e
AS
8305 struct type *index_type_desc;
8306 struct type *result;
ad82864c 8307 int constrained_packed_array_p;
931e5bc3 8308 static const char *xa_suffix = "___XA";
14f9c5c9 8309
b0dd7688 8310 type0 = ada_check_typedef (type0);
22c4c60c 8311 if (type0->is_fixed_instance ())
4c4b4cd2 8312 return type0;
14f9c5c9 8313
ad82864c
JB
8314 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8315 if (constrained_packed_array_p)
75fd6a26
TT
8316 {
8317 type0 = decode_constrained_packed_array_type (type0);
8318 if (type0 == nullptr)
8319 error (_("could not decode constrained packed array type"));
8320 }
284614f0 8321
931e5bc3
JG
8322 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8323
8324 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8325 encoding suffixed with 'P' may still be generated. If so,
8326 it should be used to find the XA type. */
8327
8328 if (index_type_desc == NULL)
8329 {
1da0522e 8330 const char *type_name = ada_type_name (type0);
931e5bc3 8331
1da0522e 8332 if (type_name != NULL)
931e5bc3 8333 {
1da0522e 8334 const int len = strlen (type_name);
931e5bc3
JG
8335 char *name = (char *) alloca (len + strlen (xa_suffix));
8336
1da0522e 8337 if (type_name[len - 1] == 'P')
931e5bc3 8338 {
1da0522e 8339 strcpy (name, type_name);
931e5bc3
JG
8340 strcpy (name + len - 1, xa_suffix);
8341 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8342 }
8343 }
8344 }
8345
28c85d6c 8346 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8347 if (index_type_desc != NULL
8348 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8349 {
8350 /* Ignore this ___XA parallel type, as it does not bring any
8351 useful information. This allows us to avoid creating fixed
8352 versions of the array's index types, which would be identical
8353 to the original ones. This, in turn, can also help avoid
8354 the creation of fixed versions of the array itself. */
8355 index_type_desc = NULL;
8356 }
8357
14f9c5c9
AS
8358 if (index_type_desc == NULL)
8359 {
61ee279c 8360 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8361
14f9c5c9 8362 /* NOTE: elt_type---the fixed version of elt_type0---should never
dda83cd7
SM
8363 depend on the contents of the array in properly constructed
8364 debugging data. */
529cad9c 8365 /* Create a fixed version of the array element type.
dda83cd7
SM
8366 We're not providing the address of an element here,
8367 and thus the actual object value cannot be inspected to do
8368 the conversion. This should not be a problem, since arrays of
8369 unconstrained objects are not allowed. In particular, all
8370 the elements of an array of a tagged type should all be of
8371 the same type specified in the debugging info. No need to
8372 consult the object tag. */
1ed6ede0 8373 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8374
284614f0
JB
8375 /* Make sure we always create a new array type when dealing with
8376 packed array types, since we're going to fix-up the array
8377 type length and element bitsize a little further down. */
ad82864c 8378 if (elt_type0 == elt_type && !constrained_packed_array_p)
dda83cd7 8379 result = type0;
14f9c5c9 8380 else
dda83cd7
SM
8381 result = create_array_type (alloc_type_copy (type0),
8382 elt_type, type0->index_type ());
14f9c5c9
AS
8383 }
8384 else
8385 {
8386 int i;
8387 struct type *elt_type0;
8388
8389 elt_type0 = type0;
1f704f76 8390 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
dda83cd7 8391 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8392
8393 /* NOTE: result---the fixed version of elt_type0---should never
dda83cd7
SM
8394 depend on the contents of the array in properly constructed
8395 debugging data. */
529cad9c 8396 /* Create a fixed version of the array element type.
dda83cd7
SM
8397 We're not providing the address of an element here,
8398 and thus the actual object value cannot be inspected to do
8399 the conversion. This should not be a problem, since arrays of
8400 unconstrained objects are not allowed. In particular, all
8401 the elements of an array of a tagged type should all be of
8402 the same type specified in the debugging info. No need to
8403 consult the object tag. */
1ed6ede0 8404 result =
dda83cd7 8405 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8406
8407 elt_type0 = type0;
1f704f76 8408 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
dda83cd7
SM
8409 {
8410 struct type *range_type =
8411 to_fixed_range_type (index_type_desc->field (i).type (), dval);
5b4ee69b 8412
dda83cd7
SM
8413 result = create_array_type (alloc_type_copy (elt_type0),
8414 result, range_type);
1ce677a4 8415 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
dda83cd7 8416 }
d2e4a39e 8417 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
dda83cd7 8418 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8419 }
8420
2e6fda7d
JB
8421 /* We want to preserve the type name. This can be useful when
8422 trying to get the type name of a value that has already been
8423 printed (for instance, if the user did "print VAR; whatis $". */
7d93a1e0 8424 result->set_name (type0->name ());
2e6fda7d 8425
ad82864c 8426 if (constrained_packed_array_p)
284614f0
JB
8427 {
8428 /* So far, the resulting type has been created as if the original
8429 type was a regular (non-packed) array type. As a result, the
8430 bitsize of the array elements needs to be set again, and the array
8431 length needs to be recomputed based on that bitsize. */
8432 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8433 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8434
8435 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8436 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8437 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
dda83cd7 8438 TYPE_LENGTH (result)++;
284614f0
JB
8439 }
8440
9cdd0d12 8441 result->set_is_fixed_instance (true);
14f9c5c9 8442 return result;
d2e4a39e 8443}
14f9c5c9
AS
8444
8445
8446/* A standard type (containing no dynamically sized components)
8447 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8448 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8449 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8450 ADDRESS or in VALADDR contains these discriminants.
8451
1ed6ede0
JB
8452 If CHECK_TAG is not null, in the case of tagged types, this function
8453 attempts to locate the object's tag and use it to compute the actual
8454 type. However, when ADDRESS is null, we cannot use it to determine the
8455 location of the tag, and therefore compute the tagged type's actual type.
8456 So we return the tagged type without consulting the tag. */
529cad9c 8457
f192137b
JB
8458static struct type *
8459ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
dda83cd7 8460 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8461{
61ee279c 8462 type = ada_check_typedef (type);
8ecb59f8
TT
8463
8464 /* Only un-fixed types need to be handled here. */
8465 if (!HAVE_GNAT_AUX_INFO (type))
8466 return type;
8467
78134374 8468 switch (type->code ())
d2e4a39e
AS
8469 {
8470 default:
14f9c5c9 8471 return type;
d2e4a39e 8472 case TYPE_CODE_STRUCT:
4c4b4cd2 8473 {
dda83cd7
SM
8474 struct type *static_type = to_static_fixed_type (type);
8475 struct type *fixed_record_type =
8476 to_fixed_record_type (type, valaddr, address, NULL);
8477
8478 /* If STATIC_TYPE is a tagged type and we know the object's address,
8479 then we can determine its tag, and compute the object's actual
8480 type from there. Note that we have to use the fixed record
8481 type (the parent part of the record may have dynamic fields
8482 and the way the location of _tag is expressed may depend on
8483 them). */
8484
8485 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
8486 {
b50d69b5
JG
8487 struct value *tag =
8488 value_tag_from_contents_and_address
8489 (fixed_record_type,
8490 valaddr,
8491 address);
8492 struct type *real_type = type_from_tag (tag);
8493 struct value *obj =
8494 value_from_contents_and_address (fixed_record_type,
8495 valaddr,
8496 address);
dda83cd7
SM
8497 fixed_record_type = value_type (obj);
8498 if (real_type != NULL)
8499 return to_fixed_record_type
b50d69b5
JG
8500 (real_type, NULL,
8501 value_address (ada_tag_value_at_base_address (obj)), NULL);
dda83cd7
SM
8502 }
8503
8504 /* Check to see if there is a parallel ___XVZ variable.
8505 If there is, then it provides the actual size of our type. */
8506 else if (ada_type_name (fixed_record_type) != NULL)
8507 {
8508 const char *name = ada_type_name (fixed_record_type);
8509 char *xvz_name
224c3ddb 8510 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 8511 bool xvz_found = false;
dda83cd7 8512 LONGEST size;
4af88198 8513
dda83cd7 8514 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 8515 try
eccab96d
JB
8516 {
8517 xvz_found = get_int_var_value (xvz_name, size);
8518 }
230d2906 8519 catch (const gdb_exception_error &except)
eccab96d
JB
8520 {
8521 /* We found the variable, but somehow failed to read
8522 its value. Rethrow the same error, but with a little
8523 bit more information, to help the user understand
8524 what went wrong (Eg: the variable might have been
8525 optimized out). */
8526 throw_error (except.error,
8527 _("unable to read value of %s (%s)"),
3d6e9d23 8528 xvz_name, except.what ());
eccab96d 8529 }
eccab96d 8530
dda83cd7
SM
8531 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
8532 {
8533 fixed_record_type = copy_type (fixed_record_type);
8534 TYPE_LENGTH (fixed_record_type) = size;
8535
8536 /* The FIXED_RECORD_TYPE may have be a stub. We have
8537 observed this when the debugging info is STABS, and
8538 apparently it is something that is hard to fix.
8539
8540 In practice, we don't need the actual type definition
8541 at all, because the presence of the XVZ variable allows us
8542 to assume that there must be a XVS type as well, which we
8543 should be able to use later, when we need the actual type
8544 definition.
8545
8546 In the meantime, pretend that the "fixed" type we are
8547 returning is NOT a stub, because this can cause trouble
8548 when using this type to create new types targeting it.
8549 Indeed, the associated creation routines often check
8550 whether the target type is a stub and will try to replace
8551 it, thus using a type with the wrong size. This, in turn,
8552 might cause the new type to have the wrong size too.
8553 Consider the case of an array, for instance, where the size
8554 of the array is computed from the number of elements in
8555 our array multiplied by the size of its element. */
b4b73759 8556 fixed_record_type->set_is_stub (false);
dda83cd7
SM
8557 }
8558 }
8559 return fixed_record_type;
4c4b4cd2 8560 }
d2e4a39e 8561 case TYPE_CODE_ARRAY:
4c4b4cd2 8562 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8563 case TYPE_CODE_UNION:
8564 if (dval == NULL)
dda83cd7 8565 return type;
d2e4a39e 8566 else
dda83cd7 8567 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8568 }
14f9c5c9
AS
8569}
8570
f192137b
JB
8571/* The same as ada_to_fixed_type_1, except that it preserves the type
8572 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8573
8574 The typedef layer needs be preserved in order to differentiate between
8575 arrays and array pointers when both types are implemented using the same
8576 fat pointer. In the array pointer case, the pointer is encoded as
8577 a typedef of the pointer type. For instance, considering:
8578
8579 type String_Access is access String;
8580 S1 : String_Access := null;
8581
8582 To the debugger, S1 is defined as a typedef of type String. But
8583 to the user, it is a pointer. So if the user tries to print S1,
8584 we should not dereference the array, but print the array address
8585 instead.
8586
8587 If we didn't preserve the typedef layer, we would lose the fact that
8588 the type is to be presented as a pointer (needs de-reference before
8589 being printed). And we would also use the source-level type name. */
f192137b
JB
8590
8591struct type *
8592ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
dda83cd7 8593 CORE_ADDR address, struct value *dval, int check_tag)
f192137b
JB
8594
8595{
8596 struct type *fixed_type =
8597 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8598
96dbd2c1
JB
8599 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8600 then preserve the typedef layer.
8601
8602 Implementation note: We can only check the main-type portion of
8603 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8604 from TYPE now returns a type that has the same instance flags
8605 as TYPE. For instance, if TYPE is a "typedef const", and its
8606 target type is a "struct", then the typedef elimination will return
8607 a "const" version of the target type. See check_typedef for more
8608 details about how the typedef layer elimination is done.
8609
8610 brobecker/2010-11-19: It seems to me that the only case where it is
8611 useful to preserve the typedef layer is when dealing with fat pointers.
8612 Perhaps, we could add a check for that and preserve the typedef layer
85102364 8613 only in that situation. But this seems unnecessary so far, probably
96dbd2c1
JB
8614 because we call check_typedef/ada_check_typedef pretty much everywhere.
8615 */
78134374 8616 if (type->code () == TYPE_CODE_TYPEDEF
720d1a40 8617 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8618 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8619 return type;
8620
8621 return fixed_type;
8622}
8623
14f9c5c9 8624/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8625 TYPE0, but based on no runtime data. */
14f9c5c9 8626
d2e4a39e
AS
8627static struct type *
8628to_static_fixed_type (struct type *type0)
14f9c5c9 8629{
d2e4a39e 8630 struct type *type;
14f9c5c9
AS
8631
8632 if (type0 == NULL)
8633 return NULL;
8634
22c4c60c 8635 if (type0->is_fixed_instance ())
4c4b4cd2
PH
8636 return type0;
8637
61ee279c 8638 type0 = ada_check_typedef (type0);
d2e4a39e 8639
78134374 8640 switch (type0->code ())
14f9c5c9
AS
8641 {
8642 default:
8643 return type0;
8644 case TYPE_CODE_STRUCT:
8645 type = dynamic_template_type (type0);
d2e4a39e 8646 if (type != NULL)
dda83cd7 8647 return template_to_static_fixed_type (type);
4c4b4cd2 8648 else
dda83cd7 8649 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8650 case TYPE_CODE_UNION:
8651 type = ada_find_parallel_type (type0, "___XVU");
8652 if (type != NULL)
dda83cd7 8653 return template_to_static_fixed_type (type);
4c4b4cd2 8654 else
dda83cd7 8655 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8656 }
8657}
8658
4c4b4cd2
PH
8659/* A static approximation of TYPE with all type wrappers removed. */
8660
d2e4a39e
AS
8661static struct type *
8662static_unwrap_type (struct type *type)
14f9c5c9
AS
8663{
8664 if (ada_is_aligner_type (type))
8665 {
940da03e 8666 struct type *type1 = ada_check_typedef (type)->field (0).type ();
14f9c5c9 8667 if (ada_type_name (type1) == NULL)
d0e39ea2 8668 type1->set_name (ada_type_name (type));
14f9c5c9
AS
8669
8670 return static_unwrap_type (type1);
8671 }
d2e4a39e 8672 else
14f9c5c9 8673 {
d2e4a39e 8674 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8675
d2e4a39e 8676 if (raw_real_type == type)
dda83cd7 8677 return type;
14f9c5c9 8678 else
dda83cd7 8679 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8680 }
8681}
8682
8683/* In some cases, incomplete and private types require
4c4b4cd2 8684 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8685 type Foo;
8686 type FooP is access Foo;
8687 V: FooP;
8688 type Foo is array ...;
4c4b4cd2 8689 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
8690 cross-references to such types, we instead substitute for FooP a
8691 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 8692 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
8693
8694/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
8695 exists, otherwise TYPE. */
8696
d2e4a39e 8697struct type *
61ee279c 8698ada_check_typedef (struct type *type)
14f9c5c9 8699{
727e3d2e
JB
8700 if (type == NULL)
8701 return NULL;
8702
736ade86
XR
8703 /* If our type is an access to an unconstrained array, which is encoded
8704 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
8705 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
8706 what allows us to distinguish between fat pointers that represent
8707 array types, and fat pointers that represent array access types
8708 (in both cases, the compiler implements them as fat pointers). */
736ade86 8709 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
8710 return type;
8711
f168693b 8712 type = check_typedef (type);
78134374 8713 if (type == NULL || type->code () != TYPE_CODE_ENUM
e46d3488 8714 || !type->is_stub ()
7d93a1e0 8715 || type->name () == NULL)
14f9c5c9 8716 return type;
d2e4a39e 8717 else
14f9c5c9 8718 {
7d93a1e0 8719 const char *name = type->name ();
d2e4a39e 8720 struct type *type1 = ada_find_any_type (name);
5b4ee69b 8721
05e522ef 8722 if (type1 == NULL)
dda83cd7 8723 return type;
05e522ef
JB
8724
8725 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
8726 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
8727 types, only for the typedef-to-array types). If that's the case,
8728 strip the typedef layer. */
78134374 8729 if (type1->code () == TYPE_CODE_TYPEDEF)
3a867c22
JB
8730 type1 = ada_check_typedef (type1);
8731
8732 return type1;
14f9c5c9
AS
8733 }
8734}
8735
8736/* A value representing the data at VALADDR/ADDRESS as described by
8737 type TYPE0, but with a standard (static-sized) type that correctly
8738 describes it. If VAL0 is not NULL and TYPE0 already is a standard
8739 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 8740 creation of struct values]. */
14f9c5c9 8741
4c4b4cd2
PH
8742static struct value *
8743ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
dda83cd7 8744 struct value *val0)
14f9c5c9 8745{
1ed6ede0 8746 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 8747
14f9c5c9
AS
8748 if (type == type0 && val0 != NULL)
8749 return val0;
cc0e770c
JB
8750
8751 if (VALUE_LVAL (val0) != lval_memory)
8752 {
8753 /* Our value does not live in memory; it could be a convenience
8754 variable, for instance. Create a not_lval value using val0's
8755 contents. */
8756 return value_from_contents (type, value_contents (val0));
8757 }
8758
8759 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
8760}
8761
8762/* A value representing VAL, but with a standard (static-sized) type
8763 that correctly describes it. Does not necessarily create a new
8764 value. */
8765
0c3acc09 8766struct value *
4c4b4cd2
PH
8767ada_to_fixed_value (struct value *val)
8768{
c48db5ca 8769 val = unwrap_value (val);
d8ce9127 8770 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 8771 return val;
14f9c5c9 8772}
d2e4a39e 8773\f
14f9c5c9 8774
14f9c5c9
AS
8775/* Attributes */
8776
4c4b4cd2
PH
8777/* Table mapping attribute numbers to names.
8778 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 8779
27087b7f 8780static const char * const attribute_names[] = {
14f9c5c9
AS
8781 "<?>",
8782
d2e4a39e 8783 "first",
14f9c5c9
AS
8784 "last",
8785 "length",
8786 "image",
14f9c5c9
AS
8787 "max",
8788 "min",
4c4b4cd2
PH
8789 "modulus",
8790 "pos",
8791 "size",
8792 "tag",
14f9c5c9 8793 "val",
14f9c5c9
AS
8794 0
8795};
8796
de93309a 8797static const char *
4c4b4cd2 8798ada_attribute_name (enum exp_opcode n)
14f9c5c9 8799{
4c4b4cd2
PH
8800 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
8801 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
8802 else
8803 return attribute_names[0];
8804}
8805
4c4b4cd2 8806/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 8807
4c4b4cd2
PH
8808static LONGEST
8809pos_atr (struct value *arg)
14f9c5c9 8810{
24209737
PH
8811 struct value *val = coerce_ref (arg);
8812 struct type *type = value_type (val);
14f9c5c9 8813
d2e4a39e 8814 if (!discrete_type_p (type))
323e0a4a 8815 error (_("'POS only defined on discrete types"));
14f9c5c9 8816
6244c119
SM
8817 gdb::optional<LONGEST> result = discrete_position (type, value_as_long (val));
8818 if (!result.has_value ())
aa715135 8819 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 8820
6244c119 8821 return *result;
4c4b4cd2
PH
8822}
8823
8824static struct value *
3cb382c9 8825value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 8826{
3cb382c9 8827 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
8828}
8829
4c4b4cd2 8830/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 8831
d2e4a39e 8832static struct value *
53a47a3e 8833val_atr (struct type *type, LONGEST val)
14f9c5c9 8834{
53a47a3e 8835 gdb_assert (discrete_type_p (type));
0bc2354b
TT
8836 if (type->code () == TYPE_CODE_RANGE)
8837 type = TYPE_TARGET_TYPE (type);
78134374 8838 if (type->code () == TYPE_CODE_ENUM)
14f9c5c9 8839 {
53a47a3e 8840 if (val < 0 || val >= type->num_fields ())
dda83cd7 8841 error (_("argument to 'VAL out of range"));
53a47a3e 8842 val = TYPE_FIELD_ENUMVAL (type, val);
14f9c5c9 8843 }
53a47a3e
TT
8844 return value_from_longest (type, val);
8845}
8846
8847static struct value *
8848value_val_atr (struct type *type, struct value *arg)
8849{
8850 if (!discrete_type_p (type))
8851 error (_("'VAL only defined on discrete types"));
8852 if (!integer_type_p (value_type (arg)))
8853 error (_("'VAL requires integral argument"));
8854
8855 return val_atr (type, value_as_long (arg));
14f9c5c9 8856}
14f9c5c9 8857\f
d2e4a39e 8858
dda83cd7 8859 /* Evaluation */
14f9c5c9 8860
4c4b4cd2
PH
8861/* True if TYPE appears to be an Ada character type.
8862 [At the moment, this is true only for Character and Wide_Character;
8863 It is a heuristic test that could stand improvement]. */
14f9c5c9 8864
fc913e53 8865bool
d2e4a39e 8866ada_is_character_type (struct type *type)
14f9c5c9 8867{
7b9f71f2
JB
8868 const char *name;
8869
8870 /* If the type code says it's a character, then assume it really is,
8871 and don't check any further. */
78134374 8872 if (type->code () == TYPE_CODE_CHAR)
fc913e53 8873 return true;
7b9f71f2
JB
8874
8875 /* Otherwise, assume it's a character type iff it is a discrete type
8876 with a known character type name. */
8877 name = ada_type_name (type);
8878 return (name != NULL
dda83cd7
SM
8879 && (type->code () == TYPE_CODE_INT
8880 || type->code () == TYPE_CODE_RANGE)
8881 && (strcmp (name, "character") == 0
8882 || strcmp (name, "wide_character") == 0
8883 || strcmp (name, "wide_wide_character") == 0
8884 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
8885}
8886
4c4b4cd2 8887/* True if TYPE appears to be an Ada string type. */
14f9c5c9 8888
fc913e53 8889bool
ebf56fd3 8890ada_is_string_type (struct type *type)
14f9c5c9 8891{
61ee279c 8892 type = ada_check_typedef (type);
d2e4a39e 8893 if (type != NULL
78134374 8894 && type->code () != TYPE_CODE_PTR
76a01679 8895 && (ada_is_simple_array_type (type)
dda83cd7 8896 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
8897 && ada_array_arity (type) == 1)
8898 {
8899 struct type *elttype = ada_array_element_type (type, 1);
8900
8901 return ada_is_character_type (elttype);
8902 }
d2e4a39e 8903 else
fc913e53 8904 return false;
14f9c5c9
AS
8905}
8906
5bf03f13
JB
8907/* The compiler sometimes provides a parallel XVS type for a given
8908 PAD type. Normally, it is safe to follow the PAD type directly,
8909 but older versions of the compiler have a bug that causes the offset
8910 of its "F" field to be wrong. Following that field in that case
8911 would lead to incorrect results, but this can be worked around
8912 by ignoring the PAD type and using the associated XVS type instead.
8913
8914 Set to True if the debugger should trust the contents of PAD types.
8915 Otherwise, ignore the PAD type if there is a parallel XVS type. */
491144b5 8916static bool trust_pad_over_xvs = true;
14f9c5c9
AS
8917
8918/* True if TYPE is a struct type introduced by the compiler to force the
8919 alignment of a value. Such types have a single field with a
4c4b4cd2 8920 distinctive name. */
14f9c5c9
AS
8921
8922int
ebf56fd3 8923ada_is_aligner_type (struct type *type)
14f9c5c9 8924{
61ee279c 8925 type = ada_check_typedef (type);
714e53ab 8926
5bf03f13 8927 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
8928 return 0;
8929
78134374 8930 return (type->code () == TYPE_CODE_STRUCT
dda83cd7
SM
8931 && type->num_fields () == 1
8932 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
8933}
8934
8935/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 8936 the parallel type. */
14f9c5c9 8937
d2e4a39e
AS
8938struct type *
8939ada_get_base_type (struct type *raw_type)
14f9c5c9 8940{
d2e4a39e
AS
8941 struct type *real_type_namer;
8942 struct type *raw_real_type;
14f9c5c9 8943
78134374 8944 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
8945 return raw_type;
8946
284614f0
JB
8947 if (ada_is_aligner_type (raw_type))
8948 /* The encoding specifies that we should always use the aligner type.
8949 So, even if this aligner type has an associated XVS type, we should
8950 simply ignore it.
8951
8952 According to the compiler gurus, an XVS type parallel to an aligner
8953 type may exist because of a stabs limitation. In stabs, aligner
8954 types are empty because the field has a variable-sized type, and
8955 thus cannot actually be used as an aligner type. As a result,
8956 we need the associated parallel XVS type to decode the type.
8957 Since the policy in the compiler is to not change the internal
8958 representation based on the debugging info format, we sometimes
8959 end up having a redundant XVS type parallel to the aligner type. */
8960 return raw_type;
8961
14f9c5c9 8962 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 8963 if (real_type_namer == NULL
78134374 8964 || real_type_namer->code () != TYPE_CODE_STRUCT
1f704f76 8965 || real_type_namer->num_fields () != 1)
14f9c5c9
AS
8966 return raw_type;
8967
940da03e 8968 if (real_type_namer->field (0).type ()->code () != TYPE_CODE_REF)
f80d3ff2
JB
8969 {
8970 /* This is an older encoding form where the base type needs to be
85102364 8971 looked up by name. We prefer the newer encoding because it is
f80d3ff2
JB
8972 more efficient. */
8973 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
8974 if (raw_real_type == NULL)
8975 return raw_type;
8976 else
8977 return raw_real_type;
8978 }
8979
8980 /* The field in our XVS type is a reference to the base type. */
940da03e 8981 return TYPE_TARGET_TYPE (real_type_namer->field (0).type ());
d2e4a39e 8982}
14f9c5c9 8983
4c4b4cd2 8984/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 8985
d2e4a39e
AS
8986struct type *
8987ada_aligned_type (struct type *type)
14f9c5c9
AS
8988{
8989 if (ada_is_aligner_type (type))
940da03e 8990 return ada_aligned_type (type->field (0).type ());
14f9c5c9
AS
8991 else
8992 return ada_get_base_type (type);
8993}
8994
8995
8996/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 8997 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 8998
fc1a4b47
AC
8999const gdb_byte *
9000ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9001{
d2e4a39e 9002 if (ada_is_aligner_type (type))
940da03e 9003 return ada_aligned_value_addr (type->field (0).type (),
dda83cd7
SM
9004 valaddr +
9005 TYPE_FIELD_BITPOS (type,
9006 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9007 else
9008 return valaddr;
9009}
9010
4c4b4cd2
PH
9011
9012
14f9c5c9 9013/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9014 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9015const char *
9016ada_enum_name (const char *name)
14f9c5c9 9017{
5f9febe0 9018 static std::string storage;
e6a959d6 9019 const char *tmp;
14f9c5c9 9020
4c4b4cd2
PH
9021 /* First, unqualify the enumeration name:
9022 1. Search for the last '.' character. If we find one, then skip
177b42fe 9023 all the preceding characters, the unqualified name starts
76a01679 9024 right after that dot.
4c4b4cd2 9025 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9026 translates dots into "__". Search forward for double underscores,
9027 but stop searching when we hit an overloading suffix, which is
9028 of the form "__" followed by digits. */
4c4b4cd2 9029
c3e5cd34
PH
9030 tmp = strrchr (name, '.');
9031 if (tmp != NULL)
4c4b4cd2
PH
9032 name = tmp + 1;
9033 else
14f9c5c9 9034 {
4c4b4cd2 9035 while ((tmp = strstr (name, "__")) != NULL)
dda83cd7
SM
9036 {
9037 if (isdigit (tmp[2]))
9038 break;
9039 else
9040 name = tmp + 2;
9041 }
14f9c5c9
AS
9042 }
9043
9044 if (name[0] == 'Q')
9045 {
14f9c5c9 9046 int v;
5b4ee69b 9047
14f9c5c9 9048 if (name[1] == 'U' || name[1] == 'W')
dda83cd7
SM
9049 {
9050 if (sscanf (name + 2, "%x", &v) != 1)
9051 return name;
9052 }
272560b5
TT
9053 else if (((name[1] >= '0' && name[1] <= '9')
9054 || (name[1] >= 'a' && name[1] <= 'z'))
9055 && name[2] == '\0')
9056 {
5f9febe0
TT
9057 storage = string_printf ("'%c'", name[1]);
9058 return storage.c_str ();
272560b5 9059 }
14f9c5c9 9060 else
dda83cd7 9061 return name;
14f9c5c9
AS
9062
9063 if (isascii (v) && isprint (v))
5f9febe0 9064 storage = string_printf ("'%c'", v);
14f9c5c9 9065 else if (name[1] == 'U')
5f9febe0 9066 storage = string_printf ("[\"%02x\"]", v);
14f9c5c9 9067 else
5f9febe0 9068 storage = string_printf ("[\"%04x\"]", v);
14f9c5c9 9069
5f9febe0 9070 return storage.c_str ();
14f9c5c9 9071 }
d2e4a39e 9072 else
4c4b4cd2 9073 {
c3e5cd34
PH
9074 tmp = strstr (name, "__");
9075 if (tmp == NULL)
9076 tmp = strstr (name, "$");
9077 if (tmp != NULL)
dda83cd7 9078 {
5f9febe0
TT
9079 storage = std::string (name, tmp - name);
9080 return storage.c_str ();
dda83cd7 9081 }
4c4b4cd2
PH
9082
9083 return name;
9084 }
14f9c5c9
AS
9085}
9086
14f9c5c9
AS
9087/* Evaluate the subexpression of EXP starting at *POS as for
9088 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9089 expression. */
14f9c5c9 9090
d2e4a39e
AS
9091static struct value *
9092evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9093{
fe1fe7ea 9094 return evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9095}
9096
9097/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9098 value it wraps. */
14f9c5c9 9099
d2e4a39e
AS
9100static struct value *
9101unwrap_value (struct value *val)
14f9c5c9 9102{
df407dfe 9103 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9104
14f9c5c9
AS
9105 if (ada_is_aligner_type (type))
9106 {
de4d072f 9107 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9108 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9109
14f9c5c9 9110 if (ada_type_name (val_type) == NULL)
d0e39ea2 9111 val_type->set_name (ada_type_name (type));
14f9c5c9
AS
9112
9113 return unwrap_value (v);
9114 }
d2e4a39e 9115 else
14f9c5c9 9116 {
d2e4a39e 9117 struct type *raw_real_type =
dda83cd7 9118 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9119
5bf03f13
JB
9120 /* If there is no parallel XVS or XVE type, then the value is
9121 already unwrapped. Return it without further modification. */
9122 if ((type == raw_real_type)
9123 && ada_find_parallel_type (type, "___XVE") == NULL)
9124 return val;
14f9c5c9 9125
d2e4a39e 9126 return
dda83cd7
SM
9127 coerce_unspec_val_to_type
9128 (val, ada_to_fixed_type (raw_real_type, 0,
9129 value_address (val),
9130 NULL, 1));
14f9c5c9
AS
9131 }
9132}
d2e4a39e 9133
d99dcf51
JB
9134/* Given two array types T1 and T2, return nonzero iff both arrays
9135 contain the same number of elements. */
9136
9137static int
9138ada_same_array_size_p (struct type *t1, struct type *t2)
9139{
9140 LONGEST lo1, hi1, lo2, hi2;
9141
9142 /* Get the array bounds in order to verify that the size of
9143 the two arrays match. */
9144 if (!get_array_bounds (t1, &lo1, &hi1)
9145 || !get_array_bounds (t2, &lo2, &hi2))
9146 error (_("unable to determine array bounds"));
9147
9148 /* To make things easier for size comparison, normalize a bit
9149 the case of empty arrays by making sure that the difference
9150 between upper bound and lower bound is always -1. */
9151 if (lo1 > hi1)
9152 hi1 = lo1 - 1;
9153 if (lo2 > hi2)
9154 hi2 = lo2 - 1;
9155
9156 return (hi1 - lo1 == hi2 - lo2);
9157}
9158
9159/* Assuming that VAL is an array of integrals, and TYPE represents
9160 an array with the same number of elements, but with wider integral
9161 elements, return an array "casted" to TYPE. In practice, this
9162 means that the returned array is built by casting each element
9163 of the original array into TYPE's (wider) element type. */
9164
9165static struct value *
9166ada_promote_array_of_integrals (struct type *type, struct value *val)
9167{
9168 struct type *elt_type = TYPE_TARGET_TYPE (type);
9169 LONGEST lo, hi;
9170 struct value *res;
9171 LONGEST i;
9172
9173 /* Verify that both val and type are arrays of scalars, and
9174 that the size of val's elements is smaller than the size
9175 of type's element. */
78134374 9176 gdb_assert (type->code () == TYPE_CODE_ARRAY);
d99dcf51 9177 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
78134374 9178 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
d99dcf51
JB
9179 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9180 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9181 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9182
9183 if (!get_array_bounds (type, &lo, &hi))
9184 error (_("unable to determine array bounds"));
9185
9186 res = allocate_value (type);
9187
9188 /* Promote each array element. */
9189 for (i = 0; i < hi - lo + 1; i++)
9190 {
9191 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9192
9193 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9194 value_contents_all (elt), TYPE_LENGTH (elt_type));
9195 }
9196
9197 return res;
9198}
9199
4c4b4cd2
PH
9200/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9201 return the converted value. */
9202
d2e4a39e
AS
9203static struct value *
9204coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9205{
df407dfe 9206 struct type *type2 = value_type (val);
5b4ee69b 9207
14f9c5c9
AS
9208 if (type == type2)
9209 return val;
9210
61ee279c
PH
9211 type2 = ada_check_typedef (type2);
9212 type = ada_check_typedef (type);
14f9c5c9 9213
78134374
SM
9214 if (type2->code () == TYPE_CODE_PTR
9215 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9
AS
9216 {
9217 val = ada_value_ind (val);
df407dfe 9218 type2 = value_type (val);
14f9c5c9
AS
9219 }
9220
78134374
SM
9221 if (type2->code () == TYPE_CODE_ARRAY
9222 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9 9223 {
d99dcf51
JB
9224 if (!ada_same_array_size_p (type, type2))
9225 error (_("cannot assign arrays of different length"));
9226
9227 if (is_integral_type (TYPE_TARGET_TYPE (type))
9228 && is_integral_type (TYPE_TARGET_TYPE (type2))
9229 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9230 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9231 {
9232 /* Allow implicit promotion of the array elements to
9233 a wider type. */
9234 return ada_promote_array_of_integrals (type, val);
9235 }
9236
9237 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
dda83cd7
SM
9238 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9239 error (_("Incompatible types in assignment"));
04624583 9240 deprecated_set_value_type (val, type);
14f9c5c9 9241 }
d2e4a39e 9242 return val;
14f9c5c9
AS
9243}
9244
4c4b4cd2
PH
9245static struct value *
9246ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9247{
9248 struct value *val;
9249 struct type *type1, *type2;
9250 LONGEST v, v1, v2;
9251
994b9211
AC
9252 arg1 = coerce_ref (arg1);
9253 arg2 = coerce_ref (arg2);
18af8284
JB
9254 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9255 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9256
78134374
SM
9257 if (type1->code () != TYPE_CODE_INT
9258 || type2->code () != TYPE_CODE_INT)
4c4b4cd2
PH
9259 return value_binop (arg1, arg2, op);
9260
76a01679 9261 switch (op)
4c4b4cd2
PH
9262 {
9263 case BINOP_MOD:
9264 case BINOP_DIV:
9265 case BINOP_REM:
9266 break;
9267 default:
9268 return value_binop (arg1, arg2, op);
9269 }
9270
9271 v2 = value_as_long (arg2);
9272 if (v2 == 0)
323e0a4a 9273 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2 9274
c6d940a9 9275 if (type1->is_unsigned () || op == BINOP_MOD)
4c4b4cd2
PH
9276 return value_binop (arg1, arg2, op);
9277
9278 v1 = value_as_long (arg1);
9279 switch (op)
9280 {
9281 case BINOP_DIV:
9282 v = v1 / v2;
76a01679 9283 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
dda83cd7 9284 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9285 break;
9286 case BINOP_REM:
9287 v = v1 % v2;
76a01679 9288 if (v * v1 < 0)
dda83cd7 9289 v -= v2;
4c4b4cd2
PH
9290 break;
9291 default:
9292 /* Should not reach this point. */
9293 v = 0;
9294 }
9295
9296 val = allocate_value (type1);
990a07ab 9297 store_unsigned_integer (value_contents_raw (val),
dda83cd7 9298 TYPE_LENGTH (value_type (val)),
34877895 9299 type_byte_order (type1), v);
4c4b4cd2
PH
9300 return val;
9301}
9302
9303static int
9304ada_value_equal (struct value *arg1, struct value *arg2)
9305{
df407dfe
AC
9306 if (ada_is_direct_array_type (value_type (arg1))
9307 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9308 {
79e8fcaa
JB
9309 struct type *arg1_type, *arg2_type;
9310
f58b38bf 9311 /* Automatically dereference any array reference before
dda83cd7 9312 we attempt to perform the comparison. */
f58b38bf
JB
9313 arg1 = ada_coerce_ref (arg1);
9314 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9315
4c4b4cd2
PH
9316 arg1 = ada_coerce_to_simple_array (arg1);
9317 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9318
9319 arg1_type = ada_check_typedef (value_type (arg1));
9320 arg2_type = ada_check_typedef (value_type (arg2));
9321
78134374 9322 if (arg1_type->code () != TYPE_CODE_ARRAY
dda83cd7
SM
9323 || arg2_type->code () != TYPE_CODE_ARRAY)
9324 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9325 /* FIXME: The following works only for types whose
dda83cd7
SM
9326 representations use all bits (no padding or undefined bits)
9327 and do not have user-defined equality. */
79e8fcaa
JB
9328 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9329 && memcmp (value_contents (arg1), value_contents (arg2),
9330 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9331 }
9332 return value_equal (arg1, arg2);
9333}
9334
52ce6436
PH
9335/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9336 component of LHS (a simple array or a record), updating *POS past
9337 the expression, assuming that LHS is contained in CONTAINER. Does
9338 not modify the inferior's memory, nor does it modify LHS (unless
9339 LHS == CONTAINER). */
9340
9341static void
9342assign_component (struct value *container, struct value *lhs, LONGEST index,
9343 struct expression *exp, int *pos)
9344{
9345 struct value *mark = value_mark ();
9346 struct value *elt;
0e2da9f0 9347 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9348
78134374 9349 if (lhs_type->code () == TYPE_CODE_ARRAY)
52ce6436 9350 {
22601c15
UW
9351 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9352 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9353
52ce6436
PH
9354 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9355 }
9356 else
9357 {
9358 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9359 elt = ada_to_fixed_value (elt);
52ce6436
PH
9360 }
9361
9362 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9363 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9364 else
9365 value_assign_to_component (container, elt,
9366 ada_evaluate_subexp (NULL, exp, pos,
9367 EVAL_NORMAL));
9368
9369 value_free_to_mark (mark);
9370}
9371
9372/* Assuming that LHS represents an lvalue having a record or array
9373 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9374 of that aggregate's value to LHS, advancing *POS past the
9375 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9376 lvalue containing LHS (possibly LHS itself). Does not modify
9377 the inferior's memory, nor does it modify the contents of
0963b4bd 9378 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9379
9380static struct value *
9381assign_aggregate (struct value *container,
9382 struct value *lhs, struct expression *exp,
9383 int *pos, enum noside noside)
9384{
9385 struct type *lhs_type;
9386 int n = exp->elts[*pos+1].longconst;
9387 LONGEST low_index, high_index;
52ce6436 9388 int i;
52ce6436
PH
9389
9390 *pos += 3;
9391 if (noside != EVAL_NORMAL)
9392 {
52ce6436
PH
9393 for (i = 0; i < n; i += 1)
9394 ada_evaluate_subexp (NULL, exp, pos, noside);
9395 return container;
9396 }
9397
9398 container = ada_coerce_ref (container);
9399 if (ada_is_direct_array_type (value_type (container)))
9400 container = ada_coerce_to_simple_array (container);
9401 lhs = ada_coerce_ref (lhs);
9402 if (!deprecated_value_modifiable (lhs))
9403 error (_("Left operand of assignment is not a modifiable lvalue."));
9404
0e2da9f0 9405 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9406 if (ada_is_direct_array_type (lhs_type))
9407 {
9408 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 9409 lhs_type = check_typedef (value_type (lhs));
cf88be68
SM
9410 low_index = lhs_type->bounds ()->low.const_val ();
9411 high_index = lhs_type->bounds ()->high.const_val ();
52ce6436 9412 }
78134374 9413 else if (lhs_type->code () == TYPE_CODE_STRUCT)
52ce6436
PH
9414 {
9415 low_index = 0;
9416 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9417 }
9418 else
9419 error (_("Left-hand side must be array or record."));
9420
cf608cc4 9421 std::vector<LONGEST> indices (4);
52ce6436
PH
9422 indices[0] = indices[1] = low_index - 1;
9423 indices[2] = indices[3] = high_index + 1;
52ce6436
PH
9424
9425 for (i = 0; i < n; i += 1)
9426 {
9427 switch (exp->elts[*pos].opcode)
9428 {
1fbf5ada 9429 case OP_CHOICES:
cf608cc4 9430 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
1fbf5ada
JB
9431 low_index, high_index);
9432 break;
9433 case OP_POSITIONAL:
9434 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436 9435 low_index, high_index);
1fbf5ada
JB
9436 break;
9437 case OP_OTHERS:
9438 if (i != n-1)
9439 error (_("Misplaced 'others' clause"));
cf608cc4
TT
9440 aggregate_assign_others (container, lhs, exp, pos, indices,
9441 low_index, high_index);
1fbf5ada
JB
9442 break;
9443 default:
9444 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9445 }
9446 }
9447
9448 return container;
9449}
9450
9451/* Assign into the component of LHS indexed by the OP_POSITIONAL
9452 construct at *POS, updating *POS past the construct, given that
cf608cc4
TT
9453 the positions are relative to lower bound LOW, where HIGH is the
9454 upper bound. Record the position in INDICES. CONTAINER is as for
0963b4bd 9455 assign_aggregate. */
52ce6436
PH
9456static void
9457aggregate_assign_positional (struct value *container,
9458 struct value *lhs, struct expression *exp,
cf608cc4
TT
9459 int *pos, std::vector<LONGEST> &indices,
9460 LONGEST low, LONGEST high)
52ce6436
PH
9461{
9462 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9463
9464 if (ind - 1 == high)
e1d5a0d2 9465 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9466 if (ind <= high)
9467 {
cf608cc4 9468 add_component_interval (ind, ind, indices);
52ce6436
PH
9469 *pos += 3;
9470 assign_component (container, lhs, ind, exp, pos);
9471 }
9472 else
9473 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9474}
9475
9476/* Assign into the components of LHS indexed by the OP_CHOICES
9477 construct at *POS, updating *POS past the construct, given that
9478 the allowable indices are LOW..HIGH. Record the indices assigned
cf608cc4 9479 to in INDICES. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9480static void
9481aggregate_assign_from_choices (struct value *container,
9482 struct value *lhs, struct expression *exp,
cf608cc4
TT
9483 int *pos, std::vector<LONGEST> &indices,
9484 LONGEST low, LONGEST high)
52ce6436
PH
9485{
9486 int j;
9487 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9488 int choice_pos, expr_pc;
9489 int is_array = ada_is_direct_array_type (value_type (lhs));
9490
9491 choice_pos = *pos += 3;
9492
9493 for (j = 0; j < n_choices; j += 1)
9494 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9495 expr_pc = *pos;
9496 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9497
9498 for (j = 0; j < n_choices; j += 1)
9499 {
9500 LONGEST lower, upper;
9501 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9502
52ce6436
PH
9503 if (op == OP_DISCRETE_RANGE)
9504 {
9505 choice_pos += 1;
9506 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9507 EVAL_NORMAL));
9508 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9509 EVAL_NORMAL));
9510 }
9511 else if (is_array)
9512 {
9513 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9514 EVAL_NORMAL));
9515 upper = lower;
9516 }
9517 else
9518 {
9519 int ind;
0d5cff50 9520 const char *name;
5b4ee69b 9521
52ce6436
PH
9522 switch (op)
9523 {
9524 case OP_NAME:
9525 name = &exp->elts[choice_pos + 2].string;
9526 break;
9527 case OP_VAR_VALUE:
987012b8 9528 name = exp->elts[choice_pos + 2].symbol->natural_name ();
52ce6436
PH
9529 break;
9530 default:
9531 error (_("Invalid record component association."));
9532 }
9533 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9534 ind = 0;
9535 if (! find_struct_field (name, value_type (lhs), 0,
9536 NULL, NULL, NULL, NULL, &ind))
9537 error (_("Unknown component name: %s."), name);
9538 lower = upper = ind;
9539 }
9540
9541 if (lower <= upper && (lower < low || upper > high))
9542 error (_("Index in component association out of bounds."));
9543
cf608cc4 9544 add_component_interval (lower, upper, indices);
52ce6436
PH
9545 while (lower <= upper)
9546 {
9547 int pos1;
5b4ee69b 9548
52ce6436
PH
9549 pos1 = expr_pc;
9550 assign_component (container, lhs, lower, exp, &pos1);
9551 lower += 1;
9552 }
9553 }
9554}
9555
9556/* Assign the value of the expression in the OP_OTHERS construct in
9557 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9558 have not been previously assigned. The index intervals already assigned
cf608cc4
TT
9559 are in INDICES. Updates *POS to after the OP_OTHERS clause.
9560 CONTAINER is as for assign_aggregate. */
52ce6436
PH
9561static void
9562aggregate_assign_others (struct value *container,
9563 struct value *lhs, struct expression *exp,
cf608cc4 9564 int *pos, std::vector<LONGEST> &indices,
52ce6436
PH
9565 LONGEST low, LONGEST high)
9566{
9567 int i;
5ce64950 9568 int expr_pc = *pos + 1;
52ce6436 9569
cf608cc4 9570 int num_indices = indices.size ();
52ce6436
PH
9571 for (i = 0; i < num_indices - 2; i += 2)
9572 {
9573 LONGEST ind;
5b4ee69b 9574
52ce6436
PH
9575 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9576 {
5ce64950 9577 int localpos;
5b4ee69b 9578
5ce64950
MS
9579 localpos = expr_pc;
9580 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9581 }
9582 }
9583 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9584}
9585
cf608cc4
TT
9586/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9587 [ INDICES[0] .. INDICES[1] ],... The resulting intervals do not
9588 overlap. */
52ce6436
PH
9589static void
9590add_component_interval (LONGEST low, LONGEST high,
cf608cc4 9591 std::vector<LONGEST> &indices)
52ce6436
PH
9592{
9593 int i, j;
5b4ee69b 9594
cf608cc4
TT
9595 int size = indices.size ();
9596 for (i = 0; i < size; i += 2) {
52ce6436
PH
9597 if (high >= indices[i] && low <= indices[i + 1])
9598 {
9599 int kh;
5b4ee69b 9600
cf608cc4 9601 for (kh = i + 2; kh < size; kh += 2)
52ce6436
PH
9602 if (high < indices[kh])
9603 break;
9604 if (low < indices[i])
9605 indices[i] = low;
9606 indices[i + 1] = indices[kh - 1];
9607 if (high > indices[i + 1])
9608 indices[i + 1] = high;
cf608cc4
TT
9609 memcpy (indices.data () + i + 2, indices.data () + kh, size - kh);
9610 indices.resize (kh - i - 2);
52ce6436
PH
9611 return;
9612 }
9613 else if (high < indices[i])
9614 break;
9615 }
9616
cf608cc4 9617 indices.resize (indices.size () + 2);
d4813f10 9618 for (j = indices.size () - 1; j >= i + 2; j -= 1)
52ce6436
PH
9619 indices[j] = indices[j - 2];
9620 indices[i] = low;
9621 indices[i + 1] = high;
9622}
9623
6e48bd2c
JB
9624/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
9625 is different. */
9626
9627static struct value *
b7e22850 9628ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
9629{
9630 if (type == ada_check_typedef (value_type (arg2)))
9631 return arg2;
9632
6e48bd2c
JB
9633 return value_cast (type, arg2);
9634}
9635
284614f0
JB
9636/* Evaluating Ada expressions, and printing their result.
9637 ------------------------------------------------------
9638
21649b50
JB
9639 1. Introduction:
9640 ----------------
9641
284614f0
JB
9642 We usually evaluate an Ada expression in order to print its value.
9643 We also evaluate an expression in order to print its type, which
9644 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
9645 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
9646 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
9647 the evaluation compared to the EVAL_NORMAL, but is otherwise very
9648 similar.
9649
9650 Evaluating expressions is a little more complicated for Ada entities
9651 than it is for entities in languages such as C. The main reason for
9652 this is that Ada provides types whose definition might be dynamic.
9653 One example of such types is variant records. Or another example
9654 would be an array whose bounds can only be known at run time.
9655
9656 The following description is a general guide as to what should be
9657 done (and what should NOT be done) in order to evaluate an expression
9658 involving such types, and when. This does not cover how the semantic
9659 information is encoded by GNAT as this is covered separatly. For the
9660 document used as the reference for the GNAT encoding, see exp_dbug.ads
9661 in the GNAT sources.
9662
9663 Ideally, we should embed each part of this description next to its
9664 associated code. Unfortunately, the amount of code is so vast right
9665 now that it's hard to see whether the code handling a particular
9666 situation might be duplicated or not. One day, when the code is
9667 cleaned up, this guide might become redundant with the comments
9668 inserted in the code, and we might want to remove it.
9669
21649b50
JB
9670 2. ``Fixing'' an Entity, the Simple Case:
9671 -----------------------------------------
9672
284614f0
JB
9673 When evaluating Ada expressions, the tricky issue is that they may
9674 reference entities whose type contents and size are not statically
9675 known. Consider for instance a variant record:
9676
9677 type Rec (Empty : Boolean := True) is record
dda83cd7
SM
9678 case Empty is
9679 when True => null;
9680 when False => Value : Integer;
9681 end case;
284614f0
JB
9682 end record;
9683 Yes : Rec := (Empty => False, Value => 1);
9684 No : Rec := (empty => True);
9685
9686 The size and contents of that record depends on the value of the
9687 descriminant (Rec.Empty). At this point, neither the debugging
9688 information nor the associated type structure in GDB are able to
9689 express such dynamic types. So what the debugger does is to create
9690 "fixed" versions of the type that applies to the specific object.
30baf67b 9691 We also informally refer to this operation as "fixing" an object,
284614f0
JB
9692 which means creating its associated fixed type.
9693
9694 Example: when printing the value of variable "Yes" above, its fixed
9695 type would look like this:
9696
9697 type Rec is record
dda83cd7
SM
9698 Empty : Boolean;
9699 Value : Integer;
284614f0
JB
9700 end record;
9701
9702 On the other hand, if we printed the value of "No", its fixed type
9703 would become:
9704
9705 type Rec is record
dda83cd7 9706 Empty : Boolean;
284614f0
JB
9707 end record;
9708
9709 Things become a little more complicated when trying to fix an entity
9710 with a dynamic type that directly contains another dynamic type,
9711 such as an array of variant records, for instance. There are
9712 two possible cases: Arrays, and records.
9713
21649b50
JB
9714 3. ``Fixing'' Arrays:
9715 ---------------------
9716
9717 The type structure in GDB describes an array in terms of its bounds,
9718 and the type of its elements. By design, all elements in the array
9719 have the same type and we cannot represent an array of variant elements
9720 using the current type structure in GDB. When fixing an array,
9721 we cannot fix the array element, as we would potentially need one
9722 fixed type per element of the array. As a result, the best we can do
9723 when fixing an array is to produce an array whose bounds and size
9724 are correct (allowing us to read it from memory), but without having
9725 touched its element type. Fixing each element will be done later,
9726 when (if) necessary.
9727
9728 Arrays are a little simpler to handle than records, because the same
9729 amount of memory is allocated for each element of the array, even if
1b536f04 9730 the amount of space actually used by each element differs from element
21649b50 9731 to element. Consider for instance the following array of type Rec:
284614f0
JB
9732
9733 type Rec_Array is array (1 .. 2) of Rec;
9734
1b536f04
JB
9735 The actual amount of memory occupied by each element might be different
9736 from element to element, depending on the value of their discriminant.
21649b50 9737 But the amount of space reserved for each element in the array remains
1b536f04 9738 fixed regardless. So we simply need to compute that size using
21649b50
JB
9739 the debugging information available, from which we can then determine
9740 the array size (we multiply the number of elements of the array by
9741 the size of each element).
9742
9743 The simplest case is when we have an array of a constrained element
9744 type. For instance, consider the following type declarations:
9745
dda83cd7
SM
9746 type Bounded_String (Max_Size : Integer) is
9747 Length : Integer;
9748 Buffer : String (1 .. Max_Size);
9749 end record;
9750 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
21649b50
JB
9751
9752 In this case, the compiler describes the array as an array of
9753 variable-size elements (identified by its XVS suffix) for which
9754 the size can be read in the parallel XVZ variable.
9755
9756 In the case of an array of an unconstrained element type, the compiler
9757 wraps the array element inside a private PAD type. This type should not
9758 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
9759 that we also use the adjective "aligner" in our code to designate
9760 these wrapper types.
9761
1b536f04 9762 In some cases, the size allocated for each element is statically
21649b50
JB
9763 known. In that case, the PAD type already has the correct size,
9764 and the array element should remain unfixed.
9765
9766 But there are cases when this size is not statically known.
9767 For instance, assuming that "Five" is an integer variable:
284614f0 9768
dda83cd7
SM
9769 type Dynamic is array (1 .. Five) of Integer;
9770 type Wrapper (Has_Length : Boolean := False) is record
9771 Data : Dynamic;
9772 case Has_Length is
9773 when True => Length : Integer;
9774 when False => null;
9775 end case;
9776 end record;
9777 type Wrapper_Array is array (1 .. 2) of Wrapper;
284614f0 9778
dda83cd7
SM
9779 Hello : Wrapper_Array := (others => (Has_Length => True,
9780 Data => (others => 17),
9781 Length => 1));
284614f0
JB
9782
9783
9784 The debugging info would describe variable Hello as being an
9785 array of a PAD type. The size of that PAD type is not statically
9786 known, but can be determined using a parallel XVZ variable.
9787 In that case, a copy of the PAD type with the correct size should
9788 be used for the fixed array.
9789
21649b50
JB
9790 3. ``Fixing'' record type objects:
9791 ----------------------------------
9792
9793 Things are slightly different from arrays in the case of dynamic
284614f0
JB
9794 record types. In this case, in order to compute the associated
9795 fixed type, we need to determine the size and offset of each of
9796 its components. This, in turn, requires us to compute the fixed
9797 type of each of these components.
9798
9799 Consider for instance the example:
9800
dda83cd7
SM
9801 type Bounded_String (Max_Size : Natural) is record
9802 Str : String (1 .. Max_Size);
9803 Length : Natural;
9804 end record;
9805 My_String : Bounded_String (Max_Size => 10);
284614f0
JB
9806
9807 In that case, the position of field "Length" depends on the size
9808 of field Str, which itself depends on the value of the Max_Size
21649b50 9809 discriminant. In order to fix the type of variable My_String,
284614f0
JB
9810 we need to fix the type of field Str. Therefore, fixing a variant
9811 record requires us to fix each of its components.
9812
9813 However, if a component does not have a dynamic size, the component
9814 should not be fixed. In particular, fields that use a PAD type
9815 should not fixed. Here is an example where this might happen
9816 (assuming type Rec above):
9817
9818 type Container (Big : Boolean) is record
dda83cd7
SM
9819 First : Rec;
9820 After : Integer;
9821 case Big is
9822 when True => Another : Integer;
9823 when False => null;
9824 end case;
284614f0
JB
9825 end record;
9826 My_Container : Container := (Big => False,
dda83cd7
SM
9827 First => (Empty => True),
9828 After => 42);
284614f0
JB
9829
9830 In that example, the compiler creates a PAD type for component First,
9831 whose size is constant, and then positions the component After just
9832 right after it. The offset of component After is therefore constant
9833 in this case.
9834
9835 The debugger computes the position of each field based on an algorithm
9836 that uses, among other things, the actual position and size of the field
21649b50
JB
9837 preceding it. Let's now imagine that the user is trying to print
9838 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
9839 end up computing the offset of field After based on the size of the
9840 fixed version of field First. And since in our example First has
9841 only one actual field, the size of the fixed type is actually smaller
9842 than the amount of space allocated to that field, and thus we would
9843 compute the wrong offset of field After.
9844
21649b50
JB
9845 To make things more complicated, we need to watch out for dynamic
9846 components of variant records (identified by the ___XVL suffix in
9847 the component name). Even if the target type is a PAD type, the size
9848 of that type might not be statically known. So the PAD type needs
9849 to be unwrapped and the resulting type needs to be fixed. Otherwise,
9850 we might end up with the wrong size for our component. This can be
9851 observed with the following type declarations:
284614f0 9852
dda83cd7
SM
9853 type Octal is new Integer range 0 .. 7;
9854 type Octal_Array is array (Positive range <>) of Octal;
9855 pragma Pack (Octal_Array);
284614f0 9856
dda83cd7
SM
9857 type Octal_Buffer (Size : Positive) is record
9858 Buffer : Octal_Array (1 .. Size);
9859 Length : Integer;
9860 end record;
284614f0
JB
9861
9862 In that case, Buffer is a PAD type whose size is unset and needs
9863 to be computed by fixing the unwrapped type.
9864
21649b50
JB
9865 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
9866 ----------------------------------------------------------
9867
9868 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
9869 thus far, be actually fixed?
9870
9871 The answer is: Only when referencing that element. For instance
9872 when selecting one component of a record, this specific component
9873 should be fixed at that point in time. Or when printing the value
9874 of a record, each component should be fixed before its value gets
9875 printed. Similarly for arrays, the element of the array should be
9876 fixed when printing each element of the array, or when extracting
9877 one element out of that array. On the other hand, fixing should
9878 not be performed on the elements when taking a slice of an array!
9879
31432a67 9880 Note that one of the side effects of miscomputing the offset and
284614f0
JB
9881 size of each field is that we end up also miscomputing the size
9882 of the containing type. This can have adverse results when computing
9883 the value of an entity. GDB fetches the value of an entity based
9884 on the size of its type, and thus a wrong size causes GDB to fetch
9885 the wrong amount of memory. In the case where the computed size is
9886 too small, GDB fetches too little data to print the value of our
31432a67 9887 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
9888 past the buffer containing the data =:-o. */
9889
ced9779b
JB
9890/* Evaluate a subexpression of EXP, at index *POS, and return a value
9891 for that subexpression cast to TO_TYPE. Advance *POS over the
9892 subexpression. */
9893
9894static value *
9895ada_evaluate_subexp_for_cast (expression *exp, int *pos,
9896 enum noside noside, struct type *to_type)
9897{
9898 int pc = *pos;
9899
9900 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
9901 || exp->elts[pc].opcode == OP_VAR_VALUE)
9902 {
9903 (*pos) += 4;
9904
9905 value *val;
9906 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
dda83cd7
SM
9907 {
9908 if (noside == EVAL_AVOID_SIDE_EFFECTS)
9909 return value_zero (to_type, not_lval);
9910
9911 val = evaluate_var_msym_value (noside,
9912 exp->elts[pc + 1].objfile,
9913 exp->elts[pc + 2].msymbol);
9914 }
ced9779b 9915 else
dda83cd7
SM
9916 val = evaluate_var_value (noside,
9917 exp->elts[pc + 1].block,
9918 exp->elts[pc + 2].symbol);
ced9779b
JB
9919
9920 if (noside == EVAL_SKIP)
dda83cd7 9921 return eval_skip_value (exp);
ced9779b
JB
9922
9923 val = ada_value_cast (to_type, val);
9924
9925 /* Follow the Ada language semantics that do not allow taking
9926 an address of the result of a cast (view conversion in Ada). */
9927 if (VALUE_LVAL (val) == lval_memory)
dda83cd7
SM
9928 {
9929 if (value_lazy (val))
9930 value_fetch_lazy (val);
9931 VALUE_LVAL (val) = not_lval;
9932 }
ced9779b
JB
9933 return val;
9934 }
9935
9936 value *val = evaluate_subexp (to_type, exp, pos, noside);
9937 if (noside == EVAL_SKIP)
9938 return eval_skip_value (exp);
9939 return ada_value_cast (to_type, val);
9940}
9941
62d4bd94
TT
9942/* A helper function for TERNOP_IN_RANGE. */
9943
9944static value *
9945eval_ternop_in_range (struct type *expect_type, struct expression *exp,
9946 enum noside noside,
9947 value *arg1, value *arg2, value *arg3)
9948{
9949 if (noside == EVAL_SKIP)
9950 return eval_skip_value (exp);
9951
9952 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
9953 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
9954 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
9955 return
9956 value_from_longest (type,
9957 (value_less (arg1, arg3)
9958 || value_equal (arg1, arg3))
9959 && (value_less (arg2, arg1)
9960 || value_equal (arg2, arg1)));
9961}
9962
82390ab8
TT
9963/* A helper function for UNOP_NEG. */
9964
9965static value *
9966ada_unop_neg (struct type *expect_type,
9967 struct expression *exp,
9968 enum noside noside, enum exp_opcode op,
9969 struct value *arg1)
9970{
9971 if (noside == EVAL_SKIP)
9972 return eval_skip_value (exp);
9973 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
9974 return value_neg (arg1);
9975}
9976
7efc87ff
TT
9977/* A helper function for UNOP_IN_RANGE. */
9978
9979static value *
9980ada_unop_in_range (struct type *expect_type,
9981 struct expression *exp,
9982 enum noside noside, enum exp_opcode op,
9983 struct value *arg1, struct type *type)
9984{
9985 if (noside == EVAL_SKIP)
9986 return eval_skip_value (exp);
9987
9988 struct value *arg2, *arg3;
9989 switch (type->code ())
9990 {
9991 default:
9992 lim_warning (_("Membership test incompletely implemented; "
9993 "always returns true"));
9994 type = language_bool_type (exp->language_defn, exp->gdbarch);
9995 return value_from_longest (type, (LONGEST) 1);
9996
9997 case TYPE_CODE_RANGE:
9998 arg2 = value_from_longest (type,
9999 type->bounds ()->low.const_val ());
10000 arg3 = value_from_longest (type,
10001 type->bounds ()->high.const_val ());
10002 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10003 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10004 type = language_bool_type (exp->language_defn, exp->gdbarch);
10005 return
10006 value_from_longest (type,
10007 (value_less (arg1, arg3)
10008 || value_equal (arg1, arg3))
10009 && (value_less (arg2, arg1)
10010 || value_equal (arg2, arg1)));
10011 }
10012}
10013
020dbabe
TT
10014/* A helper function for OP_ATR_TAG. */
10015
10016static value *
10017ada_atr_tag (struct type *expect_type,
10018 struct expression *exp,
10019 enum noside noside, enum exp_opcode op,
10020 struct value *arg1)
10021{
10022 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10023 return value_zero (ada_tag_type (arg1), not_lval);
10024
10025 return ada_value_tag (arg1);
10026}
10027
68c75735
TT
10028/* A helper function for OP_ATR_SIZE. */
10029
10030static value *
10031ada_atr_size (struct type *expect_type,
10032 struct expression *exp,
10033 enum noside noside, enum exp_opcode op,
10034 struct value *arg1)
10035{
10036 struct type *type = value_type (arg1);
10037
10038 /* If the argument is a reference, then dereference its type, since
10039 the user is really asking for the size of the actual object,
10040 not the size of the pointer. */
10041 if (type->code () == TYPE_CODE_REF)
10042 type = TYPE_TARGET_TYPE (type);
10043
10044 if (noside == EVAL_SKIP)
10045 return eval_skip_value (exp);
10046 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10047 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
10048 else
10049 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
10050 TARGET_CHAR_BIT * TYPE_LENGTH (type));
10051}
10052
d05e24e6
TT
10053/* A helper function for UNOP_ABS. */
10054
10055static value *
10056ada_abs (struct type *expect_type,
10057 struct expression *exp,
10058 enum noside noside, enum exp_opcode op,
10059 struct value *arg1)
10060{
10061 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10062 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
10063 return value_neg (arg1);
10064 else
10065 return arg1;
10066}
10067
faa1dfd7
TT
10068/* A helper function for BINOP_MUL. */
10069
10070static value *
10071ada_mult_binop (struct type *expect_type,
10072 struct expression *exp,
10073 enum noside noside, enum exp_opcode op,
10074 struct value *arg1, struct value *arg2)
10075{
10076 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10077 {
10078 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10079 return value_zero (value_type (arg1), not_lval);
10080 }
10081 else
10082 {
10083 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10084 return ada_value_binop (arg1, arg2, op);
10085 }
10086}
10087
214b13ac
TT
10088/* A helper function for BINOP_EQUAL and BINOP_NOTEQUAL. */
10089
10090static value *
10091ada_equal_binop (struct type *expect_type,
10092 struct expression *exp,
10093 enum noside noside, enum exp_opcode op,
10094 struct value *arg1, struct value *arg2)
10095{
10096 int tem;
10097 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10098 tem = 0;
10099 else
10100 {
10101 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10102 tem = ada_value_equal (arg1, arg2);
10103 }
10104 if (op == BINOP_NOTEQUAL)
10105 tem = !tem;
10106 struct type *type = language_bool_type (exp->language_defn, exp->gdbarch);
10107 return value_from_longest (type, (LONGEST) tem);
10108}
10109
5ce19db8
TT
10110/* A helper function for TERNOP_SLICE. */
10111
10112static value *
10113ada_ternop_slice (struct expression *exp,
10114 enum noside noside,
10115 struct value *array, struct value *low_bound_val,
10116 struct value *high_bound_val)
10117{
10118 LONGEST low_bound;
10119 LONGEST high_bound;
10120
10121 low_bound_val = coerce_ref (low_bound_val);
10122 high_bound_val = coerce_ref (high_bound_val);
10123 low_bound = value_as_long (low_bound_val);
10124 high_bound = value_as_long (high_bound_val);
10125
10126 /* If this is a reference to an aligner type, then remove all
10127 the aligners. */
10128 if (value_type (array)->code () == TYPE_CODE_REF
10129 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10130 TYPE_TARGET_TYPE (value_type (array)) =
10131 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
10132
10133 if (ada_is_any_packed_array_type (value_type (array)))
10134 error (_("cannot slice a packed array"));
10135
10136 /* If this is a reference to an array or an array lvalue,
10137 convert to a pointer. */
10138 if (value_type (array)->code () == TYPE_CODE_REF
10139 || (value_type (array)->code () == TYPE_CODE_ARRAY
10140 && VALUE_LVAL (array) == lval_memory))
10141 array = value_addr (array);
10142
10143 if (noside == EVAL_AVOID_SIDE_EFFECTS
10144 && ada_is_array_descriptor_type (ada_check_typedef
10145 (value_type (array))))
10146 return empty_array (ada_type_of_array (array, 0), low_bound,
10147 high_bound);
10148
10149 array = ada_coerce_to_simple_array_ptr (array);
10150
10151 /* If we have more than one level of pointer indirection,
10152 dereference the value until we get only one level. */
10153 while (value_type (array)->code () == TYPE_CODE_PTR
10154 && (TYPE_TARGET_TYPE (value_type (array))->code ()
10155 == TYPE_CODE_PTR))
10156 array = value_ind (array);
10157
10158 /* Make sure we really do have an array type before going further,
10159 to avoid a SEGV when trying to get the index type or the target
10160 type later down the road if the debug info generated by
10161 the compiler is incorrect or incomplete. */
10162 if (!ada_is_simple_array_type (value_type (array)))
10163 error (_("cannot take slice of non-array"));
10164
10165 if (ada_check_typedef (value_type (array))->code ()
10166 == TYPE_CODE_PTR)
10167 {
10168 struct type *type0 = ada_check_typedef (value_type (array));
10169
10170 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
10171 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
10172 else
10173 {
10174 struct type *arr_type0 =
10175 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
10176
10177 return ada_value_slice_from_ptr (array, arr_type0,
10178 longest_to_int (low_bound),
10179 longest_to_int (high_bound));
10180 }
10181 }
10182 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10183 return array;
10184 else if (high_bound < low_bound)
10185 return empty_array (value_type (array), low_bound, high_bound);
10186 else
10187 return ada_value_slice (array, longest_to_int (low_bound),
10188 longest_to_int (high_bound));
10189}
10190
b467efaa
TT
10191/* A helper function for BINOP_IN_BOUNDS. */
10192
10193static value *
10194ada_binop_in_bounds (struct expression *exp, enum noside noside,
10195 struct value *arg1, struct value *arg2, int n)
10196{
10197 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10198 {
10199 struct type *type = language_bool_type (exp->language_defn,
10200 exp->gdbarch);
10201 return value_zero (type, not_lval);
10202 }
10203
10204 struct type *type = ada_index_type (value_type (arg2), n, "range");
10205 if (!type)
10206 type = value_type (arg1);
10207
10208 value *arg3 = value_from_longest (type, ada_array_bound (arg2, n, 1));
10209 arg2 = value_from_longest (type, ada_array_bound (arg2, n, 0));
10210
10211 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10212 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
10213 type = language_bool_type (exp->language_defn, exp->gdbarch);
10214 return value_from_longest (type,
10215 (value_less (arg1, arg3)
10216 || value_equal (arg1, arg3))
10217 && (value_less (arg2, arg1)
10218 || value_equal (arg2, arg1)));
10219}
10220
b84564fc
TT
10221/* A helper function for some attribute operations. */
10222
10223static value *
10224ada_unop_atr (struct expression *exp, enum noside noside, enum exp_opcode op,
10225 struct value *arg1, struct type *type_arg, int tem)
10226{
10227 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10228 {
10229 if (type_arg == NULL)
10230 type_arg = value_type (arg1);
10231
10232 if (ada_is_constrained_packed_array_type (type_arg))
10233 type_arg = decode_constrained_packed_array_type (type_arg);
10234
10235 if (!discrete_type_p (type_arg))
10236 {
10237 switch (op)
10238 {
10239 default: /* Should never happen. */
10240 error (_("unexpected attribute encountered"));
10241 case OP_ATR_FIRST:
10242 case OP_ATR_LAST:
10243 type_arg = ada_index_type (type_arg, tem,
10244 ada_attribute_name (op));
10245 break;
10246 case OP_ATR_LENGTH:
10247 type_arg = builtin_type (exp->gdbarch)->builtin_int;
10248 break;
10249 }
10250 }
10251
10252 return value_zero (type_arg, not_lval);
10253 }
10254 else if (type_arg == NULL)
10255 {
10256 arg1 = ada_coerce_ref (arg1);
10257
10258 if (ada_is_constrained_packed_array_type (value_type (arg1)))
10259 arg1 = ada_coerce_to_simple_array (arg1);
10260
10261 struct type *type;
10262 if (op == OP_ATR_LENGTH)
10263 type = builtin_type (exp->gdbarch)->builtin_int;
10264 else
10265 {
10266 type = ada_index_type (value_type (arg1), tem,
10267 ada_attribute_name (op));
10268 if (type == NULL)
10269 type = builtin_type (exp->gdbarch)->builtin_int;
10270 }
10271
10272 switch (op)
10273 {
10274 default: /* Should never happen. */
10275 error (_("unexpected attribute encountered"));
10276 case OP_ATR_FIRST:
10277 return value_from_longest
10278 (type, ada_array_bound (arg1, tem, 0));
10279 case OP_ATR_LAST:
10280 return value_from_longest
10281 (type, ada_array_bound (arg1, tem, 1));
10282 case OP_ATR_LENGTH:
10283 return value_from_longest
10284 (type, ada_array_length (arg1, tem));
10285 }
10286 }
10287 else if (discrete_type_p (type_arg))
10288 {
10289 struct type *range_type;
10290 const char *name = ada_type_name (type_arg);
10291
10292 range_type = NULL;
10293 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
10294 range_type = to_fixed_range_type (type_arg, NULL);
10295 if (range_type == NULL)
10296 range_type = type_arg;
10297 switch (op)
10298 {
10299 default:
10300 error (_("unexpected attribute encountered"));
10301 case OP_ATR_FIRST:
10302 return value_from_longest
10303 (range_type, ada_discrete_type_low_bound (range_type));
10304 case OP_ATR_LAST:
10305 return value_from_longest
10306 (range_type, ada_discrete_type_high_bound (range_type));
10307 case OP_ATR_LENGTH:
10308 error (_("the 'length attribute applies only to array types"));
10309 }
10310 }
10311 else if (type_arg->code () == TYPE_CODE_FLT)
10312 error (_("unimplemented type attribute"));
10313 else
10314 {
10315 LONGEST low, high;
10316
10317 if (ada_is_constrained_packed_array_type (type_arg))
10318 type_arg = decode_constrained_packed_array_type (type_arg);
10319
10320 struct type *type;
10321 if (op == OP_ATR_LENGTH)
10322 type = builtin_type (exp->gdbarch)->builtin_int;
10323 else
10324 {
10325 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
10326 if (type == NULL)
10327 type = builtin_type (exp->gdbarch)->builtin_int;
10328 }
10329
10330 switch (op)
10331 {
10332 default:
10333 error (_("unexpected attribute encountered"));
10334 case OP_ATR_FIRST:
10335 low = ada_array_bound_from_type (type_arg, tem, 0);
10336 return value_from_longest (type, low);
10337 case OP_ATR_LAST:
10338 high = ada_array_bound_from_type (type_arg, tem, 1);
10339 return value_from_longest (type, high);
10340 case OP_ATR_LENGTH:
10341 low = ada_array_bound_from_type (type_arg, tem, 0);
10342 high = ada_array_bound_from_type (type_arg, tem, 1);
10343 return value_from_longest (type, high - low + 1);
10344 }
10345 }
10346}
10347
38dc70cf
TT
10348/* A helper function for OP_ATR_MIN and OP_ATR_MAX. */
10349
10350static struct value *
10351ada_binop_minmax (struct type *expect_type,
10352 struct expression *exp,
10353 enum noside noside, enum exp_opcode op,
10354 struct value *arg1, struct value *arg2)
10355{
10356 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10357 return value_zero (value_type (arg1), not_lval);
10358 else
10359 {
10360 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10361 return value_binop (arg1, arg2,
10362 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
10363 }
10364}
10365
284614f0
JB
10366/* Implement the evaluate_exp routine in the exp_descriptor structure
10367 for the Ada language. */
10368
52ce6436 10369static struct value *
ebf56fd3 10370ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
dda83cd7 10371 int *pos, enum noside noside)
14f9c5c9
AS
10372{
10373 enum exp_opcode op;
b5385fc0 10374 int tem;
14f9c5c9 10375 int pc;
5ec18f2b 10376 int preeval_pos;
14f9c5c9
AS
10377 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10378 struct type *type;
52ce6436 10379 int nargs, oplen;
d2e4a39e 10380 struct value **argvec;
14f9c5c9 10381
d2e4a39e
AS
10382 pc = *pos;
10383 *pos += 1;
14f9c5c9
AS
10384 op = exp->elts[pc].opcode;
10385
d2e4a39e 10386 switch (op)
14f9c5c9
AS
10387 {
10388 default:
10389 *pos -= 1;
6e48bd2c 10390 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10391
10392 if (noside == EVAL_NORMAL)
10393 arg1 = unwrap_value (arg1);
6e48bd2c 10394
edd079d9 10395 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
dda83cd7
SM
10396 then we need to perform the conversion manually, because
10397 evaluate_subexp_standard doesn't do it. This conversion is
10398 necessary in Ada because the different kinds of float/fixed
10399 types in Ada have different representations.
6e48bd2c 10400
dda83cd7
SM
10401 Similarly, we need to perform the conversion from OP_LONG
10402 ourselves. */
edd079d9 10403 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
dda83cd7 10404 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10405
10406 return arg1;
4c4b4cd2
PH
10407
10408 case OP_STRING:
10409 {
dda83cd7
SM
10410 struct value *result;
10411
10412 *pos -= 1;
10413 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10414 /* The result type will have code OP_STRING, bashed there from
10415 OP_ARRAY. Bash it back. */
10416 if (value_type (result)->code () == TYPE_CODE_STRING)
10417 value_type (result)->set_code (TYPE_CODE_ARRAY);
10418 return result;
4c4b4cd2 10419 }
14f9c5c9
AS
10420
10421 case UNOP_CAST:
10422 (*pos) += 2;
10423 type = exp->elts[pc + 1].type;
ced9779b 10424 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10425
4c4b4cd2
PH
10426 case UNOP_QUAL:
10427 (*pos) += 2;
10428 type = exp->elts[pc + 1].type;
10429 return ada_evaluate_subexp (type, exp, pos, noside);
10430
14f9c5c9 10431 case BINOP_ASSIGN:
fe1fe7ea 10432 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
52ce6436
PH
10433 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10434 {
10435 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10436 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10437 return arg1;
10438 return ada_value_assign (arg1, arg1);
10439 }
003f3813 10440 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
dda83cd7
SM
10441 except if the lhs of our assignment is a convenience variable.
10442 In the case of assigning to a convenience variable, the lhs
10443 should be exactly the result of the evaluation of the rhs. */
003f3813
JB
10444 type = value_type (arg1);
10445 if (VALUE_LVAL (arg1) == lval_internalvar)
dda83cd7 10446 type = NULL;
003f3813 10447 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10448 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10449 return arg1;
f411722c
TT
10450 if (VALUE_LVAL (arg1) == lval_internalvar)
10451 {
10452 /* Nothing. */
10453 }
d2e4a39e 10454 else
dda83cd7 10455 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10456 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10457
10458 case BINOP_ADD:
10459 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10460 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10461 if (noside == EVAL_SKIP)
dda83cd7 10462 goto nosideret;
78134374 10463 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10464 return (value_from_longest
10465 (value_type (arg1),
10466 value_as_long (arg1) + value_as_long (arg2)));
78134374 10467 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10468 return (value_from_longest
10469 (value_type (arg2),
10470 value_as_long (arg1) + value_as_long (arg2)));
b49180ac
TT
10471 /* Preserve the original type for use by the range case below.
10472 We cannot cast the result to a reference type, so if ARG1 is
10473 a reference type, find its underlying type. */
b7789565 10474 type = value_type (arg1);
78134374 10475 while (type->code () == TYPE_CODE_REF)
dda83cd7 10476 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10477 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10478 arg1 = value_binop (arg1, arg2, BINOP_ADD);
10479 /* We need to special-case the result of adding to a range.
10480 This is done for the benefit of "ptype". gdb's Ada support
10481 historically used the LHS to set the result type here, so
10482 preserve this behavior. */
10483 if (type->code () == TYPE_CODE_RANGE)
10484 arg1 = value_cast (type, arg1);
10485 return arg1;
14f9c5c9
AS
10486
10487 case BINOP_SUB:
10488 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10489 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10490 if (noside == EVAL_SKIP)
dda83cd7 10491 goto nosideret;
78134374 10492 if (value_type (arg1)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10493 return (value_from_longest
10494 (value_type (arg1),
10495 value_as_long (arg1) - value_as_long (arg2)));
78134374 10496 if (value_type (arg2)->code () == TYPE_CODE_PTR)
dda83cd7
SM
10497 return (value_from_longest
10498 (value_type (arg2),
10499 value_as_long (arg1) - value_as_long (arg2)));
b49180ac
TT
10500 /* Preserve the original type for use by the range case below.
10501 We cannot cast the result to a reference type, so if ARG1 is
10502 a reference type, find its underlying type. */
b7789565 10503 type = value_type (arg1);
78134374 10504 while (type->code () == TYPE_CODE_REF)
dda83cd7 10505 type = TYPE_TARGET_TYPE (type);
bbcdf9ab 10506 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
b49180ac
TT
10507 arg1 = value_binop (arg1, arg2, BINOP_SUB);
10508 /* We need to special-case the result of adding to a range.
10509 This is done for the benefit of "ptype". gdb's Ada support
10510 historically used the LHS to set the result type here, so
10511 preserve this behavior. */
10512 if (type->code () == TYPE_CODE_RANGE)
10513 arg1 = value_cast (type, arg1);
10514 return arg1;
14f9c5c9
AS
10515
10516 case BINOP_MUL:
10517 case BINOP_DIV:
e1578042
JB
10518 case BINOP_REM:
10519 case BINOP_MOD:
fe1fe7ea
SM
10520 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10521 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10522 if (noside == EVAL_SKIP)
dda83cd7 10523 goto nosideret;
faa1dfd7
TT
10524 return ada_mult_binop (expect_type, exp, noside, op,
10525 arg1, arg2);
4c4b4cd2 10526
4c4b4cd2
PH
10527 case BINOP_EQUAL:
10528 case BINOP_NOTEQUAL:
fe1fe7ea 10529 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
df407dfe 10530 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10531 if (noside == EVAL_SKIP)
dda83cd7 10532 goto nosideret;
214b13ac 10533 return ada_equal_binop (expect_type, exp, noside, op, arg1, arg2);
4c4b4cd2
PH
10534
10535 case UNOP_NEG:
fe1fe7ea 10536 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
82390ab8 10537 return ada_unop_neg (expect_type, exp, noside, op, arg1);
4c4b4cd2 10538
2330c6c6
JB
10539 case BINOP_LOGICAL_AND:
10540 case BINOP_LOGICAL_OR:
10541 case UNOP_LOGICAL_NOT:
000d5124 10542 {
dda83cd7 10543 struct value *val;
000d5124 10544
dda83cd7
SM
10545 *pos -= 1;
10546 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1 10547 type = language_bool_type (exp->language_defn, exp->gdbarch);
dda83cd7 10548 return value_cast (type, val);
000d5124 10549 }
2330c6c6
JB
10550
10551 case BINOP_BITWISE_AND:
10552 case BINOP_BITWISE_IOR:
10553 case BINOP_BITWISE_XOR:
000d5124 10554 {
dda83cd7 10555 struct value *val;
000d5124 10556
fe1fe7ea
SM
10557 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10558 *pos = pc;
dda83cd7 10559 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
000d5124 10560
dda83cd7 10561 return value_cast (value_type (arg1), val);
000d5124 10562 }
2330c6c6 10563
14f9c5c9
AS
10564 case OP_VAR_VALUE:
10565 *pos -= 1;
6799def4 10566
14f9c5c9 10567 if (noside == EVAL_SKIP)
dda83cd7
SM
10568 {
10569 *pos += 4;
10570 goto nosideret;
10571 }
da5c522f
JB
10572
10573 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
dda83cd7
SM
10574 /* Only encountered when an unresolved symbol occurs in a
10575 context other than a function call, in which case, it is
10576 invalid. */
10577 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10578 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10579
10580 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10581 {
10582 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
10583 /* Check to see if this is a tagged type. We also need to handle
10584 the case where the type is a reference to a tagged type, but
10585 we have to be careful to exclude pointers to tagged types.
10586 The latter should be shown as usual (as a pointer), whereas
10587 a reference should mostly be transparent to the user. */
10588 if (ada_is_tagged_type (type, 0)
10589 || (type->code () == TYPE_CODE_REF
10590 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10591 {
10592 /* Tagged types are a little special in the fact that the real
10593 type is dynamic and can only be determined by inspecting the
10594 object's tag. This means that we need to get the object's
10595 value first (EVAL_NORMAL) and then extract the actual object
10596 type from its tag.
10597
10598 Note that we cannot skip the final step where we extract
10599 the object type from its tag, because the EVAL_NORMAL phase
10600 results in dynamic components being resolved into fixed ones.
10601 This can cause problems when trying to print the type
10602 description of tagged types whose parent has a dynamic size:
10603 We use the type name of the "_parent" component in order
10604 to print the name of the ancestor type in the type description.
10605 If that component had a dynamic size, the resolution into
10606 a fixed type would result in the loss of that type name,
10607 thus preventing us from printing the name of the ancestor
10608 type in the type description. */
fe1fe7ea 10609 arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);
0d72a7c3 10610
78134374 10611 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10612 {
10613 struct type *actual_type;
10614
10615 actual_type = type_from_tag (ada_value_tag (arg1));
10616 if (actual_type == NULL)
10617 /* If, for some reason, we were unable to determine
10618 the actual type from the tag, then use the static
10619 approximation that we just computed as a fallback.
10620 This can happen if the debugging information is
10621 incomplete, for instance. */
10622 actual_type = type;
10623 return value_zero (actual_type, not_lval);
10624 }
10625 else
10626 {
10627 /* In the case of a ref, ada_coerce_ref takes care
10628 of determining the actual type. But the evaluation
10629 should return a ref as it should be valid to ask
10630 for its address; so rebuild a ref after coerce. */
10631 arg1 = ada_coerce_ref (arg1);
a65cfae5 10632 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10633 }
10634 }
0c1f74cf 10635
84754697
JB
10636 /* Records and unions for which GNAT encodings have been
10637 generated need to be statically fixed as well.
10638 Otherwise, non-static fixing produces a type where
10639 all dynamic properties are removed, which prevents "ptype"
10640 from being able to completely describe the type.
10641 For instance, a case statement in a variant record would be
10642 replaced by the relevant components based on the actual
10643 value of the discriminants. */
78134374 10644 if ((type->code () == TYPE_CODE_STRUCT
84754697 10645 && dynamic_template_type (type) != NULL)
78134374 10646 || (type->code () == TYPE_CODE_UNION
84754697
JB
10647 && ada_find_parallel_type (type, "___XVU") != NULL))
10648 {
10649 *pos += 4;
10650 return value_zero (to_static_fixed_type (type), not_lval);
10651 }
dda83cd7 10652 }
da5c522f
JB
10653
10654 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10655 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10656
10657 case OP_FUNCALL:
10658 (*pos) += 2;
10659
10660 /* Allocate arg vector, including space for the function to be
dda83cd7 10661 called in argvec[0] and a terminating NULL. */
4c4b4cd2 10662 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10663 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10664
10665 if (exp->elts[*pos].opcode == OP_VAR_VALUE
dda83cd7
SM
10666 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
10667 error (_("Unexpected unresolved symbol, %s, during evaluation"),
10668 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2 10669 else
dda83cd7
SM
10670 {
10671 for (tem = 0; tem <= nargs; tem += 1)
fe1fe7ea
SM
10672 argvec[tem] = evaluate_subexp (nullptr, exp, pos, noside);
10673 argvec[tem] = 0;
4c4b4cd2 10674
dda83cd7
SM
10675 if (noside == EVAL_SKIP)
10676 goto nosideret;
10677 }
4c4b4cd2 10678
ad82864c
JB
10679 if (ada_is_constrained_packed_array_type
10680 (desc_base_type (value_type (argvec[0]))))
dda83cd7 10681 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 10682 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
dda83cd7
SM
10683 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10684 /* This is a packed array that has already been fixed, and
284614f0
JB
10685 therefore already coerced to a simple array. Nothing further
10686 to do. */
dda83cd7 10687 ;
78134374 10688 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
10689 {
10690 /* Make sure we dereference references so that all the code below
10691 feels like it's really handling the referenced value. Wrapping
10692 types (for alignment) may be there, so make sure we strip them as
10693 well. */
10694 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10695 }
78134374 10696 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
10697 && VALUE_LVAL (argvec[0]) == lval_memory)
10698 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10699
df407dfe 10700 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10701
10702 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10703 them. So, if this is an array typedef (encoding use for array
10704 access types encoded as fat pointers), strip it now. */
78134374 10705 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
10706 type = ada_typedef_target_type (type);
10707
78134374 10708 if (type->code () == TYPE_CODE_PTR)
dda83cd7
SM
10709 {
10710 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
10711 {
10712 case TYPE_CODE_FUNC:
10713 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10714 break;
10715 case TYPE_CODE_ARRAY:
10716 break;
10717 case TYPE_CODE_STRUCT:
10718 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10719 argvec[0] = ada_value_ind (argvec[0]);
10720 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
10721 break;
10722 default:
10723 error (_("cannot subscript or call something of type `%s'"),
10724 ada_type_name (value_type (argvec[0])));
10725 break;
10726 }
10727 }
4c4b4cd2 10728
78134374 10729 switch (type->code ())
dda83cd7
SM
10730 {
10731 case TYPE_CODE_FUNC:
10732 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10733 {
7022349d
PA
10734 if (TYPE_TARGET_TYPE (type) == NULL)
10735 error_call_unknown_return_type (NULL);
10736 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10737 }
e71585ff
PA
10738 return call_function_by_hand (argvec[0], NULL,
10739 gdb::make_array_view (argvec + 1,
10740 nargs));
c8ea1972
PH
10741 case TYPE_CODE_INTERNAL_FUNCTION:
10742 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10743 /* We don't know anything about what the internal
10744 function might return, but we have to return
10745 something. */
10746 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10747 not_lval);
10748 else
10749 return call_internal_function (exp->gdbarch, exp->language_defn,
10750 argvec[0], nargs, argvec + 1);
10751
dda83cd7
SM
10752 case TYPE_CODE_STRUCT:
10753 {
10754 int arity;
10755
10756 arity = ada_array_arity (type);
10757 type = ada_array_element_type (type, nargs);
10758 if (type == NULL)
10759 error (_("cannot subscript or call a record"));
10760 if (arity != nargs)
10761 error (_("wrong number of subscripts; expecting %d"), arity);
10762 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10763 return value_zero (ada_aligned_type (type), lval_memory);
10764 return
10765 unwrap_value (ada_value_subscript
10766 (argvec[0], nargs, argvec + 1));
10767 }
10768 case TYPE_CODE_ARRAY:
10769 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10770 {
10771 type = ada_array_element_type (type, nargs);
10772 if (type == NULL)
10773 error (_("element type of array unknown"));
10774 else
10775 return value_zero (ada_aligned_type (type), lval_memory);
10776 }
10777 return
10778 unwrap_value (ada_value_subscript
10779 (ada_coerce_to_simple_array (argvec[0]),
10780 nargs, argvec + 1));
10781 case TYPE_CODE_PTR: /* Pointer to array */
10782 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10783 {
deede10c 10784 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
dda83cd7
SM
10785 type = ada_array_element_type (type, nargs);
10786 if (type == NULL)
10787 error (_("element type of array unknown"));
10788 else
10789 return value_zero (ada_aligned_type (type), lval_memory);
10790 }
10791 return
10792 unwrap_value (ada_value_ptr_subscript (argvec[0],
deede10c 10793 nargs, argvec + 1));
4c4b4cd2 10794
dda83cd7
SM
10795 default:
10796 error (_("Attempt to index or call something other than an "
e1d5a0d2 10797 "array or function"));
dda83cd7 10798 }
4c4b4cd2
PH
10799
10800 case TERNOP_SLICE:
10801 {
fe1fe7ea
SM
10802 struct value *array = evaluate_subexp (nullptr, exp, pos, noside);
10803 struct value *low_bound_val
10804 = evaluate_subexp (nullptr, exp, pos, noside);
10805 struct value *high_bound_val
10806 = evaluate_subexp (nullptr, exp, pos, noside);
dda83cd7
SM
10807
10808 if (noside == EVAL_SKIP)
10809 goto nosideret;
10810
5ce19db8
TT
10811 return ada_ternop_slice (exp, noside, array, low_bound_val,
10812 high_bound_val);
4c4b4cd2 10813 }
14f9c5c9 10814
4c4b4cd2
PH
10815 case UNOP_IN_RANGE:
10816 (*pos) += 2;
fe1fe7ea 10817 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
8008e265 10818 type = check_typedef (exp->elts[pc + 1].type);
7efc87ff 10819 return ada_unop_in_range (expect_type, exp, noside, op, arg1, type);
4c4b4cd2
PH
10820
10821 case BINOP_IN_BOUNDS:
14f9c5c9 10822 (*pos) += 2;
fe1fe7ea
SM
10823 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10824 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10825
4c4b4cd2 10826 if (noside == EVAL_SKIP)
dda83cd7 10827 goto nosideret;
14f9c5c9 10828
4c4b4cd2 10829 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10830
b467efaa 10831 return ada_binop_in_bounds (exp, noside, arg1, arg2, tem);
4c4b4cd2
PH
10832
10833 case TERNOP_IN_RANGE:
fe1fe7ea
SM
10834 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10835 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
10836 arg3 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10837
62d4bd94 10838 return eval_ternop_in_range (expect_type, exp, noside, arg1, arg2, arg3);
4c4b4cd2
PH
10839
10840 case OP_ATR_FIRST:
10841 case OP_ATR_LAST:
10842 case OP_ATR_LENGTH:
10843 {
dda83cd7 10844 struct type *type_arg;
5b4ee69b 10845
dda83cd7
SM
10846 if (exp->elts[*pos].opcode == OP_TYPE)
10847 {
fe1fe7ea
SM
10848 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10849 arg1 = NULL;
dda83cd7
SM
10850 type_arg = check_typedef (exp->elts[pc + 2].type);
10851 }
10852 else
10853 {
fe1fe7ea
SM
10854 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10855 type_arg = NULL;
dda83cd7 10856 }
76a01679 10857
dda83cd7
SM
10858 if (exp->elts[*pos].opcode != OP_LONG)
10859 error (_("Invalid operand to '%s"), ada_attribute_name (op));
10860 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10861 *pos += 4;
76a01679 10862
dda83cd7
SM
10863 if (noside == EVAL_SKIP)
10864 goto nosideret;
1eea4ebd 10865
b84564fc 10866 return ada_unop_atr (exp, noside, op, arg1, type_arg, tem);
14f9c5c9
AS
10867 }
10868
4c4b4cd2 10869 case OP_ATR_TAG:
fe1fe7ea 10870 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10871 if (noside == EVAL_SKIP)
dda83cd7 10872 goto nosideret;
020dbabe 10873 return ada_atr_tag (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
10874
10875 case OP_ATR_MIN:
10876 case OP_ATR_MAX:
fe1fe7ea
SM
10877 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10878 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10879 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10880 if (noside == EVAL_SKIP)
dda83cd7 10881 goto nosideret;
38dc70cf 10882 return ada_binop_minmax (expect_type, exp, noside, op, arg1, arg2);
14f9c5c9 10883
4c4b4cd2
PH
10884 case OP_ATR_MODULUS:
10885 {
dda83cd7 10886 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 10887
fe1fe7ea
SM
10888 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10889 if (noside == EVAL_SKIP)
dda83cd7 10890 goto nosideret;
4c4b4cd2 10891
dda83cd7
SM
10892 if (!ada_is_modular_type (type_arg))
10893 error (_("'modulus must be applied to modular type"));
4c4b4cd2 10894
dda83cd7
SM
10895 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
10896 ada_modulus (type_arg));
4c4b4cd2
PH
10897 }
10898
10899
10900 case OP_ATR_POS:
fe1fe7ea
SM
10901 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10902 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10903 if (noside == EVAL_SKIP)
dda83cd7 10904 goto nosideret;
3cb382c9
UW
10905 type = builtin_type (exp->gdbarch)->builtin_int;
10906 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10907 return value_zero (type, not_lval);
14f9c5c9 10908 else
3cb382c9 10909 return value_pos_atr (type, arg1);
14f9c5c9 10910
4c4b4cd2 10911 case OP_ATR_SIZE:
fe1fe7ea 10912 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
68c75735 10913 return ada_atr_size (expect_type, exp, noside, op, arg1);
4c4b4cd2
PH
10914
10915 case OP_ATR_VAL:
fe1fe7ea
SM
10916 evaluate_subexp (nullptr, exp, pos, EVAL_SKIP);
10917 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10918 type = exp->elts[pc + 2].type;
14f9c5c9 10919 if (noside == EVAL_SKIP)
dda83cd7 10920 goto nosideret;
4c4b4cd2 10921 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10922 return value_zero (type, not_lval);
4c4b4cd2 10923 else
dda83cd7 10924 return value_val_atr (type, arg1);
4c4b4cd2
PH
10925
10926 case BINOP_EXP:
fe1fe7ea
SM
10927 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
10928 arg2 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10929 if (noside == EVAL_SKIP)
dda83cd7 10930 goto nosideret;
4c4b4cd2 10931 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 10932 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 10933 else
f44316fa
UW
10934 {
10935 /* For integer exponentiation operations,
10936 only promote the first argument. */
10937 if (is_integral_type (value_type (arg2)))
10938 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10939 else
10940 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10941
10942 return value_binop (arg1, arg2, op);
10943 }
4c4b4cd2
PH
10944
10945 case UNOP_PLUS:
fe1fe7ea 10946 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10947 if (noside == EVAL_SKIP)
dda83cd7 10948 goto nosideret;
4c4b4cd2 10949 else
dda83cd7 10950 return arg1;
4c4b4cd2
PH
10951
10952 case UNOP_ABS:
fe1fe7ea 10953 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
4c4b4cd2 10954 if (noside == EVAL_SKIP)
dda83cd7 10955 goto nosideret;
d05e24e6 10956 return ada_abs (expect_type, exp, noside, op, arg1);
14f9c5c9
AS
10957
10958 case UNOP_IND:
5ec18f2b 10959 preeval_pos = *pos;
fe1fe7ea 10960 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 10961 if (noside == EVAL_SKIP)
dda83cd7 10962 goto nosideret;
df407dfe 10963 type = ada_check_typedef (value_type (arg1));
14f9c5c9 10964 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
10965 {
10966 if (ada_is_array_descriptor_type (type))
10967 /* GDB allows dereferencing GNAT array descriptors. */
10968 {
10969 struct type *arrType = ada_type_of_array (arg1, 0);
10970
10971 if (arrType == NULL)
10972 error (_("Attempt to dereference null array pointer."));
10973 return value_at_lazy (arrType, 0);
10974 }
10975 else if (type->code () == TYPE_CODE_PTR
10976 || type->code () == TYPE_CODE_REF
10977 /* In C you can dereference an array to get the 1st elt. */
10978 || type->code () == TYPE_CODE_ARRAY)
10979 {
10980 /* As mentioned in the OP_VAR_VALUE case, tagged types can
10981 only be determined by inspecting the object's tag.
10982 This means that we need to evaluate completely the
10983 expression in order to get its type. */
5ec18f2b 10984
78134374
SM
10985 if ((type->code () == TYPE_CODE_REF
10986 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
10987 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
10988 {
fe1fe7ea
SM
10989 arg1
10990 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
10991 type = value_type (ada_value_ind (arg1));
10992 }
10993 else
10994 {
10995 type = to_static_fixed_type
10996 (ada_aligned_type
10997 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
10998 }
c1b5a1a6 10999 ada_ensure_varsize_limit (type);
dda83cd7
SM
11000 return value_zero (type, lval_memory);
11001 }
11002 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11003 {
11004 /* GDB allows dereferencing an int. */
11005 if (expect_type == NULL)
11006 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11007 lval_memory);
11008 else
11009 {
11010 expect_type =
11011 to_static_fixed_type (ada_aligned_type (expect_type));
11012 return value_zero (expect_type, lval_memory);
11013 }
11014 }
dda83cd7
SM
11015 else
11016 error (_("Attempt to take contents of a non-pointer value."));
11017 }
0963b4bd 11018 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11019 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11020
78134374 11021 if (type->code () == TYPE_CODE_INT)
dda83cd7
SM
11022 /* GDB allows dereferencing an int. If we were given
11023 the expect_type, then use that as the target type.
11024 Otherwise, assume that the target type is an int. */
11025 {
11026 if (expect_type != NULL)
96967637
JB
11027 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11028 arg1));
11029 else
11030 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11031 (CORE_ADDR) value_as_address (arg1));
dda83cd7 11032 }
6b0d7253 11033
4c4b4cd2 11034 if (ada_is_array_descriptor_type (type))
dda83cd7
SM
11035 /* GDB allows dereferencing GNAT array descriptors. */
11036 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11037 else
dda83cd7 11038 return ada_value_ind (arg1);
14f9c5c9
AS
11039
11040 case STRUCTOP_STRUCT:
11041 tem = longest_to_int (exp->elts[pc + 1].longconst);
11042 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11043 preeval_pos = *pos;
fe1fe7ea 11044 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
14f9c5c9 11045 if (noside == EVAL_SKIP)
dda83cd7 11046 goto nosideret;
14f9c5c9 11047 if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7
SM
11048 {
11049 struct type *type1 = value_type (arg1);
5b4ee69b 11050
dda83cd7
SM
11051 if (ada_is_tagged_type (type1, 1))
11052 {
11053 type = ada_lookup_struct_elt_type (type1,
11054 &exp->elts[pc + 2].string,
11055 1, 1);
5ec18f2b
JG
11056
11057 /* If the field is not found, check if it exists in the
11058 extension of this object's type. This means that we
11059 need to evaluate completely the expression. */
11060
dda83cd7 11061 if (type == NULL)
5ec18f2b 11062 {
fe1fe7ea
SM
11063 arg1
11064 = evaluate_subexp (nullptr, exp, &preeval_pos, EVAL_NORMAL);
5ec18f2b
JG
11065 arg1 = ada_value_struct_elt (arg1,
11066 &exp->elts[pc + 2].string,
11067 0);
11068 arg1 = unwrap_value (arg1);
11069 type = value_type (ada_to_fixed_value (arg1));
11070 }
dda83cd7
SM
11071 }
11072 else
11073 type =
11074 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
11075 0);
11076
11077 return value_zero (ada_aligned_type (type), lval_memory);
11078 }
14f9c5c9 11079 else
a579cd9a
MW
11080 {
11081 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11082 arg1 = unwrap_value (arg1);
11083 return ada_to_fixed_value (arg1);
11084 }
284614f0 11085
14f9c5c9 11086 case OP_TYPE:
4c4b4cd2 11087 /* The value is not supposed to be used. This is here to make it
dda83cd7 11088 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11089 (*pos) += 2;
11090 if (noside == EVAL_SKIP)
dda83cd7 11091 goto nosideret;
14f9c5c9 11092 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
dda83cd7 11093 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11094 else
dda83cd7 11095 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11096
11097 case OP_AGGREGATE:
11098 case OP_CHOICES:
11099 case OP_OTHERS:
11100 case OP_DISCRETE_RANGE:
11101 case OP_POSITIONAL:
11102 case OP_NAME:
11103 if (noside == EVAL_NORMAL)
11104 switch (op)
11105 {
11106 case OP_NAME:
11107 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11108 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11109 case OP_AGGREGATE:
11110 error (_("Aggregates only allowed on the right of an assignment"));
11111 default:
0963b4bd
MS
11112 internal_error (__FILE__, __LINE__,
11113 _("aggregate apparently mangled"));
52ce6436
PH
11114 }
11115
11116 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11117 *pos += oplen - 1;
11118 for (tem = 0; tem < nargs; tem += 1)
11119 ada_evaluate_subexp (NULL, exp, pos, noside);
11120 goto nosideret;
14f9c5c9
AS
11121 }
11122
11123nosideret:
ced9779b 11124 return eval_skip_value (exp);
14f9c5c9 11125}
14f9c5c9 11126\f
d2e4a39e 11127
4c4b4cd2
PH
11128/* Return non-zero iff TYPE represents a System.Address type. */
11129
11130int
11131ada_is_system_address_type (struct type *type)
11132{
7d93a1e0 11133 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11134}
11135
14f9c5c9 11136\f
d2e4a39e 11137
dda83cd7 11138 /* Range types */
14f9c5c9
AS
11139
11140/* Scan STR beginning at position K for a discriminant name, and
11141 return the value of that discriminant field of DVAL in *PX. If
11142 PNEW_K is not null, put the position of the character beyond the
11143 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11144 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11145
11146static int
108d56a4 11147scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
dda83cd7 11148 int *pnew_k)
14f9c5c9 11149{
5f9febe0 11150 static std::string storage;
5da1a4d3 11151 const char *pstart, *pend, *bound;
d2e4a39e 11152 struct value *bound_val;
14f9c5c9
AS
11153
11154 if (dval == NULL || str == NULL || str[k] == '\0')
11155 return 0;
11156
5da1a4d3
SM
11157 pstart = str + k;
11158 pend = strstr (pstart, "__");
14f9c5c9
AS
11159 if (pend == NULL)
11160 {
5da1a4d3 11161 bound = pstart;
14f9c5c9
AS
11162 k += strlen (bound);
11163 }
d2e4a39e 11164 else
14f9c5c9 11165 {
5da1a4d3
SM
11166 int len = pend - pstart;
11167
11168 /* Strip __ and beyond. */
5f9febe0
TT
11169 storage = std::string (pstart, len);
11170 bound = storage.c_str ();
d2e4a39e 11171 k = pend - str;
14f9c5c9 11172 }
d2e4a39e 11173
df407dfe 11174 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11175 if (bound_val == NULL)
11176 return 0;
11177
11178 *px = value_as_long (bound_val);
11179 if (pnew_k != NULL)
11180 *pnew_k = k;
11181 return 1;
11182}
11183
25a1127b
TT
11184/* Value of variable named NAME. Only exact matches are considered.
11185 If no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11186 otherwise causes an error with message ERR_MSG. */
11187
d2e4a39e 11188static struct value *
edb0c9cb 11189get_var_value (const char *name, const char *err_msg)
14f9c5c9 11190{
25a1127b
TT
11191 std::string quoted_name = add_angle_brackets (name);
11192
11193 lookup_name_info lookup_name (quoted_name, symbol_name_match_type::FULL);
14f9c5c9 11194
d1183b06
TT
11195 std::vector<struct block_symbol> syms
11196 = ada_lookup_symbol_list_worker (lookup_name,
11197 get_selected_block (0),
11198 VAR_DOMAIN, 1);
14f9c5c9 11199
d1183b06 11200 if (syms.size () != 1)
14f9c5c9
AS
11201 {
11202 if (err_msg == NULL)
dda83cd7 11203 return 0;
14f9c5c9 11204 else
dda83cd7 11205 error (("%s"), err_msg);
14f9c5c9
AS
11206 }
11207
54d343a2 11208 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11209}
d2e4a39e 11210
edb0c9cb
PA
11211/* Value of integer variable named NAME in the current environment.
11212 If no such variable is found, returns false. Otherwise, sets VALUE
11213 to the variable's value and returns true. */
4c4b4cd2 11214
edb0c9cb
PA
11215bool
11216get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11217{
4c4b4cd2 11218 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11219
14f9c5c9 11220 if (var_val == 0)
edb0c9cb
PA
11221 return false;
11222
11223 value = value_as_long (var_val);
11224 return true;
14f9c5c9 11225}
d2e4a39e 11226
14f9c5c9
AS
11227
11228/* Return a range type whose base type is that of the range type named
11229 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11230 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11231 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11232 corresponding range type from debug information; fall back to using it
11233 if symbol lookup fails. If a new type must be created, allocate it
11234 like ORIG_TYPE was. The bounds information, in general, is encoded
11235 in NAME, the base type given in the named range type. */
14f9c5c9 11236
d2e4a39e 11237static struct type *
28c85d6c 11238to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11239{
0d5cff50 11240 const char *name;
14f9c5c9 11241 struct type *base_type;
108d56a4 11242 const char *subtype_info;
14f9c5c9 11243
28c85d6c 11244 gdb_assert (raw_type != NULL);
7d93a1e0 11245 gdb_assert (raw_type->name () != NULL);
dddfab26 11246
78134374 11247 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11248 base_type = TYPE_TARGET_TYPE (raw_type);
11249 else
11250 base_type = raw_type;
11251
7d93a1e0 11252 name = raw_type->name ();
14f9c5c9
AS
11253 subtype_info = strstr (name, "___XD");
11254 if (subtype_info == NULL)
690cc4eb 11255 {
43bbcdc2
PH
11256 LONGEST L = ada_discrete_type_low_bound (raw_type);
11257 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11258
690cc4eb
PH
11259 if (L < INT_MIN || U > INT_MAX)
11260 return raw_type;
11261 else
0c9c3474
SA
11262 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11263 L, U);
690cc4eb 11264 }
14f9c5c9
AS
11265 else
11266 {
14f9c5c9
AS
11267 int prefix_len = subtype_info - name;
11268 LONGEST L, U;
11269 struct type *type;
108d56a4 11270 const char *bounds_str;
14f9c5c9
AS
11271 int n;
11272
14f9c5c9
AS
11273 subtype_info += 5;
11274 bounds_str = strchr (subtype_info, '_');
11275 n = 1;
11276
d2e4a39e 11277 if (*subtype_info == 'L')
dda83cd7
SM
11278 {
11279 if (!ada_scan_number (bounds_str, n, &L, &n)
11280 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11281 return raw_type;
11282 if (bounds_str[n] == '_')
11283 n += 2;
11284 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
11285 n += 1;
11286 subtype_info += 1;
11287 }
d2e4a39e 11288 else
dda83cd7 11289 {
5f9febe0
TT
11290 std::string name_buf = std::string (name, prefix_len) + "___L";
11291 if (!get_int_var_value (name_buf.c_str (), L))
dda83cd7
SM
11292 {
11293 lim_warning (_("Unknown lower bound, using 1."));
11294 L = 1;
11295 }
11296 }
14f9c5c9 11297
d2e4a39e 11298 if (*subtype_info == 'U')
dda83cd7
SM
11299 {
11300 if (!ada_scan_number (bounds_str, n, &U, &n)
11301 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11302 return raw_type;
11303 }
d2e4a39e 11304 else
dda83cd7 11305 {
5f9febe0
TT
11306 std::string name_buf = std::string (name, prefix_len) + "___U";
11307 if (!get_int_var_value (name_buf.c_str (), U))
dda83cd7
SM
11308 {
11309 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
11310 U = L;
11311 }
11312 }
14f9c5c9 11313
0c9c3474
SA
11314 type = create_static_range_type (alloc_type_copy (raw_type),
11315 base_type, L, U);
f5a91472 11316 /* create_static_range_type alters the resulting type's length
dda83cd7
SM
11317 to match the size of the base_type, which is not what we want.
11318 Set it back to the original range type's length. */
f5a91472 11319 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11320 type->set_name (name);
14f9c5c9
AS
11321 return type;
11322 }
11323}
11324
4c4b4cd2
PH
11325/* True iff NAME is the name of a range type. */
11326
14f9c5c9 11327int
d2e4a39e 11328ada_is_range_type_name (const char *name)
14f9c5c9
AS
11329{
11330 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11331}
14f9c5c9 11332\f
d2e4a39e 11333
dda83cd7 11334 /* Modular types */
4c4b4cd2
PH
11335
11336/* True iff TYPE is an Ada modular type. */
14f9c5c9 11337
14f9c5c9 11338int
d2e4a39e 11339ada_is_modular_type (struct type *type)
14f9c5c9 11340{
18af8284 11341 struct type *subranged_type = get_base_type (type);
14f9c5c9 11342
78134374 11343 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
dda83cd7
SM
11344 && subranged_type->code () == TYPE_CODE_INT
11345 && subranged_type->is_unsigned ());
14f9c5c9
AS
11346}
11347
4c4b4cd2
PH
11348/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11349
61ee279c 11350ULONGEST
0056e4d5 11351ada_modulus (struct type *type)
14f9c5c9 11352{
5e500d33
SM
11353 const dynamic_prop &high = type->bounds ()->high;
11354
11355 if (high.kind () == PROP_CONST)
11356 return (ULONGEST) high.const_val () + 1;
11357
11358 /* If TYPE is unresolved, the high bound might be a location list. Return
11359 0, for lack of a better value to return. */
11360 return 0;
14f9c5c9 11361}
d2e4a39e 11362\f
f7f9143b
JB
11363
11364/* Ada exception catchpoint support:
11365 ---------------------------------
11366
11367 We support 3 kinds of exception catchpoints:
11368 . catchpoints on Ada exceptions
11369 . catchpoints on unhandled Ada exceptions
11370 . catchpoints on failed assertions
11371
11372 Exceptions raised during failed assertions, or unhandled exceptions
11373 could perfectly be caught with the general catchpoint on Ada exceptions.
11374 However, we can easily differentiate these two special cases, and having
11375 the option to distinguish these two cases from the rest can be useful
11376 to zero-in on certain situations.
11377
11378 Exception catchpoints are a specialized form of breakpoint,
11379 since they rely on inserting breakpoints inside known routines
11380 of the GNAT runtime. The implementation therefore uses a standard
11381 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11382 of breakpoint_ops.
11383
0259addd
JB
11384 Support in the runtime for exception catchpoints have been changed
11385 a few times already, and these changes affect the implementation
11386 of these catchpoints. In order to be able to support several
11387 variants of the runtime, we use a sniffer that will determine
28010a5d 11388 the runtime variant used by the program being debugged. */
f7f9143b 11389
82eacd52
JB
11390/* Ada's standard exceptions.
11391
11392 The Ada 83 standard also defined Numeric_Error. But there so many
11393 situations where it was unclear from the Ada 83 Reference Manual
11394 (RM) whether Constraint_Error or Numeric_Error should be raised,
11395 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11396 Interpretation saying that anytime the RM says that Numeric_Error
11397 should be raised, the implementation may raise Constraint_Error.
11398 Ada 95 went one step further and pretty much removed Numeric_Error
11399 from the list of standard exceptions (it made it a renaming of
11400 Constraint_Error, to help preserve compatibility when compiling
11401 an Ada83 compiler). As such, we do not include Numeric_Error from
11402 this list of standard exceptions. */
3d0b0fa3 11403
27087b7f 11404static const char * const standard_exc[] = {
3d0b0fa3
JB
11405 "constraint_error",
11406 "program_error",
11407 "storage_error",
11408 "tasking_error"
11409};
11410
0259addd
JB
11411typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11412
11413/* A structure that describes how to support exception catchpoints
11414 for a given executable. */
11415
11416struct exception_support_info
11417{
11418 /* The name of the symbol to break on in order to insert
11419 a catchpoint on exceptions. */
11420 const char *catch_exception_sym;
11421
11422 /* The name of the symbol to break on in order to insert
11423 a catchpoint on unhandled exceptions. */
11424 const char *catch_exception_unhandled_sym;
11425
11426 /* The name of the symbol to break on in order to insert
11427 a catchpoint on failed assertions. */
11428 const char *catch_assert_sym;
11429
9f757bf7
XR
11430 /* The name of the symbol to break on in order to insert
11431 a catchpoint on exception handling. */
11432 const char *catch_handlers_sym;
11433
0259addd
JB
11434 /* Assuming that the inferior just triggered an unhandled exception
11435 catchpoint, this function is responsible for returning the address
11436 in inferior memory where the name of that exception is stored.
11437 Return zero if the address could not be computed. */
11438 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11439};
11440
11441static CORE_ADDR ada_unhandled_exception_name_addr (void);
11442static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11443
11444/* The following exception support info structure describes how to
11445 implement exception catchpoints with the latest version of the
ca683e3a 11446 Ada runtime (as of 2019-08-??). */
0259addd
JB
11447
11448static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11449{
11450 "__gnat_debug_raise_exception", /* catch_exception_sym */
11451 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11452 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11453 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11454 ada_unhandled_exception_name_addr
11455};
11456
11457/* The following exception support info structure describes how to
11458 implement exception catchpoints with an earlier version of the
11459 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11460
11461static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11462{
11463 "__gnat_debug_raise_exception", /* catch_exception_sym */
11464 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11465 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11466 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11467 ada_unhandled_exception_name_addr
11468};
11469
11470/* The following exception support info structure describes how to
11471 implement exception catchpoints with a slightly older version
11472 of the Ada runtime. */
11473
11474static const struct exception_support_info exception_support_info_fallback =
11475{
11476 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11477 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11478 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11479 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11480 ada_unhandled_exception_name_addr_from_raise
11481};
11482
f17011e0
JB
11483/* Return nonzero if we can detect the exception support routines
11484 described in EINFO.
11485
11486 This function errors out if an abnormal situation is detected
11487 (for instance, if we find the exception support routines, but
11488 that support is found to be incomplete). */
11489
11490static int
11491ada_has_this_exception_support (const struct exception_support_info *einfo)
11492{
11493 struct symbol *sym;
11494
11495 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11496 that should be compiled with debugging information. As a result, we
11497 expect to find that symbol in the symtabs. */
11498
11499 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11500 if (sym == NULL)
a6af7abe
JB
11501 {
11502 /* Perhaps we did not find our symbol because the Ada runtime was
11503 compiled without debugging info, or simply stripped of it.
11504 It happens on some GNU/Linux distributions for instance, where
11505 users have to install a separate debug package in order to get
11506 the runtime's debugging info. In that situation, let the user
11507 know why we cannot insert an Ada exception catchpoint.
11508
11509 Note: Just for the purpose of inserting our Ada exception
11510 catchpoint, we could rely purely on the associated minimal symbol.
11511 But we would be operating in degraded mode anyway, since we are
11512 still lacking the debugging info needed later on to extract
11513 the name of the exception being raised (this name is printed in
11514 the catchpoint message, and is also used when trying to catch
11515 a specific exception). We do not handle this case for now. */
3b7344d5 11516 struct bound_minimal_symbol msym
1c8e84b0
JB
11517 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11518
3b7344d5 11519 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11520 error (_("Your Ada runtime appears to be missing some debugging "
11521 "information.\nCannot insert Ada exception catchpoint "
11522 "in this configuration."));
11523
11524 return 0;
11525 }
f17011e0
JB
11526
11527 /* Make sure that the symbol we found corresponds to a function. */
11528
11529 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11530 {
11531 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11532 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11533 return 0;
11534 }
11535
11536 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11537 if (sym == NULL)
11538 {
11539 struct bound_minimal_symbol msym
11540 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11541
11542 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11543 error (_("Your Ada runtime appears to be missing some debugging "
11544 "information.\nCannot insert Ada exception catchpoint "
11545 "in this configuration."));
11546
11547 return 0;
11548 }
11549
11550 /* Make sure that the symbol we found corresponds to a function. */
11551
11552 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11553 {
11554 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11555 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11556 return 0;
11557 }
f17011e0
JB
11558
11559 return 1;
11560}
11561
0259addd
JB
11562/* Inspect the Ada runtime and determine which exception info structure
11563 should be used to provide support for exception catchpoints.
11564
3eecfa55
JB
11565 This function will always set the per-inferior exception_info,
11566 or raise an error. */
0259addd
JB
11567
11568static void
11569ada_exception_support_info_sniffer (void)
11570{
3eecfa55 11571 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11572
11573 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11574 if (data->exception_info != NULL)
0259addd
JB
11575 return;
11576
11577 /* Check the latest (default) exception support info. */
f17011e0 11578 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11579 {
3eecfa55 11580 data->exception_info = &default_exception_support_info;
0259addd
JB
11581 return;
11582 }
11583
ca683e3a
AO
11584 /* Try the v0 exception suport info. */
11585 if (ada_has_this_exception_support (&exception_support_info_v0))
11586 {
11587 data->exception_info = &exception_support_info_v0;
11588 return;
11589 }
11590
0259addd 11591 /* Try our fallback exception suport info. */
f17011e0 11592 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11593 {
3eecfa55 11594 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11595 return;
11596 }
11597
11598 /* Sometimes, it is normal for us to not be able to find the routine
11599 we are looking for. This happens when the program is linked with
11600 the shared version of the GNAT runtime, and the program has not been
11601 started yet. Inform the user of these two possible causes if
11602 applicable. */
11603
ccefe4c4 11604 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11605 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11606
11607 /* If the symbol does not exist, then check that the program is
11608 already started, to make sure that shared libraries have been
11609 loaded. If it is not started, this may mean that the symbol is
11610 in a shared library. */
11611
e99b03dc 11612 if (inferior_ptid.pid () == 0)
0259addd
JB
11613 error (_("Unable to insert catchpoint. Try to start the program first."));
11614
11615 /* At this point, we know that we are debugging an Ada program and
11616 that the inferior has been started, but we still are not able to
0963b4bd 11617 find the run-time symbols. That can mean that we are in
0259addd
JB
11618 configurable run time mode, or that a-except as been optimized
11619 out by the linker... In any case, at this point it is not worth
11620 supporting this feature. */
11621
7dda8cff 11622 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11623}
11624
f7f9143b
JB
11625/* True iff FRAME is very likely to be that of a function that is
11626 part of the runtime system. This is all very heuristic, but is
11627 intended to be used as advice as to what frames are uninteresting
11628 to most users. */
11629
11630static int
11631is_known_support_routine (struct frame_info *frame)
11632{
692465f1 11633 enum language func_lang;
f7f9143b 11634 int i;
f35a17b5 11635 const char *fullname;
f7f9143b 11636
4ed6b5be
JB
11637 /* If this code does not have any debugging information (no symtab),
11638 This cannot be any user code. */
f7f9143b 11639
51abb421 11640 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11641 if (sal.symtab == NULL)
11642 return 1;
11643
4ed6b5be
JB
11644 /* If there is a symtab, but the associated source file cannot be
11645 located, then assume this is not user code: Selecting a frame
11646 for which we cannot display the code would not be very helpful
11647 for the user. This should also take care of case such as VxWorks
11648 where the kernel has some debugging info provided for a few units. */
f7f9143b 11649
f35a17b5
JK
11650 fullname = symtab_to_fullname (sal.symtab);
11651 if (access (fullname, R_OK) != 0)
f7f9143b
JB
11652 return 1;
11653
85102364 11654 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
11655 We also check the name of the objfile against the name of some
11656 known system libraries that sometimes come with debugging info
11657 too. */
11658
f7f9143b
JB
11659 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
11660 {
11661 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 11662 if (re_exec (lbasename (sal.symtab->filename)))
dda83cd7 11663 return 1;
eb822aa6 11664 if (SYMTAB_OBJFILE (sal.symtab) != NULL
dda83cd7
SM
11665 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
11666 return 1;
f7f9143b
JB
11667 }
11668
4ed6b5be 11669 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 11670
c6dc63a1
TT
11671 gdb::unique_xmalloc_ptr<char> func_name
11672 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
11673 if (func_name == NULL)
11674 return 1;
11675
11676 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
11677 {
11678 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
11679 if (re_exec (func_name.get ()))
11680 return 1;
f7f9143b
JB
11681 }
11682
11683 return 0;
11684}
11685
11686/* Find the first frame that contains debugging information and that is not
11687 part of the Ada run-time, starting from FI and moving upward. */
11688
0ef643c8 11689void
f7f9143b
JB
11690ada_find_printable_frame (struct frame_info *fi)
11691{
11692 for (; fi != NULL; fi = get_prev_frame (fi))
11693 {
11694 if (!is_known_support_routine (fi))
dda83cd7
SM
11695 {
11696 select_frame (fi);
11697 break;
11698 }
f7f9143b
JB
11699 }
11700
11701}
11702
11703/* Assuming that the inferior just triggered an unhandled exception
11704 catchpoint, return the address in inferior memory where the name
11705 of the exception is stored.
11706
11707 Return zero if the address could not be computed. */
11708
11709static CORE_ADDR
11710ada_unhandled_exception_name_addr (void)
0259addd
JB
11711{
11712 return parse_and_eval_address ("e.full_name");
11713}
11714
11715/* Same as ada_unhandled_exception_name_addr, except that this function
11716 should be used when the inferior uses an older version of the runtime,
11717 where the exception name needs to be extracted from a specific frame
11718 several frames up in the callstack. */
11719
11720static CORE_ADDR
11721ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
11722{
11723 int frame_level;
11724 struct frame_info *fi;
3eecfa55 11725 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
11726
11727 /* To determine the name of this exception, we need to select
11728 the frame corresponding to RAISE_SYM_NAME. This frame is
11729 at least 3 levels up, so we simply skip the first 3 frames
11730 without checking the name of their associated function. */
11731 fi = get_current_frame ();
11732 for (frame_level = 0; frame_level < 3; frame_level += 1)
11733 if (fi != NULL)
11734 fi = get_prev_frame (fi);
11735
11736 while (fi != NULL)
11737 {
692465f1
JB
11738 enum language func_lang;
11739
c6dc63a1
TT
11740 gdb::unique_xmalloc_ptr<char> func_name
11741 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
11742 if (func_name != NULL)
11743 {
dda83cd7 11744 if (strcmp (func_name.get (),
55b87a52
KS
11745 data->exception_info->catch_exception_sym) == 0)
11746 break; /* We found the frame we were looking for... */
55b87a52 11747 }
fb44b1a7 11748 fi = get_prev_frame (fi);
f7f9143b
JB
11749 }
11750
11751 if (fi == NULL)
11752 return 0;
11753
11754 select_frame (fi);
11755 return parse_and_eval_address ("id.full_name");
11756}
11757
11758/* Assuming the inferior just triggered an Ada exception catchpoint
11759 (of any type), return the address in inferior memory where the name
11760 of the exception is stored, if applicable.
11761
45db7c09
PA
11762 Assumes the selected frame is the current frame.
11763
f7f9143b
JB
11764 Return zero if the address could not be computed, or if not relevant. */
11765
11766static CORE_ADDR
761269c8 11767ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
dda83cd7 11768 struct breakpoint *b)
f7f9143b 11769{
3eecfa55
JB
11770 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
11771
f7f9143b
JB
11772 switch (ex)
11773 {
761269c8 11774 case ada_catch_exception:
dda83cd7
SM
11775 return (parse_and_eval_address ("e.full_name"));
11776 break;
f7f9143b 11777
761269c8 11778 case ada_catch_exception_unhandled:
dda83cd7
SM
11779 return data->exception_info->unhandled_exception_name_addr ();
11780 break;
9f757bf7
XR
11781
11782 case ada_catch_handlers:
dda83cd7 11783 return 0; /* The runtimes does not provide access to the exception
9f757bf7 11784 name. */
dda83cd7 11785 break;
9f757bf7 11786
761269c8 11787 case ada_catch_assert:
dda83cd7
SM
11788 return 0; /* Exception name is not relevant in this case. */
11789 break;
f7f9143b
JB
11790
11791 default:
dda83cd7
SM
11792 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
11793 break;
f7f9143b
JB
11794 }
11795
11796 return 0; /* Should never be reached. */
11797}
11798
e547c119
JB
11799/* Assuming the inferior is stopped at an exception catchpoint,
11800 return the message which was associated to the exception, if
11801 available. Return NULL if the message could not be retrieved.
11802
e547c119
JB
11803 Note: The exception message can be associated to an exception
11804 either through the use of the Raise_Exception function, or
11805 more simply (Ada 2005 and later), via:
11806
11807 raise Exception_Name with "exception message";
11808
11809 */
11810
6f46ac85 11811static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11812ada_exception_message_1 (void)
11813{
11814 struct value *e_msg_val;
e547c119 11815 int e_msg_len;
e547c119
JB
11816
11817 /* For runtimes that support this feature, the exception message
11818 is passed as an unbounded string argument called "message". */
11819 e_msg_val = parse_and_eval ("message");
11820 if (e_msg_val == NULL)
11821 return NULL; /* Exception message not supported. */
11822
11823 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
11824 gdb_assert (e_msg_val != NULL);
11825 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
11826
11827 /* If the message string is empty, then treat it as if there was
11828 no exception message. */
11829 if (e_msg_len <= 0)
11830 return NULL;
11831
15f3b077
TT
11832 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
11833 read_memory (value_address (e_msg_val), (gdb_byte *) e_msg.get (),
11834 e_msg_len);
11835 e_msg.get ()[e_msg_len] = '\0';
11836
11837 return e_msg;
e547c119
JB
11838}
11839
11840/* Same as ada_exception_message_1, except that all exceptions are
11841 contained here (returning NULL instead). */
11842
6f46ac85 11843static gdb::unique_xmalloc_ptr<char>
e547c119
JB
11844ada_exception_message (void)
11845{
6f46ac85 11846 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 11847
a70b8144 11848 try
e547c119
JB
11849 {
11850 e_msg = ada_exception_message_1 ();
11851 }
230d2906 11852 catch (const gdb_exception_error &e)
e547c119 11853 {
6f46ac85 11854 e_msg.reset (nullptr);
e547c119 11855 }
e547c119
JB
11856
11857 return e_msg;
11858}
11859
f7f9143b
JB
11860/* Same as ada_exception_name_addr_1, except that it intercepts and contains
11861 any error that ada_exception_name_addr_1 might cause to be thrown.
11862 When an error is intercepted, a warning with the error message is printed,
11863 and zero is returned. */
11864
11865static CORE_ADDR
761269c8 11866ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
dda83cd7 11867 struct breakpoint *b)
f7f9143b 11868{
f7f9143b
JB
11869 CORE_ADDR result = 0;
11870
a70b8144 11871 try
f7f9143b
JB
11872 {
11873 result = ada_exception_name_addr_1 (ex, b);
11874 }
11875
230d2906 11876 catch (const gdb_exception_error &e)
f7f9143b 11877 {
3d6e9d23 11878 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
11879 return 0;
11880 }
11881
11882 return result;
11883}
11884
cb7de75e 11885static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
11886 (const char *excep_string,
11887 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
11888
11889/* Ada catchpoints.
11890
11891 In the case of catchpoints on Ada exceptions, the catchpoint will
11892 stop the target on every exception the program throws. When a user
11893 specifies the name of a specific exception, we translate this
11894 request into a condition expression (in text form), and then parse
11895 it into an expression stored in each of the catchpoint's locations.
11896 We then use this condition to check whether the exception that was
11897 raised is the one the user is interested in. If not, then the
11898 target is resumed again. We store the name of the requested
11899 exception, in order to be able to re-set the condition expression
11900 when symbols change. */
11901
11902/* An instance of this type is used to represent an Ada catchpoint
5625a286 11903 breakpoint location. */
28010a5d 11904
5625a286 11905class ada_catchpoint_location : public bp_location
28010a5d 11906{
5625a286 11907public:
5f486660 11908 ada_catchpoint_location (breakpoint *owner)
f06f1252 11909 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 11910 {}
28010a5d
PA
11911
11912 /* The condition that checks whether the exception that was raised
11913 is the specific exception the user specified on catchpoint
11914 creation. */
4d01a485 11915 expression_up excep_cond_expr;
28010a5d
PA
11916};
11917
c1fc2657 11918/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 11919
c1fc2657 11920struct ada_catchpoint : public breakpoint
28010a5d 11921{
37f6a7f4
TT
11922 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
11923 : m_kind (kind)
11924 {
11925 }
11926
28010a5d 11927 /* The name of the specific exception the user specified. */
bc18fbb5 11928 std::string excep_string;
37f6a7f4
TT
11929
11930 /* What kind of catchpoint this is. */
11931 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
11932};
11933
11934/* Parse the exception condition string in the context of each of the
11935 catchpoint's locations, and store them for later evaluation. */
11936
11937static void
9f757bf7 11938create_excep_cond_exprs (struct ada_catchpoint *c,
dda83cd7 11939 enum ada_exception_catchpoint_kind ex)
28010a5d 11940{
fccf9de1
TT
11941 struct bp_location *bl;
11942
28010a5d 11943 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 11944 if (c->excep_string.empty ())
28010a5d
PA
11945 return;
11946
11947 /* Same if there are no locations... */
c1fc2657 11948 if (c->loc == NULL)
28010a5d
PA
11949 return;
11950
fccf9de1
TT
11951 /* Compute the condition expression in text form, from the specific
11952 expection we want to catch. */
11953 std::string cond_string
11954 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 11955
fccf9de1
TT
11956 /* Iterate over all the catchpoint's locations, and parse an
11957 expression for each. */
11958 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
11959 {
11960 struct ada_catchpoint_location *ada_loc
fccf9de1 11961 = (struct ada_catchpoint_location *) bl;
4d01a485 11962 expression_up exp;
28010a5d 11963
fccf9de1 11964 if (!bl->shlib_disabled)
28010a5d 11965 {
bbc13ae3 11966 const char *s;
28010a5d 11967
cb7de75e 11968 s = cond_string.c_str ();
a70b8144 11969 try
28010a5d 11970 {
fccf9de1
TT
11971 exp = parse_exp_1 (&s, bl->address,
11972 block_for_pc (bl->address),
036e657b 11973 0);
28010a5d 11974 }
230d2906 11975 catch (const gdb_exception_error &e)
849f2b52
JB
11976 {
11977 warning (_("failed to reevaluate internal exception condition "
11978 "for catchpoint %d: %s"),
3d6e9d23 11979 c->number, e.what ());
849f2b52 11980 }
28010a5d
PA
11981 }
11982
b22e99fd 11983 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 11984 }
28010a5d
PA
11985}
11986
28010a5d
PA
11987/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
11988 structure for all exception catchpoint kinds. */
11989
11990static struct bp_location *
37f6a7f4 11991allocate_location_exception (struct breakpoint *self)
28010a5d 11992{
5f486660 11993 return new ada_catchpoint_location (self);
28010a5d
PA
11994}
11995
11996/* Implement the RE_SET method in the breakpoint_ops structure for all
11997 exception catchpoint kinds. */
11998
11999static void
37f6a7f4 12000re_set_exception (struct breakpoint *b)
28010a5d
PA
12001{
12002 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12003
12004 /* Call the base class's method. This updates the catchpoint's
12005 locations. */
2060206e 12006 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12007
12008 /* Reparse the exception conditional expressions. One for each
12009 location. */
37f6a7f4 12010 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12011}
12012
12013/* Returns true if we should stop for this breakpoint hit. If the
12014 user specified a specific exception, we only want to cause a stop
12015 if the program thrown that exception. */
12016
12017static int
12018should_stop_exception (const struct bp_location *bl)
12019{
12020 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12021 const struct ada_catchpoint_location *ada_loc
12022 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12023 int stop;
12024
37f6a7f4
TT
12025 struct internalvar *var = lookup_internalvar ("_ada_exception");
12026 if (c->m_kind == ada_catch_assert)
12027 clear_internalvar (var);
12028 else
12029 {
12030 try
12031 {
12032 const char *expr;
12033
12034 if (c->m_kind == ada_catch_handlers)
12035 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12036 ".all.occurrence.id");
12037 else
12038 expr = "e";
12039
12040 struct value *exc = parse_and_eval (expr);
12041 set_internalvar (var, exc);
12042 }
12043 catch (const gdb_exception_error &ex)
12044 {
12045 clear_internalvar (var);
12046 }
12047 }
12048
28010a5d 12049 /* With no specific exception, should always stop. */
bc18fbb5 12050 if (c->excep_string.empty ())
28010a5d
PA
12051 return 1;
12052
12053 if (ada_loc->excep_cond_expr == NULL)
12054 {
12055 /* We will have a NULL expression if back when we were creating
12056 the expressions, this location's had failed to parse. */
12057 return 1;
12058 }
12059
12060 stop = 1;
a70b8144 12061 try
28010a5d
PA
12062 {
12063 struct value *mark;
12064
12065 mark = value_mark ();
4d01a485 12066 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12067 value_free_to_mark (mark);
12068 }
230d2906 12069 catch (const gdb_exception &ex)
492d29ea
PA
12070 {
12071 exception_fprintf (gdb_stderr, ex,
12072 _("Error in testing exception condition:\n"));
12073 }
492d29ea 12074
28010a5d
PA
12075 return stop;
12076}
12077
12078/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12079 for all exception catchpoint kinds. */
12080
12081static void
37f6a7f4 12082check_status_exception (bpstat bs)
28010a5d 12083{
b6433ede 12084 bs->stop = should_stop_exception (bs->bp_location_at.get ());
28010a5d
PA
12085}
12086
f7f9143b
JB
12087/* Implement the PRINT_IT method in the breakpoint_ops structure
12088 for all exception catchpoint kinds. */
12089
12090static enum print_stop_action
37f6a7f4 12091print_it_exception (bpstat bs)
f7f9143b 12092{
79a45e25 12093 struct ui_out *uiout = current_uiout;
348d480f
PA
12094 struct breakpoint *b = bs->breakpoint_at;
12095
956a9fb9 12096 annotate_catchpoint (b->number);
f7f9143b 12097
112e8700 12098 if (uiout->is_mi_like_p ())
f7f9143b 12099 {
112e8700 12100 uiout->field_string ("reason",
956a9fb9 12101 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12102 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12103 }
12104
112e8700
SM
12105 uiout->text (b->disposition == disp_del
12106 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12107 uiout->field_signed ("bkptno", b->number);
112e8700 12108 uiout->text (", ");
f7f9143b 12109
45db7c09
PA
12110 /* ada_exception_name_addr relies on the selected frame being the
12111 current frame. Need to do this here because this function may be
12112 called more than once when printing a stop, and below, we'll
12113 select the first frame past the Ada run-time (see
12114 ada_find_printable_frame). */
12115 select_frame (get_current_frame ());
12116
37f6a7f4
TT
12117 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12118 switch (c->m_kind)
f7f9143b 12119 {
761269c8
JB
12120 case ada_catch_exception:
12121 case ada_catch_exception_unhandled:
9f757bf7 12122 case ada_catch_handlers:
956a9fb9 12123 {
37f6a7f4 12124 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12125 char exception_name[256];
12126
12127 if (addr != 0)
12128 {
c714b426
PA
12129 read_memory (addr, (gdb_byte *) exception_name,
12130 sizeof (exception_name) - 1);
956a9fb9
JB
12131 exception_name [sizeof (exception_name) - 1] = '\0';
12132 }
12133 else
12134 {
12135 /* For some reason, we were unable to read the exception
12136 name. This could happen if the Runtime was compiled
12137 without debugging info, for instance. In that case,
12138 just replace the exception name by the generic string
12139 "exception" - it will read as "an exception" in the
12140 notification we are about to print. */
967cff16 12141 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12142 }
12143 /* In the case of unhandled exception breakpoints, we print
12144 the exception name as "unhandled EXCEPTION_NAME", to make
12145 it clearer to the user which kind of catchpoint just got
12146 hit. We used ui_out_text to make sure that this extra
12147 info does not pollute the exception name in the MI case. */
37f6a7f4 12148 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12149 uiout->text ("unhandled ");
12150 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12151 }
12152 break;
761269c8 12153 case ada_catch_assert:
956a9fb9
JB
12154 /* In this case, the name of the exception is not really
12155 important. Just print "failed assertion" to make it clearer
12156 that his program just hit an assertion-failure catchpoint.
12157 We used ui_out_text because this info does not belong in
12158 the MI output. */
112e8700 12159 uiout->text ("failed assertion");
956a9fb9 12160 break;
f7f9143b 12161 }
e547c119 12162
6f46ac85 12163 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12164 if (exception_message != NULL)
12165 {
e547c119 12166 uiout->text (" (");
6f46ac85 12167 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12168 uiout->text (")");
e547c119
JB
12169 }
12170
112e8700 12171 uiout->text (" at ");
956a9fb9 12172 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12173
12174 return PRINT_SRC_AND_LOC;
12175}
12176
12177/* Implement the PRINT_ONE method in the breakpoint_ops structure
12178 for all exception catchpoint kinds. */
12179
12180static void
37f6a7f4 12181print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12182{
79a45e25 12183 struct ui_out *uiout = current_uiout;
28010a5d 12184 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12185 struct value_print_options opts;
12186
12187 get_user_print_options (&opts);
f06f1252 12188
79a45b7d 12189 if (opts.addressprint)
f06f1252 12190 uiout->field_skip ("addr");
f7f9143b
JB
12191
12192 annotate_field (5);
37f6a7f4 12193 switch (c->m_kind)
f7f9143b 12194 {
761269c8 12195 case ada_catch_exception:
dda83cd7
SM
12196 if (!c->excep_string.empty ())
12197 {
bc18fbb5
TT
12198 std::string msg = string_printf (_("`%s' Ada exception"),
12199 c->excep_string.c_str ());
28010a5d 12200
dda83cd7
SM
12201 uiout->field_string ("what", msg);
12202 }
12203 else
12204 uiout->field_string ("what", "all Ada exceptions");
12205
12206 break;
f7f9143b 12207
761269c8 12208 case ada_catch_exception_unhandled:
dda83cd7
SM
12209 uiout->field_string ("what", "unhandled Ada exceptions");
12210 break;
f7f9143b 12211
9f757bf7 12212 case ada_catch_handlers:
dda83cd7
SM
12213 if (!c->excep_string.empty ())
12214 {
9f757bf7
XR
12215 uiout->field_fmt ("what",
12216 _("`%s' Ada exception handlers"),
bc18fbb5 12217 c->excep_string.c_str ());
dda83cd7
SM
12218 }
12219 else
9f757bf7 12220 uiout->field_string ("what", "all Ada exceptions handlers");
dda83cd7 12221 break;
9f757bf7 12222
761269c8 12223 case ada_catch_assert:
dda83cd7
SM
12224 uiout->field_string ("what", "failed Ada assertions");
12225 break;
f7f9143b
JB
12226
12227 default:
dda83cd7
SM
12228 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12229 break;
f7f9143b
JB
12230 }
12231}
12232
12233/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12234 for all exception catchpoint kinds. */
12235
12236static void
37f6a7f4 12237print_mention_exception (struct breakpoint *b)
f7f9143b 12238{
28010a5d 12239 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12240 struct ui_out *uiout = current_uiout;
28010a5d 12241
112e8700 12242 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
dda83cd7 12243 : _("Catchpoint "));
381befee 12244 uiout->field_signed ("bkptno", b->number);
112e8700 12245 uiout->text (": ");
00eb2c4a 12246
37f6a7f4 12247 switch (c->m_kind)
f7f9143b 12248 {
761269c8 12249 case ada_catch_exception:
dda83cd7 12250 if (!c->excep_string.empty ())
00eb2c4a 12251 {
862d101a 12252 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12253 c->excep_string.c_str ());
862d101a 12254 uiout->text (info.c_str ());
00eb2c4a 12255 }
dda83cd7
SM
12256 else
12257 uiout->text (_("all Ada exceptions"));
12258 break;
f7f9143b 12259
761269c8 12260 case ada_catch_exception_unhandled:
dda83cd7
SM
12261 uiout->text (_("unhandled Ada exceptions"));
12262 break;
9f757bf7
XR
12263
12264 case ada_catch_handlers:
dda83cd7 12265 if (!c->excep_string.empty ())
9f757bf7
XR
12266 {
12267 std::string info
12268 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12269 c->excep_string.c_str ());
9f757bf7
XR
12270 uiout->text (info.c_str ());
12271 }
dda83cd7
SM
12272 else
12273 uiout->text (_("all Ada exceptions handlers"));
12274 break;
9f757bf7 12275
761269c8 12276 case ada_catch_assert:
dda83cd7
SM
12277 uiout->text (_("failed Ada assertions"));
12278 break;
f7f9143b
JB
12279
12280 default:
dda83cd7
SM
12281 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12282 break;
f7f9143b
JB
12283 }
12284}
12285
6149aea9
PA
12286/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12287 for all exception catchpoint kinds. */
12288
12289static void
37f6a7f4 12290print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12291{
28010a5d
PA
12292 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12293
37f6a7f4 12294 switch (c->m_kind)
6149aea9 12295 {
761269c8 12296 case ada_catch_exception:
6149aea9 12297 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12298 if (!c->excep_string.empty ())
12299 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12300 break;
12301
761269c8 12302 case ada_catch_exception_unhandled:
78076abc 12303 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12304 break;
12305
9f757bf7
XR
12306 case ada_catch_handlers:
12307 fprintf_filtered (fp, "catch handlers");
12308 break;
12309
761269c8 12310 case ada_catch_assert:
6149aea9
PA
12311 fprintf_filtered (fp, "catch assert");
12312 break;
12313
12314 default:
12315 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12316 }
d9b3f62e 12317 print_recreate_thread (b, fp);
6149aea9
PA
12318}
12319
37f6a7f4 12320/* Virtual tables for various breakpoint types. */
2060206e 12321static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12322static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12323static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12324static struct breakpoint_ops catch_handlers_breakpoint_ops;
12325
f06f1252
TT
12326/* See ada-lang.h. */
12327
12328bool
12329is_ada_exception_catchpoint (breakpoint *bp)
12330{
12331 return (bp->ops == &catch_exception_breakpoint_ops
12332 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12333 || bp->ops == &catch_assert_breakpoint_ops
12334 || bp->ops == &catch_handlers_breakpoint_ops);
12335}
12336
f7f9143b
JB
12337/* Split the arguments specified in a "catch exception" command.
12338 Set EX to the appropriate catchpoint type.
28010a5d 12339 Set EXCEP_STRING to the name of the specific exception if
5845583d 12340 specified by the user.
9f757bf7
XR
12341 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12342 "catch handlers" command. False otherwise.
5845583d
JB
12343 If a condition is found at the end of the arguments, the condition
12344 expression is stored in COND_STRING (memory must be deallocated
12345 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12346
12347static void
a121b7c1 12348catch_ada_exception_command_split (const char *args,
9f757bf7 12349 bool is_catch_handlers_cmd,
dda83cd7 12350 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12351 std::string *excep_string,
12352 std::string *cond_string)
f7f9143b 12353{
bc18fbb5 12354 std::string exception_name;
f7f9143b 12355
bc18fbb5
TT
12356 exception_name = extract_arg (&args);
12357 if (exception_name == "if")
5845583d
JB
12358 {
12359 /* This is not an exception name; this is the start of a condition
12360 expression for a catchpoint on all exceptions. So, "un-get"
12361 this token, and set exception_name to NULL. */
bc18fbb5 12362 exception_name.clear ();
5845583d
JB
12363 args -= 2;
12364 }
f7f9143b 12365
5845583d 12366 /* Check to see if we have a condition. */
f7f9143b 12367
f1735a53 12368 args = skip_spaces (args);
61012eef 12369 if (startswith (args, "if")
5845583d
JB
12370 && (isspace (args[2]) || args[2] == '\0'))
12371 {
12372 args += 2;
f1735a53 12373 args = skip_spaces (args);
5845583d
JB
12374
12375 if (args[0] == '\0')
dda83cd7 12376 error (_("Condition missing after `if' keyword"));
bc18fbb5 12377 *cond_string = args;
5845583d
JB
12378
12379 args += strlen (args);
12380 }
12381
12382 /* Check that we do not have any more arguments. Anything else
12383 is unexpected. */
f7f9143b
JB
12384
12385 if (args[0] != '\0')
12386 error (_("Junk at end of expression"));
12387
9f757bf7
XR
12388 if (is_catch_handlers_cmd)
12389 {
12390 /* Catch handling of exceptions. */
12391 *ex = ada_catch_handlers;
12392 *excep_string = exception_name;
12393 }
bc18fbb5 12394 else if (exception_name.empty ())
f7f9143b
JB
12395 {
12396 /* Catch all exceptions. */
761269c8 12397 *ex = ada_catch_exception;
bc18fbb5 12398 excep_string->clear ();
f7f9143b 12399 }
bc18fbb5 12400 else if (exception_name == "unhandled")
f7f9143b
JB
12401 {
12402 /* Catch unhandled exceptions. */
761269c8 12403 *ex = ada_catch_exception_unhandled;
bc18fbb5 12404 excep_string->clear ();
f7f9143b
JB
12405 }
12406 else
12407 {
12408 /* Catch a specific exception. */
761269c8 12409 *ex = ada_catch_exception;
28010a5d 12410 *excep_string = exception_name;
f7f9143b
JB
12411 }
12412}
12413
12414/* Return the name of the symbol on which we should break in order to
12415 implement a catchpoint of the EX kind. */
12416
12417static const char *
761269c8 12418ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12419{
3eecfa55
JB
12420 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12421
12422 gdb_assert (data->exception_info != NULL);
0259addd 12423
f7f9143b
JB
12424 switch (ex)
12425 {
761269c8 12426 case ada_catch_exception:
dda83cd7
SM
12427 return (data->exception_info->catch_exception_sym);
12428 break;
761269c8 12429 case ada_catch_exception_unhandled:
dda83cd7
SM
12430 return (data->exception_info->catch_exception_unhandled_sym);
12431 break;
761269c8 12432 case ada_catch_assert:
dda83cd7
SM
12433 return (data->exception_info->catch_assert_sym);
12434 break;
9f757bf7 12435 case ada_catch_handlers:
dda83cd7
SM
12436 return (data->exception_info->catch_handlers_sym);
12437 break;
f7f9143b 12438 default:
dda83cd7
SM
12439 internal_error (__FILE__, __LINE__,
12440 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12441 }
12442}
12443
12444/* Return the breakpoint ops "virtual table" used for catchpoints
12445 of the EX kind. */
12446
c0a91b2b 12447static const struct breakpoint_ops *
761269c8 12448ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12449{
12450 switch (ex)
12451 {
761269c8 12452 case ada_catch_exception:
dda83cd7
SM
12453 return (&catch_exception_breakpoint_ops);
12454 break;
761269c8 12455 case ada_catch_exception_unhandled:
dda83cd7
SM
12456 return (&catch_exception_unhandled_breakpoint_ops);
12457 break;
761269c8 12458 case ada_catch_assert:
dda83cd7
SM
12459 return (&catch_assert_breakpoint_ops);
12460 break;
9f757bf7 12461 case ada_catch_handlers:
dda83cd7
SM
12462 return (&catch_handlers_breakpoint_ops);
12463 break;
f7f9143b 12464 default:
dda83cd7
SM
12465 internal_error (__FILE__, __LINE__,
12466 _("unexpected catchpoint kind (%d)"), ex);
f7f9143b
JB
12467 }
12468}
12469
12470/* Return the condition that will be used to match the current exception
12471 being raised with the exception that the user wants to catch. This
12472 assumes that this condition is used when the inferior just triggered
12473 an exception catchpoint.
cb7de75e 12474 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12475
cb7de75e 12476static std::string
9f757bf7 12477ada_exception_catchpoint_cond_string (const char *excep_string,
dda83cd7 12478 enum ada_exception_catchpoint_kind ex)
f7f9143b 12479{
3d0b0fa3 12480 int i;
fccf9de1 12481 bool is_standard_exc = false;
cb7de75e 12482 std::string result;
9f757bf7
XR
12483
12484 if (ex == ada_catch_handlers)
12485 {
12486 /* For exception handlers catchpoints, the condition string does
dda83cd7 12487 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12488 result = ("long_integer (GNAT_GCC_exception_Access"
12489 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12490 }
12491 else
fccf9de1 12492 result = "long_integer (e)";
3d0b0fa3 12493
0963b4bd 12494 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12495 runtime units that have been compiled without debugging info; if
28010a5d 12496 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12497 exception (e.g. "constraint_error") then, during the evaluation
12498 of the condition expression, the symbol lookup on this name would
0963b4bd 12499 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12500 may then be set only on user-defined exceptions which have the
12501 same not-fully-qualified name (e.g. my_package.constraint_error).
12502
12503 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12504 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12505 exception constraint_error" is rewritten into "catch exception
12506 standard.constraint_error".
12507
85102364 12508 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12509 the inferior program, then the only way to specify this exception as a
12510 breakpoint condition is to use its fully-qualified named:
fccf9de1 12511 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12512
12513 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12514 {
28010a5d 12515 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12516 {
fccf9de1 12517 is_standard_exc = true;
9f757bf7 12518 break;
3d0b0fa3
JB
12519 }
12520 }
9f757bf7 12521
fccf9de1
TT
12522 result += " = ";
12523
12524 if (is_standard_exc)
12525 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12526 else
12527 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12528
9f757bf7 12529 return result;
f7f9143b
JB
12530}
12531
12532/* Return the symtab_and_line that should be used to insert an exception
12533 catchpoint of the TYPE kind.
12534
28010a5d
PA
12535 ADDR_STRING returns the name of the function where the real
12536 breakpoint that implements the catchpoints is set, depending on the
12537 type of catchpoint we need to create. */
f7f9143b
JB
12538
12539static struct symtab_and_line
bc18fbb5 12540ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12541 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12542{
12543 const char *sym_name;
12544 struct symbol *sym;
f7f9143b 12545
0259addd
JB
12546 /* First, find out which exception support info to use. */
12547 ada_exception_support_info_sniffer ();
12548
12549 /* Then lookup the function on which we will break in order to catch
f7f9143b 12550 the Ada exceptions requested by the user. */
f7f9143b
JB
12551 sym_name = ada_exception_sym_name (ex);
12552 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12553
57aff202
JB
12554 if (sym == NULL)
12555 error (_("Catchpoint symbol not found: %s"), sym_name);
12556
12557 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12558 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12559
12560 /* Set ADDR_STRING. */
cc12f4a8 12561 *addr_string = sym_name;
f7f9143b 12562
f7f9143b 12563 /* Set OPS. */
4b9eee8c 12564 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12565
f17011e0 12566 return find_function_start_sal (sym, 1);
f7f9143b
JB
12567}
12568
b4a5b78b 12569/* Create an Ada exception catchpoint.
f7f9143b 12570
b4a5b78b 12571 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12572
bc18fbb5 12573 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12574 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12575 of the exception to which this catchpoint applies.
2df4d1d5 12576
bc18fbb5 12577 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12578
b4a5b78b
JB
12579 TEMPFLAG, if nonzero, means that the underlying breakpoint
12580 should be temporary.
28010a5d 12581
b4a5b78b 12582 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12583
349774ef 12584void
28010a5d 12585create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12586 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12587 const std::string &excep_string,
56ecd069 12588 const std::string &cond_string,
28010a5d 12589 int tempflag,
349774ef 12590 int disabled,
28010a5d
PA
12591 int from_tty)
12592{
cc12f4a8 12593 std::string addr_string;
b4a5b78b 12594 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12595 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12596
37f6a7f4 12597 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12598 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12599 ops, tempflag, disabled, from_tty);
28010a5d 12600 c->excep_string = excep_string;
9f757bf7 12601 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069 12602 if (!cond_string.empty ())
733d554a 12603 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
b270e6f9 12604 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12605}
12606
9ac4176b
PA
12607/* Implement the "catch exception" command. */
12608
12609static void
eb4c3f4a 12610catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12611 struct cmd_list_element *command)
12612{
a121b7c1 12613 const char *arg = arg_entry;
9ac4176b
PA
12614 struct gdbarch *gdbarch = get_current_arch ();
12615 int tempflag;
761269c8 12616 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12617 std::string excep_string;
56ecd069 12618 std::string cond_string;
9ac4176b
PA
12619
12620 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12621
12622 if (!arg)
12623 arg = "";
9f757bf7 12624 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12625 &cond_string);
9f757bf7
XR
12626 create_ada_exception_catchpoint (gdbarch, ex_kind,
12627 excep_string, cond_string,
12628 tempflag, 1 /* enabled */,
12629 from_tty);
12630}
12631
12632/* Implement the "catch handlers" command. */
12633
12634static void
12635catch_ada_handlers_command (const char *arg_entry, int from_tty,
12636 struct cmd_list_element *command)
12637{
12638 const char *arg = arg_entry;
12639 struct gdbarch *gdbarch = get_current_arch ();
12640 int tempflag;
12641 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12642 std::string excep_string;
56ecd069 12643 std::string cond_string;
9f757bf7
XR
12644
12645 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12646
12647 if (!arg)
12648 arg = "";
12649 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 12650 &cond_string);
b4a5b78b
JB
12651 create_ada_exception_catchpoint (gdbarch, ex_kind,
12652 excep_string, cond_string,
349774ef
JB
12653 tempflag, 1 /* enabled */,
12654 from_tty);
9ac4176b
PA
12655}
12656
71bed2db
TT
12657/* Completion function for the Ada "catch" commands. */
12658
12659static void
12660catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
12661 const char *text, const char *word)
12662{
12663 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
12664
12665 for (const ada_exc_info &info : exceptions)
12666 {
12667 if (startswith (info.name, word))
b02f78f9 12668 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
12669 }
12670}
12671
b4a5b78b 12672/* Split the arguments specified in a "catch assert" command.
5845583d 12673
b4a5b78b
JB
12674 ARGS contains the command's arguments (or the empty string if
12675 no arguments were passed).
5845583d
JB
12676
12677 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 12678 (the memory needs to be deallocated after use). */
5845583d 12679
b4a5b78b 12680static void
56ecd069 12681catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 12682{
f1735a53 12683 args = skip_spaces (args);
f7f9143b 12684
5845583d 12685 /* Check whether a condition was provided. */
61012eef 12686 if (startswith (args, "if")
5845583d 12687 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 12688 {
5845583d 12689 args += 2;
f1735a53 12690 args = skip_spaces (args);
5845583d 12691 if (args[0] == '\0')
dda83cd7 12692 error (_("condition missing after `if' keyword"));
56ecd069 12693 cond_string.assign (args);
f7f9143b
JB
12694 }
12695
5845583d
JB
12696 /* Otherwise, there should be no other argument at the end of
12697 the command. */
12698 else if (args[0] != '\0')
12699 error (_("Junk at end of arguments."));
f7f9143b
JB
12700}
12701
9ac4176b
PA
12702/* Implement the "catch assert" command. */
12703
12704static void
eb4c3f4a 12705catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12706 struct cmd_list_element *command)
12707{
a121b7c1 12708 const char *arg = arg_entry;
9ac4176b
PA
12709 struct gdbarch *gdbarch = get_current_arch ();
12710 int tempflag;
56ecd069 12711 std::string cond_string;
9ac4176b
PA
12712
12713 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12714
12715 if (!arg)
12716 arg = "";
56ecd069 12717 catch_ada_assert_command_split (arg, cond_string);
761269c8 12718 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 12719 "", cond_string,
349774ef
JB
12720 tempflag, 1 /* enabled */,
12721 from_tty);
9ac4176b 12722}
778865d3
JB
12723
12724/* Return non-zero if the symbol SYM is an Ada exception object. */
12725
12726static int
12727ada_is_exception_sym (struct symbol *sym)
12728{
7d93a1e0 12729 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
12730
12731 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
dda83cd7
SM
12732 && SYMBOL_CLASS (sym) != LOC_BLOCK
12733 && SYMBOL_CLASS (sym) != LOC_CONST
12734 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
12735 && type_name != NULL && strcmp (type_name, "exception") == 0);
778865d3
JB
12736}
12737
12738/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
12739 Ada exception object. This matches all exceptions except the ones
12740 defined by the Ada language. */
12741
12742static int
12743ada_is_non_standard_exception_sym (struct symbol *sym)
12744{
12745 int i;
12746
12747 if (!ada_is_exception_sym (sym))
12748 return 0;
12749
12750 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 12751 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
12752 return 0; /* A standard exception. */
12753
12754 /* Numeric_Error is also a standard exception, so exclude it.
12755 See the STANDARD_EXC description for more details as to why
12756 this exception is not listed in that array. */
987012b8 12757 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
12758 return 0;
12759
12760 return 1;
12761}
12762
ab816a27 12763/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
12764 objects.
12765
12766 The comparison is determined first by exception name, and then
12767 by exception address. */
12768
ab816a27 12769bool
cc536b21 12770ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 12771{
778865d3
JB
12772 int result;
12773
ab816a27
TT
12774 result = strcmp (name, other.name);
12775 if (result < 0)
12776 return true;
12777 if (result == 0 && addr < other.addr)
12778 return true;
12779 return false;
12780}
778865d3 12781
ab816a27 12782bool
cc536b21 12783ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
12784{
12785 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
12786}
12787
12788/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
12789 routine, but keeping the first SKIP elements untouched.
12790
12791 All duplicates are also removed. */
12792
12793static void
ab816a27 12794sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
12795 int skip)
12796{
ab816a27
TT
12797 std::sort (exceptions->begin () + skip, exceptions->end ());
12798 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
12799 exceptions->end ());
778865d3
JB
12800}
12801
778865d3
JB
12802/* Add all exceptions defined by the Ada standard whose name match
12803 a regular expression.
12804
12805 If PREG is not NULL, then this regexp_t object is used to
12806 perform the symbol name matching. Otherwise, no name-based
12807 filtering is performed.
12808
12809 EXCEPTIONS is a vector of exceptions to which matching exceptions
12810 gets pushed. */
12811
12812static void
2d7cc5c7 12813ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 12814 std::vector<ada_exc_info> *exceptions)
778865d3
JB
12815{
12816 int i;
12817
12818 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
12819 {
12820 if (preg == NULL
2d7cc5c7 12821 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
12822 {
12823 struct bound_minimal_symbol msymbol
12824 = ada_lookup_simple_minsym (standard_exc[i]);
12825
12826 if (msymbol.minsym != NULL)
12827 {
12828 struct ada_exc_info info
77e371c0 12829 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 12830
ab816a27 12831 exceptions->push_back (info);
778865d3
JB
12832 }
12833 }
12834 }
12835}
12836
12837/* Add all Ada exceptions defined locally and accessible from the given
12838 FRAME.
12839
12840 If PREG is not NULL, then this regexp_t object is used to
12841 perform the symbol name matching. Otherwise, no name-based
12842 filtering is performed.
12843
12844 EXCEPTIONS is a vector of exceptions to which matching exceptions
12845 gets pushed. */
12846
12847static void
2d7cc5c7
PA
12848ada_add_exceptions_from_frame (compiled_regex *preg,
12849 struct frame_info *frame,
ab816a27 12850 std::vector<ada_exc_info> *exceptions)
778865d3 12851{
3977b71f 12852 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
12853
12854 while (block != 0)
12855 {
12856 struct block_iterator iter;
12857 struct symbol *sym;
12858
12859 ALL_BLOCK_SYMBOLS (block, iter, sym)
12860 {
12861 switch (SYMBOL_CLASS (sym))
12862 {
12863 case LOC_TYPEDEF:
12864 case LOC_BLOCK:
12865 case LOC_CONST:
12866 break;
12867 default:
12868 if (ada_is_exception_sym (sym))
12869 {
987012b8 12870 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
12871 SYMBOL_VALUE_ADDRESS (sym)};
12872
ab816a27 12873 exceptions->push_back (info);
778865d3
JB
12874 }
12875 }
12876 }
12877 if (BLOCK_FUNCTION (block) != NULL)
12878 break;
12879 block = BLOCK_SUPERBLOCK (block);
12880 }
12881}
12882
14bc53a8
PA
12883/* Return true if NAME matches PREG or if PREG is NULL. */
12884
12885static bool
2d7cc5c7 12886name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
12887{
12888 return (preg == NULL
f945dedf 12889 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
12890}
12891
778865d3
JB
12892/* Add all exceptions defined globally whose name name match
12893 a regular expression, excluding standard exceptions.
12894
12895 The reason we exclude standard exceptions is that they need
12896 to be handled separately: Standard exceptions are defined inside
12897 a runtime unit which is normally not compiled with debugging info,
12898 and thus usually do not show up in our symbol search. However,
12899 if the unit was in fact built with debugging info, we need to
12900 exclude them because they would duplicate the entry we found
12901 during the special loop that specifically searches for those
12902 standard exceptions.
12903
12904 If PREG is not NULL, then this regexp_t object is used to
12905 perform the symbol name matching. Otherwise, no name-based
12906 filtering is performed.
12907
12908 EXCEPTIONS is a vector of exceptions to which matching exceptions
12909 gets pushed. */
12910
12911static void
2d7cc5c7 12912ada_add_global_exceptions (compiled_regex *preg,
ab816a27 12913 std::vector<ada_exc_info> *exceptions)
778865d3 12914{
14bc53a8
PA
12915 /* In Ada, the symbol "search name" is a linkage name, whereas the
12916 regular expression used to do the matching refers to the natural
12917 name. So match against the decoded name. */
12918 expand_symtabs_matching (NULL,
b5ec771e 12919 lookup_name_info::match_any (),
14bc53a8
PA
12920 [&] (const char *search_name)
12921 {
f945dedf
CB
12922 std::string decoded = ada_decode (search_name);
12923 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
12924 },
12925 NULL,
12926 VARIABLES_DOMAIN);
778865d3 12927
2030c079 12928 for (objfile *objfile : current_program_space->objfiles ())
778865d3 12929 {
b669c953 12930 for (compunit_symtab *s : objfile->compunits ())
778865d3 12931 {
d8aeb77f
TT
12932 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
12933 int i;
778865d3 12934
d8aeb77f
TT
12935 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
12936 {
582942f4 12937 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
12938 struct block_iterator iter;
12939 struct symbol *sym;
778865d3 12940
d8aeb77f
TT
12941 ALL_BLOCK_SYMBOLS (b, iter, sym)
12942 if (ada_is_non_standard_exception_sym (sym)
987012b8 12943 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
12944 {
12945 struct ada_exc_info info
987012b8 12946 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
12947
12948 exceptions->push_back (info);
12949 }
12950 }
778865d3
JB
12951 }
12952 }
12953}
12954
12955/* Implements ada_exceptions_list with the regular expression passed
12956 as a regex_t, rather than a string.
12957
12958 If not NULL, PREG is used to filter out exceptions whose names
12959 do not match. Otherwise, all exceptions are listed. */
12960
ab816a27 12961static std::vector<ada_exc_info>
2d7cc5c7 12962ada_exceptions_list_1 (compiled_regex *preg)
778865d3 12963{
ab816a27 12964 std::vector<ada_exc_info> result;
778865d3
JB
12965 int prev_len;
12966
12967 /* First, list the known standard exceptions. These exceptions
12968 need to be handled separately, as they are usually defined in
12969 runtime units that have been compiled without debugging info. */
12970
12971 ada_add_standard_exceptions (preg, &result);
12972
12973 /* Next, find all exceptions whose scope is local and accessible
12974 from the currently selected frame. */
12975
12976 if (has_stack_frames ())
12977 {
ab816a27 12978 prev_len = result.size ();
778865d3
JB
12979 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
12980 &result);
ab816a27 12981 if (result.size () > prev_len)
778865d3
JB
12982 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12983 }
12984
12985 /* Add all exceptions whose scope is global. */
12986
ab816a27 12987 prev_len = result.size ();
778865d3 12988 ada_add_global_exceptions (preg, &result);
ab816a27 12989 if (result.size () > prev_len)
778865d3
JB
12990 sort_remove_dups_ada_exceptions_list (&result, prev_len);
12991
778865d3
JB
12992 return result;
12993}
12994
12995/* Return a vector of ada_exc_info.
12996
12997 If REGEXP is NULL, all exceptions are included in the result.
12998 Otherwise, it should contain a valid regular expression,
12999 and only the exceptions whose names match that regular expression
13000 are included in the result.
13001
13002 The exceptions are sorted in the following order:
13003 - Standard exceptions (defined by the Ada language), in
13004 alphabetical order;
13005 - Exceptions only visible from the current frame, in
13006 alphabetical order;
13007 - Exceptions whose scope is global, in alphabetical order. */
13008
ab816a27 13009std::vector<ada_exc_info>
778865d3
JB
13010ada_exceptions_list (const char *regexp)
13011{
2d7cc5c7
PA
13012 if (regexp == NULL)
13013 return ada_exceptions_list_1 (NULL);
778865d3 13014
2d7cc5c7
PA
13015 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13016 return ada_exceptions_list_1 (&reg);
778865d3
JB
13017}
13018
13019/* Implement the "info exceptions" command. */
13020
13021static void
1d12d88f 13022info_exceptions_command (const char *regexp, int from_tty)
778865d3 13023{
778865d3 13024 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13025
ab816a27 13026 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13027
13028 if (regexp != NULL)
13029 printf_filtered
13030 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13031 else
13032 printf_filtered (_("All defined Ada exceptions:\n"));
13033
ab816a27
TT
13034 for (const ada_exc_info &info : exceptions)
13035 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13036}
13037
dda83cd7 13038 /* Operators */
4c4b4cd2
PH
13039/* Information about operators given special treatment in functions
13040 below. */
13041/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13042
13043#define ADA_OPERATORS \
13044 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13045 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13046 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13047 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13048 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13049 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13050 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13051 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13052 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13053 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13054 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13055 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13056 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13057 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13058 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13059 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13060 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13061 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13062 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13063
13064static void
554794dc
SDJ
13065ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13066 int *argsp)
4c4b4cd2
PH
13067{
13068 switch (exp->elts[pc - 1].opcode)
13069 {
76a01679 13070 default:
4c4b4cd2
PH
13071 operator_length_standard (exp, pc, oplenp, argsp);
13072 break;
13073
13074#define OP_DEFN(op, len, args, binop) \
13075 case op: *oplenp = len; *argsp = args; break;
13076 ADA_OPERATORS;
13077#undef OP_DEFN
52ce6436
PH
13078
13079 case OP_AGGREGATE:
13080 *oplenp = 3;
13081 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13082 break;
13083
13084 case OP_CHOICES:
13085 *oplenp = 3;
13086 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13087 break;
4c4b4cd2
PH
13088 }
13089}
13090
c0201579
JK
13091/* Implementation of the exp_descriptor method operator_check. */
13092
13093static int
13094ada_operator_check (struct expression *exp, int pos,
13095 int (*objfile_func) (struct objfile *objfile, void *data),
13096 void *data)
13097{
13098 const union exp_element *const elts = exp->elts;
13099 struct type *type = NULL;
13100
13101 switch (elts[pos].opcode)
13102 {
13103 case UNOP_IN_RANGE:
13104 case UNOP_QUAL:
13105 type = elts[pos + 1].type;
13106 break;
13107
13108 default:
13109 return operator_check_standard (exp, pos, objfile_func, data);
13110 }
13111
13112 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13113
6ac37371
SM
13114 if (type != nullptr && type->objfile_owner () != nullptr
13115 && objfile_func (type->objfile_owner (), data))
c0201579
JK
13116 return 1;
13117
13118 return 0;
13119}
13120
4c4b4cd2
PH
13121/* As for operator_length, but assumes PC is pointing at the first
13122 element of the operator, and gives meaningful results only for the
52ce6436 13123 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13124
13125static void
76a01679 13126ada_forward_operator_length (struct expression *exp, int pc,
dda83cd7 13127 int *oplenp, int *argsp)
4c4b4cd2 13128{
76a01679 13129 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13130 {
13131 default:
13132 *oplenp = *argsp = 0;
13133 break;
52ce6436 13134
4c4b4cd2
PH
13135#define OP_DEFN(op, len, args, binop) \
13136 case op: *oplenp = len; *argsp = args; break;
13137 ADA_OPERATORS;
13138#undef OP_DEFN
52ce6436
PH
13139
13140 case OP_AGGREGATE:
13141 *oplenp = 3;
13142 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13143 break;
13144
13145 case OP_CHOICES:
13146 *oplenp = 3;
13147 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13148 break;
13149
13150 case OP_STRING:
13151 case OP_NAME:
13152 {
13153 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13154
52ce6436
PH
13155 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13156 *argsp = 0;
13157 break;
13158 }
4c4b4cd2
PH
13159 }
13160}
13161
13162static int
13163ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13164{
13165 enum exp_opcode op = exp->elts[elt].opcode;
13166 int oplen, nargs;
13167 int pc = elt;
13168 int i;
76a01679 13169
4c4b4cd2
PH
13170 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13171
76a01679 13172 switch (op)
4c4b4cd2 13173 {
76a01679 13174 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13175 case OP_ATR_FIRST:
13176 case OP_ATR_LAST:
13177 case OP_ATR_LENGTH:
13178 case OP_ATR_IMAGE:
13179 case OP_ATR_MAX:
13180 case OP_ATR_MIN:
13181 case OP_ATR_MODULUS:
13182 case OP_ATR_POS:
13183 case OP_ATR_SIZE:
13184 case OP_ATR_TAG:
13185 case OP_ATR_VAL:
13186 break;
13187
13188 case UNOP_IN_RANGE:
13189 case UNOP_QUAL:
323e0a4a
AC
13190 /* XXX: gdb_sprint_host_address, type_sprint */
13191 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13192 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13193 fprintf_filtered (stream, " (");
13194 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13195 fprintf_filtered (stream, ")");
13196 break;
13197 case BINOP_IN_BOUNDS:
52ce6436
PH
13198 fprintf_filtered (stream, " (%d)",
13199 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13200 break;
13201 case TERNOP_IN_RANGE:
13202 break;
13203
52ce6436
PH
13204 case OP_AGGREGATE:
13205 case OP_OTHERS:
13206 case OP_DISCRETE_RANGE:
13207 case OP_POSITIONAL:
13208 case OP_CHOICES:
13209 break;
13210
13211 case OP_NAME:
13212 case OP_STRING:
13213 {
13214 char *name = &exp->elts[elt + 2].string;
13215 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13216
52ce6436
PH
13217 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13218 break;
13219 }
13220
4c4b4cd2
PH
13221 default:
13222 return dump_subexp_body_standard (exp, stream, elt);
13223 }
13224
13225 elt += oplen;
13226 for (i = 0; i < nargs; i += 1)
13227 elt = dump_subexp (exp, stream, elt);
13228
13229 return elt;
13230}
13231
13232/* The Ada extension of print_subexp (q.v.). */
13233
76a01679
JB
13234static void
13235ada_print_subexp (struct expression *exp, int *pos,
dda83cd7 13236 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13237{
52ce6436 13238 int oplen, nargs, i;
4c4b4cd2
PH
13239 int pc = *pos;
13240 enum exp_opcode op = exp->elts[pc].opcode;
13241
13242 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13243
52ce6436 13244 *pos += oplen;
4c4b4cd2
PH
13245 switch (op)
13246 {
13247 default:
52ce6436 13248 *pos -= oplen;
4c4b4cd2
PH
13249 print_subexp_standard (exp, pos, stream, prec);
13250 return;
13251
13252 case OP_VAR_VALUE:
987012b8 13253 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13254 return;
13255
13256 case BINOP_IN_BOUNDS:
323e0a4a 13257 /* XXX: sprint_subexp */
4c4b4cd2 13258 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13259 fputs_filtered (" in ", stream);
4c4b4cd2 13260 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13261 fputs_filtered ("'range", stream);
4c4b4cd2 13262 if (exp->elts[pc + 1].longconst > 1)
dda83cd7
SM
13263 fprintf_filtered (stream, "(%ld)",
13264 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13265 return;
13266
13267 case TERNOP_IN_RANGE:
4c4b4cd2 13268 if (prec >= PREC_EQUAL)
dda83cd7 13269 fputs_filtered ("(", stream);
323e0a4a 13270 /* XXX: sprint_subexp */
4c4b4cd2 13271 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13272 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13273 print_subexp (exp, pos, stream, PREC_EQUAL);
13274 fputs_filtered (" .. ", stream);
13275 print_subexp (exp, pos, stream, PREC_EQUAL);
13276 if (prec >= PREC_EQUAL)
dda83cd7 13277 fputs_filtered (")", stream);
76a01679 13278 return;
4c4b4cd2
PH
13279
13280 case OP_ATR_FIRST:
13281 case OP_ATR_LAST:
13282 case OP_ATR_LENGTH:
13283 case OP_ATR_IMAGE:
13284 case OP_ATR_MAX:
13285 case OP_ATR_MIN:
13286 case OP_ATR_MODULUS:
13287 case OP_ATR_POS:
13288 case OP_ATR_SIZE:
13289 case OP_ATR_TAG:
13290 case OP_ATR_VAL:
4c4b4cd2 13291 if (exp->elts[*pos].opcode == OP_TYPE)
dda83cd7
SM
13292 {
13293 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
13294 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
79d43c61 13295 &type_print_raw_options);
dda83cd7
SM
13296 *pos += 3;
13297 }
4c4b4cd2 13298 else
dda83cd7 13299 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13300 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13301 if (nargs > 1)
dda83cd7
SM
13302 {
13303 int tem;
13304
13305 for (tem = 1; tem < nargs; tem += 1)
13306 {
13307 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13308 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13309 }
13310 fputs_filtered (")", stream);
13311 }
4c4b4cd2 13312 return;
14f9c5c9 13313
4c4b4cd2 13314 case UNOP_QUAL:
4c4b4cd2
PH
13315 type_print (exp->elts[pc + 1].type, "", stream, 0);
13316 fputs_filtered ("'(", stream);
13317 print_subexp (exp, pos, stream, PREC_PREFIX);
13318 fputs_filtered (")", stream);
13319 return;
14f9c5c9 13320
4c4b4cd2 13321 case UNOP_IN_RANGE:
323e0a4a 13322 /* XXX: sprint_subexp */
4c4b4cd2 13323 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13324 fputs_filtered (" in ", stream);
79d43c61
TT
13325 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13326 &type_print_raw_options);
4c4b4cd2 13327 return;
52ce6436
PH
13328
13329 case OP_DISCRETE_RANGE:
13330 print_subexp (exp, pos, stream, PREC_SUFFIX);
13331 fputs_filtered ("..", stream);
13332 print_subexp (exp, pos, stream, PREC_SUFFIX);
13333 return;
13334
13335 case OP_OTHERS:
13336 fputs_filtered ("others => ", stream);
13337 print_subexp (exp, pos, stream, PREC_SUFFIX);
13338 return;
13339
13340 case OP_CHOICES:
13341 for (i = 0; i < nargs-1; i += 1)
13342 {
13343 if (i > 0)
13344 fputs_filtered ("|", stream);
13345 print_subexp (exp, pos, stream, PREC_SUFFIX);
13346 }
13347 fputs_filtered (" => ", stream);
13348 print_subexp (exp, pos, stream, PREC_SUFFIX);
13349 return;
13350
13351 case OP_POSITIONAL:
13352 print_subexp (exp, pos, stream, PREC_SUFFIX);
13353 return;
13354
13355 case OP_AGGREGATE:
13356 fputs_filtered ("(", stream);
13357 for (i = 0; i < nargs; i += 1)
13358 {
13359 if (i > 0)
13360 fputs_filtered (", ", stream);
13361 print_subexp (exp, pos, stream, PREC_SUFFIX);
13362 }
13363 fputs_filtered (")", stream);
13364 return;
4c4b4cd2
PH
13365 }
13366}
14f9c5c9
AS
13367
13368/* Table mapping opcodes into strings for printing operators
13369 and precedences of the operators. */
13370
d2e4a39e
AS
13371static const struct op_print ada_op_print_tab[] = {
13372 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13373 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13374 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13375 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13376 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13377 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13378 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13379 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13380 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13381 {">=", BINOP_GEQ, PREC_ORDER, 0},
13382 {">", BINOP_GTR, PREC_ORDER, 0},
13383 {"<", BINOP_LESS, PREC_ORDER, 0},
13384 {">>", BINOP_RSH, PREC_SHIFT, 0},
13385 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13386 {"+", BINOP_ADD, PREC_ADD, 0},
13387 {"-", BINOP_SUB, PREC_ADD, 0},
13388 {"&", BINOP_CONCAT, PREC_ADD, 0},
13389 {"*", BINOP_MUL, PREC_MUL, 0},
13390 {"/", BINOP_DIV, PREC_MUL, 0},
13391 {"rem", BINOP_REM, PREC_MUL, 0},
13392 {"mod", BINOP_MOD, PREC_MUL, 0},
13393 {"**", BINOP_EXP, PREC_REPEAT, 0},
13394 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13395 {"-", UNOP_NEG, PREC_PREFIX, 0},
13396 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13397 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13398 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13399 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13400 {".all", UNOP_IND, PREC_SUFFIX, 1},
13401 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13402 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13403 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9 13404};
6c038f32
PH
13405\f
13406 /* Language vector */
13407
6c038f32
PH
13408static const struct exp_descriptor ada_exp_descriptor = {
13409 ada_print_subexp,
13410 ada_operator_length,
c0201579 13411 ada_operator_check,
6c038f32
PH
13412 ada_dump_subexp_body,
13413 ada_evaluate_subexp
13414};
13415
b5ec771e
PA
13416/* symbol_name_matcher_ftype adapter for wild_match. */
13417
13418static bool
13419do_wild_match (const char *symbol_search_name,
13420 const lookup_name_info &lookup_name,
a207cff2 13421 completion_match_result *comp_match_res)
b5ec771e
PA
13422{
13423 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13424}
13425
13426/* symbol_name_matcher_ftype adapter for full_match. */
13427
13428static bool
13429do_full_match (const char *symbol_search_name,
13430 const lookup_name_info &lookup_name,
a207cff2 13431 completion_match_result *comp_match_res)
b5ec771e 13432{
959d6a67
TT
13433 const char *lname = lookup_name.ada ().lookup_name ().c_str ();
13434
13435 /* If both symbols start with "_ada_", just let the loop below
13436 handle the comparison. However, if only the symbol name starts
13437 with "_ada_", skip the prefix and let the match proceed as
13438 usual. */
13439 if (startswith (symbol_search_name, "_ada_")
13440 && !startswith (lname, "_ada"))
86b44259
TT
13441 symbol_search_name += 5;
13442
86b44259
TT
13443 int uscore_count = 0;
13444 while (*lname != '\0')
13445 {
13446 if (*symbol_search_name != *lname)
13447 {
13448 if (*symbol_search_name == 'B' && uscore_count == 2
13449 && symbol_search_name[1] == '_')
13450 {
13451 symbol_search_name += 2;
13452 while (isdigit (*symbol_search_name))
13453 ++symbol_search_name;
13454 if (symbol_search_name[0] == '_'
13455 && symbol_search_name[1] == '_')
13456 {
13457 symbol_search_name += 2;
13458 continue;
13459 }
13460 }
13461 return false;
13462 }
13463
13464 if (*symbol_search_name == '_')
13465 ++uscore_count;
13466 else
13467 uscore_count = 0;
13468
13469 ++symbol_search_name;
13470 ++lname;
13471 }
13472
13473 return is_name_suffix (symbol_search_name);
b5ec771e
PA
13474}
13475
a2cd4f14
JB
13476/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13477
13478static bool
13479do_exact_match (const char *symbol_search_name,
13480 const lookup_name_info &lookup_name,
13481 completion_match_result *comp_match_res)
13482{
13483 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13484}
13485
b5ec771e
PA
13486/* Build the Ada lookup name for LOOKUP_NAME. */
13487
13488ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13489{
e0802d59 13490 gdb::string_view user_name = lookup_name.name ();
b5ec771e 13491
6a780b67 13492 if (!user_name.empty () && user_name[0] == '<')
b5ec771e
PA
13493 {
13494 if (user_name.back () == '>')
e0802d59 13495 m_encoded_name
5ac58899 13496 = gdb::to_string (user_name.substr (1, user_name.size () - 2));
b5ec771e 13497 else
e0802d59 13498 m_encoded_name
5ac58899 13499 = gdb::to_string (user_name.substr (1, user_name.size () - 1));
b5ec771e
PA
13500 m_encoded_p = true;
13501 m_verbatim_p = true;
13502 m_wild_match_p = false;
13503 m_standard_p = false;
13504 }
13505 else
13506 {
13507 m_verbatim_p = false;
13508
e0802d59 13509 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13510
13511 if (!m_encoded_p)
13512 {
e0802d59 13513 const char *folded = ada_fold_name (user_name);
5c4258f4
TT
13514 m_encoded_name = ada_encode_1 (folded, false);
13515 if (m_encoded_name.empty ())
5ac58899 13516 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13517 }
13518 else
5ac58899 13519 m_encoded_name = gdb::to_string (user_name);
b5ec771e
PA
13520
13521 /* Handle the 'package Standard' special case. See description
13522 of m_standard_p. */
13523 if (startswith (m_encoded_name.c_str (), "standard__"))
13524 {
13525 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13526 m_standard_p = true;
13527 }
13528 else
13529 m_standard_p = false;
74ccd7f5 13530
b5ec771e
PA
13531 /* If the name contains a ".", then the user is entering a fully
13532 qualified entity name, and the match must not be done in wild
13533 mode. Similarly, if the user wants to complete what looks
13534 like an encoded name, the match must not be done in wild
13535 mode. Also, in the standard__ special case always do
13536 non-wild matching. */
13537 m_wild_match_p
13538 = (lookup_name.match_type () != symbol_name_match_type::FULL
13539 && !m_encoded_p
13540 && !m_standard_p
13541 && user_name.find ('.') == std::string::npos);
13542 }
13543}
13544
13545/* symbol_name_matcher_ftype method for Ada. This only handles
13546 completion mode. */
13547
13548static bool
13549ada_symbol_name_matches (const char *symbol_search_name,
13550 const lookup_name_info &lookup_name,
a207cff2 13551 completion_match_result *comp_match_res)
74ccd7f5 13552{
b5ec771e
PA
13553 return lookup_name.ada ().matches (symbol_search_name,
13554 lookup_name.match_type (),
a207cff2 13555 comp_match_res);
b5ec771e
PA
13556}
13557
de63c46b
PA
13558/* A name matcher that matches the symbol name exactly, with
13559 strcmp. */
13560
13561static bool
13562literal_symbol_name_matcher (const char *symbol_search_name,
13563 const lookup_name_info &lookup_name,
13564 completion_match_result *comp_match_res)
13565{
e0802d59 13566 gdb::string_view name_view = lookup_name.name ();
de63c46b 13567
e0802d59
TT
13568 if (lookup_name.completion_mode ()
13569 ? (strncmp (symbol_search_name, name_view.data (),
13570 name_view.size ()) == 0)
13571 : symbol_search_name == name_view)
de63c46b
PA
13572 {
13573 if (comp_match_res != NULL)
13574 comp_match_res->set_match (symbol_search_name);
13575 return true;
13576 }
13577 else
13578 return false;
13579}
13580
c9debfb9 13581/* Implement the "get_symbol_name_matcher" language_defn method for
b5ec771e
PA
13582 Ada. */
13583
13584static symbol_name_matcher_ftype *
13585ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
13586{
de63c46b
PA
13587 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
13588 return literal_symbol_name_matcher;
13589
b5ec771e
PA
13590 if (lookup_name.completion_mode ())
13591 return ada_symbol_name_matches;
74ccd7f5 13592 else
b5ec771e
PA
13593 {
13594 if (lookup_name.ada ().wild_match_p ())
13595 return do_wild_match;
a2cd4f14
JB
13596 else if (lookup_name.ada ().verbatim_p ())
13597 return do_exact_match;
b5ec771e
PA
13598 else
13599 return do_full_match;
13600 }
74ccd7f5
JB
13601}
13602
0874fd07
AB
13603/* Class representing the Ada language. */
13604
13605class ada_language : public language_defn
13606{
13607public:
13608 ada_language ()
0e25e767 13609 : language_defn (language_ada)
0874fd07 13610 { /* Nothing. */ }
5bd40f2a 13611
6f7664a9
AB
13612 /* See language.h. */
13613
13614 const char *name () const override
13615 { return "ada"; }
13616
13617 /* See language.h. */
13618
13619 const char *natural_name () const override
13620 { return "Ada"; }
13621
e171d6f1
AB
13622 /* See language.h. */
13623
13624 const std::vector<const char *> &filename_extensions () const override
13625 {
13626 static const std::vector<const char *> extensions
13627 = { ".adb", ".ads", ".a", ".ada", ".dg" };
13628 return extensions;
13629 }
13630
5bd40f2a
AB
13631 /* Print an array element index using the Ada syntax. */
13632
13633 void print_array_index (struct type *index_type,
13634 LONGEST index,
13635 struct ui_file *stream,
13636 const value_print_options *options) const override
13637 {
13638 struct value *index_value = val_atr (index_type, index);
13639
00c696a6 13640 value_print (index_value, stream, options);
5bd40f2a
AB
13641 fprintf_filtered (stream, " => ");
13642 }
15e5fd35
AB
13643
13644 /* Implement the "read_var_value" language_defn method for Ada. */
13645
13646 struct value *read_var_value (struct symbol *var,
13647 const struct block *var_block,
13648 struct frame_info *frame) const override
13649 {
13650 /* The only case where default_read_var_value is not sufficient
13651 is when VAR is a renaming... */
13652 if (frame != nullptr)
13653 {
13654 const struct block *frame_block = get_frame_block (frame, NULL);
13655 if (frame_block != nullptr && ada_is_renaming_symbol (var))
13656 return ada_read_renaming_var_value (var, frame_block);
13657 }
13658
13659 /* This is a typical case where we expect the default_read_var_value
13660 function to work. */
13661 return language_defn::read_var_value (var, var_block, frame);
13662 }
1fb314aa
AB
13663
13664 /* See language.h. */
13665 void language_arch_info (struct gdbarch *gdbarch,
13666 struct language_arch_info *lai) const override
13667 {
13668 const struct builtin_type *builtin = builtin_type (gdbarch);
13669
7bea47f0
AB
13670 /* Helper function to allow shorter lines below. */
13671 auto add = [&] (struct type *t)
13672 {
13673 lai->add_primitive_type (t);
13674 };
13675
13676 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13677 0, "integer"));
13678 add (arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13679 0, "long_integer"));
13680 add (arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13681 0, "short_integer"));
13682 struct type *char_type = arch_character_type (gdbarch, TARGET_CHAR_BIT,
13683 0, "character");
13684 lai->set_string_char_type (char_type);
13685 add (char_type);
13686 add (arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
13687 "float", gdbarch_float_format (gdbarch)));
13688 add (arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
13689 "long_float", gdbarch_double_format (gdbarch)));
13690 add (arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13691 0, "long_long_integer"));
13692 add (arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
13693 "long_long_float",
13694 gdbarch_long_double_format (gdbarch)));
13695 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13696 0, "natural"));
13697 add (arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13698 0, "positive"));
13699 add (builtin->builtin_void);
13700
13701 struct type *system_addr_ptr
1fb314aa
AB
13702 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13703 "void"));
7bea47f0
AB
13704 system_addr_ptr->set_name ("system__address");
13705 add (system_addr_ptr);
1fb314aa
AB
13706
13707 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13708 type. This is a signed integral type whose size is the same as
13709 the size of addresses. */
7bea47f0
AB
13710 unsigned int addr_length = TYPE_LENGTH (system_addr_ptr);
13711 add (arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13712 "storage_offset"));
1fb314aa 13713
7bea47f0 13714 lai->set_bool_type (builtin->builtin_bool);
1fb314aa 13715 }
4009ee92
AB
13716
13717 /* See language.h. */
13718
13719 bool iterate_over_symbols
13720 (const struct block *block, const lookup_name_info &name,
13721 domain_enum domain,
13722 gdb::function_view<symbol_found_callback_ftype> callback) const override
13723 {
d1183b06
TT
13724 std::vector<struct block_symbol> results
13725 = ada_lookup_symbol_list_worker (name, block, domain, 0);
4009ee92
AB
13726 for (block_symbol &sym : results)
13727 {
13728 if (!callback (&sym))
13729 return false;
13730 }
13731
13732 return true;
13733 }
6f827019
AB
13734
13735 /* See language.h. */
13736 bool sniff_from_mangled_name (const char *mangled,
13737 char **out) const override
13738 {
13739 std::string demangled = ada_decode (mangled);
13740
13741 *out = NULL;
13742
13743 if (demangled != mangled && demangled[0] != '<')
13744 {
13745 /* Set the gsymbol language to Ada, but still return 0.
13746 Two reasons for that:
13747
13748 1. For Ada, we prefer computing the symbol's decoded name
13749 on the fly rather than pre-compute it, in order to save
13750 memory (Ada projects are typically very large).
13751
13752 2. There are some areas in the definition of the GNAT
13753 encoding where, with a bit of bad luck, we might be able
13754 to decode a non-Ada symbol, generating an incorrect
13755 demangled name (Eg: names ending with "TB" for instance
13756 are identified as task bodies and so stripped from
13757 the decoded name returned).
13758
13759 Returning true, here, but not setting *DEMANGLED, helps us get
13760 a little bit of the best of both worlds. Because we're last,
13761 we should not affect any of the other languages that were
13762 able to demangle the symbol before us; we get to correctly
13763 tag Ada symbols as such; and even if we incorrectly tagged a
13764 non-Ada symbol, which should be rare, any routing through the
13765 Ada language should be transparent (Ada tries to behave much
13766 like C/C++ with non-Ada symbols). */
13767 return true;
13768 }
13769
13770 return false;
13771 }
fbfb0a46
AB
13772
13773 /* See language.h. */
13774
5399db93 13775 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d
AB
13776 {
13777 return ada_la_decode (mangled, options);
13778 }
13779
13780 /* See language.h. */
13781
fbfb0a46
AB
13782 void print_type (struct type *type, const char *varstring,
13783 struct ui_file *stream, int show, int level,
13784 const struct type_print_options *flags) const override
13785 {
13786 ada_print_type (type, varstring, stream, show, level, flags);
13787 }
c9debfb9 13788
53fc67f8
AB
13789 /* See language.h. */
13790
13791 const char *word_break_characters (void) const override
13792 {
13793 return ada_completer_word_break_characters;
13794 }
13795
7e56227d
AB
13796 /* See language.h. */
13797
13798 void collect_symbol_completion_matches (completion_tracker &tracker,
13799 complete_symbol_mode mode,
13800 symbol_name_match_type name_match_type,
13801 const char *text, const char *word,
13802 enum type_code code) const override
13803 {
13804 struct symbol *sym;
13805 const struct block *b, *surrounding_static_block = 0;
13806 struct block_iterator iter;
13807
13808 gdb_assert (code == TYPE_CODE_UNDEF);
13809
13810 lookup_name_info lookup_name (text, name_match_type, true);
13811
13812 /* First, look at the partial symtab symbols. */
13813 expand_symtabs_matching (NULL,
13814 lookup_name,
13815 NULL,
13816 NULL,
13817 ALL_DOMAIN);
13818
13819 /* At this point scan through the misc symbol vectors and add each
13820 symbol you find to the list. Eventually we want to ignore
13821 anything that isn't a text symbol (everything else will be
13822 handled by the psymtab code above). */
13823
13824 for (objfile *objfile : current_program_space->objfiles ())
13825 {
13826 for (minimal_symbol *msymbol : objfile->msymbols ())
13827 {
13828 QUIT;
13829
13830 if (completion_skip_symbol (mode, msymbol))
13831 continue;
13832
13833 language symbol_language = msymbol->language ();
13834
13835 /* Ada minimal symbols won't have their language set to Ada. If
13836 we let completion_list_add_name compare using the
13837 default/C-like matcher, then when completing e.g., symbols in a
13838 package named "pck", we'd match internal Ada symbols like
13839 "pckS", which are invalid in an Ada expression, unless you wrap
13840 them in '<' '>' to request a verbatim match.
13841
13842 Unfortunately, some Ada encoded names successfully demangle as
13843 C++ symbols (using an old mangling scheme), such as "name__2Xn"
13844 -> "Xn::name(void)" and thus some Ada minimal symbols end up
13845 with the wrong language set. Paper over that issue here. */
13846 if (symbol_language == language_auto
13847 || symbol_language == language_cplus)
13848 symbol_language = language_ada;
13849
13850 completion_list_add_name (tracker,
13851 symbol_language,
13852 msymbol->linkage_name (),
13853 lookup_name, text, word);
13854 }
13855 }
13856
13857 /* Search upwards from currently selected frame (so that we can
13858 complete on local vars. */
13859
13860 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
13861 {
13862 if (!BLOCK_SUPERBLOCK (b))
13863 surrounding_static_block = b; /* For elmin of dups */
13864
13865 ALL_BLOCK_SYMBOLS (b, iter, sym)
13866 {
13867 if (completion_skip_symbol (mode, sym))
13868 continue;
13869
13870 completion_list_add_name (tracker,
13871 sym->language (),
13872 sym->linkage_name (),
13873 lookup_name, text, word);
13874 }
13875 }
13876
13877 /* Go through the symtabs and check the externs and statics for
13878 symbols which match. */
13879
13880 for (objfile *objfile : current_program_space->objfiles ())
13881 {
13882 for (compunit_symtab *s : objfile->compunits ())
13883 {
13884 QUIT;
13885 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
13886 ALL_BLOCK_SYMBOLS (b, iter, sym)
13887 {
13888 if (completion_skip_symbol (mode, sym))
13889 continue;
13890
13891 completion_list_add_name (tracker,
13892 sym->language (),
13893 sym->linkage_name (),
13894 lookup_name, text, word);
13895 }
13896 }
13897 }
13898
13899 for (objfile *objfile : current_program_space->objfiles ())
13900 {
13901 for (compunit_symtab *s : objfile->compunits ())
13902 {
13903 QUIT;
13904 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
13905 /* Don't do this block twice. */
13906 if (b == surrounding_static_block)
13907 continue;
13908 ALL_BLOCK_SYMBOLS (b, iter, sym)
13909 {
13910 if (completion_skip_symbol (mode, sym))
13911 continue;
13912
13913 completion_list_add_name (tracker,
13914 sym->language (),
13915 sym->linkage_name (),
13916 lookup_name, text, word);
13917 }
13918 }
13919 }
13920 }
13921
f16a9f57
AB
13922 /* See language.h. */
13923
13924 gdb::unique_xmalloc_ptr<char> watch_location_expression
13925 (struct type *type, CORE_ADDR addr) const override
13926 {
13927 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
13928 std::string name = type_to_string (type);
13929 return gdb::unique_xmalloc_ptr<char>
13930 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
13931 }
13932
a1d1fa3e
AB
13933 /* See language.h. */
13934
13935 void value_print (struct value *val, struct ui_file *stream,
13936 const struct value_print_options *options) const override
13937 {
13938 return ada_value_print (val, stream, options);
13939 }
13940
ebe2334e
AB
13941 /* See language.h. */
13942
13943 void value_print_inner
13944 (struct value *val, struct ui_file *stream, int recurse,
13945 const struct value_print_options *options) const override
13946 {
13947 return ada_value_print_inner (val, stream, recurse, options);
13948 }
13949
a78a19b1
AB
13950 /* See language.h. */
13951
13952 struct block_symbol lookup_symbol_nonlocal
13953 (const char *name, const struct block *block,
13954 const domain_enum domain) const override
13955 {
13956 struct block_symbol sym;
13957
13958 sym = ada_lookup_symbol (name, block_static_block (block), domain);
13959 if (sym.symbol != NULL)
13960 return sym;
13961
13962 /* If we haven't found a match at this point, try the primitive
13963 types. In other languages, this search is performed before
13964 searching for global symbols in order to short-circuit that
13965 global-symbol search if it happens that the name corresponds
13966 to a primitive type. But we cannot do the same in Ada, because
13967 it is perfectly legitimate for a program to declare a type which
13968 has the same name as a standard type. If looking up a type in
13969 that situation, we have traditionally ignored the primitive type
13970 in favor of user-defined types. This is why, unlike most other
13971 languages, we search the primitive types this late and only after
13972 having searched the global symbols without success. */
13973
13974 if (domain == VAR_DOMAIN)
13975 {
13976 struct gdbarch *gdbarch;
13977
13978 if (block == NULL)
13979 gdbarch = target_gdbarch ();
13980 else
13981 gdbarch = block_gdbarch (block);
13982 sym.symbol
13983 = language_lookup_primitive_type_as_symbol (this, gdbarch, name);
13984 if (sym.symbol != NULL)
13985 return sym;
13986 }
13987
13988 return {};
13989 }
13990
87afa652
AB
13991 /* See language.h. */
13992
13993 int parser (struct parser_state *ps) const override
13994 {
13995 warnings_issued = 0;
13996 return ada_parse (ps);
13997 }
13998
1bf9c363
AB
13999 /* See language.h.
14000
14001 Same as evaluate_type (*EXP), but resolves ambiguous symbol references
14002 (marked by OP_VAR_VALUE nodes in which the symbol has an undefined
14003 namespace) and converts operators that are user-defined into
14004 appropriate function calls. If CONTEXT_TYPE is non-null, it provides
14005 a preferred result type [at the moment, only type void has any
14006 effect---causing procedures to be preferred over functions in calls].
14007 A null CONTEXT_TYPE indicates that a non-void return type is
14008 preferred. May change (expand) *EXP. */
14009
c5c41205
TT
14010 void post_parser (expression_up *expp, struct parser_state *ps)
14011 const override
1bf9c363
AB
14012 {
14013 struct type *context_type = NULL;
14014 int pc = 0;
14015
c5c41205 14016 if (ps->void_context_p)
1bf9c363
AB
14017 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14018
c5c41205
TT
14019 resolve_subexp (expp, &pc, 1, context_type, ps->parse_completion,
14020 ps->block_tracker);
1bf9c363
AB
14021 }
14022
ec8cec5b
AB
14023 /* See language.h. */
14024
14025 void emitchar (int ch, struct type *chtype,
14026 struct ui_file *stream, int quoter) const override
14027 {
14028 ada_emit_char (ch, chtype, stream, quoter, 1);
14029 }
14030
52b50f2c
AB
14031 /* See language.h. */
14032
14033 void printchar (int ch, struct type *chtype,
14034 struct ui_file *stream) const override
14035 {
14036 ada_printchar (ch, chtype, stream);
14037 }
14038
d711ee67
AB
14039 /* See language.h. */
14040
14041 void printstr (struct ui_file *stream, struct type *elttype,
14042 const gdb_byte *string, unsigned int length,
14043 const char *encoding, int force_ellipses,
14044 const struct value_print_options *options) const override
14045 {
14046 ada_printstr (stream, elttype, string, length, encoding,
14047 force_ellipses, options);
14048 }
14049
4ffc13fb
AB
14050 /* See language.h. */
14051
14052 void print_typedef (struct type *type, struct symbol *new_symbol,
14053 struct ui_file *stream) const override
14054 {
14055 ada_print_typedef (type, new_symbol, stream);
14056 }
14057
39e7ecca
AB
14058 /* See language.h. */
14059
14060 bool is_string_type_p (struct type *type) const override
14061 {
14062 return ada_is_string_type (type);
14063 }
14064
22e3f3ed
AB
14065 /* See language.h. */
14066
14067 const char *struct_too_deep_ellipsis () const override
14068 { return "(...)"; }
39e7ecca 14069
67bd3fd5
AB
14070 /* See language.h. */
14071
14072 bool c_style_arrays_p () const override
14073 { return false; }
14074
d3355e4d
AB
14075 /* See language.h. */
14076
14077 bool store_sym_names_in_linkage_form_p () const override
14078 { return true; }
14079
b63a3f3f
AB
14080 /* See language.h. */
14081
14082 const struct lang_varobj_ops *varobj_ops () const override
14083 { return &ada_varobj_ops; }
14084
5aba6ebe
AB
14085 /* See language.h. */
14086
14087 const struct exp_descriptor *expression_ops () const override
14088 { return &ada_exp_descriptor; }
14089
b7c6e27d
AB
14090 /* See language.h. */
14091
14092 const struct op_print *opcode_print_table () const override
14093 { return ada_op_print_tab; }
14094
c9debfb9
AB
14095protected:
14096 /* See language.h. */
14097
14098 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
14099 (const lookup_name_info &lookup_name) const override
14100 {
14101 return ada_get_symbol_name_matcher (lookup_name);
14102 }
0874fd07
AB
14103};
14104
14105/* Single instance of the Ada language class. */
14106
14107static ada_language ada_language_defn;
14108
5bf03f13
JB
14109/* Command-list for the "set/show ada" prefix command. */
14110static struct cmd_list_element *set_ada_list;
14111static struct cmd_list_element *show_ada_list;
14112
2060206e
PA
14113static void
14114initialize_ada_catchpoint_ops (void)
14115{
14116 struct breakpoint_ops *ops;
14117
14118 initialize_breakpoint_ops ();
14119
14120 ops = &catch_exception_breakpoint_ops;
14121 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14122 ops->allocate_location = allocate_location_exception;
14123 ops->re_set = re_set_exception;
14124 ops->check_status = check_status_exception;
14125 ops->print_it = print_it_exception;
14126 ops->print_one = print_one_exception;
14127 ops->print_mention = print_mention_exception;
14128 ops->print_recreate = print_recreate_exception;
2060206e
PA
14129
14130 ops = &catch_exception_unhandled_breakpoint_ops;
14131 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14132 ops->allocate_location = allocate_location_exception;
14133 ops->re_set = re_set_exception;
14134 ops->check_status = check_status_exception;
14135 ops->print_it = print_it_exception;
14136 ops->print_one = print_one_exception;
14137 ops->print_mention = print_mention_exception;
14138 ops->print_recreate = print_recreate_exception;
2060206e
PA
14139
14140 ops = &catch_assert_breakpoint_ops;
14141 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14142 ops->allocate_location = allocate_location_exception;
14143 ops->re_set = re_set_exception;
14144 ops->check_status = check_status_exception;
14145 ops->print_it = print_it_exception;
14146 ops->print_one = print_one_exception;
14147 ops->print_mention = print_mention_exception;
14148 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14149
14150 ops = &catch_handlers_breakpoint_ops;
14151 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14152 ops->allocate_location = allocate_location_exception;
14153 ops->re_set = re_set_exception;
14154 ops->check_status = check_status_exception;
14155 ops->print_it = print_it_exception;
14156 ops->print_one = print_one_exception;
14157 ops->print_mention = print_mention_exception;
14158 ops->print_recreate = print_recreate_exception;
2060206e
PA
14159}
14160
3d9434b5
JB
14161/* This module's 'new_objfile' observer. */
14162
14163static void
14164ada_new_objfile_observer (struct objfile *objfile)
14165{
14166 ada_clear_symbol_cache ();
14167}
14168
14169/* This module's 'free_objfile' observer. */
14170
14171static void
14172ada_free_objfile_observer (struct objfile *objfile)
14173{
14174 ada_clear_symbol_cache ();
14175}
14176
6c265988 14177void _initialize_ada_language ();
d2e4a39e 14178void
6c265988 14179_initialize_ada_language ()
14f9c5c9 14180{
2060206e
PA
14181 initialize_ada_catchpoint_ops ();
14182
0743fc83
TT
14183 add_basic_prefix_cmd ("ada", no_class,
14184 _("Prefix command for changing Ada-specific settings."),
14185 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14186
0743fc83
TT
14187 add_show_prefix_cmd ("ada", no_class,
14188 _("Generic command for showing Ada-specific settings."),
14189 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14190
14191 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
dda83cd7 14192 &trust_pad_over_xvs, _("\
590042fc
PW
14193Enable or disable an optimization trusting PAD types over XVS types."), _("\
14194Show whether an optimization trusting PAD types over XVS types is activated."),
dda83cd7 14195 _("\
5bf03f13
JB
14196This is related to the encoding used by the GNAT compiler. The debugger\n\
14197should normally trust the contents of PAD types, but certain older versions\n\
14198of GNAT have a bug that sometimes causes the information in the PAD type\n\
14199to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14200work around this bug. It is always safe to turn this option \"off\", but\n\
14201this incurs a slight performance penalty, so it is recommended to NOT change\n\
14202this option to \"off\" unless necessary."),
dda83cd7 14203 NULL, NULL, &set_ada_list, &show_ada_list);
5bf03f13 14204
d72413e6
PMR
14205 add_setshow_boolean_cmd ("print-signatures", class_vars,
14206 &print_signatures, _("\
14207Enable or disable the output of formal and return types for functions in the \
590042fc 14208overloads selection menu."), _("\
d72413e6 14209Show whether the output of formal and return types for functions in the \
590042fc 14210overloads selection menu is activated."),
d72413e6
PMR
14211 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14212
9ac4176b
PA
14213 add_catch_command ("exception", _("\
14214Catch Ada exceptions, when raised.\n\
9bf7038b 14215Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14216Without any argument, stop when any Ada exception is raised.\n\
14217If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14218being raised does not have a handler (and will therefore lead to the task's\n\
14219termination).\n\
14220Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14221raised is the same as ARG.\n\
14222CONDITION is a boolean expression that is evaluated to see whether the\n\
14223exception should cause a stop."),
9ac4176b 14224 catch_ada_exception_command,
71bed2db 14225 catch_ada_completer,
9ac4176b
PA
14226 CATCH_PERMANENT,
14227 CATCH_TEMPORARY);
9f757bf7
XR
14228
14229 add_catch_command ("handlers", _("\
14230Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14231Usage: catch handlers [ARG] [if CONDITION]\n\
14232Without any argument, stop when any Ada exception is handled.\n\
14233With an argument, catch only exceptions with the given name.\n\
14234CONDITION is a boolean expression that is evaluated to see whether the\n\
14235exception should cause a stop."),
9f757bf7 14236 catch_ada_handlers_command,
dda83cd7 14237 catch_ada_completer,
9f757bf7
XR
14238 CATCH_PERMANENT,
14239 CATCH_TEMPORARY);
9ac4176b
PA
14240 add_catch_command ("assert", _("\
14241Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14242Usage: catch assert [if CONDITION]\n\
14243CONDITION is a boolean expression that is evaluated to see whether the\n\
14244exception should cause a stop."),
9ac4176b 14245 catch_assert_command,
dda83cd7 14246 NULL,
9ac4176b
PA
14247 CATCH_PERMANENT,
14248 CATCH_TEMPORARY);
14249
6c038f32 14250 varsize_limit = 65536;
3fcded8f
JB
14251 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14252 &varsize_limit, _("\
14253Set the maximum number of bytes allowed in a variable-size object."), _("\
14254Show the maximum number of bytes allowed in a variable-size object."), _("\
14255Attempts to access an object whose size is not a compile-time constant\n\
14256and exceeds this limit will cause an error."),
14257 NULL, NULL, &setlist, &showlist);
6c038f32 14258
778865d3
JB
14259 add_info ("exceptions", info_exceptions_command,
14260 _("\
14261List all Ada exception names.\n\
9bf7038b 14262Usage: info exceptions [REGEXP]\n\
778865d3
JB
14263If a regular expression is passed as an argument, only those matching\n\
14264the regular expression are listed."));
14265
0743fc83
TT
14266 add_basic_prefix_cmd ("ada", class_maintenance,
14267 _("Set Ada maintenance-related variables."),
14268 &maint_set_ada_cmdlist, "maintenance set ada ",
14269 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14270
0743fc83
TT
14271 add_show_prefix_cmd ("ada", class_maintenance,
14272 _("Show Ada maintenance-related variables."),
14273 &maint_show_ada_cmdlist, "maintenance show ada ",
14274 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14275
14276 add_setshow_boolean_cmd
14277 ("ignore-descriptive-types", class_maintenance,
14278 &ada_ignore_descriptive_types_p,
14279 _("Set whether descriptive types generated by GNAT should be ignored."),
14280 _("Show whether descriptive types generated by GNAT should be ignored."),
14281 _("\
14282When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14283DWARF attribute."),
14284 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14285
459a2e4c
TT
14286 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14287 NULL, xcalloc, xfree);
6b69afc4 14288
3d9434b5 14289 /* The ada-lang observers. */
76727919
TT
14290 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14291 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14292 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14293}
This page took 3.998506 seconds and 4 git commands to generate.