hurd: add missing awk script dependency
[deliverable/binutils-gdb.git] / gdb / ada-lang.c
CommitLineData
6e681866 1/* Ada language support routines for GDB, the GNU debugger.
10a2c479 2
b811d2c2 3 Copyright (C) 1992-2020 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
4c4b4cd2 103static void ada_add_block_symbols (struct obstack *,
b5ec771e
PA
104 const struct block *,
105 const lookup_name_info &lookup_name,
106 domain_enum, struct objfile *);
14f9c5c9 107
22cee43f 108static void ada_add_all_symbols (struct obstack *, const struct block *,
b5ec771e
PA
109 const lookup_name_info &lookup_name,
110 domain_enum, int, int *);
22cee43f 111
d12307c1 112static int is_nonfunction (struct block_symbol *, int);
14f9c5c9 113
76a01679 114static void add_defn_to_vec (struct obstack *, struct symbol *,
f0c5f9b2 115 const struct block *);
14f9c5c9 116
4c4b4cd2
PH
117static int num_defns_collected (struct obstack *);
118
d12307c1 119static struct block_symbol *defns_collected (struct obstack *, int);
14f9c5c9 120
e9d9f57e 121static struct value *resolve_subexp (expression_up *, int *, int,
699bd4cf
TT
122 struct type *, int,
123 innermost_block_tracker *);
14f9c5c9 124
e9d9f57e 125static void replace_operator_with_call (expression_up *, int, int, int,
270140bd 126 struct symbol *, const struct block *);
14f9c5c9 127
d2e4a39e 128static int possible_user_operator_p (enum exp_opcode, struct value **);
14f9c5c9 129
a121b7c1 130static const char *ada_op_name (enum exp_opcode);
4c4b4cd2
PH
131
132static const char *ada_decoded_op_name (enum exp_opcode);
14f9c5c9 133
d2e4a39e 134static int numeric_type_p (struct type *);
14f9c5c9 135
d2e4a39e 136static int integer_type_p (struct type *);
14f9c5c9 137
d2e4a39e 138static int scalar_type_p (struct type *);
14f9c5c9 139
d2e4a39e 140static int discrete_type_p (struct type *);
14f9c5c9 141
a121b7c1 142static struct type *ada_lookup_struct_elt_type (struct type *, const char *,
988f6b3d 143 int, int);
4c4b4cd2 144
d2e4a39e 145static struct value *evaluate_subexp_type (struct expression *, int *);
14f9c5c9 146
b4ba55a1
JB
147static struct type *ada_find_parallel_type_with_name (struct type *,
148 const char *);
149
d2e4a39e 150static int is_dynamic_field (struct type *, int);
14f9c5c9 151
10a2c479 152static struct type *to_fixed_variant_branch_type (struct type *,
fc1a4b47 153 const gdb_byte *,
4c4b4cd2
PH
154 CORE_ADDR, struct value *);
155
156static struct type *to_fixed_array_type (struct type *, struct value *, int);
14f9c5c9 157
28c85d6c 158static struct type *to_fixed_range_type (struct type *, struct value *);
14f9c5c9 159
d2e4a39e 160static struct type *to_static_fixed_type (struct type *);
f192137b 161static struct type *static_unwrap_type (struct type *type);
14f9c5c9 162
d2e4a39e 163static struct value *unwrap_value (struct value *);
14f9c5c9 164
ad82864c 165static struct type *constrained_packed_array_type (struct type *, long *);
14f9c5c9 166
ad82864c 167static struct type *decode_constrained_packed_array_type (struct type *);
14f9c5c9 168
ad82864c
JB
169static long decode_packed_array_bitsize (struct type *);
170
171static struct value *decode_constrained_packed_array (struct value *);
172
173static int ada_is_packed_array_type (struct type *);
174
175static int ada_is_unconstrained_packed_array_type (struct type *);
14f9c5c9 176
d2e4a39e 177static struct value *value_subscript_packed (struct value *, int,
4c4b4cd2 178 struct value **);
14f9c5c9 179
4c4b4cd2
PH
180static struct value *coerce_unspec_val_to_type (struct value *,
181 struct type *);
14f9c5c9 182
d2e4a39e 183static int lesseq_defined_than (struct symbol *, struct symbol *);
14f9c5c9 184
d2e4a39e 185static int equiv_types (struct type *, struct type *);
14f9c5c9 186
d2e4a39e 187static int is_name_suffix (const char *);
14f9c5c9 188
73589123
PH
189static int advance_wild_match (const char **, const char *, int);
190
b5ec771e 191static bool wild_match (const char *name, const char *patn);
14f9c5c9 192
d2e4a39e 193static struct value *ada_coerce_ref (struct value *);
14f9c5c9 194
4c4b4cd2
PH
195static LONGEST pos_atr (struct value *);
196
3cb382c9 197static struct value *value_pos_atr (struct type *, struct value *);
14f9c5c9 198
53a47a3e
TT
199static struct value *val_atr (struct type *, LONGEST);
200
d2e4a39e 201static struct value *value_val_atr (struct type *, struct value *);
14f9c5c9 202
4c4b4cd2
PH
203static struct symbol *standard_lookup (const char *, const struct block *,
204 domain_enum);
14f9c5c9 205
108d56a4 206static struct value *ada_search_struct_field (const char *, struct value *, int,
4c4b4cd2
PH
207 struct type *);
208
0d5cff50 209static int find_struct_field (const char *, struct type *, int,
52ce6436 210 struct type **, int *, int *, int *, int *);
4c4b4cd2 211
d12307c1 212static int ada_resolve_function (struct block_symbol *, int,
4c4b4cd2 213 struct value **, int, const char *,
2a612529 214 struct type *, int);
4c4b4cd2 215
4c4b4cd2
PH
216static int ada_is_direct_array_type (struct type *);
217
72d5681a
PH
218static void ada_language_arch_info (struct gdbarch *,
219 struct language_arch_info *);
714e53ab 220
52ce6436
PH
221static struct value *ada_index_struct_field (int, struct value *, int,
222 struct type *);
223
224static struct value *assign_aggregate (struct value *, struct value *,
0963b4bd
MS
225 struct expression *,
226 int *, enum noside);
52ce6436
PH
227
228static void aggregate_assign_from_choices (struct value *, struct value *,
229 struct expression *,
230 int *, LONGEST *, int *,
231 int, LONGEST, LONGEST);
232
233static void aggregate_assign_positional (struct value *, struct value *,
234 struct expression *,
235 int *, LONGEST *, int *, int,
236 LONGEST, LONGEST);
237
238
239static void aggregate_assign_others (struct value *, struct value *,
240 struct expression *,
241 int *, LONGEST *, int, LONGEST, LONGEST);
242
243
244static void add_component_interval (LONGEST, LONGEST, LONGEST *, int *, int);
245
246
247static struct value *ada_evaluate_subexp (struct type *, struct expression *,
248 int *, enum noside);
249
250static void ada_forward_operator_length (struct expression *, int, int *,
251 int *);
852dff6c
JB
252
253static struct type *ada_find_any_type (const char *name);
b5ec771e
PA
254
255static symbol_name_matcher_ftype *ada_get_symbol_name_matcher
256 (const lookup_name_info &lookup_name);
257
4c4b4cd2
PH
258\f
259
ee01b665
JB
260/* The result of a symbol lookup to be stored in our symbol cache. */
261
262struct cache_entry
263{
264 /* The name used to perform the lookup. */
265 const char *name;
266 /* The namespace used during the lookup. */
fe978cb0 267 domain_enum domain;
ee01b665
JB
268 /* The symbol returned by the lookup, or NULL if no matching symbol
269 was found. */
270 struct symbol *sym;
271 /* The block where the symbol was found, or NULL if no matching
272 symbol was found. */
273 const struct block *block;
274 /* A pointer to the next entry with the same hash. */
275 struct cache_entry *next;
276};
277
278/* The Ada symbol cache, used to store the result of Ada-mode symbol
279 lookups in the course of executing the user's commands.
280
281 The cache is implemented using a simple, fixed-sized hash.
282 The size is fixed on the grounds that there are not likely to be
283 all that many symbols looked up during any given session, regardless
284 of the size of the symbol table. If we decide to go to a resizable
285 table, let's just use the stuff from libiberty instead. */
286
287#define HASH_SIZE 1009
288
289struct ada_symbol_cache
290{
291 /* An obstack used to store the entries in our cache. */
292 struct obstack cache_space;
293
294 /* The root of the hash table used to implement our symbol cache. */
295 struct cache_entry *root[HASH_SIZE];
296};
297
298static void ada_free_symbol_cache (struct ada_symbol_cache *sym_cache);
76a01679 299
4c4b4cd2 300/* Maximum-sized dynamic type. */
14f9c5c9
AS
301static unsigned int varsize_limit;
302
67cb5b2d 303static const char ada_completer_word_break_characters[] =
4c4b4cd2
PH
304#ifdef VMS
305 " \t\n!@#%^&*()+=|~`}{[]\";:?/,-";
306#else
14f9c5c9 307 " \t\n!@#$%^&*()+=|~`}{[]\";:?/,-";
4c4b4cd2 308#endif
14f9c5c9 309
4c4b4cd2 310/* The name of the symbol to use to get the name of the main subprogram. */
76a01679 311static const char ADA_MAIN_PROGRAM_SYMBOL_NAME[]
4c4b4cd2 312 = "__gnat_ada_main_program_name";
14f9c5c9 313
4c4b4cd2
PH
314/* Limit on the number of warnings to raise per expression evaluation. */
315static int warning_limit = 2;
316
317/* Number of warning messages issued; reset to 0 by cleanups after
318 expression evaluation. */
319static int warnings_issued = 0;
320
321static const char *known_runtime_file_name_patterns[] = {
322 ADA_KNOWN_RUNTIME_FILE_NAME_PATTERNS NULL
323};
324
325static const char *known_auxiliary_function_name_patterns[] = {
326 ADA_KNOWN_AUXILIARY_FUNCTION_NAME_PATTERNS NULL
327};
328
c6044dd1
JB
329/* Maintenance-related settings for this module. */
330
331static struct cmd_list_element *maint_set_ada_cmdlist;
332static struct cmd_list_element *maint_show_ada_cmdlist;
333
c6044dd1
JB
334/* The "maintenance ada set/show ignore-descriptive-type" value. */
335
491144b5 336static bool ada_ignore_descriptive_types_p = false;
c6044dd1 337
e802dbe0
JB
338 /* Inferior-specific data. */
339
340/* Per-inferior data for this module. */
341
342struct ada_inferior_data
343{
344 /* The ada__tags__type_specific_data type, which is used when decoding
345 tagged types. With older versions of GNAT, this type was directly
346 accessible through a component ("tsd") in the object tag. But this
347 is no longer the case, so we cache it for each inferior. */
f37b313d 348 struct type *tsd_type = nullptr;
3eecfa55
JB
349
350 /* The exception_support_info data. This data is used to determine
351 how to implement support for Ada exception catchpoints in a given
352 inferior. */
f37b313d 353 const struct exception_support_info *exception_info = nullptr;
e802dbe0
JB
354};
355
356/* Our key to this module's inferior data. */
f37b313d 357static const struct inferior_key<ada_inferior_data> ada_inferior_data;
e802dbe0
JB
358
359/* Return our inferior data for the given inferior (INF).
360
361 This function always returns a valid pointer to an allocated
362 ada_inferior_data structure. If INF's inferior data has not
363 been previously set, this functions creates a new one with all
364 fields set to zero, sets INF's inferior to it, and then returns
365 a pointer to that newly allocated ada_inferior_data. */
366
367static struct ada_inferior_data *
368get_ada_inferior_data (struct inferior *inf)
369{
370 struct ada_inferior_data *data;
371
f37b313d 372 data = ada_inferior_data.get (inf);
e802dbe0 373 if (data == NULL)
f37b313d 374 data = ada_inferior_data.emplace (inf);
e802dbe0
JB
375
376 return data;
377}
378
379/* Perform all necessary cleanups regarding our module's inferior data
380 that is required after the inferior INF just exited. */
381
382static void
383ada_inferior_exit (struct inferior *inf)
384{
f37b313d 385 ada_inferior_data.clear (inf);
e802dbe0
JB
386}
387
ee01b665
JB
388
389 /* program-space-specific data. */
390
391/* This module's per-program-space data. */
392struct ada_pspace_data
393{
f37b313d
TT
394 ~ada_pspace_data ()
395 {
396 if (sym_cache != NULL)
397 ada_free_symbol_cache (sym_cache);
398 }
399
ee01b665 400 /* The Ada symbol cache. */
f37b313d 401 struct ada_symbol_cache *sym_cache = nullptr;
ee01b665
JB
402};
403
404/* Key to our per-program-space data. */
f37b313d 405static const struct program_space_key<ada_pspace_data> ada_pspace_data_handle;
ee01b665
JB
406
407/* Return this module's data for the given program space (PSPACE).
408 If not is found, add a zero'ed one now.
409
410 This function always returns a valid object. */
411
412static struct ada_pspace_data *
413get_ada_pspace_data (struct program_space *pspace)
414{
415 struct ada_pspace_data *data;
416
f37b313d 417 data = ada_pspace_data_handle.get (pspace);
ee01b665 418 if (data == NULL)
f37b313d 419 data = ada_pspace_data_handle.emplace (pspace);
ee01b665
JB
420
421 return data;
422}
423
4c4b4cd2
PH
424 /* Utilities */
425
720d1a40 426/* If TYPE is a TYPE_CODE_TYPEDEF type, return the target type after
eed9788b 427 all typedef layers have been peeled. Otherwise, return TYPE.
720d1a40
JB
428
429 Normally, we really expect a typedef type to only have 1 typedef layer.
430 In other words, we really expect the target type of a typedef type to be
431 a non-typedef type. This is particularly true for Ada units, because
432 the language does not have a typedef vs not-typedef distinction.
433 In that respect, the Ada compiler has been trying to eliminate as many
434 typedef definitions in the debugging information, since they generally
435 do not bring any extra information (we still use typedef under certain
436 circumstances related mostly to the GNAT encoding).
437
438 Unfortunately, we have seen situations where the debugging information
439 generated by the compiler leads to such multiple typedef layers. For
440 instance, consider the following example with stabs:
441
442 .stabs "pck__float_array___XUP:Tt(0,46)=s16P_ARRAY:(0,47)=[...]"[...]
443 .stabs "pck__float_array___XUP:t(0,36)=(0,46)",128,0,6,0
444
445 This is an error in the debugging information which causes type
446 pck__float_array___XUP to be defined twice, and the second time,
447 it is defined as a typedef of a typedef.
448
449 This is on the fringe of legality as far as debugging information is
450 concerned, and certainly unexpected. But it is easy to handle these
451 situations correctly, so we can afford to be lenient in this case. */
452
453static struct type *
454ada_typedef_target_type (struct type *type)
455{
78134374 456 while (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
457 type = TYPE_TARGET_TYPE (type);
458 return type;
459}
460
41d27058
JB
461/* Given DECODED_NAME a string holding a symbol name in its
462 decoded form (ie using the Ada dotted notation), returns
463 its unqualified name. */
464
465static const char *
466ada_unqualified_name (const char *decoded_name)
467{
2b0f535a
JB
468 const char *result;
469
470 /* If the decoded name starts with '<', it means that the encoded
471 name does not follow standard naming conventions, and thus that
472 it is not your typical Ada symbol name. Trying to unqualify it
473 is therefore pointless and possibly erroneous. */
474 if (decoded_name[0] == '<')
475 return decoded_name;
476
477 result = strrchr (decoded_name, '.');
41d27058
JB
478 if (result != NULL)
479 result++; /* Skip the dot... */
480 else
481 result = decoded_name;
482
483 return result;
484}
485
39e7af3e 486/* Return a string starting with '<', followed by STR, and '>'. */
41d27058 487
39e7af3e 488static std::string
41d27058
JB
489add_angle_brackets (const char *str)
490{
39e7af3e 491 return string_printf ("<%s>", str);
41d27058 492}
96d887e8 493
67cb5b2d 494static const char *
4c4b4cd2
PH
495ada_get_gdb_completer_word_break_characters (void)
496{
497 return ada_completer_word_break_characters;
498}
499
e79af960
JB
500/* Print an array element index using the Ada syntax. */
501
502static void
53a47a3e
TT
503ada_print_array_index (struct type *index_type, LONGEST index,
504 struct ui_file *stream,
79a45b7d 505 const struct value_print_options *options)
e79af960 506{
53a47a3e
TT
507 struct value *index_value = val_atr (index_type, index);
508
79a45b7d 509 LA_VALUE_PRINT (index_value, stream, options);
e79af960
JB
510 fprintf_filtered (stream, " => ");
511}
512
e2b7af72
JB
513/* la_watch_location_expression for Ada. */
514
de93309a 515static gdb::unique_xmalloc_ptr<char>
e2b7af72
JB
516ada_watch_location_expression (struct type *type, CORE_ADDR addr)
517{
518 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
519 std::string name = type_to_string (type);
520 return gdb::unique_xmalloc_ptr<char>
521 (xstrprintf ("{%s} %s", name.c_str (), core_addr_to_string (addr)));
522}
523
de93309a
SM
524/* Assuming V points to an array of S objects, make sure that it contains at
525 least M objects, updating V and S as necessary. */
526
527#define GROW_VECT(v, s, m) \
528 if ((s) < (m)) (v) = (char *) grow_vect (v, &(s), m, sizeof *(v));
529
f27cf670 530/* Assuming VECT points to an array of *SIZE objects of size
14f9c5c9 531 ELEMENT_SIZE, grow it to contain at least MIN_SIZE objects,
f27cf670 532 updating *SIZE as necessary and returning the (new) array. */
14f9c5c9 533
de93309a 534static void *
f27cf670 535grow_vect (void *vect, size_t *size, size_t min_size, int element_size)
14f9c5c9 536{
d2e4a39e
AS
537 if (*size < min_size)
538 {
539 *size *= 2;
540 if (*size < min_size)
4c4b4cd2 541 *size = min_size;
f27cf670 542 vect = xrealloc (vect, *size * element_size);
d2e4a39e 543 }
f27cf670 544 return vect;
14f9c5c9
AS
545}
546
547/* True (non-zero) iff TARGET matches FIELD_NAME up to any trailing
4c4b4cd2 548 suffix of FIELD_NAME beginning "___". */
14f9c5c9
AS
549
550static int
ebf56fd3 551field_name_match (const char *field_name, const char *target)
14f9c5c9
AS
552{
553 int len = strlen (target);
5b4ee69b 554
d2e4a39e 555 return
4c4b4cd2
PH
556 (strncmp (field_name, target, len) == 0
557 && (field_name[len] == '\0'
61012eef 558 || (startswith (field_name + len, "___")
76a01679
JB
559 && strcmp (field_name + strlen (field_name) - 6,
560 "___XVN") != 0)));
14f9c5c9
AS
561}
562
563
872c8b51
JB
564/* Assuming TYPE is a TYPE_CODE_STRUCT or a TYPE_CODE_TYPDEF to
565 a TYPE_CODE_STRUCT, find the field whose name matches FIELD_NAME,
566 and return its index. This function also handles fields whose name
567 have ___ suffixes because the compiler sometimes alters their name
568 by adding such a suffix to represent fields with certain constraints.
569 If the field could not be found, return a negative number if
570 MAYBE_MISSING is set. Otherwise raise an error. */
4c4b4cd2
PH
571
572int
573ada_get_field_index (const struct type *type, const char *field_name,
574 int maybe_missing)
575{
576 int fieldno;
872c8b51
JB
577 struct type *struct_type = check_typedef ((struct type *) type);
578
1f704f76 579 for (fieldno = 0; fieldno < struct_type->num_fields (); fieldno++)
872c8b51 580 if (field_name_match (TYPE_FIELD_NAME (struct_type, fieldno), field_name))
4c4b4cd2
PH
581 return fieldno;
582
583 if (!maybe_missing)
323e0a4a 584 error (_("Unable to find field %s in struct %s. Aborting"),
7d93a1e0 585 field_name, struct_type->name ());
4c4b4cd2
PH
586
587 return -1;
588}
589
590/* The length of the prefix of NAME prior to any "___" suffix. */
14f9c5c9
AS
591
592int
d2e4a39e 593ada_name_prefix_len (const char *name)
14f9c5c9
AS
594{
595 if (name == NULL)
596 return 0;
d2e4a39e 597 else
14f9c5c9 598 {
d2e4a39e 599 const char *p = strstr (name, "___");
5b4ee69b 600
14f9c5c9 601 if (p == NULL)
4c4b4cd2 602 return strlen (name);
14f9c5c9 603 else
4c4b4cd2 604 return p - name;
14f9c5c9
AS
605 }
606}
607
4c4b4cd2
PH
608/* Return non-zero if SUFFIX is a suffix of STR.
609 Return zero if STR is null. */
610
14f9c5c9 611static int
d2e4a39e 612is_suffix (const char *str, const char *suffix)
14f9c5c9
AS
613{
614 int len1, len2;
5b4ee69b 615
14f9c5c9
AS
616 if (str == NULL)
617 return 0;
618 len1 = strlen (str);
619 len2 = strlen (suffix);
4c4b4cd2 620 return (len1 >= len2 && strcmp (str + len1 - len2, suffix) == 0);
14f9c5c9
AS
621}
622
4c4b4cd2
PH
623/* The contents of value VAL, treated as a value of type TYPE. The
624 result is an lval in memory if VAL is. */
14f9c5c9 625
d2e4a39e 626static struct value *
4c4b4cd2 627coerce_unspec_val_to_type (struct value *val, struct type *type)
14f9c5c9 628{
61ee279c 629 type = ada_check_typedef (type);
df407dfe 630 if (value_type (val) == type)
4c4b4cd2 631 return val;
d2e4a39e 632 else
14f9c5c9 633 {
4c4b4cd2
PH
634 struct value *result;
635
636 /* Make sure that the object size is not unreasonable before
637 trying to allocate some memory for it. */
c1b5a1a6 638 ada_ensure_varsize_limit (type);
4c4b4cd2 639
41e8491f
JK
640 if (value_lazy (val)
641 || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
642 result = allocate_value_lazy (type);
643 else
644 {
645 result = allocate_value (type);
9a0dc9e3 646 value_contents_copy_raw (result, 0, val, 0, TYPE_LENGTH (type));
41e8491f 647 }
74bcbdf3 648 set_value_component_location (result, val);
9bbda503
AC
649 set_value_bitsize (result, value_bitsize (val));
650 set_value_bitpos (result, value_bitpos (val));
c408a94f
TT
651 if (VALUE_LVAL (result) == lval_memory)
652 set_value_address (result, value_address (val));
14f9c5c9
AS
653 return result;
654 }
655}
656
fc1a4b47
AC
657static const gdb_byte *
658cond_offset_host (const gdb_byte *valaddr, long offset)
14f9c5c9
AS
659{
660 if (valaddr == NULL)
661 return NULL;
662 else
663 return valaddr + offset;
664}
665
666static CORE_ADDR
ebf56fd3 667cond_offset_target (CORE_ADDR address, long offset)
14f9c5c9
AS
668{
669 if (address == 0)
670 return 0;
d2e4a39e 671 else
14f9c5c9
AS
672 return address + offset;
673}
674
4c4b4cd2
PH
675/* Issue a warning (as for the definition of warning in utils.c, but
676 with exactly one argument rather than ...), unless the limit on the
677 number of warnings has passed during the evaluation of the current
678 expression. */
a2249542 679
77109804
AC
680/* FIXME: cagney/2004-10-10: This function is mimicking the behavior
681 provided by "complaint". */
a0b31db1 682static void lim_warning (const char *format, ...) ATTRIBUTE_PRINTF (1, 2);
77109804 683
14f9c5c9 684static void
a2249542 685lim_warning (const char *format, ...)
14f9c5c9 686{
a2249542 687 va_list args;
a2249542 688
5b4ee69b 689 va_start (args, format);
4c4b4cd2
PH
690 warnings_issued += 1;
691 if (warnings_issued <= warning_limit)
a2249542
MK
692 vwarning (format, args);
693
694 va_end (args);
4c4b4cd2
PH
695}
696
714e53ab
PH
697/* Issue an error if the size of an object of type T is unreasonable,
698 i.e. if it would be a bad idea to allocate a value of this type in
699 GDB. */
700
c1b5a1a6
JB
701void
702ada_ensure_varsize_limit (const struct type *type)
714e53ab
PH
703{
704 if (TYPE_LENGTH (type) > varsize_limit)
323e0a4a 705 error (_("object size is larger than varsize-limit"));
714e53ab
PH
706}
707
0963b4bd 708/* Maximum value of a SIZE-byte signed integer type. */
4c4b4cd2 709static LONGEST
c3e5cd34 710max_of_size (int size)
4c4b4cd2 711{
76a01679 712 LONGEST top_bit = (LONGEST) 1 << (size * 8 - 2);
5b4ee69b 713
76a01679 714 return top_bit | (top_bit - 1);
4c4b4cd2
PH
715}
716
0963b4bd 717/* Minimum value of a SIZE-byte signed integer type. */
4c4b4cd2 718static LONGEST
c3e5cd34 719min_of_size (int size)
4c4b4cd2 720{
c3e5cd34 721 return -max_of_size (size) - 1;
4c4b4cd2
PH
722}
723
0963b4bd 724/* Maximum value of a SIZE-byte unsigned integer type. */
4c4b4cd2 725static ULONGEST
c3e5cd34 726umax_of_size (int size)
4c4b4cd2 727{
76a01679 728 ULONGEST top_bit = (ULONGEST) 1 << (size * 8 - 1);
5b4ee69b 729
76a01679 730 return top_bit | (top_bit - 1);
4c4b4cd2
PH
731}
732
0963b4bd 733/* Maximum value of integral type T, as a signed quantity. */
c3e5cd34
PH
734static LONGEST
735max_of_type (struct type *t)
4c4b4cd2 736{
c3e5cd34
PH
737 if (TYPE_UNSIGNED (t))
738 return (LONGEST) umax_of_size (TYPE_LENGTH (t));
739 else
740 return max_of_size (TYPE_LENGTH (t));
741}
742
0963b4bd 743/* Minimum value of integral type T, as a signed quantity. */
c3e5cd34
PH
744static LONGEST
745min_of_type (struct type *t)
746{
747 if (TYPE_UNSIGNED (t))
748 return 0;
749 else
750 return min_of_size (TYPE_LENGTH (t));
4c4b4cd2
PH
751}
752
753/* The largest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
754LONGEST
755ada_discrete_type_high_bound (struct type *type)
4c4b4cd2 756{
b249d2c2 757 type = resolve_dynamic_type (type, {}, 0);
78134374 758 switch (type->code ())
4c4b4cd2
PH
759 {
760 case TYPE_CODE_RANGE:
690cc4eb 761 return TYPE_HIGH_BOUND (type);
4c4b4cd2 762 case TYPE_CODE_ENUM:
1f704f76 763 return TYPE_FIELD_ENUMVAL (type, type->num_fields () - 1);
690cc4eb
PH
764 case TYPE_CODE_BOOL:
765 return 1;
766 case TYPE_CODE_CHAR:
76a01679 767 case TYPE_CODE_INT:
690cc4eb 768 return max_of_type (type);
4c4b4cd2 769 default:
43bbcdc2 770 error (_("Unexpected type in ada_discrete_type_high_bound."));
4c4b4cd2
PH
771 }
772}
773
14e75d8e 774/* The smallest value in the domain of TYPE, a discrete type, as an integer. */
43bbcdc2
PH
775LONGEST
776ada_discrete_type_low_bound (struct type *type)
4c4b4cd2 777{
b249d2c2 778 type = resolve_dynamic_type (type, {}, 0);
78134374 779 switch (type->code ())
4c4b4cd2
PH
780 {
781 case TYPE_CODE_RANGE:
690cc4eb 782 return TYPE_LOW_BOUND (type);
4c4b4cd2 783 case TYPE_CODE_ENUM:
14e75d8e 784 return TYPE_FIELD_ENUMVAL (type, 0);
690cc4eb
PH
785 case TYPE_CODE_BOOL:
786 return 0;
787 case TYPE_CODE_CHAR:
76a01679 788 case TYPE_CODE_INT:
690cc4eb 789 return min_of_type (type);
4c4b4cd2 790 default:
43bbcdc2 791 error (_("Unexpected type in ada_discrete_type_low_bound."));
4c4b4cd2
PH
792 }
793}
794
795/* The identity on non-range types. For range types, the underlying
76a01679 796 non-range scalar type. */
4c4b4cd2
PH
797
798static struct type *
18af8284 799get_base_type (struct type *type)
4c4b4cd2 800{
78134374 801 while (type != NULL && type->code () == TYPE_CODE_RANGE)
4c4b4cd2 802 {
76a01679
JB
803 if (type == TYPE_TARGET_TYPE (type) || TYPE_TARGET_TYPE (type) == NULL)
804 return type;
4c4b4cd2
PH
805 type = TYPE_TARGET_TYPE (type);
806 }
807 return type;
14f9c5c9 808}
41246937
JB
809
810/* Return a decoded version of the given VALUE. This means returning
811 a value whose type is obtained by applying all the GNAT-specific
85102364 812 encodings, making the resulting type a static but standard description
41246937
JB
813 of the initial type. */
814
815struct value *
816ada_get_decoded_value (struct value *value)
817{
818 struct type *type = ada_check_typedef (value_type (value));
819
820 if (ada_is_array_descriptor_type (type)
821 || (ada_is_constrained_packed_array_type (type)
78134374 822 && type->code () != TYPE_CODE_PTR))
41246937 823 {
78134374 824 if (type->code () == TYPE_CODE_TYPEDEF) /* array access type. */
41246937
JB
825 value = ada_coerce_to_simple_array_ptr (value);
826 else
827 value = ada_coerce_to_simple_array (value);
828 }
829 else
830 value = ada_to_fixed_value (value);
831
832 return value;
833}
834
835/* Same as ada_get_decoded_value, but with the given TYPE.
836 Because there is no associated actual value for this type,
837 the resulting type might be a best-effort approximation in
838 the case of dynamic types. */
839
840struct type *
841ada_get_decoded_type (struct type *type)
842{
843 type = to_static_fixed_type (type);
844 if (ada_is_constrained_packed_array_type (type))
845 type = ada_coerce_to_simple_array_type (type);
846 return type;
847}
848
4c4b4cd2 849\f
76a01679 850
4c4b4cd2 851 /* Language Selection */
14f9c5c9
AS
852
853/* If the main program is in Ada, return language_ada, otherwise return LANG
ccefe4c4 854 (the main program is in Ada iif the adainit symbol is found). */
d2e4a39e 855
de93309a 856static enum language
ccefe4c4 857ada_update_initial_language (enum language lang)
14f9c5c9 858{
cafb3438 859 if (lookup_minimal_symbol ("adainit", NULL, NULL).minsym != NULL)
4c4b4cd2 860 return language_ada;
14f9c5c9
AS
861
862 return lang;
863}
96d887e8
PH
864
865/* If the main procedure is written in Ada, then return its name.
866 The result is good until the next call. Return NULL if the main
867 procedure doesn't appear to be in Ada. */
868
869char *
870ada_main_name (void)
871{
3b7344d5 872 struct bound_minimal_symbol msym;
e83e4e24 873 static gdb::unique_xmalloc_ptr<char> main_program_name;
6c038f32 874
96d887e8
PH
875 /* For Ada, the name of the main procedure is stored in a specific
876 string constant, generated by the binder. Look for that symbol,
877 extract its address, and then read that string. If we didn't find
878 that string, then most probably the main procedure is not written
879 in Ada. */
880 msym = lookup_minimal_symbol (ADA_MAIN_PROGRAM_SYMBOL_NAME, NULL, NULL);
881
3b7344d5 882 if (msym.minsym != NULL)
96d887e8 883 {
f9bc20b9
JB
884 CORE_ADDR main_program_name_addr;
885 int err_code;
886
77e371c0 887 main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
96d887e8 888 if (main_program_name_addr == 0)
323e0a4a 889 error (_("Invalid address for Ada main program name."));
96d887e8 890
f9bc20b9
JB
891 target_read_string (main_program_name_addr, &main_program_name,
892 1024, &err_code);
893
894 if (err_code != 0)
895 return NULL;
e83e4e24 896 return main_program_name.get ();
96d887e8
PH
897 }
898
899 /* The main procedure doesn't seem to be in Ada. */
900 return NULL;
901}
14f9c5c9 902\f
4c4b4cd2 903 /* Symbols */
d2e4a39e 904
4c4b4cd2
PH
905/* Table of Ada operators and their GNAT-encoded names. Last entry is pair
906 of NULLs. */
14f9c5c9 907
d2e4a39e
AS
908const struct ada_opname_map ada_opname_table[] = {
909 {"Oadd", "\"+\"", BINOP_ADD},
910 {"Osubtract", "\"-\"", BINOP_SUB},
911 {"Omultiply", "\"*\"", BINOP_MUL},
912 {"Odivide", "\"/\"", BINOP_DIV},
913 {"Omod", "\"mod\"", BINOP_MOD},
914 {"Orem", "\"rem\"", BINOP_REM},
915 {"Oexpon", "\"**\"", BINOP_EXP},
916 {"Olt", "\"<\"", BINOP_LESS},
917 {"Ole", "\"<=\"", BINOP_LEQ},
918 {"Ogt", "\">\"", BINOP_GTR},
919 {"Oge", "\">=\"", BINOP_GEQ},
920 {"Oeq", "\"=\"", BINOP_EQUAL},
921 {"One", "\"/=\"", BINOP_NOTEQUAL},
922 {"Oand", "\"and\"", BINOP_BITWISE_AND},
923 {"Oor", "\"or\"", BINOP_BITWISE_IOR},
924 {"Oxor", "\"xor\"", BINOP_BITWISE_XOR},
925 {"Oconcat", "\"&\"", BINOP_CONCAT},
926 {"Oabs", "\"abs\"", UNOP_ABS},
927 {"Onot", "\"not\"", UNOP_LOGICAL_NOT},
928 {"Oadd", "\"+\"", UNOP_PLUS},
929 {"Osubtract", "\"-\"", UNOP_NEG},
930 {NULL, NULL}
14f9c5c9
AS
931};
932
b5ec771e
PA
933/* The "encoded" form of DECODED, according to GNAT conventions. The
934 result is valid until the next call to ada_encode. If
935 THROW_ERRORS, throw an error if invalid operator name is found.
936 Otherwise, return NULL in that case. */
4c4b4cd2 937
b5ec771e
PA
938static char *
939ada_encode_1 (const char *decoded, bool throw_errors)
14f9c5c9 940{
4c4b4cd2
PH
941 static char *encoding_buffer = NULL;
942 static size_t encoding_buffer_size = 0;
d2e4a39e 943 const char *p;
14f9c5c9 944 int k;
d2e4a39e 945
4c4b4cd2 946 if (decoded == NULL)
14f9c5c9
AS
947 return NULL;
948
4c4b4cd2
PH
949 GROW_VECT (encoding_buffer, encoding_buffer_size,
950 2 * strlen (decoded) + 10);
14f9c5c9
AS
951
952 k = 0;
4c4b4cd2 953 for (p = decoded; *p != '\0'; p += 1)
14f9c5c9 954 {
cdc7bb92 955 if (*p == '.')
4c4b4cd2
PH
956 {
957 encoding_buffer[k] = encoding_buffer[k + 1] = '_';
958 k += 2;
959 }
14f9c5c9 960 else if (*p == '"')
4c4b4cd2
PH
961 {
962 const struct ada_opname_map *mapping;
963
964 for (mapping = ada_opname_table;
1265e4aa 965 mapping->encoded != NULL
61012eef 966 && !startswith (p, mapping->decoded); mapping += 1)
4c4b4cd2
PH
967 ;
968 if (mapping->encoded == NULL)
b5ec771e
PA
969 {
970 if (throw_errors)
971 error (_("invalid Ada operator name: %s"), p);
972 else
973 return NULL;
974 }
4c4b4cd2
PH
975 strcpy (encoding_buffer + k, mapping->encoded);
976 k += strlen (mapping->encoded);
977 break;
978 }
d2e4a39e 979 else
4c4b4cd2
PH
980 {
981 encoding_buffer[k] = *p;
982 k += 1;
983 }
14f9c5c9
AS
984 }
985
4c4b4cd2
PH
986 encoding_buffer[k] = '\0';
987 return encoding_buffer;
14f9c5c9
AS
988}
989
b5ec771e
PA
990/* The "encoded" form of DECODED, according to GNAT conventions.
991 The result is valid until the next call to ada_encode. */
992
993char *
994ada_encode (const char *decoded)
995{
996 return ada_encode_1 (decoded, true);
997}
998
14f9c5c9 999/* Return NAME folded to lower case, or, if surrounded by single
4c4b4cd2
PH
1000 quotes, unfolded, but with the quotes stripped away. Result good
1001 to next call. */
1002
de93309a 1003static char *
e0802d59 1004ada_fold_name (gdb::string_view name)
14f9c5c9 1005{
d2e4a39e 1006 static char *fold_buffer = NULL;
14f9c5c9
AS
1007 static size_t fold_buffer_size = 0;
1008
e0802d59 1009 int len = name.size ();
d2e4a39e 1010 GROW_VECT (fold_buffer, fold_buffer_size, len + 1);
14f9c5c9
AS
1011
1012 if (name[0] == '\'')
1013 {
e0802d59 1014 strncpy (fold_buffer, name.data () + 1, len - 2);
d2e4a39e 1015 fold_buffer[len - 2] = '\000';
14f9c5c9
AS
1016 }
1017 else
1018 {
1019 int i;
5b4ee69b 1020
14f9c5c9 1021 for (i = 0; i <= len; i += 1)
4c4b4cd2 1022 fold_buffer[i] = tolower (name[i]);
14f9c5c9
AS
1023 }
1024
1025 return fold_buffer;
1026}
1027
529cad9c
PH
1028/* Return nonzero if C is either a digit or a lowercase alphabet character. */
1029
1030static int
1031is_lower_alphanum (const char c)
1032{
1033 return (isdigit (c) || (isalpha (c) && islower (c)));
1034}
1035
c90092fe
JB
1036/* ENCODED is the linkage name of a symbol and LEN contains its length.
1037 This function saves in LEN the length of that same symbol name but
1038 without either of these suffixes:
29480c32
JB
1039 . .{DIGIT}+
1040 . ${DIGIT}+
1041 . ___{DIGIT}+
1042 . __{DIGIT}+.
c90092fe 1043
29480c32
JB
1044 These are suffixes introduced by the compiler for entities such as
1045 nested subprogram for instance, in order to avoid name clashes.
1046 They do not serve any purpose for the debugger. */
1047
1048static void
1049ada_remove_trailing_digits (const char *encoded, int *len)
1050{
1051 if (*len > 1 && isdigit (encoded[*len - 1]))
1052 {
1053 int i = *len - 2;
5b4ee69b 1054
29480c32
JB
1055 while (i > 0 && isdigit (encoded[i]))
1056 i--;
1057 if (i >= 0 && encoded[i] == '.')
1058 *len = i;
1059 else if (i >= 0 && encoded[i] == '$')
1060 *len = i;
61012eef 1061 else if (i >= 2 && startswith (encoded + i - 2, "___"))
29480c32 1062 *len = i - 2;
61012eef 1063 else if (i >= 1 && startswith (encoded + i - 1, "__"))
29480c32
JB
1064 *len = i - 1;
1065 }
1066}
1067
1068/* Remove the suffix introduced by the compiler for protected object
1069 subprograms. */
1070
1071static void
1072ada_remove_po_subprogram_suffix (const char *encoded, int *len)
1073{
1074 /* Remove trailing N. */
1075
1076 /* Protected entry subprograms are broken into two
1077 separate subprograms: The first one is unprotected, and has
1078 a 'N' suffix; the second is the protected version, and has
0963b4bd 1079 the 'P' suffix. The second calls the first one after handling
29480c32
JB
1080 the protection. Since the P subprograms are internally generated,
1081 we leave these names undecoded, giving the user a clue that this
1082 entity is internal. */
1083
1084 if (*len > 1
1085 && encoded[*len - 1] == 'N'
1086 && (isdigit (encoded[*len - 2]) || islower (encoded[*len - 2])))
1087 *len = *len - 1;
1088}
1089
1090/* If ENCODED follows the GNAT entity encoding conventions, then return
1091 the decoded form of ENCODED. Otherwise, return "<%s>" where "%s" is
f945dedf 1092 replaced by ENCODED. */
14f9c5c9 1093
f945dedf 1094std::string
4c4b4cd2 1095ada_decode (const char *encoded)
14f9c5c9
AS
1096{
1097 int i, j;
1098 int len0;
d2e4a39e 1099 const char *p;
14f9c5c9 1100 int at_start_name;
f945dedf 1101 std::string decoded;
d2e4a39e 1102
0d81f350
JG
1103 /* With function descriptors on PPC64, the value of a symbol named
1104 ".FN", if it exists, is the entry point of the function "FN". */
1105 if (encoded[0] == '.')
1106 encoded += 1;
1107
29480c32
JB
1108 /* The name of the Ada main procedure starts with "_ada_".
1109 This prefix is not part of the decoded name, so skip this part
1110 if we see this prefix. */
61012eef 1111 if (startswith (encoded, "_ada_"))
4c4b4cd2 1112 encoded += 5;
14f9c5c9 1113
29480c32
JB
1114 /* If the name starts with '_', then it is not a properly encoded
1115 name, so do not attempt to decode it. Similarly, if the name
1116 starts with '<', the name should not be decoded. */
4c4b4cd2 1117 if (encoded[0] == '_' || encoded[0] == '<')
14f9c5c9
AS
1118 goto Suppress;
1119
4c4b4cd2 1120 len0 = strlen (encoded);
4c4b4cd2 1121
29480c32
JB
1122 ada_remove_trailing_digits (encoded, &len0);
1123 ada_remove_po_subprogram_suffix (encoded, &len0);
529cad9c 1124
4c4b4cd2
PH
1125 /* Remove the ___X.* suffix if present. Do not forget to verify that
1126 the suffix is located before the current "end" of ENCODED. We want
1127 to avoid re-matching parts of ENCODED that have previously been
1128 marked as discarded (by decrementing LEN0). */
1129 p = strstr (encoded, "___");
1130 if (p != NULL && p - encoded < len0 - 3)
14f9c5c9
AS
1131 {
1132 if (p[3] == 'X')
4c4b4cd2 1133 len0 = p - encoded;
14f9c5c9 1134 else
4c4b4cd2 1135 goto Suppress;
14f9c5c9 1136 }
4c4b4cd2 1137
29480c32
JB
1138 /* Remove any trailing TKB suffix. It tells us that this symbol
1139 is for the body of a task, but that information does not actually
1140 appear in the decoded name. */
1141
61012eef 1142 if (len0 > 3 && startswith (encoded + len0 - 3, "TKB"))
14f9c5c9 1143 len0 -= 3;
76a01679 1144
a10967fa
JB
1145 /* Remove any trailing TB suffix. The TB suffix is slightly different
1146 from the TKB suffix because it is used for non-anonymous task
1147 bodies. */
1148
61012eef 1149 if (len0 > 2 && startswith (encoded + len0 - 2, "TB"))
a10967fa
JB
1150 len0 -= 2;
1151
29480c32
JB
1152 /* Remove trailing "B" suffixes. */
1153 /* FIXME: brobecker/2006-04-19: Not sure what this are used for... */
1154
61012eef 1155 if (len0 > 1 && startswith (encoded + len0 - 1, "B"))
14f9c5c9
AS
1156 len0 -= 1;
1157
4c4b4cd2 1158 /* Make decoded big enough for possible expansion by operator name. */
29480c32 1159
f945dedf 1160 decoded.resize (2 * len0 + 1, 'X');
14f9c5c9 1161
29480c32
JB
1162 /* Remove trailing __{digit}+ or trailing ${digit}+. */
1163
4c4b4cd2 1164 if (len0 > 1 && isdigit (encoded[len0 - 1]))
d2e4a39e 1165 {
4c4b4cd2
PH
1166 i = len0 - 2;
1167 while ((i >= 0 && isdigit (encoded[i]))
1168 || (i >= 1 && encoded[i] == '_' && isdigit (encoded[i - 1])))
1169 i -= 1;
1170 if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
1171 len0 = i - 1;
1172 else if (encoded[i] == '$')
1173 len0 = i;
d2e4a39e 1174 }
14f9c5c9 1175
29480c32
JB
1176 /* The first few characters that are not alphabetic are not part
1177 of any encoding we use, so we can copy them over verbatim. */
1178
4c4b4cd2
PH
1179 for (i = 0, j = 0; i < len0 && !isalpha (encoded[i]); i += 1, j += 1)
1180 decoded[j] = encoded[i];
14f9c5c9
AS
1181
1182 at_start_name = 1;
1183 while (i < len0)
1184 {
29480c32 1185 /* Is this a symbol function? */
4c4b4cd2
PH
1186 if (at_start_name && encoded[i] == 'O')
1187 {
1188 int k;
5b4ee69b 1189
4c4b4cd2
PH
1190 for (k = 0; ada_opname_table[k].encoded != NULL; k += 1)
1191 {
1192 int op_len = strlen (ada_opname_table[k].encoded);
06d5cf63
JB
1193 if ((strncmp (ada_opname_table[k].encoded + 1, encoded + i + 1,
1194 op_len - 1) == 0)
1195 && !isalnum (encoded[i + op_len]))
4c4b4cd2 1196 {
f945dedf 1197 strcpy (&decoded.front() + j, ada_opname_table[k].decoded);
4c4b4cd2
PH
1198 at_start_name = 0;
1199 i += op_len;
1200 j += strlen (ada_opname_table[k].decoded);
1201 break;
1202 }
1203 }
1204 if (ada_opname_table[k].encoded != NULL)
1205 continue;
1206 }
14f9c5c9
AS
1207 at_start_name = 0;
1208
529cad9c
PH
1209 /* Replace "TK__" with "__", which will eventually be translated
1210 into "." (just below). */
1211
61012eef 1212 if (i < len0 - 4 && startswith (encoded + i, "TK__"))
4c4b4cd2 1213 i += 2;
529cad9c 1214
29480c32
JB
1215 /* Replace "__B_{DIGITS}+__" sequences by "__", which will eventually
1216 be translated into "." (just below). These are internal names
1217 generated for anonymous blocks inside which our symbol is nested. */
1218
1219 if (len0 - i > 5 && encoded [i] == '_' && encoded [i+1] == '_'
1220 && encoded [i+2] == 'B' && encoded [i+3] == '_'
1221 && isdigit (encoded [i+4]))
1222 {
1223 int k = i + 5;
1224
1225 while (k < len0 && isdigit (encoded[k]))
1226 k++; /* Skip any extra digit. */
1227
1228 /* Double-check that the "__B_{DIGITS}+" sequence we found
1229 is indeed followed by "__". */
1230 if (len0 - k > 2 && encoded [k] == '_' && encoded [k+1] == '_')
1231 i = k;
1232 }
1233
529cad9c
PH
1234 /* Remove _E{DIGITS}+[sb] */
1235
1236 /* Just as for protected object subprograms, there are 2 categories
0963b4bd 1237 of subprograms created by the compiler for each entry. The first
529cad9c
PH
1238 one implements the actual entry code, and has a suffix following
1239 the convention above; the second one implements the barrier and
1240 uses the same convention as above, except that the 'E' is replaced
1241 by a 'B'.
1242
1243 Just as above, we do not decode the name of barrier functions
1244 to give the user a clue that the code he is debugging has been
1245 internally generated. */
1246
1247 if (len0 - i > 3 && encoded [i] == '_' && encoded[i+1] == 'E'
1248 && isdigit (encoded[i+2]))
1249 {
1250 int k = i + 3;
1251
1252 while (k < len0 && isdigit (encoded[k]))
1253 k++;
1254
1255 if (k < len0
1256 && (encoded[k] == 'b' || encoded[k] == 's'))
1257 {
1258 k++;
1259 /* Just as an extra precaution, make sure that if this
1260 suffix is followed by anything else, it is a '_'.
1261 Otherwise, we matched this sequence by accident. */
1262 if (k == len0
1263 || (k < len0 && encoded[k] == '_'))
1264 i = k;
1265 }
1266 }
1267
1268 /* Remove trailing "N" in [a-z0-9]+N__. The N is added by
1269 the GNAT front-end in protected object subprograms. */
1270
1271 if (i < len0 + 3
1272 && encoded[i] == 'N' && encoded[i+1] == '_' && encoded[i+2] == '_')
1273 {
1274 /* Backtrack a bit up until we reach either the begining of
1275 the encoded name, or "__". Make sure that we only find
1276 digits or lowercase characters. */
1277 const char *ptr = encoded + i - 1;
1278
1279 while (ptr >= encoded && is_lower_alphanum (ptr[0]))
1280 ptr--;
1281 if (ptr < encoded
1282 || (ptr > encoded && ptr[0] == '_' && ptr[-1] == '_'))
1283 i++;
1284 }
1285
4c4b4cd2
PH
1286 if (encoded[i] == 'X' && i != 0 && isalnum (encoded[i - 1]))
1287 {
29480c32
JB
1288 /* This is a X[bn]* sequence not separated from the previous
1289 part of the name with a non-alpha-numeric character (in other
1290 words, immediately following an alpha-numeric character), then
1291 verify that it is placed at the end of the encoded name. If
1292 not, then the encoding is not valid and we should abort the
1293 decoding. Otherwise, just skip it, it is used in body-nested
1294 package names. */
4c4b4cd2
PH
1295 do
1296 i += 1;
1297 while (i < len0 && (encoded[i] == 'b' || encoded[i] == 'n'));
1298 if (i < len0)
1299 goto Suppress;
1300 }
cdc7bb92 1301 else if (i < len0 - 2 && encoded[i] == '_' && encoded[i + 1] == '_')
4c4b4cd2 1302 {
29480c32 1303 /* Replace '__' by '.'. */
4c4b4cd2
PH
1304 decoded[j] = '.';
1305 at_start_name = 1;
1306 i += 2;
1307 j += 1;
1308 }
14f9c5c9 1309 else
4c4b4cd2 1310 {
29480c32
JB
1311 /* It's a character part of the decoded name, so just copy it
1312 over. */
4c4b4cd2
PH
1313 decoded[j] = encoded[i];
1314 i += 1;
1315 j += 1;
1316 }
14f9c5c9 1317 }
f945dedf 1318 decoded.resize (j);
14f9c5c9 1319
29480c32
JB
1320 /* Decoded names should never contain any uppercase character.
1321 Double-check this, and abort the decoding if we find one. */
1322
f945dedf 1323 for (i = 0; i < decoded.length(); ++i)
4c4b4cd2 1324 if (isupper (decoded[i]) || decoded[i] == ' ')
14f9c5c9
AS
1325 goto Suppress;
1326
f945dedf 1327 return decoded;
14f9c5c9
AS
1328
1329Suppress:
4c4b4cd2 1330 if (encoded[0] == '<')
f945dedf 1331 decoded = encoded;
14f9c5c9 1332 else
f945dedf 1333 decoded = '<' + std::string(encoded) + '>';
4c4b4cd2
PH
1334 return decoded;
1335
1336}
1337
1338/* Table for keeping permanent unique copies of decoded names. Once
1339 allocated, names in this table are never released. While this is a
1340 storage leak, it should not be significant unless there are massive
1341 changes in the set of decoded names in successive versions of a
1342 symbol table loaded during a single session. */
1343static struct htab *decoded_names_store;
1344
1345/* Returns the decoded name of GSYMBOL, as for ada_decode, caching it
1346 in the language-specific part of GSYMBOL, if it has not been
1347 previously computed. Tries to save the decoded name in the same
1348 obstack as GSYMBOL, if possible, and otherwise on the heap (so that,
1349 in any case, the decoded symbol has a lifetime at least that of
0963b4bd 1350 GSYMBOL).
4c4b4cd2
PH
1351 The GSYMBOL parameter is "mutable" in the C++ sense: logically
1352 const, but nevertheless modified to a semantically equivalent form
0963b4bd 1353 when a decoded name is cached in it. */
4c4b4cd2 1354
45e6c716 1355const char *
f85f34ed 1356ada_decode_symbol (const struct general_symbol_info *arg)
4c4b4cd2 1357{
f85f34ed
TT
1358 struct general_symbol_info *gsymbol = (struct general_symbol_info *) arg;
1359 const char **resultp =
615b3f62 1360 &gsymbol->language_specific.demangled_name;
5b4ee69b 1361
f85f34ed 1362 if (!gsymbol->ada_mangled)
4c4b4cd2 1363 {
4d4eaa30 1364 std::string decoded = ada_decode (gsymbol->linkage_name ());
f85f34ed 1365 struct obstack *obstack = gsymbol->language_specific.obstack;
5b4ee69b 1366
f85f34ed 1367 gsymbol->ada_mangled = 1;
5b4ee69b 1368
f85f34ed 1369 if (obstack != NULL)
f945dedf 1370 *resultp = obstack_strdup (obstack, decoded.c_str ());
f85f34ed 1371 else
76a01679 1372 {
f85f34ed
TT
1373 /* Sometimes, we can't find a corresponding objfile, in
1374 which case, we put the result on the heap. Since we only
1375 decode when needed, we hope this usually does not cause a
1376 significant memory leak (FIXME). */
1377
76a01679 1378 char **slot = (char **) htab_find_slot (decoded_names_store,
f945dedf 1379 decoded.c_str (), INSERT);
5b4ee69b 1380
76a01679 1381 if (*slot == NULL)
f945dedf 1382 *slot = xstrdup (decoded.c_str ());
76a01679
JB
1383 *resultp = *slot;
1384 }
4c4b4cd2 1385 }
14f9c5c9 1386
4c4b4cd2
PH
1387 return *resultp;
1388}
76a01679 1389
2c0b251b 1390static char *
76a01679 1391ada_la_decode (const char *encoded, int options)
4c4b4cd2 1392{
f945dedf 1393 return xstrdup (ada_decode (encoded).c_str ());
14f9c5c9
AS
1394}
1395
8b302db8
TT
1396/* Implement la_sniff_from_mangled_name for Ada. */
1397
1398static int
1399ada_sniff_from_mangled_name (const char *mangled, char **out)
1400{
f945dedf 1401 std::string demangled = ada_decode (mangled);
8b302db8
TT
1402
1403 *out = NULL;
1404
f945dedf 1405 if (demangled != mangled && demangled[0] != '<')
8b302db8
TT
1406 {
1407 /* Set the gsymbol language to Ada, but still return 0.
1408 Two reasons for that:
1409
1410 1. For Ada, we prefer computing the symbol's decoded name
1411 on the fly rather than pre-compute it, in order to save
1412 memory (Ada projects are typically very large).
1413
1414 2. There are some areas in the definition of the GNAT
1415 encoding where, with a bit of bad luck, we might be able
1416 to decode a non-Ada symbol, generating an incorrect
1417 demangled name (Eg: names ending with "TB" for instance
1418 are identified as task bodies and so stripped from
1419 the decoded name returned).
1420
1421 Returning 1, here, but not setting *DEMANGLED, helps us get a
1422 little bit of the best of both worlds. Because we're last,
1423 we should not affect any of the other languages that were
1424 able to demangle the symbol before us; we get to correctly
1425 tag Ada symbols as such; and even if we incorrectly tagged a
1426 non-Ada symbol, which should be rare, any routing through the
1427 Ada language should be transparent (Ada tries to behave much
1428 like C/C++ with non-Ada symbols). */
1429 return 1;
1430 }
1431
1432 return 0;
1433}
1434
14f9c5c9 1435\f
d2e4a39e 1436
4c4b4cd2 1437 /* Arrays */
14f9c5c9 1438
28c85d6c
JB
1439/* Assuming that INDEX_DESC_TYPE is an ___XA structure, a structure
1440 generated by the GNAT compiler to describe the index type used
1441 for each dimension of an array, check whether it follows the latest
1442 known encoding. If not, fix it up to conform to the latest encoding.
1443 Otherwise, do nothing. This function also does nothing if
1444 INDEX_DESC_TYPE is NULL.
1445
85102364 1446 The GNAT encoding used to describe the array index type evolved a bit.
28c85d6c
JB
1447 Initially, the information would be provided through the name of each
1448 field of the structure type only, while the type of these fields was
1449 described as unspecified and irrelevant. The debugger was then expected
1450 to perform a global type lookup using the name of that field in order
1451 to get access to the full index type description. Because these global
1452 lookups can be very expensive, the encoding was later enhanced to make
1453 the global lookup unnecessary by defining the field type as being
1454 the full index type description.
1455
1456 The purpose of this routine is to allow us to support older versions
1457 of the compiler by detecting the use of the older encoding, and by
1458 fixing up the INDEX_DESC_TYPE to follow the new one (at this point,
1459 we essentially replace each field's meaningless type by the associated
1460 index subtype). */
1461
1462void
1463ada_fixup_array_indexes_type (struct type *index_desc_type)
1464{
1465 int i;
1466
1467 if (index_desc_type == NULL)
1468 return;
1f704f76 1469 gdb_assert (index_desc_type->num_fields () > 0);
28c85d6c
JB
1470
1471 /* Check if INDEX_DESC_TYPE follows the older encoding (it is sufficient
1472 to check one field only, no need to check them all). If not, return
1473 now.
1474
1475 If our INDEX_DESC_TYPE was generated using the older encoding,
1476 the field type should be a meaningless integer type whose name
1477 is not equal to the field name. */
7d93a1e0
SM
1478 if (TYPE_FIELD_TYPE (index_desc_type, 0)->name () != NULL
1479 && strcmp (TYPE_FIELD_TYPE (index_desc_type, 0)->name (),
28c85d6c
JB
1480 TYPE_FIELD_NAME (index_desc_type, 0)) == 0)
1481 return;
1482
1483 /* Fixup each field of INDEX_DESC_TYPE. */
1f704f76 1484 for (i = 0; i < index_desc_type->num_fields (); i++)
28c85d6c 1485 {
0d5cff50 1486 const char *name = TYPE_FIELD_NAME (index_desc_type, i);
28c85d6c
JB
1487 struct type *raw_type = ada_check_typedef (ada_find_any_type (name));
1488
1489 if (raw_type)
1490 TYPE_FIELD_TYPE (index_desc_type, i) = raw_type;
1491 }
1492}
1493
4c4b4cd2
PH
1494/* The desc_* routines return primitive portions of array descriptors
1495 (fat pointers). */
14f9c5c9
AS
1496
1497/* The descriptor or array type, if any, indicated by TYPE; removes
4c4b4cd2
PH
1498 level of indirection, if needed. */
1499
d2e4a39e
AS
1500static struct type *
1501desc_base_type (struct type *type)
14f9c5c9
AS
1502{
1503 if (type == NULL)
1504 return NULL;
61ee279c 1505 type = ada_check_typedef (type);
78134374 1506 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
1507 type = ada_typedef_target_type (type);
1508
1265e4aa 1509 if (type != NULL
78134374
SM
1510 && (type->code () == TYPE_CODE_PTR
1511 || type->code () == TYPE_CODE_REF))
61ee279c 1512 return ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
1513 else
1514 return type;
1515}
1516
4c4b4cd2
PH
1517/* True iff TYPE indicates a "thin" array pointer type. */
1518
14f9c5c9 1519static int
d2e4a39e 1520is_thin_pntr (struct type *type)
14f9c5c9 1521{
d2e4a39e 1522 return
14f9c5c9
AS
1523 is_suffix (ada_type_name (desc_base_type (type)), "___XUT")
1524 || is_suffix (ada_type_name (desc_base_type (type)), "___XUT___XVE");
1525}
1526
4c4b4cd2
PH
1527/* The descriptor type for thin pointer type TYPE. */
1528
d2e4a39e
AS
1529static struct type *
1530thin_descriptor_type (struct type *type)
14f9c5c9 1531{
d2e4a39e 1532 struct type *base_type = desc_base_type (type);
5b4ee69b 1533
14f9c5c9
AS
1534 if (base_type == NULL)
1535 return NULL;
1536 if (is_suffix (ada_type_name (base_type), "___XVE"))
1537 return base_type;
d2e4a39e 1538 else
14f9c5c9 1539 {
d2e4a39e 1540 struct type *alt_type = ada_find_parallel_type (base_type, "___XVE");
5b4ee69b 1541
14f9c5c9 1542 if (alt_type == NULL)
4c4b4cd2 1543 return base_type;
14f9c5c9 1544 else
4c4b4cd2 1545 return alt_type;
14f9c5c9
AS
1546 }
1547}
1548
4c4b4cd2
PH
1549/* A pointer to the array data for thin-pointer value VAL. */
1550
d2e4a39e
AS
1551static struct value *
1552thin_data_pntr (struct value *val)
14f9c5c9 1553{
828292f2 1554 struct type *type = ada_check_typedef (value_type (val));
556bdfd4 1555 struct type *data_type = desc_data_target_type (thin_descriptor_type (type));
5b4ee69b 1556
556bdfd4
UW
1557 data_type = lookup_pointer_type (data_type);
1558
78134374 1559 if (type->code () == TYPE_CODE_PTR)
556bdfd4 1560 return value_cast (data_type, value_copy (val));
d2e4a39e 1561 else
42ae5230 1562 return value_from_longest (data_type, value_address (val));
14f9c5c9
AS
1563}
1564
4c4b4cd2
PH
1565/* True iff TYPE indicates a "thick" array pointer type. */
1566
14f9c5c9 1567static int
d2e4a39e 1568is_thick_pntr (struct type *type)
14f9c5c9
AS
1569{
1570 type = desc_base_type (type);
78134374 1571 return (type != NULL && type->code () == TYPE_CODE_STRUCT
4c4b4cd2 1572 && lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL);
14f9c5c9
AS
1573}
1574
4c4b4cd2
PH
1575/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
1576 pointer to one, the type of its bounds data; otherwise, NULL. */
76a01679 1577
d2e4a39e
AS
1578static struct type *
1579desc_bounds_type (struct type *type)
14f9c5c9 1580{
d2e4a39e 1581 struct type *r;
14f9c5c9
AS
1582
1583 type = desc_base_type (type);
1584
1585 if (type == NULL)
1586 return NULL;
1587 else if (is_thin_pntr (type))
1588 {
1589 type = thin_descriptor_type (type);
1590 if (type == NULL)
4c4b4cd2 1591 return NULL;
14f9c5c9
AS
1592 r = lookup_struct_elt_type (type, "BOUNDS", 1);
1593 if (r != NULL)
61ee279c 1594 return ada_check_typedef (r);
14f9c5c9 1595 }
78134374 1596 else if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
1597 {
1598 r = lookup_struct_elt_type (type, "P_BOUNDS", 1);
1599 if (r != NULL)
61ee279c 1600 return ada_check_typedef (TYPE_TARGET_TYPE (ada_check_typedef (r)));
14f9c5c9
AS
1601 }
1602 return NULL;
1603}
1604
1605/* If ARR is an array descriptor (fat or thin pointer), or pointer to
4c4b4cd2
PH
1606 one, a pointer to its bounds data. Otherwise NULL. */
1607
d2e4a39e
AS
1608static struct value *
1609desc_bounds (struct value *arr)
14f9c5c9 1610{
df407dfe 1611 struct type *type = ada_check_typedef (value_type (arr));
5b4ee69b 1612
d2e4a39e 1613 if (is_thin_pntr (type))
14f9c5c9 1614 {
d2e4a39e 1615 struct type *bounds_type =
4c4b4cd2 1616 desc_bounds_type (thin_descriptor_type (type));
14f9c5c9
AS
1617 LONGEST addr;
1618
4cdfadb1 1619 if (bounds_type == NULL)
323e0a4a 1620 error (_("Bad GNAT array descriptor"));
14f9c5c9
AS
1621
1622 /* NOTE: The following calculation is not really kosher, but
d2e4a39e 1623 since desc_type is an XVE-encoded type (and shouldn't be),
4c4b4cd2 1624 the correct calculation is a real pain. FIXME (and fix GCC). */
78134374 1625 if (type->code () == TYPE_CODE_PTR)
4c4b4cd2 1626 addr = value_as_long (arr);
d2e4a39e 1627 else
42ae5230 1628 addr = value_address (arr);
14f9c5c9 1629
d2e4a39e 1630 return
4c4b4cd2
PH
1631 value_from_longest (lookup_pointer_type (bounds_type),
1632 addr - TYPE_LENGTH (bounds_type));
14f9c5c9
AS
1633 }
1634
1635 else if (is_thick_pntr (type))
05e522ef
JB
1636 {
1637 struct value *p_bounds = value_struct_elt (&arr, NULL, "P_BOUNDS", NULL,
1638 _("Bad GNAT array descriptor"));
1639 struct type *p_bounds_type = value_type (p_bounds);
1640
1641 if (p_bounds_type
78134374 1642 && p_bounds_type->code () == TYPE_CODE_PTR)
05e522ef
JB
1643 {
1644 struct type *target_type = TYPE_TARGET_TYPE (p_bounds_type);
1645
1646 if (TYPE_STUB (target_type))
1647 p_bounds = value_cast (lookup_pointer_type
1648 (ada_check_typedef (target_type)),
1649 p_bounds);
1650 }
1651 else
1652 error (_("Bad GNAT array descriptor"));
1653
1654 return p_bounds;
1655 }
14f9c5c9
AS
1656 else
1657 return NULL;
1658}
1659
4c4b4cd2
PH
1660/* If TYPE is the type of an array-descriptor (fat pointer), the bit
1661 position of the field containing the address of the bounds data. */
1662
14f9c5c9 1663static int
d2e4a39e 1664fat_pntr_bounds_bitpos (struct type *type)
14f9c5c9
AS
1665{
1666 return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
1667}
1668
1669/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1670 size of the field containing the address of the bounds data. */
1671
14f9c5c9 1672static int
d2e4a39e 1673fat_pntr_bounds_bitsize (struct type *type)
14f9c5c9
AS
1674{
1675 type = desc_base_type (type);
1676
d2e4a39e 1677 if (TYPE_FIELD_BITSIZE (type, 1) > 0)
14f9c5c9
AS
1678 return TYPE_FIELD_BITSIZE (type, 1);
1679 else
61ee279c 1680 return 8 * TYPE_LENGTH (ada_check_typedef (TYPE_FIELD_TYPE (type, 1)));
14f9c5c9
AS
1681}
1682
4c4b4cd2 1683/* If TYPE is the type of an array descriptor (fat or thin pointer) or a
556bdfd4
UW
1684 pointer to one, the type of its array data (a array-with-no-bounds type);
1685 otherwise, NULL. Use ada_type_of_array to get an array type with bounds
1686 data. */
4c4b4cd2 1687
d2e4a39e 1688static struct type *
556bdfd4 1689desc_data_target_type (struct type *type)
14f9c5c9
AS
1690{
1691 type = desc_base_type (type);
1692
4c4b4cd2 1693 /* NOTE: The following is bogus; see comment in desc_bounds. */
14f9c5c9 1694 if (is_thin_pntr (type))
556bdfd4 1695 return desc_base_type (TYPE_FIELD_TYPE (thin_descriptor_type (type), 1));
14f9c5c9 1696 else if (is_thick_pntr (type))
556bdfd4
UW
1697 {
1698 struct type *data_type = lookup_struct_elt_type (type, "P_ARRAY", 1);
1699
1700 if (data_type
78134374 1701 && ada_check_typedef (data_type)->code () == TYPE_CODE_PTR)
05e522ef 1702 return ada_check_typedef (TYPE_TARGET_TYPE (data_type));
556bdfd4
UW
1703 }
1704
1705 return NULL;
14f9c5c9
AS
1706}
1707
1708/* If ARR is an array descriptor (fat or thin pointer), a pointer to
1709 its array data. */
4c4b4cd2 1710
d2e4a39e
AS
1711static struct value *
1712desc_data (struct value *arr)
14f9c5c9 1713{
df407dfe 1714 struct type *type = value_type (arr);
5b4ee69b 1715
14f9c5c9
AS
1716 if (is_thin_pntr (type))
1717 return thin_data_pntr (arr);
1718 else if (is_thick_pntr (type))
d2e4a39e 1719 return value_struct_elt (&arr, NULL, "P_ARRAY", NULL,
323e0a4a 1720 _("Bad GNAT array descriptor"));
14f9c5c9
AS
1721 else
1722 return NULL;
1723}
1724
1725
1726/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1727 position of the field containing the address of the data. */
1728
14f9c5c9 1729static int
d2e4a39e 1730fat_pntr_data_bitpos (struct type *type)
14f9c5c9
AS
1731{
1732 return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
1733}
1734
1735/* If TYPE is the type of an array-descriptor (fat pointer), the bit
4c4b4cd2
PH
1736 size of the field containing the address of the data. */
1737
14f9c5c9 1738static int
d2e4a39e 1739fat_pntr_data_bitsize (struct type *type)
14f9c5c9
AS
1740{
1741 type = desc_base_type (type);
1742
1743 if (TYPE_FIELD_BITSIZE (type, 0) > 0)
1744 return TYPE_FIELD_BITSIZE (type, 0);
d2e4a39e 1745 else
14f9c5c9
AS
1746 return TARGET_CHAR_BIT * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0));
1747}
1748
4c4b4cd2 1749/* If BOUNDS is an array-bounds structure (or pointer to one), return
14f9c5c9 1750 the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1751 bound, if WHICH is 1. The first bound is I=1. */
1752
d2e4a39e
AS
1753static struct value *
1754desc_one_bound (struct value *bounds, int i, int which)
14f9c5c9 1755{
250106a7
TT
1756 char bound_name[20];
1757 xsnprintf (bound_name, sizeof (bound_name), "%cB%d",
1758 which ? 'U' : 'L', i - 1);
1759 return value_struct_elt (&bounds, NULL, bound_name, NULL,
323e0a4a 1760 _("Bad GNAT array descriptor bounds"));
14f9c5c9
AS
1761}
1762
1763/* If BOUNDS is an array-bounds structure type, return the bit position
1764 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1765 bound, if WHICH is 1. The first bound is I=1. */
1766
14f9c5c9 1767static int
d2e4a39e 1768desc_bound_bitpos (struct type *type, int i, int which)
14f9c5c9 1769{
d2e4a39e 1770 return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
14f9c5c9
AS
1771}
1772
1773/* If BOUNDS is an array-bounds structure type, return the bit field size
1774 of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
4c4b4cd2
PH
1775 bound, if WHICH is 1. The first bound is I=1. */
1776
76a01679 1777static int
d2e4a39e 1778desc_bound_bitsize (struct type *type, int i, int which)
14f9c5c9
AS
1779{
1780 type = desc_base_type (type);
1781
d2e4a39e
AS
1782 if (TYPE_FIELD_BITSIZE (type, 2 * i + which - 2) > 0)
1783 return TYPE_FIELD_BITSIZE (type, 2 * i + which - 2);
1784 else
1785 return 8 * TYPE_LENGTH (TYPE_FIELD_TYPE (type, 2 * i + which - 2));
14f9c5c9
AS
1786}
1787
1788/* If TYPE is the type of an array-bounds structure, the type of its
4c4b4cd2
PH
1789 Ith bound (numbering from 1). Otherwise, NULL. */
1790
d2e4a39e
AS
1791static struct type *
1792desc_index_type (struct type *type, int i)
14f9c5c9
AS
1793{
1794 type = desc_base_type (type);
1795
78134374 1796 if (type->code () == TYPE_CODE_STRUCT)
250106a7
TT
1797 {
1798 char bound_name[20];
1799 xsnprintf (bound_name, sizeof (bound_name), "LB%d", i - 1);
1800 return lookup_struct_elt_type (type, bound_name, 1);
1801 }
d2e4a39e 1802 else
14f9c5c9
AS
1803 return NULL;
1804}
1805
4c4b4cd2
PH
1806/* The number of index positions in the array-bounds type TYPE.
1807 Return 0 if TYPE is NULL. */
1808
14f9c5c9 1809static int
d2e4a39e 1810desc_arity (struct type *type)
14f9c5c9
AS
1811{
1812 type = desc_base_type (type);
1813
1814 if (type != NULL)
1f704f76 1815 return type->num_fields () / 2;
14f9c5c9
AS
1816 return 0;
1817}
1818
4c4b4cd2
PH
1819/* Non-zero iff TYPE is a simple array type (not a pointer to one) or
1820 an array descriptor type (representing an unconstrained array
1821 type). */
1822
76a01679
JB
1823static int
1824ada_is_direct_array_type (struct type *type)
4c4b4cd2
PH
1825{
1826 if (type == NULL)
1827 return 0;
61ee279c 1828 type = ada_check_typedef (type);
78134374 1829 return (type->code () == TYPE_CODE_ARRAY
76a01679 1830 || ada_is_array_descriptor_type (type));
4c4b4cd2
PH
1831}
1832
52ce6436 1833/* Non-zero iff TYPE represents any kind of array in Ada, or a pointer
0963b4bd 1834 * to one. */
52ce6436 1835
2c0b251b 1836static int
52ce6436
PH
1837ada_is_array_type (struct type *type)
1838{
78134374
SM
1839 while (type != NULL
1840 && (type->code () == TYPE_CODE_PTR
1841 || type->code () == TYPE_CODE_REF))
52ce6436
PH
1842 type = TYPE_TARGET_TYPE (type);
1843 return ada_is_direct_array_type (type);
1844}
1845
4c4b4cd2 1846/* Non-zero iff TYPE is a simple array type or pointer to one. */
14f9c5c9 1847
14f9c5c9 1848int
4c4b4cd2 1849ada_is_simple_array_type (struct type *type)
14f9c5c9
AS
1850{
1851 if (type == NULL)
1852 return 0;
61ee279c 1853 type = ada_check_typedef (type);
78134374
SM
1854 return (type->code () == TYPE_CODE_ARRAY
1855 || (type->code () == TYPE_CODE_PTR
1856 && (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ()
1857 == TYPE_CODE_ARRAY)));
14f9c5c9
AS
1858}
1859
4c4b4cd2
PH
1860/* Non-zero iff TYPE belongs to a GNAT array descriptor. */
1861
14f9c5c9 1862int
4c4b4cd2 1863ada_is_array_descriptor_type (struct type *type)
14f9c5c9 1864{
556bdfd4 1865 struct type *data_type = desc_data_target_type (type);
14f9c5c9
AS
1866
1867 if (type == NULL)
1868 return 0;
61ee279c 1869 type = ada_check_typedef (type);
556bdfd4 1870 return (data_type != NULL
78134374 1871 && data_type->code () == TYPE_CODE_ARRAY
556bdfd4 1872 && desc_arity (desc_bounds_type (type)) > 0);
14f9c5c9
AS
1873}
1874
1875/* Non-zero iff type is a partially mal-formed GNAT array
4c4b4cd2 1876 descriptor. FIXME: This is to compensate for some problems with
14f9c5c9 1877 debugging output from GNAT. Re-examine periodically to see if it
4c4b4cd2
PH
1878 is still needed. */
1879
14f9c5c9 1880int
ebf56fd3 1881ada_is_bogus_array_descriptor (struct type *type)
14f9c5c9 1882{
d2e4a39e 1883 return
14f9c5c9 1884 type != NULL
78134374 1885 && type->code () == TYPE_CODE_STRUCT
14f9c5c9 1886 && (lookup_struct_elt_type (type, "P_BOUNDS", 1) != NULL
4c4b4cd2
PH
1887 || lookup_struct_elt_type (type, "P_ARRAY", 1) != NULL)
1888 && !ada_is_array_descriptor_type (type);
14f9c5c9
AS
1889}
1890
1891
4c4b4cd2 1892/* If ARR has a record type in the form of a standard GNAT array descriptor,
14f9c5c9 1893 (fat pointer) returns the type of the array data described---specifically,
4c4b4cd2 1894 a pointer-to-array type. If BOUNDS is non-zero, the bounds data are filled
14f9c5c9 1895 in from the descriptor; otherwise, they are left unspecified. If
4c4b4cd2
PH
1896 the ARR denotes a null array descriptor and BOUNDS is non-zero,
1897 returns NULL. The result is simply the type of ARR if ARR is not
14f9c5c9 1898 a descriptor. */
de93309a
SM
1899
1900static struct type *
d2e4a39e 1901ada_type_of_array (struct value *arr, int bounds)
14f9c5c9 1902{
ad82864c
JB
1903 if (ada_is_constrained_packed_array_type (value_type (arr)))
1904 return decode_constrained_packed_array_type (value_type (arr));
14f9c5c9 1905
df407dfe
AC
1906 if (!ada_is_array_descriptor_type (value_type (arr)))
1907 return value_type (arr);
d2e4a39e
AS
1908
1909 if (!bounds)
ad82864c
JB
1910 {
1911 struct type *array_type =
1912 ada_check_typedef (desc_data_target_type (value_type (arr)));
1913
1914 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
1915 TYPE_FIELD_BITSIZE (array_type, 0) =
1916 decode_packed_array_bitsize (value_type (arr));
1917
1918 return array_type;
1919 }
14f9c5c9
AS
1920 else
1921 {
d2e4a39e 1922 struct type *elt_type;
14f9c5c9 1923 int arity;
d2e4a39e 1924 struct value *descriptor;
14f9c5c9 1925
df407dfe
AC
1926 elt_type = ada_array_element_type (value_type (arr), -1);
1927 arity = ada_array_arity (value_type (arr));
14f9c5c9 1928
d2e4a39e 1929 if (elt_type == NULL || arity == 0)
df407dfe 1930 return ada_check_typedef (value_type (arr));
14f9c5c9
AS
1931
1932 descriptor = desc_bounds (arr);
d2e4a39e 1933 if (value_as_long (descriptor) == 0)
4c4b4cd2 1934 return NULL;
d2e4a39e 1935 while (arity > 0)
4c4b4cd2 1936 {
e9bb382b
UW
1937 struct type *range_type = alloc_type_copy (value_type (arr));
1938 struct type *array_type = alloc_type_copy (value_type (arr));
4c4b4cd2
PH
1939 struct value *low = desc_one_bound (descriptor, arity, 0);
1940 struct value *high = desc_one_bound (descriptor, arity, 1);
4c4b4cd2 1941
5b4ee69b 1942 arity -= 1;
0c9c3474
SA
1943 create_static_range_type (range_type, value_type (low),
1944 longest_to_int (value_as_long (low)),
1945 longest_to_int (value_as_long (high)));
4c4b4cd2 1946 elt_type = create_array_type (array_type, elt_type, range_type);
ad82864c
JB
1947
1948 if (ada_is_unconstrained_packed_array_type (value_type (arr)))
e67ad678
JB
1949 {
1950 /* We need to store the element packed bitsize, as well as
1951 recompute the array size, because it was previously
1952 computed based on the unpacked element size. */
1953 LONGEST lo = value_as_long (low);
1954 LONGEST hi = value_as_long (high);
1955
1956 TYPE_FIELD_BITSIZE (elt_type, 0) =
1957 decode_packed_array_bitsize (value_type (arr));
1958 /* If the array has no element, then the size is already
1959 zero, and does not need to be recomputed. */
1960 if (lo < hi)
1961 {
1962 int array_bitsize =
1963 (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
1964
1965 TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
1966 }
1967 }
4c4b4cd2 1968 }
14f9c5c9
AS
1969
1970 return lookup_pointer_type (elt_type);
1971 }
1972}
1973
1974/* If ARR does not represent an array, returns ARR unchanged.
4c4b4cd2
PH
1975 Otherwise, returns either a standard GDB array with bounds set
1976 appropriately or, if ARR is a non-null fat pointer, a pointer to a standard
1977 GDB array. Returns NULL if ARR is a null fat pointer. */
1978
d2e4a39e
AS
1979struct value *
1980ada_coerce_to_simple_array_ptr (struct value *arr)
14f9c5c9 1981{
df407dfe 1982 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 1983 {
d2e4a39e 1984 struct type *arrType = ada_type_of_array (arr, 1);
5b4ee69b 1985
14f9c5c9 1986 if (arrType == NULL)
4c4b4cd2 1987 return NULL;
14f9c5c9
AS
1988 return value_cast (arrType, value_copy (desc_data (arr)));
1989 }
ad82864c
JB
1990 else if (ada_is_constrained_packed_array_type (value_type (arr)))
1991 return decode_constrained_packed_array (arr);
14f9c5c9
AS
1992 else
1993 return arr;
1994}
1995
1996/* If ARR does not represent an array, returns ARR unchanged.
1997 Otherwise, returns a standard GDB array describing ARR (which may
4c4b4cd2
PH
1998 be ARR itself if it already is in the proper form). */
1999
720d1a40 2000struct value *
d2e4a39e 2001ada_coerce_to_simple_array (struct value *arr)
14f9c5c9 2002{
df407dfe 2003 if (ada_is_array_descriptor_type (value_type (arr)))
14f9c5c9 2004 {
d2e4a39e 2005 struct value *arrVal = ada_coerce_to_simple_array_ptr (arr);
5b4ee69b 2006
14f9c5c9 2007 if (arrVal == NULL)
323e0a4a 2008 error (_("Bounds unavailable for null array pointer."));
c1b5a1a6 2009 ada_ensure_varsize_limit (TYPE_TARGET_TYPE (value_type (arrVal)));
14f9c5c9
AS
2010 return value_ind (arrVal);
2011 }
ad82864c
JB
2012 else if (ada_is_constrained_packed_array_type (value_type (arr)))
2013 return decode_constrained_packed_array (arr);
d2e4a39e 2014 else
14f9c5c9
AS
2015 return arr;
2016}
2017
2018/* If TYPE represents a GNAT array type, return it translated to an
2019 ordinary GDB array type (possibly with BITSIZE fields indicating
4c4b4cd2
PH
2020 packing). For other types, is the identity. */
2021
d2e4a39e
AS
2022struct type *
2023ada_coerce_to_simple_array_type (struct type *type)
14f9c5c9 2024{
ad82864c
JB
2025 if (ada_is_constrained_packed_array_type (type))
2026 return decode_constrained_packed_array_type (type);
17280b9f
UW
2027
2028 if (ada_is_array_descriptor_type (type))
556bdfd4 2029 return ada_check_typedef (desc_data_target_type (type));
17280b9f
UW
2030
2031 return type;
14f9c5c9
AS
2032}
2033
4c4b4cd2
PH
2034/* Non-zero iff TYPE represents a standard GNAT packed-array type. */
2035
ad82864c
JB
2036static int
2037ada_is_packed_array_type (struct type *type)
14f9c5c9
AS
2038{
2039 if (type == NULL)
2040 return 0;
4c4b4cd2 2041 type = desc_base_type (type);
61ee279c 2042 type = ada_check_typedef (type);
d2e4a39e 2043 return
14f9c5c9
AS
2044 ada_type_name (type) != NULL
2045 && strstr (ada_type_name (type), "___XP") != NULL;
2046}
2047
ad82864c
JB
2048/* Non-zero iff TYPE represents a standard GNAT constrained
2049 packed-array type. */
2050
2051int
2052ada_is_constrained_packed_array_type (struct type *type)
2053{
2054 return ada_is_packed_array_type (type)
2055 && !ada_is_array_descriptor_type (type);
2056}
2057
2058/* Non-zero iff TYPE represents an array descriptor for a
2059 unconstrained packed-array type. */
2060
2061static int
2062ada_is_unconstrained_packed_array_type (struct type *type)
2063{
2064 return ada_is_packed_array_type (type)
2065 && ada_is_array_descriptor_type (type);
2066}
2067
2068/* Given that TYPE encodes a packed array type (constrained or unconstrained),
2069 return the size of its elements in bits. */
2070
2071static long
2072decode_packed_array_bitsize (struct type *type)
2073{
0d5cff50
DE
2074 const char *raw_name;
2075 const char *tail;
ad82864c
JB
2076 long bits;
2077
720d1a40
JB
2078 /* Access to arrays implemented as fat pointers are encoded as a typedef
2079 of the fat pointer type. We need the name of the fat pointer type
2080 to do the decoding, so strip the typedef layer. */
78134374 2081 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
2082 type = ada_typedef_target_type (type);
2083
2084 raw_name = ada_type_name (ada_check_typedef (type));
ad82864c
JB
2085 if (!raw_name)
2086 raw_name = ada_type_name (desc_base_type (type));
2087
2088 if (!raw_name)
2089 return 0;
2090
2091 tail = strstr (raw_name, "___XP");
720d1a40 2092 gdb_assert (tail != NULL);
ad82864c
JB
2093
2094 if (sscanf (tail + sizeof ("___XP") - 1, "%ld", &bits) != 1)
2095 {
2096 lim_warning
2097 (_("could not understand bit size information on packed array"));
2098 return 0;
2099 }
2100
2101 return bits;
2102}
2103
14f9c5c9
AS
2104/* Given that TYPE is a standard GDB array type with all bounds filled
2105 in, and that the element size of its ultimate scalar constituents
2106 (that is, either its elements, or, if it is an array of arrays, its
2107 elements' elements, etc.) is *ELT_BITS, return an identical type,
2108 but with the bit sizes of its elements (and those of any
2109 constituent arrays) recorded in the BITSIZE components of its
4c4b4cd2 2110 TYPE_FIELD_BITSIZE values, and with *ELT_BITS set to its total size
4a46959e
JB
2111 in bits.
2112
2113 Note that, for arrays whose index type has an XA encoding where
2114 a bound references a record discriminant, getting that discriminant,
2115 and therefore the actual value of that bound, is not possible
2116 because none of the given parameters gives us access to the record.
2117 This function assumes that it is OK in the context where it is being
2118 used to return an array whose bounds are still dynamic and where
2119 the length is arbitrary. */
4c4b4cd2 2120
d2e4a39e 2121static struct type *
ad82864c 2122constrained_packed_array_type (struct type *type, long *elt_bits)
14f9c5c9 2123{
d2e4a39e
AS
2124 struct type *new_elt_type;
2125 struct type *new_type;
99b1c762
JB
2126 struct type *index_type_desc;
2127 struct type *index_type;
14f9c5c9
AS
2128 LONGEST low_bound, high_bound;
2129
61ee279c 2130 type = ada_check_typedef (type);
78134374 2131 if (type->code () != TYPE_CODE_ARRAY)
14f9c5c9
AS
2132 return type;
2133
99b1c762
JB
2134 index_type_desc = ada_find_parallel_type (type, "___XA");
2135 if (index_type_desc)
2136 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, 0),
2137 NULL);
2138 else
2139 index_type = TYPE_INDEX_TYPE (type);
2140
e9bb382b 2141 new_type = alloc_type_copy (type);
ad82864c
JB
2142 new_elt_type =
2143 constrained_packed_array_type (ada_check_typedef (TYPE_TARGET_TYPE (type)),
2144 elt_bits);
99b1c762 2145 create_array_type (new_type, new_elt_type, index_type);
14f9c5c9 2146 TYPE_FIELD_BITSIZE (new_type, 0) = *elt_bits;
d0e39ea2 2147 new_type->set_name (ada_type_name (type));
14f9c5c9 2148
78134374 2149 if ((check_typedef (index_type)->code () == TYPE_CODE_RANGE
4a46959e
JB
2150 && is_dynamic_type (check_typedef (index_type)))
2151 || get_discrete_bounds (index_type, &low_bound, &high_bound) < 0)
14f9c5c9
AS
2152 low_bound = high_bound = 0;
2153 if (high_bound < low_bound)
2154 *elt_bits = TYPE_LENGTH (new_type) = 0;
d2e4a39e 2155 else
14f9c5c9
AS
2156 {
2157 *elt_bits *= (high_bound - low_bound + 1);
d2e4a39e 2158 TYPE_LENGTH (new_type) =
4c4b4cd2 2159 (*elt_bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
14f9c5c9
AS
2160 }
2161
876cecd0 2162 TYPE_FIXED_INSTANCE (new_type) = 1;
14f9c5c9
AS
2163 return new_type;
2164}
2165
ad82864c
JB
2166/* The array type encoded by TYPE, where
2167 ada_is_constrained_packed_array_type (TYPE). */
4c4b4cd2 2168
d2e4a39e 2169static struct type *
ad82864c 2170decode_constrained_packed_array_type (struct type *type)
d2e4a39e 2171{
0d5cff50 2172 const char *raw_name = ada_type_name (ada_check_typedef (type));
727e3d2e 2173 char *name;
0d5cff50 2174 const char *tail;
d2e4a39e 2175 struct type *shadow_type;
14f9c5c9 2176 long bits;
14f9c5c9 2177
727e3d2e
JB
2178 if (!raw_name)
2179 raw_name = ada_type_name (desc_base_type (type));
2180
2181 if (!raw_name)
2182 return NULL;
2183
2184 name = (char *) alloca (strlen (raw_name) + 1);
2185 tail = strstr (raw_name, "___XP");
4c4b4cd2
PH
2186 type = desc_base_type (type);
2187
14f9c5c9
AS
2188 memcpy (name, raw_name, tail - raw_name);
2189 name[tail - raw_name] = '\000';
2190
b4ba55a1
JB
2191 shadow_type = ada_find_parallel_type_with_name (type, name);
2192
2193 if (shadow_type == NULL)
14f9c5c9 2194 {
323e0a4a 2195 lim_warning (_("could not find bounds information on packed array"));
14f9c5c9
AS
2196 return NULL;
2197 }
f168693b 2198 shadow_type = check_typedef (shadow_type);
14f9c5c9 2199
78134374 2200 if (shadow_type->code () != TYPE_CODE_ARRAY)
14f9c5c9 2201 {
0963b4bd
MS
2202 lim_warning (_("could not understand bounds "
2203 "information on packed array"));
14f9c5c9
AS
2204 return NULL;
2205 }
d2e4a39e 2206
ad82864c
JB
2207 bits = decode_packed_array_bitsize (type);
2208 return constrained_packed_array_type (shadow_type, &bits);
14f9c5c9
AS
2209}
2210
ad82864c
JB
2211/* Given that ARR is a struct value *indicating a GNAT constrained packed
2212 array, returns a simple array that denotes that array. Its type is a
14f9c5c9
AS
2213 standard GDB array type except that the BITSIZEs of the array
2214 target types are set to the number of bits in each element, and the
4c4b4cd2 2215 type length is set appropriately. */
14f9c5c9 2216
d2e4a39e 2217static struct value *
ad82864c 2218decode_constrained_packed_array (struct value *arr)
14f9c5c9 2219{
4c4b4cd2 2220 struct type *type;
14f9c5c9 2221
11aa919a
PMR
2222 /* If our value is a pointer, then dereference it. Likewise if
2223 the value is a reference. Make sure that this operation does not
2224 cause the target type to be fixed, as this would indirectly cause
2225 this array to be decoded. The rest of the routine assumes that
2226 the array hasn't been decoded yet, so we use the basic "coerce_ref"
2227 and "value_ind" routines to perform the dereferencing, as opposed
2228 to using "ada_coerce_ref" or "ada_value_ind". */
2229 arr = coerce_ref (arr);
78134374 2230 if (ada_check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
284614f0 2231 arr = value_ind (arr);
4c4b4cd2 2232
ad82864c 2233 type = decode_constrained_packed_array_type (value_type (arr));
14f9c5c9
AS
2234 if (type == NULL)
2235 {
323e0a4a 2236 error (_("can't unpack array"));
14f9c5c9
AS
2237 return NULL;
2238 }
61ee279c 2239
d5a22e77 2240 if (type_byte_order (value_type (arr)) == BFD_ENDIAN_BIG
32c9a795 2241 && ada_is_modular_type (value_type (arr)))
61ee279c
PH
2242 {
2243 /* This is a (right-justified) modular type representing a packed
2244 array with no wrapper. In order to interpret the value through
2245 the (left-justified) packed array type we just built, we must
2246 first left-justify it. */
2247 int bit_size, bit_pos;
2248 ULONGEST mod;
2249
df407dfe 2250 mod = ada_modulus (value_type (arr)) - 1;
61ee279c
PH
2251 bit_size = 0;
2252 while (mod > 0)
2253 {
2254 bit_size += 1;
2255 mod >>= 1;
2256 }
df407dfe 2257 bit_pos = HOST_CHAR_BIT * TYPE_LENGTH (value_type (arr)) - bit_size;
61ee279c
PH
2258 arr = ada_value_primitive_packed_val (arr, NULL,
2259 bit_pos / HOST_CHAR_BIT,
2260 bit_pos % HOST_CHAR_BIT,
2261 bit_size,
2262 type);
2263 }
2264
4c4b4cd2 2265 return coerce_unspec_val_to_type (arr, type);
14f9c5c9
AS
2266}
2267
2268
2269/* The value of the element of packed array ARR at the ARITY indices
4c4b4cd2 2270 given in IND. ARR must be a simple array. */
14f9c5c9 2271
d2e4a39e
AS
2272static struct value *
2273value_subscript_packed (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2274{
2275 int i;
2276 int bits, elt_off, bit_off;
2277 long elt_total_bit_offset;
d2e4a39e
AS
2278 struct type *elt_type;
2279 struct value *v;
14f9c5c9
AS
2280
2281 bits = 0;
2282 elt_total_bit_offset = 0;
df407dfe 2283 elt_type = ada_check_typedef (value_type (arr));
d2e4a39e 2284 for (i = 0; i < arity; i += 1)
14f9c5c9 2285 {
78134374 2286 if (elt_type->code () != TYPE_CODE_ARRAY
4c4b4cd2
PH
2287 || TYPE_FIELD_BITSIZE (elt_type, 0) == 0)
2288 error
0963b4bd
MS
2289 (_("attempt to do packed indexing of "
2290 "something other than a packed array"));
14f9c5c9 2291 else
4c4b4cd2
PH
2292 {
2293 struct type *range_type = TYPE_INDEX_TYPE (elt_type);
2294 LONGEST lowerbound, upperbound;
2295 LONGEST idx;
2296
2297 if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
2298 {
323e0a4a 2299 lim_warning (_("don't know bounds of array"));
4c4b4cd2
PH
2300 lowerbound = upperbound = 0;
2301 }
2302
3cb382c9 2303 idx = pos_atr (ind[i]);
4c4b4cd2 2304 if (idx < lowerbound || idx > upperbound)
0963b4bd
MS
2305 lim_warning (_("packed array index %ld out of bounds"),
2306 (long) idx);
4c4b4cd2
PH
2307 bits = TYPE_FIELD_BITSIZE (elt_type, 0);
2308 elt_total_bit_offset += (idx - lowerbound) * bits;
61ee279c 2309 elt_type = ada_check_typedef (TYPE_TARGET_TYPE (elt_type));
4c4b4cd2 2310 }
14f9c5c9
AS
2311 }
2312 elt_off = elt_total_bit_offset / HOST_CHAR_BIT;
2313 bit_off = elt_total_bit_offset % HOST_CHAR_BIT;
d2e4a39e
AS
2314
2315 v = ada_value_primitive_packed_val (arr, NULL, elt_off, bit_off,
4c4b4cd2 2316 bits, elt_type);
14f9c5c9
AS
2317 return v;
2318}
2319
4c4b4cd2 2320/* Non-zero iff TYPE includes negative integer values. */
14f9c5c9
AS
2321
2322static int
d2e4a39e 2323has_negatives (struct type *type)
14f9c5c9 2324{
78134374 2325 switch (type->code ())
d2e4a39e
AS
2326 {
2327 default:
2328 return 0;
2329 case TYPE_CODE_INT:
2330 return !TYPE_UNSIGNED (type);
2331 case TYPE_CODE_RANGE:
4e962e74 2332 return TYPE_LOW_BOUND (type) - TYPE_RANGE_DATA (type)->bias < 0;
d2e4a39e 2333 }
14f9c5c9 2334}
d2e4a39e 2335
f93fca70 2336/* With SRC being a buffer containing BIT_SIZE bits of data at BIT_OFFSET,
5b639dea 2337 unpack that data into UNPACKED. UNPACKED_LEN is the size in bytes of
f93fca70 2338 the unpacked buffer.
14f9c5c9 2339
5b639dea
JB
2340 The size of the unpacked buffer (UNPACKED_LEN) is expected to be large
2341 enough to contain at least BIT_OFFSET bits. If not, an error is raised.
2342
f93fca70
JB
2343 IS_BIG_ENDIAN is nonzero if the data is stored in big endian mode,
2344 zero otherwise.
14f9c5c9 2345
f93fca70 2346 IS_SIGNED_TYPE is nonzero if the data corresponds to a signed type.
a1c95e6b 2347
f93fca70
JB
2348 IS_SCALAR is nonzero if the data corresponds to a signed type. */
2349
2350static void
2351ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
2352 gdb_byte *unpacked, int unpacked_len,
2353 int is_big_endian, int is_signed_type,
2354 int is_scalar)
2355{
a1c95e6b
JB
2356 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
2357 int src_idx; /* Index into the source area */
2358 int src_bytes_left; /* Number of source bytes left to process. */
2359 int srcBitsLeft; /* Number of source bits left to move */
2360 int unusedLS; /* Number of bits in next significant
2361 byte of source that are unused */
2362
a1c95e6b
JB
2363 int unpacked_idx; /* Index into the unpacked buffer */
2364 int unpacked_bytes_left; /* Number of bytes left to set in unpacked. */
2365
4c4b4cd2 2366 unsigned long accum; /* Staging area for bits being transferred */
a1c95e6b 2367 int accumSize; /* Number of meaningful bits in accum */
14f9c5c9 2368 unsigned char sign;
a1c95e6b 2369
4c4b4cd2
PH
2370 /* Transmit bytes from least to most significant; delta is the direction
2371 the indices move. */
f93fca70 2372 int delta = is_big_endian ? -1 : 1;
14f9c5c9 2373
5b639dea
JB
2374 /* Make sure that unpacked is large enough to receive the BIT_SIZE
2375 bits from SRC. .*/
2376 if ((bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT > unpacked_len)
2377 error (_("Cannot unpack %d bits into buffer of %d bytes"),
2378 bit_size, unpacked_len);
2379
14f9c5c9 2380 srcBitsLeft = bit_size;
086ca51f 2381 src_bytes_left = src_len;
f93fca70 2382 unpacked_bytes_left = unpacked_len;
14f9c5c9 2383 sign = 0;
f93fca70
JB
2384
2385 if (is_big_endian)
14f9c5c9 2386 {
086ca51f 2387 src_idx = src_len - 1;
f93fca70
JB
2388 if (is_signed_type
2389 && ((src[0] << bit_offset) & (1 << (HOST_CHAR_BIT - 1))))
4c4b4cd2 2390 sign = ~0;
d2e4a39e
AS
2391
2392 unusedLS =
4c4b4cd2
PH
2393 (HOST_CHAR_BIT - (bit_size + bit_offset) % HOST_CHAR_BIT)
2394 % HOST_CHAR_BIT;
14f9c5c9 2395
f93fca70
JB
2396 if (is_scalar)
2397 {
2398 accumSize = 0;
2399 unpacked_idx = unpacked_len - 1;
2400 }
2401 else
2402 {
4c4b4cd2
PH
2403 /* Non-scalar values must be aligned at a byte boundary... */
2404 accumSize =
2405 (HOST_CHAR_BIT - bit_size % HOST_CHAR_BIT) % HOST_CHAR_BIT;
2406 /* ... And are placed at the beginning (most-significant) bytes
2407 of the target. */
086ca51f
JB
2408 unpacked_idx = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT - 1;
2409 unpacked_bytes_left = unpacked_idx + 1;
f93fca70 2410 }
14f9c5c9 2411 }
d2e4a39e 2412 else
14f9c5c9
AS
2413 {
2414 int sign_bit_offset = (bit_size + bit_offset - 1) % 8;
2415
086ca51f 2416 src_idx = unpacked_idx = 0;
14f9c5c9
AS
2417 unusedLS = bit_offset;
2418 accumSize = 0;
2419
f93fca70 2420 if (is_signed_type && (src[src_len - 1] & (1 << sign_bit_offset)))
4c4b4cd2 2421 sign = ~0;
14f9c5c9 2422 }
d2e4a39e 2423
14f9c5c9 2424 accum = 0;
086ca51f 2425 while (src_bytes_left > 0)
14f9c5c9
AS
2426 {
2427 /* Mask for removing bits of the next source byte that are not
4c4b4cd2 2428 part of the value. */
d2e4a39e 2429 unsigned int unusedMSMask =
4c4b4cd2
PH
2430 (1 << (srcBitsLeft >= HOST_CHAR_BIT ? HOST_CHAR_BIT : srcBitsLeft)) -
2431 1;
2432 /* Sign-extend bits for this byte. */
14f9c5c9 2433 unsigned int signMask = sign & ~unusedMSMask;
5b4ee69b 2434
d2e4a39e 2435 accum |=
086ca51f 2436 (((src[src_idx] >> unusedLS) & unusedMSMask) | signMask) << accumSize;
14f9c5c9 2437 accumSize += HOST_CHAR_BIT - unusedLS;
d2e4a39e 2438 if (accumSize >= HOST_CHAR_BIT)
4c4b4cd2 2439 {
db297a65 2440 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
4c4b4cd2
PH
2441 accumSize -= HOST_CHAR_BIT;
2442 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2443 unpacked_bytes_left -= 1;
2444 unpacked_idx += delta;
4c4b4cd2 2445 }
14f9c5c9
AS
2446 srcBitsLeft -= HOST_CHAR_BIT - unusedLS;
2447 unusedLS = 0;
086ca51f
JB
2448 src_bytes_left -= 1;
2449 src_idx += delta;
14f9c5c9 2450 }
086ca51f 2451 while (unpacked_bytes_left > 0)
14f9c5c9
AS
2452 {
2453 accum |= sign << accumSize;
db297a65 2454 unpacked[unpacked_idx] = accum & ~(~0UL << HOST_CHAR_BIT);
14f9c5c9 2455 accumSize -= HOST_CHAR_BIT;
9cd4d857
JB
2456 if (accumSize < 0)
2457 accumSize = 0;
14f9c5c9 2458 accum >>= HOST_CHAR_BIT;
086ca51f
JB
2459 unpacked_bytes_left -= 1;
2460 unpacked_idx += delta;
14f9c5c9 2461 }
f93fca70
JB
2462}
2463
2464/* Create a new value of type TYPE from the contents of OBJ starting
2465 at byte OFFSET, and bit offset BIT_OFFSET within that byte,
2466 proceeding for BIT_SIZE bits. If OBJ is an lval in memory, then
2467 assigning through the result will set the field fetched from.
2468 VALADDR is ignored unless OBJ is NULL, in which case,
2469 VALADDR+OFFSET must address the start of storage containing the
2470 packed value. The value returned in this case is never an lval.
2471 Assumes 0 <= BIT_OFFSET < HOST_CHAR_BIT. */
2472
2473struct value *
2474ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
2475 long offset, int bit_offset, int bit_size,
2476 struct type *type)
2477{
2478 struct value *v;
bfb1c796 2479 const gdb_byte *src; /* First byte containing data to unpack */
f93fca70 2480 gdb_byte *unpacked;
220475ed 2481 const int is_scalar = is_scalar_type (type);
d5a22e77 2482 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d5722aa2 2483 gdb::byte_vector staging;
f93fca70
JB
2484
2485 type = ada_check_typedef (type);
2486
d0a9e810 2487 if (obj == NULL)
bfb1c796 2488 src = valaddr + offset;
d0a9e810 2489 else
bfb1c796 2490 src = value_contents (obj) + offset;
d0a9e810
JB
2491
2492 if (is_dynamic_type (type))
2493 {
2494 /* The length of TYPE might by dynamic, so we need to resolve
2495 TYPE in order to know its actual size, which we then use
2496 to create the contents buffer of the value we return.
2497 The difficulty is that the data containing our object is
2498 packed, and therefore maybe not at a byte boundary. So, what
2499 we do, is unpack the data into a byte-aligned buffer, and then
2500 use that buffer as our object's value for resolving the type. */
d5722aa2
PA
2501 int staging_len = (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
2502 staging.resize (staging_len);
d0a9e810
JB
2503
2504 ada_unpack_from_contents (src, bit_offset, bit_size,
d5722aa2 2505 staging.data (), staging.size (),
d0a9e810
JB
2506 is_big_endian, has_negatives (type),
2507 is_scalar);
b249d2c2 2508 type = resolve_dynamic_type (type, staging, 0);
0cafa88c
JB
2509 if (TYPE_LENGTH (type) < (bit_size + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT)
2510 {
2511 /* This happens when the length of the object is dynamic,
2512 and is actually smaller than the space reserved for it.
2513 For instance, in an array of variant records, the bit_size
2514 we're given is the array stride, which is constant and
2515 normally equal to the maximum size of its element.
2516 But, in reality, each element only actually spans a portion
2517 of that stride. */
2518 bit_size = TYPE_LENGTH (type) * HOST_CHAR_BIT;
2519 }
d0a9e810
JB
2520 }
2521
f93fca70
JB
2522 if (obj == NULL)
2523 {
2524 v = allocate_value (type);
bfb1c796 2525 src = valaddr + offset;
f93fca70
JB
2526 }
2527 else if (VALUE_LVAL (obj) == lval_memory && value_lazy (obj))
2528 {
0cafa88c 2529 int src_len = (bit_size + bit_offset + HOST_CHAR_BIT - 1) / 8;
bfb1c796 2530 gdb_byte *buf;
0cafa88c 2531
f93fca70 2532 v = value_at (type, value_address (obj) + offset);
bfb1c796
PA
2533 buf = (gdb_byte *) alloca (src_len);
2534 read_memory (value_address (v), buf, src_len);
2535 src = buf;
f93fca70
JB
2536 }
2537 else
2538 {
2539 v = allocate_value (type);
bfb1c796 2540 src = value_contents (obj) + offset;
f93fca70
JB
2541 }
2542
2543 if (obj != NULL)
2544 {
2545 long new_offset = offset;
2546
2547 set_value_component_location (v, obj);
2548 set_value_bitpos (v, bit_offset + value_bitpos (obj));
2549 set_value_bitsize (v, bit_size);
2550 if (value_bitpos (v) >= HOST_CHAR_BIT)
2551 {
2552 ++new_offset;
2553 set_value_bitpos (v, value_bitpos (v) - HOST_CHAR_BIT);
2554 }
2555 set_value_offset (v, new_offset);
2556
2557 /* Also set the parent value. This is needed when trying to
2558 assign a new value (in inferior memory). */
2559 set_value_parent (v, obj);
2560 }
2561 else
2562 set_value_bitsize (v, bit_size);
bfb1c796 2563 unpacked = value_contents_writeable (v);
f93fca70
JB
2564
2565 if (bit_size == 0)
2566 {
2567 memset (unpacked, 0, TYPE_LENGTH (type));
2568 return v;
2569 }
2570
d5722aa2 2571 if (staging.size () == TYPE_LENGTH (type))
f93fca70 2572 {
d0a9e810
JB
2573 /* Small short-cut: If we've unpacked the data into a buffer
2574 of the same size as TYPE's length, then we can reuse that,
2575 instead of doing the unpacking again. */
d5722aa2 2576 memcpy (unpacked, staging.data (), staging.size ());
f93fca70 2577 }
d0a9e810
JB
2578 else
2579 ada_unpack_from_contents (src, bit_offset, bit_size,
2580 unpacked, TYPE_LENGTH (type),
2581 is_big_endian, has_negatives (type), is_scalar);
f93fca70 2582
14f9c5c9
AS
2583 return v;
2584}
d2e4a39e 2585
14f9c5c9
AS
2586/* Store the contents of FROMVAL into the location of TOVAL.
2587 Return a new value with the location of TOVAL and contents of
2588 FROMVAL. Handles assignment into packed fields that have
4c4b4cd2 2589 floating-point or non-scalar types. */
14f9c5c9 2590
d2e4a39e
AS
2591static struct value *
2592ada_value_assign (struct value *toval, struct value *fromval)
14f9c5c9 2593{
df407dfe
AC
2594 struct type *type = value_type (toval);
2595 int bits = value_bitsize (toval);
14f9c5c9 2596
52ce6436
PH
2597 toval = ada_coerce_ref (toval);
2598 fromval = ada_coerce_ref (fromval);
2599
2600 if (ada_is_direct_array_type (value_type (toval)))
2601 toval = ada_coerce_to_simple_array (toval);
2602 if (ada_is_direct_array_type (value_type (fromval)))
2603 fromval = ada_coerce_to_simple_array (fromval);
2604
88e3b34b 2605 if (!deprecated_value_modifiable (toval))
323e0a4a 2606 error (_("Left operand of assignment is not a modifiable lvalue."));
14f9c5c9 2607
d2e4a39e 2608 if (VALUE_LVAL (toval) == lval_memory
14f9c5c9 2609 && bits > 0
78134374
SM
2610 && (type->code () == TYPE_CODE_FLT
2611 || type->code () == TYPE_CODE_STRUCT))
14f9c5c9 2612 {
df407dfe
AC
2613 int len = (value_bitpos (toval)
2614 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
aced2898 2615 int from_size;
224c3ddb 2616 gdb_byte *buffer = (gdb_byte *) alloca (len);
d2e4a39e 2617 struct value *val;
42ae5230 2618 CORE_ADDR to_addr = value_address (toval);
14f9c5c9 2619
78134374 2620 if (type->code () == TYPE_CODE_FLT)
4c4b4cd2 2621 fromval = value_cast (type, fromval);
14f9c5c9 2622
52ce6436 2623 read_memory (to_addr, buffer, len);
aced2898
PH
2624 from_size = value_bitsize (fromval);
2625 if (from_size == 0)
2626 from_size = TYPE_LENGTH (value_type (fromval)) * TARGET_CHAR_BIT;
d48e62f4 2627
d5a22e77 2628 const int is_big_endian = type_byte_order (type) == BFD_ENDIAN_BIG;
d48e62f4
TT
2629 ULONGEST from_offset = 0;
2630 if (is_big_endian && is_scalar_type (value_type (fromval)))
2631 from_offset = from_size - bits;
2632 copy_bitwise (buffer, value_bitpos (toval),
2633 value_contents (fromval), from_offset,
2634 bits, is_big_endian);
972daa01 2635 write_memory_with_notification (to_addr, buffer, len);
8cebebb9 2636
14f9c5c9 2637 val = value_copy (toval);
0fd88904 2638 memcpy (value_contents_raw (val), value_contents (fromval),
4c4b4cd2 2639 TYPE_LENGTH (type));
04624583 2640 deprecated_set_value_type (val, type);
d2e4a39e 2641
14f9c5c9
AS
2642 return val;
2643 }
2644
2645 return value_assign (toval, fromval);
2646}
2647
2648
7c512744
JB
2649/* Given that COMPONENT is a memory lvalue that is part of the lvalue
2650 CONTAINER, assign the contents of VAL to COMPONENTS's place in
2651 CONTAINER. Modifies the VALUE_CONTENTS of CONTAINER only, not
2652 COMPONENT, and not the inferior's memory. The current contents
2653 of COMPONENT are ignored.
2654
2655 Although not part of the initial design, this function also works
2656 when CONTAINER and COMPONENT are not_lval's: it works as if CONTAINER
2657 had a null address, and COMPONENT had an address which is equal to
2658 its offset inside CONTAINER. */
2659
52ce6436
PH
2660static void
2661value_assign_to_component (struct value *container, struct value *component,
2662 struct value *val)
2663{
2664 LONGEST offset_in_container =
42ae5230 2665 (LONGEST) (value_address (component) - value_address (container));
7c512744 2666 int bit_offset_in_container =
52ce6436
PH
2667 value_bitpos (component) - value_bitpos (container);
2668 int bits;
7c512744 2669
52ce6436
PH
2670 val = value_cast (value_type (component), val);
2671
2672 if (value_bitsize (component) == 0)
2673 bits = TARGET_CHAR_BIT * TYPE_LENGTH (value_type (component));
2674 else
2675 bits = value_bitsize (component);
2676
d5a22e77 2677 if (type_byte_order (value_type (container)) == BFD_ENDIAN_BIG)
2a62dfa9
JB
2678 {
2679 int src_offset;
2680
2681 if (is_scalar_type (check_typedef (value_type (component))))
2682 src_offset
2683 = TYPE_LENGTH (value_type (component)) * TARGET_CHAR_BIT - bits;
2684 else
2685 src_offset = 0;
a99bc3d2
JB
2686 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2687 value_bitpos (container) + bit_offset_in_container,
2688 value_contents (val), src_offset, bits, 1);
2a62dfa9 2689 }
52ce6436 2690 else
a99bc3d2
JB
2691 copy_bitwise (value_contents_writeable (container) + offset_in_container,
2692 value_bitpos (container) + bit_offset_in_container,
2693 value_contents (val), 0, bits, 0);
7c512744
JB
2694}
2695
736ade86
XR
2696/* Determine if TYPE is an access to an unconstrained array. */
2697
d91e9ea8 2698bool
736ade86
XR
2699ada_is_access_to_unconstrained_array (struct type *type)
2700{
78134374 2701 return (type->code () == TYPE_CODE_TYPEDEF
736ade86
XR
2702 && is_thick_pntr (ada_typedef_target_type (type)));
2703}
2704
4c4b4cd2
PH
2705/* The value of the element of array ARR at the ARITY indices given in IND.
2706 ARR may be either a simple array, GNAT array descriptor, or pointer
14f9c5c9
AS
2707 thereto. */
2708
d2e4a39e
AS
2709struct value *
2710ada_value_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2711{
2712 int k;
d2e4a39e
AS
2713 struct value *elt;
2714 struct type *elt_type;
14f9c5c9
AS
2715
2716 elt = ada_coerce_to_simple_array (arr);
2717
df407dfe 2718 elt_type = ada_check_typedef (value_type (elt));
78134374 2719 if (elt_type->code () == TYPE_CODE_ARRAY
14f9c5c9
AS
2720 && TYPE_FIELD_BITSIZE (elt_type, 0) > 0)
2721 return value_subscript_packed (elt, arity, ind);
2722
2723 for (k = 0; k < arity; k += 1)
2724 {
b9c50e9a
XR
2725 struct type *saved_elt_type = TYPE_TARGET_TYPE (elt_type);
2726
78134374 2727 if (elt_type->code () != TYPE_CODE_ARRAY)
323e0a4a 2728 error (_("too many subscripts (%d expected)"), k);
b9c50e9a 2729
2497b498 2730 elt = value_subscript (elt, pos_atr (ind[k]));
b9c50e9a
XR
2731
2732 if (ada_is_access_to_unconstrained_array (saved_elt_type)
78134374 2733 && value_type (elt)->code () != TYPE_CODE_TYPEDEF)
b9c50e9a
XR
2734 {
2735 /* The element is a typedef to an unconstrained array,
2736 except that the value_subscript call stripped the
2737 typedef layer. The typedef layer is GNAT's way to
2738 specify that the element is, at the source level, an
2739 access to the unconstrained array, rather than the
2740 unconstrained array. So, we need to restore that
2741 typedef layer, which we can do by forcing the element's
2742 type back to its original type. Otherwise, the returned
2743 value is going to be printed as the array, rather
2744 than as an access. Another symptom of the same issue
2745 would be that an expression trying to dereference the
2746 element would also be improperly rejected. */
2747 deprecated_set_value_type (elt, saved_elt_type);
2748 }
2749
2750 elt_type = ada_check_typedef (value_type (elt));
14f9c5c9 2751 }
b9c50e9a 2752
14f9c5c9
AS
2753 return elt;
2754}
2755
deede10c
JB
2756/* Assuming ARR is a pointer to a GDB array, the value of the element
2757 of *ARR at the ARITY indices given in IND.
919e6dbe
PMR
2758 Does not read the entire array into memory.
2759
2760 Note: Unlike what one would expect, this function is used instead of
2761 ada_value_subscript for basically all non-packed array types. The reason
2762 for this is that a side effect of doing our own pointer arithmetics instead
2763 of relying on value_subscript is that there is no implicit typedef peeling.
2764 This is important for arrays of array accesses, where it allows us to
2765 preserve the fact that the array's element is an array access, where the
2766 access part os encoded in a typedef layer. */
14f9c5c9 2767
2c0b251b 2768static struct value *
deede10c 2769ada_value_ptr_subscript (struct value *arr, int arity, struct value **ind)
14f9c5c9
AS
2770{
2771 int k;
919e6dbe 2772 struct value *array_ind = ada_value_ind (arr);
deede10c 2773 struct type *type
919e6dbe
PMR
2774 = check_typedef (value_enclosing_type (array_ind));
2775
78134374 2776 if (type->code () == TYPE_CODE_ARRAY
919e6dbe
PMR
2777 && TYPE_FIELD_BITSIZE (type, 0) > 0)
2778 return value_subscript_packed (array_ind, arity, ind);
14f9c5c9
AS
2779
2780 for (k = 0; k < arity; k += 1)
2781 {
2782 LONGEST lwb, upb;
14f9c5c9 2783
78134374 2784 if (type->code () != TYPE_CODE_ARRAY)
323e0a4a 2785 error (_("too many subscripts (%d expected)"), k);
d2e4a39e 2786 arr = value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (type)),
4c4b4cd2 2787 value_copy (arr));
14f9c5c9 2788 get_discrete_bounds (TYPE_INDEX_TYPE (type), &lwb, &upb);
53a47a3e 2789 arr = value_ptradd (arr, pos_atr (ind[k]) - lwb);
14f9c5c9
AS
2790 type = TYPE_TARGET_TYPE (type);
2791 }
2792
2793 return value_ind (arr);
2794}
2795
0b5d8877 2796/* Given that ARRAY_PTR is a pointer or reference to an array of type TYPE (the
aa715135
JG
2797 actual type of ARRAY_PTR is ignored), returns the Ada slice of
2798 HIGH'Pos-LOW'Pos+1 elements starting at index LOW. The lower bound of
2799 this array is LOW, as per Ada rules. */
0b5d8877 2800static struct value *
f5938064
JG
2801ada_value_slice_from_ptr (struct value *array_ptr, struct type *type,
2802 int low, int high)
0b5d8877 2803{
b0dd7688 2804 struct type *type0 = ada_check_typedef (type);
aa715135 2805 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type0));
0c9c3474 2806 struct type *index_type
aa715135 2807 = create_static_range_type (NULL, base_index_type, low, high);
9fe561ab
JB
2808 struct type *slice_type = create_array_type_with_stride
2809 (NULL, TYPE_TARGET_TYPE (type0), index_type,
24e99c6c 2810 type0->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2811 TYPE_FIELD_BITSIZE (type0, 0));
aa715135
JG
2812 int base_low = ada_discrete_type_low_bound (TYPE_INDEX_TYPE (type0));
2813 LONGEST base_low_pos, low_pos;
2814 CORE_ADDR base;
2815
2816 if (!discrete_position (base_index_type, low, &low_pos)
2817 || !discrete_position (base_index_type, base_low, &base_low_pos))
2818 {
2819 warning (_("unable to get positions in slice, use bounds instead"));
2820 low_pos = low;
2821 base_low_pos = base_low;
2822 }
5b4ee69b 2823
aa715135
JG
2824 base = value_as_address (array_ptr)
2825 + ((low_pos - base_low_pos)
2826 * TYPE_LENGTH (TYPE_TARGET_TYPE (type0)));
f5938064 2827 return value_at_lazy (slice_type, base);
0b5d8877
PH
2828}
2829
2830
2831static struct value *
2832ada_value_slice (struct value *array, int low, int high)
2833{
b0dd7688 2834 struct type *type = ada_check_typedef (value_type (array));
aa715135 2835 struct type *base_index_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
0c9c3474
SA
2836 struct type *index_type
2837 = create_static_range_type (NULL, TYPE_INDEX_TYPE (type), low, high);
9fe561ab
JB
2838 struct type *slice_type = create_array_type_with_stride
2839 (NULL, TYPE_TARGET_TYPE (type), index_type,
24e99c6c 2840 type->dyn_prop (DYN_PROP_BYTE_STRIDE),
9fe561ab 2841 TYPE_FIELD_BITSIZE (type, 0));
aa715135 2842 LONGEST low_pos, high_pos;
5b4ee69b 2843
aa715135
JG
2844 if (!discrete_position (base_index_type, low, &low_pos)
2845 || !discrete_position (base_index_type, high, &high_pos))
2846 {
2847 warning (_("unable to get positions in slice, use bounds instead"));
2848 low_pos = low;
2849 high_pos = high;
2850 }
2851
2852 return value_cast (slice_type,
2853 value_slice (array, low, high_pos - low_pos + 1));
0b5d8877
PH
2854}
2855
14f9c5c9
AS
2856/* If type is a record type in the form of a standard GNAT array
2857 descriptor, returns the number of dimensions for type. If arr is a
2858 simple array, returns the number of "array of"s that prefix its
4c4b4cd2 2859 type designation. Otherwise, returns 0. */
14f9c5c9
AS
2860
2861int
d2e4a39e 2862ada_array_arity (struct type *type)
14f9c5c9
AS
2863{
2864 int arity;
2865
2866 if (type == NULL)
2867 return 0;
2868
2869 type = desc_base_type (type);
2870
2871 arity = 0;
78134374 2872 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9 2873 return desc_arity (desc_bounds_type (type));
d2e4a39e 2874 else
78134374 2875 while (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2876 {
4c4b4cd2 2877 arity += 1;
61ee279c 2878 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
14f9c5c9 2879 }
d2e4a39e 2880
14f9c5c9
AS
2881 return arity;
2882}
2883
2884/* If TYPE is a record type in the form of a standard GNAT array
2885 descriptor or a simple array type, returns the element type for
2886 TYPE after indexing by NINDICES indices, or by all indices if
4c4b4cd2 2887 NINDICES is -1. Otherwise, returns NULL. */
14f9c5c9 2888
d2e4a39e
AS
2889struct type *
2890ada_array_element_type (struct type *type, int nindices)
14f9c5c9
AS
2891{
2892 type = desc_base_type (type);
2893
78134374 2894 if (type->code () == TYPE_CODE_STRUCT)
14f9c5c9
AS
2895 {
2896 int k;
d2e4a39e 2897 struct type *p_array_type;
14f9c5c9 2898
556bdfd4 2899 p_array_type = desc_data_target_type (type);
14f9c5c9
AS
2900
2901 k = ada_array_arity (type);
2902 if (k == 0)
4c4b4cd2 2903 return NULL;
d2e4a39e 2904
4c4b4cd2 2905 /* Initially p_array_type = elt_type(*)[]...(k times)...[]. */
14f9c5c9 2906 if (nindices >= 0 && k > nindices)
4c4b4cd2 2907 k = nindices;
d2e4a39e 2908 while (k > 0 && p_array_type != NULL)
4c4b4cd2 2909 {
61ee279c 2910 p_array_type = ada_check_typedef (TYPE_TARGET_TYPE (p_array_type));
4c4b4cd2
PH
2911 k -= 1;
2912 }
14f9c5c9
AS
2913 return p_array_type;
2914 }
78134374 2915 else if (type->code () == TYPE_CODE_ARRAY)
14f9c5c9 2916 {
78134374 2917 while (nindices != 0 && type->code () == TYPE_CODE_ARRAY)
4c4b4cd2
PH
2918 {
2919 type = TYPE_TARGET_TYPE (type);
2920 nindices -= 1;
2921 }
14f9c5c9
AS
2922 return type;
2923 }
2924
2925 return NULL;
2926}
2927
4c4b4cd2 2928/* The type of nth index in arrays of given type (n numbering from 1).
dd19d49e
UW
2929 Does not examine memory. Throws an error if N is invalid or TYPE
2930 is not an array type. NAME is the name of the Ada attribute being
2931 evaluated ('range, 'first, 'last, or 'length); it is used in building
2932 the error message. */
14f9c5c9 2933
1eea4ebd
UW
2934static struct type *
2935ada_index_type (struct type *type, int n, const char *name)
14f9c5c9 2936{
4c4b4cd2
PH
2937 struct type *result_type;
2938
14f9c5c9
AS
2939 type = desc_base_type (type);
2940
1eea4ebd
UW
2941 if (n < 0 || n > ada_array_arity (type))
2942 error (_("invalid dimension number to '%s"), name);
14f9c5c9 2943
4c4b4cd2 2944 if (ada_is_simple_array_type (type))
14f9c5c9
AS
2945 {
2946 int i;
2947
2948 for (i = 1; i < n; i += 1)
4c4b4cd2 2949 type = TYPE_TARGET_TYPE (type);
262452ec 2950 result_type = TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (type));
4c4b4cd2
PH
2951 /* FIXME: The stabs type r(0,0);bound;bound in an array type
2952 has a target type of TYPE_CODE_UNDEF. We compensate here, but
76a01679 2953 perhaps stabsread.c would make more sense. */
78134374 2954 if (result_type && result_type->code () == TYPE_CODE_UNDEF)
1eea4ebd 2955 result_type = NULL;
14f9c5c9 2956 }
d2e4a39e 2957 else
1eea4ebd
UW
2958 {
2959 result_type = desc_index_type (desc_bounds_type (type), n);
2960 if (result_type == NULL)
2961 error (_("attempt to take bound of something that is not an array"));
2962 }
2963
2964 return result_type;
14f9c5c9
AS
2965}
2966
2967/* Given that arr is an array type, returns the lower bound of the
2968 Nth index (numbering from 1) if WHICH is 0, and the upper bound if
4c4b4cd2 2969 WHICH is 1. This returns bounds 0 .. -1 if ARR_TYPE is an
1eea4ebd
UW
2970 array-descriptor type. It works for other arrays with bounds supplied
2971 by run-time quantities other than discriminants. */
14f9c5c9 2972
abb68b3e 2973static LONGEST
fb5e3d5c 2974ada_array_bound_from_type (struct type *arr_type, int n, int which)
14f9c5c9 2975{
8a48ac95 2976 struct type *type, *index_type_desc, *index_type;
1ce677a4 2977 int i;
262452ec
JK
2978
2979 gdb_assert (which == 0 || which == 1);
14f9c5c9 2980
ad82864c
JB
2981 if (ada_is_constrained_packed_array_type (arr_type))
2982 arr_type = decode_constrained_packed_array_type (arr_type);
14f9c5c9 2983
4c4b4cd2 2984 if (arr_type == NULL || !ada_is_simple_array_type (arr_type))
1eea4ebd 2985 return (LONGEST) - which;
14f9c5c9 2986
78134374 2987 if (arr_type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
2988 type = TYPE_TARGET_TYPE (arr_type);
2989 else
2990 type = arr_type;
2991
bafffb51
JB
2992 if (TYPE_FIXED_INSTANCE (type))
2993 {
2994 /* The array has already been fixed, so we do not need to
2995 check the parallel ___XA type again. That encoding has
2996 already been applied, so ignore it now. */
2997 index_type_desc = NULL;
2998 }
2999 else
3000 {
3001 index_type_desc = ada_find_parallel_type (type, "___XA");
3002 ada_fixup_array_indexes_type (index_type_desc);
3003 }
3004
262452ec 3005 if (index_type_desc != NULL)
28c85d6c
JB
3006 index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1),
3007 NULL);
262452ec 3008 else
8a48ac95
JB
3009 {
3010 struct type *elt_type = check_typedef (type);
3011
3012 for (i = 1; i < n; i++)
3013 elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
3014
3015 index_type = TYPE_INDEX_TYPE (elt_type);
3016 }
262452ec 3017
43bbcdc2
PH
3018 return
3019 (LONGEST) (which == 0
3020 ? ada_discrete_type_low_bound (index_type)
3021 : ada_discrete_type_high_bound (index_type));
14f9c5c9
AS
3022}
3023
3024/* Given that arr is an array value, returns the lower bound of the
abb68b3e
JB
3025 nth index (numbering from 1) if WHICH is 0, and the upper bound if
3026 WHICH is 1. This routine will also work for arrays with bounds
4c4b4cd2 3027 supplied by run-time quantities other than discriminants. */
14f9c5c9 3028
1eea4ebd 3029static LONGEST
4dc81987 3030ada_array_bound (struct value *arr, int n, int which)
14f9c5c9 3031{
eb479039
JB
3032 struct type *arr_type;
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_bound (decode_constrained_packed_array (arr), n, which);
4c4b4cd2 3040 else if (ada_is_simple_array_type (arr_type))
1eea4ebd 3041 return ada_array_bound_from_type (arr_type, n, which);
14f9c5c9 3042 else
1eea4ebd 3043 return value_as_long (desc_one_bound (desc_bounds (arr), n, which));
14f9c5c9
AS
3044}
3045
3046/* Given that arr is an array value, returns the length of the
3047 nth index. This routine will also work for arrays with bounds
4c4b4cd2
PH
3048 supplied by run-time quantities other than discriminants.
3049 Does not work for arrays indexed by enumeration types with representation
3050 clauses at the moment. */
14f9c5c9 3051
1eea4ebd 3052static LONGEST
d2e4a39e 3053ada_array_length (struct value *arr, int n)
14f9c5c9 3054{
aa715135
JG
3055 struct type *arr_type, *index_type;
3056 int low, high;
eb479039 3057
78134374 3058 if (check_typedef (value_type (arr))->code () == TYPE_CODE_PTR)
eb479039
JB
3059 arr = value_ind (arr);
3060 arr_type = value_enclosing_type (arr);
14f9c5c9 3061
ad82864c
JB
3062 if (ada_is_constrained_packed_array_type (arr_type))
3063 return ada_array_length (decode_constrained_packed_array (arr), n);
14f9c5c9 3064
4c4b4cd2 3065 if (ada_is_simple_array_type (arr_type))
aa715135
JG
3066 {
3067 low = ada_array_bound_from_type (arr_type, n, 0);
3068 high = ada_array_bound_from_type (arr_type, n, 1);
3069 }
14f9c5c9 3070 else
aa715135
JG
3071 {
3072 low = value_as_long (desc_one_bound (desc_bounds (arr), n, 0));
3073 high = value_as_long (desc_one_bound (desc_bounds (arr), n, 1));
3074 }
3075
f168693b 3076 arr_type = check_typedef (arr_type);
7150d33c 3077 index_type = ada_index_type (arr_type, n, "length");
aa715135
JG
3078 if (index_type != NULL)
3079 {
3080 struct type *base_type;
78134374 3081 if (index_type->code () == TYPE_CODE_RANGE)
aa715135
JG
3082 base_type = TYPE_TARGET_TYPE (index_type);
3083 else
3084 base_type = index_type;
3085
3086 low = pos_atr (value_from_longest (base_type, low));
3087 high = pos_atr (value_from_longest (base_type, high));
3088 }
3089 return high - low + 1;
4c4b4cd2
PH
3090}
3091
bff8c71f
TT
3092/* An array whose type is that of ARR_TYPE (an array type), with
3093 bounds LOW to HIGH, but whose contents are unimportant. If HIGH is
3094 less than LOW, then LOW-1 is used. */
4c4b4cd2
PH
3095
3096static struct value *
bff8c71f 3097empty_array (struct type *arr_type, int low, int high)
4c4b4cd2 3098{
b0dd7688 3099 struct type *arr_type0 = ada_check_typedef (arr_type);
0c9c3474
SA
3100 struct type *index_type
3101 = create_static_range_type
bff8c71f
TT
3102 (NULL, TYPE_TARGET_TYPE (TYPE_INDEX_TYPE (arr_type0)), low,
3103 high < low ? low - 1 : high);
b0dd7688 3104 struct type *elt_type = ada_array_element_type (arr_type0, 1);
5b4ee69b 3105
0b5d8877 3106 return allocate_value (create_array_type (NULL, elt_type, index_type));
14f9c5c9 3107}
14f9c5c9 3108\f
d2e4a39e 3109
4c4b4cd2 3110 /* Name resolution */
14f9c5c9 3111
4c4b4cd2
PH
3112/* The "decoded" name for the user-definable Ada operator corresponding
3113 to OP. */
14f9c5c9 3114
d2e4a39e 3115static const char *
4c4b4cd2 3116ada_decoded_op_name (enum exp_opcode op)
14f9c5c9
AS
3117{
3118 int i;
3119
4c4b4cd2 3120 for (i = 0; ada_opname_table[i].encoded != NULL; i += 1)
14f9c5c9
AS
3121 {
3122 if (ada_opname_table[i].op == op)
4c4b4cd2 3123 return ada_opname_table[i].decoded;
14f9c5c9 3124 }
323e0a4a 3125 error (_("Could not find operator name for opcode"));
14f9c5c9
AS
3126}
3127
de93309a
SM
3128/* Returns true (non-zero) iff decoded name N0 should appear before N1
3129 in a listing of choices during disambiguation (see sort_choices, below).
3130 The idea is that overloadings of a subprogram name from the
3131 same package should sort in their source order. We settle for ordering
3132 such symbols by their trailing number (__N or $N). */
14f9c5c9 3133
de93309a
SM
3134static int
3135encoded_ordered_before (const char *N0, const char *N1)
14f9c5c9 3136{
de93309a
SM
3137 if (N1 == NULL)
3138 return 0;
3139 else if (N0 == NULL)
3140 return 1;
3141 else
3142 {
3143 int k0, k1;
30b15541 3144
de93309a
SM
3145 for (k0 = strlen (N0) - 1; k0 > 0 && isdigit (N0[k0]); k0 -= 1)
3146 ;
3147 for (k1 = strlen (N1) - 1; k1 > 0 && isdigit (N1[k1]); k1 -= 1)
3148 ;
3149 if ((N0[k0] == '_' || N0[k0] == '$') && N0[k0 + 1] != '\000'
3150 && (N1[k1] == '_' || N1[k1] == '$') && N1[k1 + 1] != '\000')
3151 {
3152 int n0, n1;
30b15541 3153
de93309a
SM
3154 n0 = k0;
3155 while (N0[n0] == '_' && n0 > 0 && N0[n0 - 1] == '_')
3156 n0 -= 1;
3157 n1 = k1;
3158 while (N1[n1] == '_' && n1 > 0 && N1[n1 - 1] == '_')
3159 n1 -= 1;
3160 if (n0 == n1 && strncmp (N0, N1, n0) == 0)
3161 return (atoi (N0 + k0 + 1) < atoi (N1 + k1 + 1));
3162 }
3163 return (strcmp (N0, N1) < 0);
3164 }
14f9c5c9
AS
3165}
3166
de93309a
SM
3167/* Sort SYMS[0..NSYMS-1] to put the choices in a canonical order by the
3168 encoded names. */
14f9c5c9 3169
de93309a
SM
3170static void
3171sort_choices (struct block_symbol syms[], int nsyms)
14f9c5c9 3172{
14f9c5c9 3173 int i;
14f9c5c9 3174
de93309a 3175 for (i = 1; i < nsyms; i += 1)
14f9c5c9 3176 {
de93309a
SM
3177 struct block_symbol sym = syms[i];
3178 int j;
3179
3180 for (j = i - 1; j >= 0; j -= 1)
4c4b4cd2 3181 {
987012b8
CB
3182 if (encoded_ordered_before (syms[j].symbol->linkage_name (),
3183 sym.symbol->linkage_name ()))
de93309a
SM
3184 break;
3185 syms[j + 1] = syms[j];
4c4b4cd2 3186 }
de93309a
SM
3187 syms[j + 1] = sym;
3188 }
3189}
14f9c5c9 3190
de93309a
SM
3191/* Whether GDB should display formals and return types for functions in the
3192 overloads selection menu. */
3193static bool print_signatures = true;
4c4b4cd2 3194
de93309a
SM
3195/* Print the signature for SYM on STREAM according to the FLAGS options. For
3196 all but functions, the signature is just the name of the symbol. For
3197 functions, this is the name of the function, the list of types for formals
3198 and the return type (if any). */
4c4b4cd2 3199
de93309a
SM
3200static void
3201ada_print_symbol_signature (struct ui_file *stream, struct symbol *sym,
3202 const struct type_print_options *flags)
3203{
3204 struct type *type = SYMBOL_TYPE (sym);
14f9c5c9 3205
987012b8 3206 fprintf_filtered (stream, "%s", sym->print_name ());
de93309a
SM
3207 if (!print_signatures
3208 || type == NULL
78134374 3209 || type->code () != TYPE_CODE_FUNC)
de93309a 3210 return;
4c4b4cd2 3211
1f704f76 3212 if (type->num_fields () > 0)
de93309a
SM
3213 {
3214 int i;
14f9c5c9 3215
de93309a 3216 fprintf_filtered (stream, " (");
1f704f76 3217 for (i = 0; i < type->num_fields (); ++i)
de93309a
SM
3218 {
3219 if (i > 0)
3220 fprintf_filtered (stream, "; ");
3221 ada_print_type (TYPE_FIELD_TYPE (type, i), NULL, stream, -1, 0,
3222 flags);
3223 }
3224 fprintf_filtered (stream, ")");
3225 }
3226 if (TYPE_TARGET_TYPE (type) != NULL
78134374 3227 && TYPE_TARGET_TYPE (type)->code () != TYPE_CODE_VOID)
de93309a
SM
3228 {
3229 fprintf_filtered (stream, " return ");
3230 ada_print_type (TYPE_TARGET_TYPE (type), NULL, stream, -1, 0, flags);
3231 }
3232}
14f9c5c9 3233
de93309a
SM
3234/* Read and validate a set of numeric choices from the user in the
3235 range 0 .. N_CHOICES-1. Place the results in increasing
3236 order in CHOICES[0 .. N-1], and return N.
14f9c5c9 3237
de93309a
SM
3238 The user types choices as a sequence of numbers on one line
3239 separated by blanks, encoding them as follows:
14f9c5c9 3240
de93309a
SM
3241 + A choice of 0 means to cancel the selection, throwing an error.
3242 + If IS_ALL_CHOICE, a choice of 1 selects the entire set 0 .. N_CHOICES-1.
3243 + The user chooses k by typing k+IS_ALL_CHOICE+1.
14f9c5c9 3244
de93309a 3245 The user is not allowed to choose more than MAX_RESULTS values.
14f9c5c9 3246
de93309a
SM
3247 ANNOTATION_SUFFIX, if present, is used to annotate the input
3248 prompts (for use with the -f switch). */
14f9c5c9 3249
de93309a
SM
3250static int
3251get_selections (int *choices, int n_choices, int max_results,
3252 int is_all_choice, const char *annotation_suffix)
3253{
992a7040 3254 const char *args;
de93309a
SM
3255 const char *prompt;
3256 int n_chosen;
3257 int first_choice = is_all_choice ? 2 : 1;
14f9c5c9 3258
de93309a
SM
3259 prompt = getenv ("PS2");
3260 if (prompt == NULL)
3261 prompt = "> ";
4c4b4cd2 3262
de93309a 3263 args = command_line_input (prompt, annotation_suffix);
4c4b4cd2 3264
de93309a
SM
3265 if (args == NULL)
3266 error_no_arg (_("one or more choice numbers"));
14f9c5c9 3267
de93309a 3268 n_chosen = 0;
4c4b4cd2 3269
de93309a
SM
3270 /* Set choices[0 .. n_chosen-1] to the users' choices in ascending
3271 order, as given in args. Choices are validated. */
3272 while (1)
14f9c5c9 3273 {
de93309a
SM
3274 char *args2;
3275 int choice, j;
76a01679 3276
de93309a
SM
3277 args = skip_spaces (args);
3278 if (*args == '\0' && n_chosen == 0)
3279 error_no_arg (_("one or more choice numbers"));
3280 else if (*args == '\0')
3281 break;
76a01679 3282
de93309a
SM
3283 choice = strtol (args, &args2, 10);
3284 if (args == args2 || choice < 0
3285 || choice > n_choices + first_choice - 1)
3286 error (_("Argument must be choice number"));
3287 args = args2;
76a01679 3288
de93309a
SM
3289 if (choice == 0)
3290 error (_("cancelled"));
76a01679 3291
de93309a
SM
3292 if (choice < first_choice)
3293 {
3294 n_chosen = n_choices;
3295 for (j = 0; j < n_choices; j += 1)
3296 choices[j] = j;
3297 break;
76a01679 3298 }
de93309a 3299 choice -= first_choice;
76a01679 3300
de93309a 3301 for (j = n_chosen - 1; j >= 0 && choice < choices[j]; j -= 1)
76a01679 3302 {
76a01679 3303 }
4c4b4cd2 3304
de93309a 3305 if (j < 0 || choice != choices[j])
4c4b4cd2 3306 {
de93309a 3307 int k;
4c4b4cd2 3308
de93309a
SM
3309 for (k = n_chosen - 1; k > j; k -= 1)
3310 choices[k + 1] = choices[k];
3311 choices[j + 1] = choice;
3312 n_chosen += 1;
4c4b4cd2 3313 }
14f9c5c9
AS
3314 }
3315
de93309a
SM
3316 if (n_chosen > max_results)
3317 error (_("Select no more than %d of the above"), max_results);
3318
3319 return n_chosen;
14f9c5c9
AS
3320}
3321
de93309a
SM
3322/* Given a list of NSYMS symbols in SYMS, select up to MAX_RESULTS>0
3323 by asking the user (if necessary), returning the number selected,
3324 and setting the first elements of SYMS items. Error if no symbols
3325 selected. */
3326
3327/* NOTE: Adapted from decode_line_2 in symtab.c, with which it ought
3328 to be re-integrated one of these days. */
14f9c5c9
AS
3329
3330static int
de93309a 3331user_select_syms (struct block_symbol *syms, int nsyms, int max_results)
14f9c5c9 3332{
de93309a
SM
3333 int i;
3334 int *chosen = XALLOCAVEC (int , nsyms);
3335 int n_chosen;
3336 int first_choice = (max_results == 1) ? 1 : 2;
3337 const char *select_mode = multiple_symbols_select_mode ();
14f9c5c9 3338
de93309a
SM
3339 if (max_results < 1)
3340 error (_("Request to select 0 symbols!"));
3341 if (nsyms <= 1)
3342 return nsyms;
14f9c5c9 3343
de93309a
SM
3344 if (select_mode == multiple_symbols_cancel)
3345 error (_("\
3346canceled because the command is ambiguous\n\
3347See set/show multiple-symbol."));
14f9c5c9 3348
de93309a
SM
3349 /* If select_mode is "all", then return all possible symbols.
3350 Only do that if more than one symbol can be selected, of course.
3351 Otherwise, display the menu as usual. */
3352 if (select_mode == multiple_symbols_all && max_results > 1)
3353 return nsyms;
14f9c5c9 3354
de93309a
SM
3355 printf_filtered (_("[0] cancel\n"));
3356 if (max_results > 1)
3357 printf_filtered (_("[1] all\n"));
14f9c5c9 3358
de93309a 3359 sort_choices (syms, nsyms);
14f9c5c9 3360
de93309a
SM
3361 for (i = 0; i < nsyms; i += 1)
3362 {
3363 if (syms[i].symbol == NULL)
3364 continue;
14f9c5c9 3365
de93309a
SM
3366 if (SYMBOL_CLASS (syms[i].symbol) == LOC_BLOCK)
3367 {
3368 struct symtab_and_line sal =
3369 find_function_start_sal (syms[i].symbol, 1);
14f9c5c9 3370
de93309a
SM
3371 printf_filtered ("[%d] ", i + first_choice);
3372 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3373 &type_print_raw_options);
3374 if (sal.symtab == NULL)
3375 printf_filtered (_(" at %p[<no source file available>%p]:%d\n"),
3376 metadata_style.style ().ptr (), nullptr, sal.line);
3377 else
3378 printf_filtered
3379 (_(" at %ps:%d\n"),
3380 styled_string (file_name_style.style (),
3381 symtab_to_filename_for_display (sal.symtab)),
3382 sal.line);
3383 continue;
3384 }
76a01679
JB
3385 else
3386 {
de93309a
SM
3387 int is_enumeral =
3388 (SYMBOL_CLASS (syms[i].symbol) == LOC_CONST
3389 && SYMBOL_TYPE (syms[i].symbol) != NULL
78134374 3390 && SYMBOL_TYPE (syms[i].symbol)->code () == TYPE_CODE_ENUM);
de93309a 3391 struct symtab *symtab = NULL;
4c4b4cd2 3392
de93309a
SM
3393 if (SYMBOL_OBJFILE_OWNED (syms[i].symbol))
3394 symtab = symbol_symtab (syms[i].symbol);
3395
3396 if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
3397 {
3398 printf_filtered ("[%d] ", i + first_choice);
3399 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3400 &type_print_raw_options);
3401 printf_filtered (_(" at %s:%d\n"),
3402 symtab_to_filename_for_display (symtab),
3403 SYMBOL_LINE (syms[i].symbol));
3404 }
3405 else if (is_enumeral
7d93a1e0 3406 && SYMBOL_TYPE (syms[i].symbol)->name () != NULL)
de93309a
SM
3407 {
3408 printf_filtered (("[%d] "), i + first_choice);
3409 ada_print_type (SYMBOL_TYPE (syms[i].symbol), NULL,
3410 gdb_stdout, -1, 0, &type_print_raw_options);
3411 printf_filtered (_("'(%s) (enumeral)\n"),
987012b8 3412 syms[i].symbol->print_name ());
de93309a
SM
3413 }
3414 else
3415 {
3416 printf_filtered ("[%d] ", i + first_choice);
3417 ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
3418 &type_print_raw_options);
3419
3420 if (symtab != NULL)
3421 printf_filtered (is_enumeral
3422 ? _(" in %s (enumeral)\n")
3423 : _(" at %s:?\n"),
3424 symtab_to_filename_for_display (symtab));
3425 else
3426 printf_filtered (is_enumeral
3427 ? _(" (enumeral)\n")
3428 : _(" at ?\n"));
3429 }
76a01679 3430 }
14f9c5c9 3431 }
14f9c5c9 3432
de93309a
SM
3433 n_chosen = get_selections (chosen, nsyms, max_results, max_results > 1,
3434 "overload-choice");
14f9c5c9 3435
de93309a
SM
3436 for (i = 0; i < n_chosen; i += 1)
3437 syms[i] = syms[chosen[i]];
14f9c5c9 3438
de93309a
SM
3439 return n_chosen;
3440}
14f9c5c9 3441
de93309a
SM
3442/* Same as evaluate_type (*EXP), but resolves ambiguous symbol
3443 references (marked by OP_VAR_VALUE nodes in which the symbol has an
3444 undefined namespace) and converts operators that are
3445 user-defined into appropriate function calls. If CONTEXT_TYPE is
3446 non-null, it provides a preferred result type [at the moment, only
3447 type void has any effect---causing procedures to be preferred over
3448 functions in calls]. A null CONTEXT_TYPE indicates that a non-void
3449 return type is preferred. May change (expand) *EXP. */
14f9c5c9 3450
de93309a
SM
3451static void
3452resolve (expression_up *expp, int void_context_p, int parse_completion,
3453 innermost_block_tracker *tracker)
3454{
3455 struct type *context_type = NULL;
3456 int pc = 0;
14f9c5c9 3457
de93309a
SM
3458 if (void_context_p)
3459 context_type = builtin_type ((*expp)->gdbarch)->builtin_void;
14f9c5c9 3460
de93309a
SM
3461 resolve_subexp (expp, &pc, 1, context_type, parse_completion, tracker);
3462}
4c4b4cd2 3463
de93309a
SM
3464/* Resolve the operator of the subexpression beginning at
3465 position *POS of *EXPP. "Resolving" consists of replacing
3466 the symbols that have undefined namespaces in OP_VAR_VALUE nodes
3467 with their resolutions, replacing built-in operators with
3468 function calls to user-defined operators, where appropriate, and,
3469 when DEPROCEDURE_P is non-zero, converting function-valued variables
3470 into parameterless calls. May expand *EXPP. The CONTEXT_TYPE functions
3471 are as in ada_resolve, above. */
14f9c5c9 3472
de93309a
SM
3473static struct value *
3474resolve_subexp (expression_up *expp, int *pos, int deprocedure_p,
3475 struct type *context_type, int parse_completion,
3476 innermost_block_tracker *tracker)
14f9c5c9 3477{
de93309a
SM
3478 int pc = *pos;
3479 int i;
3480 struct expression *exp; /* Convenience: == *expp. */
3481 enum exp_opcode op = (*expp)->elts[pc].opcode;
3482 struct value **argvec; /* Vector of operand types (alloca'ed). */
3483 int nargs; /* Number of operands. */
3484 int oplen;
14f9c5c9 3485
de93309a
SM
3486 argvec = NULL;
3487 nargs = 0;
3488 exp = expp->get ();
4c4b4cd2 3489
de93309a
SM
3490 /* Pass one: resolve operands, saving their types and updating *pos,
3491 if needed. */
3492 switch (op)
3493 {
3494 case OP_FUNCALL:
3495 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3496 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3497 *pos += 7;
3498 else
3499 {
3500 *pos += 3;
3501 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
4c4b4cd2 3502 }
de93309a
SM
3503 nargs = longest_to_int (exp->elts[pc + 1].longconst);
3504 break;
14f9c5c9 3505
de93309a
SM
3506 case UNOP_ADDR:
3507 *pos += 1;
3508 resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3509 break;
3510
3511 case UNOP_QUAL:
3512 *pos += 3;
3513 resolve_subexp (expp, pos, 1, check_typedef (exp->elts[pc + 1].type),
3514 parse_completion, tracker);
3515 break;
3516
3517 case OP_ATR_MODULUS:
3518 case OP_ATR_SIZE:
3519 case OP_ATR_TAG:
3520 case OP_ATR_FIRST:
3521 case OP_ATR_LAST:
3522 case OP_ATR_LENGTH:
3523 case OP_ATR_POS:
3524 case OP_ATR_VAL:
3525 case OP_ATR_MIN:
3526 case OP_ATR_MAX:
3527 case TERNOP_IN_RANGE:
3528 case BINOP_IN_BOUNDS:
3529 case UNOP_IN_RANGE:
3530 case OP_AGGREGATE:
3531 case OP_OTHERS:
3532 case OP_CHOICES:
3533 case OP_POSITIONAL:
3534 case OP_DISCRETE_RANGE:
3535 case OP_NAME:
3536 ada_forward_operator_length (exp, pc, &oplen, &nargs);
3537 *pos += oplen;
3538 break;
3539
3540 case BINOP_ASSIGN:
3541 {
3542 struct value *arg1;
3543
3544 *pos += 1;
3545 arg1 = resolve_subexp (expp, pos, 0, NULL, parse_completion, tracker);
3546 if (arg1 == NULL)
3547 resolve_subexp (expp, pos, 1, NULL, parse_completion, tracker);
3548 else
3549 resolve_subexp (expp, pos, 1, value_type (arg1), parse_completion,
3550 tracker);
3551 break;
3552 }
3553
3554 case UNOP_CAST:
3555 *pos += 3;
3556 nargs = 1;
3557 break;
3558
3559 case BINOP_ADD:
3560 case BINOP_SUB:
3561 case BINOP_MUL:
3562 case BINOP_DIV:
3563 case BINOP_REM:
3564 case BINOP_MOD:
3565 case BINOP_EXP:
3566 case BINOP_CONCAT:
3567 case BINOP_LOGICAL_AND:
3568 case BINOP_LOGICAL_OR:
3569 case BINOP_BITWISE_AND:
3570 case BINOP_BITWISE_IOR:
3571 case BINOP_BITWISE_XOR:
3572
3573 case BINOP_EQUAL:
3574 case BINOP_NOTEQUAL:
3575 case BINOP_LESS:
3576 case BINOP_GTR:
3577 case BINOP_LEQ:
3578 case BINOP_GEQ:
3579
3580 case BINOP_REPEAT:
3581 case BINOP_SUBSCRIPT:
3582 case BINOP_COMMA:
3583 *pos += 1;
3584 nargs = 2;
3585 break;
3586
3587 case UNOP_NEG:
3588 case UNOP_PLUS:
3589 case UNOP_LOGICAL_NOT:
3590 case UNOP_ABS:
3591 case UNOP_IND:
3592 *pos += 1;
3593 nargs = 1;
3594 break;
3595
3596 case OP_LONG:
3597 case OP_FLOAT:
3598 case OP_VAR_VALUE:
3599 case OP_VAR_MSYM_VALUE:
3600 *pos += 4;
3601 break;
3602
3603 case OP_TYPE:
3604 case OP_BOOL:
3605 case OP_LAST:
3606 case OP_INTERNALVAR:
3607 *pos += 3;
3608 break;
3609
3610 case UNOP_MEMVAL:
3611 *pos += 3;
3612 nargs = 1;
3613 break;
3614
3615 case OP_REGISTER:
3616 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3617 break;
3618
3619 case STRUCTOP_STRUCT:
3620 *pos += 4 + BYTES_TO_EXP_ELEM (exp->elts[pc + 1].longconst + 1);
3621 nargs = 1;
3622 break;
3623
3624 case TERNOP_SLICE:
3625 *pos += 1;
3626 nargs = 3;
3627 break;
3628
3629 case OP_STRING:
3630 break;
3631
3632 default:
3633 error (_("Unexpected operator during name resolution"));
14f9c5c9 3634 }
14f9c5c9 3635
de93309a
SM
3636 argvec = XALLOCAVEC (struct value *, nargs + 1);
3637 for (i = 0; i < nargs; i += 1)
3638 argvec[i] = resolve_subexp (expp, pos, 1, NULL, parse_completion,
3639 tracker);
3640 argvec[i] = NULL;
3641 exp = expp->get ();
4c4b4cd2 3642
de93309a
SM
3643 /* Pass two: perform any resolution on principal operator. */
3644 switch (op)
14f9c5c9 3645 {
de93309a
SM
3646 default:
3647 break;
5b4ee69b 3648
de93309a
SM
3649 case OP_VAR_VALUE:
3650 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
4c4b4cd2 3651 {
de93309a
SM
3652 std::vector<struct block_symbol> candidates;
3653 int n_candidates;
5b4ee69b 3654
de93309a 3655 n_candidates =
987012b8 3656 ada_lookup_symbol_list (exp->elts[pc + 2].symbol->linkage_name (),
de93309a
SM
3657 exp->elts[pc + 1].block, VAR_DOMAIN,
3658 &candidates);
d2e4a39e 3659
de93309a
SM
3660 if (n_candidates > 1)
3661 {
3662 /* Types tend to get re-introduced locally, so if there
3663 are any local symbols that are not types, first filter
3664 out all types. */
3665 int j;
3666 for (j = 0; j < n_candidates; j += 1)
3667 switch (SYMBOL_CLASS (candidates[j].symbol))
3668 {
3669 case LOC_REGISTER:
3670 case LOC_ARG:
3671 case LOC_REF_ARG:
3672 case LOC_REGPARM_ADDR:
3673 case LOC_LOCAL:
3674 case LOC_COMPUTED:
3675 goto FoundNonType;
3676 default:
3677 break;
3678 }
3679 FoundNonType:
3680 if (j < n_candidates)
3681 {
3682 j = 0;
3683 while (j < n_candidates)
3684 {
3685 if (SYMBOL_CLASS (candidates[j].symbol) == LOC_TYPEDEF)
3686 {
3687 candidates[j] = candidates[n_candidates - 1];
3688 n_candidates -= 1;
3689 }
3690 else
3691 j += 1;
3692 }
3693 }
3694 }
4c4b4cd2 3695
de93309a
SM
3696 if (n_candidates == 0)
3697 error (_("No definition found for %s"),
987012b8 3698 exp->elts[pc + 2].symbol->print_name ());
de93309a
SM
3699 else if (n_candidates == 1)
3700 i = 0;
3701 else if (deprocedure_p
3702 && !is_nonfunction (candidates.data (), n_candidates))
3703 {
3704 i = ada_resolve_function
3705 (candidates.data (), n_candidates, NULL, 0,
987012b8 3706 exp->elts[pc + 2].symbol->linkage_name (),
de93309a
SM
3707 context_type, parse_completion);
3708 if (i < 0)
3709 error (_("Could not find a match for %s"),
987012b8 3710 exp->elts[pc + 2].symbol->print_name ());
de93309a
SM
3711 }
3712 else
3713 {
3714 printf_filtered (_("Multiple matches for %s\n"),
987012b8 3715 exp->elts[pc + 2].symbol->print_name ());
de93309a
SM
3716 user_select_syms (candidates.data (), n_candidates, 1);
3717 i = 0;
3718 }
5b4ee69b 3719
de93309a
SM
3720 exp->elts[pc + 1].block = candidates[i].block;
3721 exp->elts[pc + 2].symbol = candidates[i].symbol;
3722 tracker->update (candidates[i]);
3723 }
14f9c5c9 3724
de93309a 3725 if (deprocedure_p
78134374 3726 && (SYMBOL_TYPE (exp->elts[pc + 2].symbol)->code ()
de93309a 3727 == TYPE_CODE_FUNC))
4c4b4cd2 3728 {
de93309a
SM
3729 replace_operator_with_call (expp, pc, 0, 4,
3730 exp->elts[pc + 2].symbol,
3731 exp->elts[pc + 1].block);
3732 exp = expp->get ();
4c4b4cd2 3733 }
de93309a
SM
3734 break;
3735
3736 case OP_FUNCALL:
3737 {
3738 if (exp->elts[pc + 3].opcode == OP_VAR_VALUE
3739 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
3740 {
3741 std::vector<struct block_symbol> candidates;
3742 int n_candidates;
3743
3744 n_candidates =
987012b8 3745 ada_lookup_symbol_list (exp->elts[pc + 5].symbol->linkage_name (),
de93309a
SM
3746 exp->elts[pc + 4].block, VAR_DOMAIN,
3747 &candidates);
14f9c5c9 3748
de93309a
SM
3749 if (n_candidates == 1)
3750 i = 0;
3751 else
3752 {
3753 i = ada_resolve_function
3754 (candidates.data (), n_candidates,
3755 argvec, nargs,
987012b8 3756 exp->elts[pc + 5].symbol->linkage_name (),
de93309a
SM
3757 context_type, parse_completion);
3758 if (i < 0)
3759 error (_("Could not find a match for %s"),
987012b8 3760 exp->elts[pc + 5].symbol->print_name ());
de93309a 3761 }
d72413e6 3762
de93309a
SM
3763 exp->elts[pc + 4].block = candidates[i].block;
3764 exp->elts[pc + 5].symbol = candidates[i].symbol;
3765 tracker->update (candidates[i]);
3766 }
3767 }
3768 break;
3769 case BINOP_ADD:
3770 case BINOP_SUB:
3771 case BINOP_MUL:
3772 case BINOP_DIV:
3773 case BINOP_REM:
3774 case BINOP_MOD:
3775 case BINOP_CONCAT:
3776 case BINOP_BITWISE_AND:
3777 case BINOP_BITWISE_IOR:
3778 case BINOP_BITWISE_XOR:
3779 case BINOP_EQUAL:
3780 case BINOP_NOTEQUAL:
3781 case BINOP_LESS:
3782 case BINOP_GTR:
3783 case BINOP_LEQ:
3784 case BINOP_GEQ:
3785 case BINOP_EXP:
3786 case UNOP_NEG:
3787 case UNOP_PLUS:
3788 case UNOP_LOGICAL_NOT:
3789 case UNOP_ABS:
3790 if (possible_user_operator_p (op, argvec))
3791 {
3792 std::vector<struct block_symbol> candidates;
3793 int n_candidates;
d72413e6 3794
de93309a
SM
3795 n_candidates =
3796 ada_lookup_symbol_list (ada_decoded_op_name (op),
3797 NULL, VAR_DOMAIN,
3798 &candidates);
d72413e6 3799
de93309a
SM
3800 i = ada_resolve_function (candidates.data (), n_candidates, argvec,
3801 nargs, ada_decoded_op_name (op), NULL,
3802 parse_completion);
3803 if (i < 0)
3804 break;
d72413e6 3805
de93309a
SM
3806 replace_operator_with_call (expp, pc, nargs, 1,
3807 candidates[i].symbol,
3808 candidates[i].block);
3809 exp = expp->get ();
3810 }
3811 break;
d72413e6 3812
de93309a
SM
3813 case OP_TYPE:
3814 case OP_REGISTER:
3815 return NULL;
d72413e6 3816 }
d72413e6 3817
de93309a
SM
3818 *pos = pc;
3819 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
3820 return evaluate_var_msym_value (EVAL_AVOID_SIDE_EFFECTS,
3821 exp->elts[pc + 1].objfile,
3822 exp->elts[pc + 2].msymbol);
3823 else
3824 return evaluate_subexp_type (exp, pos);
3825}
14f9c5c9 3826
de93309a
SM
3827/* Return non-zero if formal type FTYPE matches actual type ATYPE. If
3828 MAY_DEREF is non-zero, the formal may be a pointer and the actual
3829 a non-pointer. */
3830/* The term "match" here is rather loose. The match is heuristic and
3831 liberal. */
14f9c5c9 3832
de93309a
SM
3833static int
3834ada_type_match (struct type *ftype, struct type *atype, int may_deref)
14f9c5c9 3835{
de93309a
SM
3836 ftype = ada_check_typedef (ftype);
3837 atype = ada_check_typedef (atype);
14f9c5c9 3838
78134374 3839 if (ftype->code () == TYPE_CODE_REF)
de93309a 3840 ftype = TYPE_TARGET_TYPE (ftype);
78134374 3841 if (atype->code () == TYPE_CODE_REF)
de93309a 3842 atype = TYPE_TARGET_TYPE (atype);
14f9c5c9 3843
78134374 3844 switch (ftype->code ())
14f9c5c9 3845 {
de93309a 3846 default:
78134374 3847 return ftype->code () == atype->code ();
de93309a 3848 case TYPE_CODE_PTR:
78134374 3849 if (atype->code () == TYPE_CODE_PTR)
de93309a
SM
3850 return ada_type_match (TYPE_TARGET_TYPE (ftype),
3851 TYPE_TARGET_TYPE (atype), 0);
d2e4a39e 3852 else
de93309a
SM
3853 return (may_deref
3854 && ada_type_match (TYPE_TARGET_TYPE (ftype), atype, 0));
3855 case TYPE_CODE_INT:
3856 case TYPE_CODE_ENUM:
3857 case TYPE_CODE_RANGE:
78134374 3858 switch (atype->code ())
4c4b4cd2 3859 {
de93309a
SM
3860 case TYPE_CODE_INT:
3861 case TYPE_CODE_ENUM:
3862 case TYPE_CODE_RANGE:
3863 return 1;
3864 default:
3865 return 0;
4c4b4cd2 3866 }
d2e4a39e 3867
de93309a 3868 case TYPE_CODE_ARRAY:
78134374 3869 return (atype->code () == TYPE_CODE_ARRAY
de93309a 3870 || ada_is_array_descriptor_type (atype));
14f9c5c9 3871
de93309a
SM
3872 case TYPE_CODE_STRUCT:
3873 if (ada_is_array_descriptor_type (ftype))
78134374 3874 return (atype->code () == TYPE_CODE_ARRAY
de93309a
SM
3875 || ada_is_array_descriptor_type (atype));
3876 else
78134374 3877 return (atype->code () == TYPE_CODE_STRUCT
de93309a 3878 && !ada_is_array_descriptor_type (atype));
14f9c5c9 3879
de93309a
SM
3880 case TYPE_CODE_UNION:
3881 case TYPE_CODE_FLT:
78134374 3882 return (atype->code () == ftype->code ());
de93309a 3883 }
14f9c5c9
AS
3884}
3885
de93309a
SM
3886/* Return non-zero if the formals of FUNC "sufficiently match" the
3887 vector of actual argument types ACTUALS of size N_ACTUALS. FUNC
3888 may also be an enumeral, in which case it is treated as a 0-
3889 argument function. */
14f9c5c9 3890
de93309a
SM
3891static int
3892ada_args_match (struct symbol *func, struct value **actuals, int n_actuals)
3893{
3894 int i;
3895 struct type *func_type = SYMBOL_TYPE (func);
14f9c5c9 3896
de93309a 3897 if (SYMBOL_CLASS (func) == LOC_CONST
78134374 3898 && func_type->code () == TYPE_CODE_ENUM)
de93309a 3899 return (n_actuals == 0);
78134374 3900 else if (func_type == NULL || func_type->code () != TYPE_CODE_FUNC)
de93309a 3901 return 0;
14f9c5c9 3902
1f704f76 3903 if (func_type->num_fields () != n_actuals)
de93309a 3904 return 0;
14f9c5c9 3905
de93309a
SM
3906 for (i = 0; i < n_actuals; i += 1)
3907 {
3908 if (actuals[i] == NULL)
3909 return 0;
3910 else
3911 {
3912 struct type *ftype = ada_check_typedef (TYPE_FIELD_TYPE (func_type,
3913 i));
3914 struct type *atype = ada_check_typedef (value_type (actuals[i]));
14f9c5c9 3915
de93309a
SM
3916 if (!ada_type_match (ftype, atype, 1))
3917 return 0;
3918 }
3919 }
3920 return 1;
3921}
d2e4a39e 3922
de93309a
SM
3923/* False iff function type FUNC_TYPE definitely does not produce a value
3924 compatible with type CONTEXT_TYPE. Conservatively returns 1 if
3925 FUNC_TYPE is not a valid function type with a non-null return type
3926 or an enumerated type. A null CONTEXT_TYPE indicates any non-void type. */
14f9c5c9 3927
de93309a
SM
3928static int
3929return_match (struct type *func_type, struct type *context_type)
3930{
3931 struct type *return_type;
d2e4a39e 3932
de93309a
SM
3933 if (func_type == NULL)
3934 return 1;
14f9c5c9 3935
78134374 3936 if (func_type->code () == TYPE_CODE_FUNC)
de93309a
SM
3937 return_type = get_base_type (TYPE_TARGET_TYPE (func_type));
3938 else
3939 return_type = get_base_type (func_type);
3940 if (return_type == NULL)
3941 return 1;
76a01679 3942
de93309a 3943 context_type = get_base_type (context_type);
14f9c5c9 3944
78134374 3945 if (return_type->code () == TYPE_CODE_ENUM)
de93309a
SM
3946 return context_type == NULL || return_type == context_type;
3947 else if (context_type == NULL)
78134374 3948 return return_type->code () != TYPE_CODE_VOID;
de93309a 3949 else
78134374 3950 return return_type->code () == context_type->code ();
de93309a 3951}
14f9c5c9 3952
14f9c5c9 3953
de93309a
SM
3954/* Returns the index in SYMS[0..NSYMS-1] that contains the symbol for the
3955 function (if any) that matches the types of the NARGS arguments in
3956 ARGS. If CONTEXT_TYPE is non-null and there is at least one match
3957 that returns that type, then eliminate matches that don't. If
3958 CONTEXT_TYPE is void and there is at least one match that does not
3959 return void, eliminate all matches that do.
14f9c5c9 3960
de93309a
SM
3961 Asks the user if there is more than one match remaining. Returns -1
3962 if there is no such symbol or none is selected. NAME is used
3963 solely for messages. May re-arrange and modify SYMS in
3964 the process; the index returned is for the modified vector. */
14f9c5c9 3965
de93309a
SM
3966static int
3967ada_resolve_function (struct block_symbol syms[],
3968 int nsyms, struct value **args, int nargs,
3969 const char *name, struct type *context_type,
3970 int parse_completion)
3971{
3972 int fallback;
3973 int k;
3974 int m; /* Number of hits */
14f9c5c9 3975
de93309a
SM
3976 m = 0;
3977 /* In the first pass of the loop, we only accept functions matching
3978 context_type. If none are found, we add a second pass of the loop
3979 where every function is accepted. */
3980 for (fallback = 0; m == 0 && fallback < 2; fallback++)
3981 {
3982 for (k = 0; k < nsyms; k += 1)
4c4b4cd2 3983 {
de93309a 3984 struct type *type = ada_check_typedef (SYMBOL_TYPE (syms[k].symbol));
5b4ee69b 3985
de93309a
SM
3986 if (ada_args_match (syms[k].symbol, args, nargs)
3987 && (fallback || return_match (type, context_type)))
3988 {
3989 syms[m] = syms[k];
3990 m += 1;
3991 }
4c4b4cd2 3992 }
14f9c5c9
AS
3993 }
3994
de93309a
SM
3995 /* If we got multiple matches, ask the user which one to use. Don't do this
3996 interactive thing during completion, though, as the purpose of the
3997 completion is providing a list of all possible matches. Prompting the
3998 user to filter it down would be completely unexpected in this case. */
3999 if (m == 0)
4000 return -1;
4001 else if (m > 1 && !parse_completion)
4002 {
4003 printf_filtered (_("Multiple matches for %s\n"), name);
4004 user_select_syms (syms, m, 1);
4005 return 0;
4006 }
4007 return 0;
14f9c5c9
AS
4008}
4009
4c4b4cd2
PH
4010/* Replace the operator of length OPLEN at position PC in *EXPP with a call
4011 on the function identified by SYM and BLOCK, and taking NARGS
4012 arguments. Update *EXPP as needed to hold more space. */
14f9c5c9
AS
4013
4014static void
e9d9f57e 4015replace_operator_with_call (expression_up *expp, int pc, int nargs,
4c4b4cd2 4016 int oplen, struct symbol *sym,
270140bd 4017 const struct block *block)
14f9c5c9
AS
4018{
4019 /* A new expression, with 6 more elements (3 for funcall, 4 for function
4c4b4cd2 4020 symbol, -oplen for operator being replaced). */
d2e4a39e 4021 struct expression *newexp = (struct expression *)
8c1a34e7 4022 xzalloc (sizeof (struct expression)
4c4b4cd2 4023 + EXP_ELEM_TO_BYTES ((*expp)->nelts + 7 - oplen));
e9d9f57e 4024 struct expression *exp = expp->get ();
14f9c5c9
AS
4025
4026 newexp->nelts = exp->nelts + 7 - oplen;
4027 newexp->language_defn = exp->language_defn;
3489610d 4028 newexp->gdbarch = exp->gdbarch;
14f9c5c9 4029 memcpy (newexp->elts, exp->elts, EXP_ELEM_TO_BYTES (pc));
d2e4a39e 4030 memcpy (newexp->elts + pc + 7, exp->elts + pc + oplen,
4c4b4cd2 4031 EXP_ELEM_TO_BYTES (exp->nelts - pc - oplen));
14f9c5c9
AS
4032
4033 newexp->elts[pc].opcode = newexp->elts[pc + 2].opcode = OP_FUNCALL;
4034 newexp->elts[pc + 1].longconst = (LONGEST) nargs;
4035
4036 newexp->elts[pc + 3].opcode = newexp->elts[pc + 6].opcode = OP_VAR_VALUE;
4037 newexp->elts[pc + 4].block = block;
4038 newexp->elts[pc + 5].symbol = sym;
4039
e9d9f57e 4040 expp->reset (newexp);
d2e4a39e 4041}
14f9c5c9
AS
4042
4043/* Type-class predicates */
4044
4c4b4cd2
PH
4045/* True iff TYPE is numeric (i.e., an INT, RANGE (of numeric type),
4046 or FLOAT). */
14f9c5c9
AS
4047
4048static int
d2e4a39e 4049numeric_type_p (struct type *type)
14f9c5c9
AS
4050{
4051 if (type == NULL)
4052 return 0;
d2e4a39e
AS
4053 else
4054 {
78134374 4055 switch (type->code ())
4c4b4cd2
PH
4056 {
4057 case TYPE_CODE_INT:
4058 case TYPE_CODE_FLT:
4059 return 1;
4060 case TYPE_CODE_RANGE:
4061 return (type == TYPE_TARGET_TYPE (type)
4062 || numeric_type_p (TYPE_TARGET_TYPE (type)));
4063 default:
4064 return 0;
4065 }
d2e4a39e 4066 }
14f9c5c9
AS
4067}
4068
4c4b4cd2 4069/* True iff TYPE is integral (an INT or RANGE of INTs). */
14f9c5c9
AS
4070
4071static int
d2e4a39e 4072integer_type_p (struct type *type)
14f9c5c9
AS
4073{
4074 if (type == NULL)
4075 return 0;
d2e4a39e
AS
4076 else
4077 {
78134374 4078 switch (type->code ())
4c4b4cd2
PH
4079 {
4080 case TYPE_CODE_INT:
4081 return 1;
4082 case TYPE_CODE_RANGE:
4083 return (type == TYPE_TARGET_TYPE (type)
4084 || integer_type_p (TYPE_TARGET_TYPE (type)));
4085 default:
4086 return 0;
4087 }
d2e4a39e 4088 }
14f9c5c9
AS
4089}
4090
4c4b4cd2 4091/* True iff TYPE is scalar (INT, RANGE, FLOAT, ENUM). */
14f9c5c9
AS
4092
4093static int
d2e4a39e 4094scalar_type_p (struct type *type)
14f9c5c9
AS
4095{
4096 if (type == NULL)
4097 return 0;
d2e4a39e
AS
4098 else
4099 {
78134374 4100 switch (type->code ())
4c4b4cd2
PH
4101 {
4102 case TYPE_CODE_INT:
4103 case TYPE_CODE_RANGE:
4104 case TYPE_CODE_ENUM:
4105 case TYPE_CODE_FLT:
4106 return 1;
4107 default:
4108 return 0;
4109 }
d2e4a39e 4110 }
14f9c5c9
AS
4111}
4112
4c4b4cd2 4113/* True iff TYPE is discrete (INT, RANGE, ENUM). */
14f9c5c9
AS
4114
4115static int
d2e4a39e 4116discrete_type_p (struct type *type)
14f9c5c9
AS
4117{
4118 if (type == NULL)
4119 return 0;
d2e4a39e
AS
4120 else
4121 {
78134374 4122 switch (type->code ())
4c4b4cd2
PH
4123 {
4124 case TYPE_CODE_INT:
4125 case TYPE_CODE_RANGE:
4126 case TYPE_CODE_ENUM:
872f0337 4127 case TYPE_CODE_BOOL:
4c4b4cd2
PH
4128 return 1;
4129 default:
4130 return 0;
4131 }
d2e4a39e 4132 }
14f9c5c9
AS
4133}
4134
4c4b4cd2
PH
4135/* Returns non-zero if OP with operands in the vector ARGS could be
4136 a user-defined function. Errs on the side of pre-defined operators
4137 (i.e., result 0). */
14f9c5c9
AS
4138
4139static int
d2e4a39e 4140possible_user_operator_p (enum exp_opcode op, struct value *args[])
14f9c5c9 4141{
76a01679 4142 struct type *type0 =
df407dfe 4143 (args[0] == NULL) ? NULL : ada_check_typedef (value_type (args[0]));
d2e4a39e 4144 struct type *type1 =
df407dfe 4145 (args[1] == NULL) ? NULL : ada_check_typedef (value_type (args[1]));
d2e4a39e 4146
4c4b4cd2
PH
4147 if (type0 == NULL)
4148 return 0;
4149
14f9c5c9
AS
4150 switch (op)
4151 {
4152 default:
4153 return 0;
4154
4155 case BINOP_ADD:
4156 case BINOP_SUB:
4157 case BINOP_MUL:
4158 case BINOP_DIV:
d2e4a39e 4159 return (!(numeric_type_p (type0) && numeric_type_p (type1)));
14f9c5c9
AS
4160
4161 case BINOP_REM:
4162 case BINOP_MOD:
4163 case BINOP_BITWISE_AND:
4164 case BINOP_BITWISE_IOR:
4165 case BINOP_BITWISE_XOR:
d2e4a39e 4166 return (!(integer_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4167
4168 case BINOP_EQUAL:
4169 case BINOP_NOTEQUAL:
4170 case BINOP_LESS:
4171 case BINOP_GTR:
4172 case BINOP_LEQ:
4173 case BINOP_GEQ:
d2e4a39e 4174 return (!(scalar_type_p (type0) && scalar_type_p (type1)));
14f9c5c9
AS
4175
4176 case BINOP_CONCAT:
ee90b9ab 4177 return !ada_is_array_type (type0) || !ada_is_array_type (type1);
14f9c5c9
AS
4178
4179 case BINOP_EXP:
d2e4a39e 4180 return (!(numeric_type_p (type0) && integer_type_p (type1)));
14f9c5c9
AS
4181
4182 case UNOP_NEG:
4183 case UNOP_PLUS:
4184 case UNOP_LOGICAL_NOT:
d2e4a39e
AS
4185 case UNOP_ABS:
4186 return (!numeric_type_p (type0));
14f9c5c9
AS
4187
4188 }
4189}
4190\f
4c4b4cd2 4191 /* Renaming */
14f9c5c9 4192
aeb5907d
JB
4193/* NOTES:
4194
4195 1. In the following, we assume that a renaming type's name may
4196 have an ___XD suffix. It would be nice if this went away at some
4197 point.
4198 2. We handle both the (old) purely type-based representation of
4199 renamings and the (new) variable-based encoding. At some point,
4200 it is devoutly to be hoped that the former goes away
4201 (FIXME: hilfinger-2007-07-09).
4202 3. Subprogram renamings are not implemented, although the XRS
4203 suffix is recognized (FIXME: hilfinger-2007-07-09). */
4204
4205/* If SYM encodes a renaming,
4206
4207 <renaming> renames <renamed entity>,
4208
4209 sets *LEN to the length of the renamed entity's name,
4210 *RENAMED_ENTITY to that name (not null-terminated), and *RENAMING_EXPR to
4211 the string describing the subcomponent selected from the renamed
0963b4bd 4212 entity. Returns ADA_NOT_RENAMING if SYM does not encode a renaming
aeb5907d
JB
4213 (in which case, the values of *RENAMED_ENTITY, *LEN, and *RENAMING_EXPR
4214 are undefined). Otherwise, returns a value indicating the category
4215 of entity renamed: an object (ADA_OBJECT_RENAMING), exception
4216 (ADA_EXCEPTION_RENAMING), package (ADA_PACKAGE_RENAMING), or
4217 subprogram (ADA_SUBPROGRAM_RENAMING). Does no allocation; the
4218 strings returned in *RENAMED_ENTITY and *RENAMING_EXPR should not be
4219 deallocated. The values of RENAMED_ENTITY, LEN, or RENAMING_EXPR
4220 may be NULL, in which case they are not assigned.
4221
4222 [Currently, however, GCC does not generate subprogram renamings.] */
4223
4224enum ada_renaming_category
4225ada_parse_renaming (struct symbol *sym,
4226 const char **renamed_entity, int *len,
4227 const char **renaming_expr)
4228{
4229 enum ada_renaming_category kind;
4230 const char *info;
4231 const char *suffix;
4232
4233 if (sym == NULL)
4234 return ADA_NOT_RENAMING;
4235 switch (SYMBOL_CLASS (sym))
14f9c5c9 4236 {
aeb5907d
JB
4237 default:
4238 return ADA_NOT_RENAMING;
aeb5907d
JB
4239 case LOC_LOCAL:
4240 case LOC_STATIC:
4241 case LOC_COMPUTED:
4242 case LOC_OPTIMIZED_OUT:
987012b8 4243 info = strstr (sym->linkage_name (), "___XR");
aeb5907d
JB
4244 if (info == NULL)
4245 return ADA_NOT_RENAMING;
4246 switch (info[5])
4247 {
4248 case '_':
4249 kind = ADA_OBJECT_RENAMING;
4250 info += 6;
4251 break;
4252 case 'E':
4253 kind = ADA_EXCEPTION_RENAMING;
4254 info += 7;
4255 break;
4256 case 'P':
4257 kind = ADA_PACKAGE_RENAMING;
4258 info += 7;
4259 break;
4260 case 'S':
4261 kind = ADA_SUBPROGRAM_RENAMING;
4262 info += 7;
4263 break;
4264 default:
4265 return ADA_NOT_RENAMING;
4266 }
14f9c5c9 4267 }
4c4b4cd2 4268
de93309a
SM
4269 if (renamed_entity != NULL)
4270 *renamed_entity = info;
4271 suffix = strstr (info, "___XE");
4272 if (suffix == NULL || suffix == info)
4273 return ADA_NOT_RENAMING;
4274 if (len != NULL)
4275 *len = strlen (info) - strlen (suffix);
4276 suffix += 5;
4277 if (renaming_expr != NULL)
4278 *renaming_expr = suffix;
4279 return kind;
4280}
4281
4282/* Compute the value of the given RENAMING_SYM, which is expected to
4283 be a symbol encoding a renaming expression. BLOCK is the block
4284 used to evaluate the renaming. */
4285
4286static struct value *
4287ada_read_renaming_var_value (struct symbol *renaming_sym,
4288 const struct block *block)
4289{
4290 const char *sym_name;
4291
987012b8 4292 sym_name = renaming_sym->linkage_name ();
de93309a
SM
4293 expression_up expr = parse_exp_1 (&sym_name, 0, block, 0);
4294 return evaluate_expression (expr.get ());
4295}
4296\f
4297
4298 /* Evaluation: Function Calls */
4299
4300/* Return an lvalue containing the value VAL. This is the identity on
4301 lvalues, and otherwise has the side-effect of allocating memory
4302 in the inferior where a copy of the value contents is copied. */
4303
4304static struct value *
4305ensure_lval (struct value *val)
4306{
4307 if (VALUE_LVAL (val) == not_lval
4308 || VALUE_LVAL (val) == lval_internalvar)
4309 {
4310 int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
4311 const CORE_ADDR addr =
4312 value_as_long (value_allocate_space_in_inferior (len));
4313
4314 VALUE_LVAL (val) = lval_memory;
4315 set_value_address (val, addr);
4316 write_memory (addr, value_contents (val), len);
4317 }
4318
4319 return val;
4320}
4321
4322/* Given ARG, a value of type (pointer or reference to a)*
4323 structure/union, extract the component named NAME from the ultimate
4324 target structure/union and return it as a value with its
4325 appropriate type.
4326
4327 The routine searches for NAME among all members of the structure itself
4328 and (recursively) among all members of any wrapper members
4329 (e.g., '_parent').
4330
4331 If NO_ERR, then simply return NULL in case of error, rather than
4332 calling error. */
4333
4334static struct value *
4335ada_value_struct_elt (struct value *arg, const char *name, int no_err)
4336{
4337 struct type *t, *t1;
4338 struct value *v;
4339 int check_tag;
4340
4341 v = NULL;
4342 t1 = t = ada_check_typedef (value_type (arg));
78134374 4343 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4344 {
4345 t1 = TYPE_TARGET_TYPE (t);
4346 if (t1 == NULL)
4347 goto BadValue;
4348 t1 = ada_check_typedef (t1);
78134374 4349 if (t1->code () == TYPE_CODE_PTR)
de93309a
SM
4350 {
4351 arg = coerce_ref (arg);
4352 t = t1;
4353 }
4354 }
4355
78134374 4356 while (t->code () == TYPE_CODE_PTR)
de93309a
SM
4357 {
4358 t1 = TYPE_TARGET_TYPE (t);
4359 if (t1 == NULL)
4360 goto BadValue;
4361 t1 = ada_check_typedef (t1);
78134374 4362 if (t1->code () == TYPE_CODE_PTR)
de93309a
SM
4363 {
4364 arg = value_ind (arg);
4365 t = t1;
4366 }
4367 else
4368 break;
4369 }
aeb5907d 4370
78134374 4371 if (t1->code () != TYPE_CODE_STRUCT && t1->code () != TYPE_CODE_UNION)
de93309a 4372 goto BadValue;
52ce6436 4373
de93309a
SM
4374 if (t1 == t)
4375 v = ada_search_struct_field (name, arg, 0, t);
4376 else
4377 {
4378 int bit_offset, bit_size, byte_offset;
4379 struct type *field_type;
4380 CORE_ADDR address;
a5ee536b 4381
78134374 4382 if (t->code () == TYPE_CODE_PTR)
de93309a
SM
4383 address = value_address (ada_value_ind (arg));
4384 else
4385 address = value_address (ada_coerce_ref (arg));
d2e4a39e 4386
de93309a
SM
4387 /* Check to see if this is a tagged type. We also need to handle
4388 the case where the type is a reference to a tagged type, but
4389 we have to be careful to exclude pointers to tagged types.
4390 The latter should be shown as usual (as a pointer), whereas
4391 a reference should mostly be transparent to the user. */
14f9c5c9 4392
de93309a 4393 if (ada_is_tagged_type (t1, 0)
78134374 4394 || (t1->code () == TYPE_CODE_REF
de93309a
SM
4395 && ada_is_tagged_type (TYPE_TARGET_TYPE (t1), 0)))
4396 {
4397 /* We first try to find the searched field in the current type.
4398 If not found then let's look in the fixed type. */
14f9c5c9 4399
de93309a
SM
4400 if (!find_struct_field (name, t1, 0,
4401 &field_type, &byte_offset, &bit_offset,
4402 &bit_size, NULL))
4403 check_tag = 1;
4404 else
4405 check_tag = 0;
4406 }
4407 else
4408 check_tag = 0;
c3e5cd34 4409
de93309a
SM
4410 /* Convert to fixed type in all cases, so that we have proper
4411 offsets to each field in unconstrained record types. */
4412 t1 = ada_to_fixed_type (ada_get_base_type (t1), NULL,
4413 address, NULL, check_tag);
4414
4415 if (find_struct_field (name, t1, 0,
4416 &field_type, &byte_offset, &bit_offset,
4417 &bit_size, NULL))
4418 {
4419 if (bit_size != 0)
4420 {
78134374 4421 if (t->code () == TYPE_CODE_REF)
de93309a
SM
4422 arg = ada_coerce_ref (arg);
4423 else
4424 arg = ada_value_ind (arg);
4425 v = ada_value_primitive_packed_val (arg, NULL, byte_offset,
4426 bit_offset, bit_size,
4427 field_type);
4428 }
4429 else
4430 v = value_at_lazy (field_type, address + byte_offset);
4431 }
c3e5cd34 4432 }
14f9c5c9 4433
de93309a
SM
4434 if (v != NULL || no_err)
4435 return v;
4436 else
4437 error (_("There is no member named %s."), name);
4438
4439 BadValue:
4440 if (no_err)
4441 return NULL;
4442 else
4443 error (_("Attempt to extract a component of "
4444 "a value that is not a record."));
14f9c5c9
AS
4445}
4446
4447/* Return the value ACTUAL, converted to be an appropriate value for a
4448 formal of type FORMAL_TYPE. Use *SP as a stack pointer for
4449 allocating any necessary descriptors (fat pointers), or copies of
4c4b4cd2 4450 values not residing in memory, updating it as needed. */
14f9c5c9 4451
a93c0eb6 4452struct value *
40bc484c 4453ada_convert_actual (struct value *actual, struct type *formal_type0)
14f9c5c9 4454{
df407dfe 4455 struct type *actual_type = ada_check_typedef (value_type (actual));
61ee279c 4456 struct type *formal_type = ada_check_typedef (formal_type0);
d2e4a39e 4457 struct type *formal_target =
78134374 4458 formal_type->code () == TYPE_CODE_PTR
61ee279c 4459 ? ada_check_typedef (TYPE_TARGET_TYPE (formal_type)) : formal_type;
d2e4a39e 4460 struct type *actual_target =
78134374 4461 actual_type->code () == TYPE_CODE_PTR
61ee279c 4462 ? ada_check_typedef (TYPE_TARGET_TYPE (actual_type)) : actual_type;
14f9c5c9 4463
4c4b4cd2 4464 if (ada_is_array_descriptor_type (formal_target)
78134374 4465 && actual_target->code () == TYPE_CODE_ARRAY)
40bc484c 4466 return make_array_descriptor (formal_type, actual);
78134374
SM
4467 else if (formal_type->code () == TYPE_CODE_PTR
4468 || formal_type->code () == TYPE_CODE_REF)
14f9c5c9 4469 {
a84a8a0d 4470 struct value *result;
5b4ee69b 4471
78134374 4472 if (formal_target->code () == TYPE_CODE_ARRAY
4c4b4cd2 4473 && ada_is_array_descriptor_type (actual_target))
a84a8a0d 4474 result = desc_data (actual);
78134374 4475 else if (formal_type->code () != TYPE_CODE_PTR)
4c4b4cd2
PH
4476 {
4477 if (VALUE_LVAL (actual) != lval_memory)
4478 {
4479 struct value *val;
5b4ee69b 4480
df407dfe 4481 actual_type = ada_check_typedef (value_type (actual));
4c4b4cd2 4482 val = allocate_value (actual_type);
990a07ab 4483 memcpy ((char *) value_contents_raw (val),
0fd88904 4484 (char *) value_contents (actual),
4c4b4cd2 4485 TYPE_LENGTH (actual_type));
40bc484c 4486 actual = ensure_lval (val);
4c4b4cd2 4487 }
a84a8a0d 4488 result = value_addr (actual);
4c4b4cd2 4489 }
a84a8a0d
JB
4490 else
4491 return actual;
b1af9e97 4492 return value_cast_pointers (formal_type, result, 0);
14f9c5c9 4493 }
78134374 4494 else if (actual_type->code () == TYPE_CODE_PTR)
14f9c5c9 4495 return ada_value_ind (actual);
8344af1e
JB
4496 else if (ada_is_aligner_type (formal_type))
4497 {
4498 /* We need to turn this parameter into an aligner type
4499 as well. */
4500 struct value *aligner = allocate_value (formal_type);
4501 struct value *component = ada_value_struct_elt (aligner, "F", 0);
4502
4503 value_assign_to_component (aligner, component, actual);
4504 return aligner;
4505 }
14f9c5c9
AS
4506
4507 return actual;
4508}
4509
438c98a1
JB
4510/* Convert VALUE (which must be an address) to a CORE_ADDR that is a pointer of
4511 type TYPE. This is usually an inefficient no-op except on some targets
4512 (such as AVR) where the representation of a pointer and an address
4513 differs. */
4514
4515static CORE_ADDR
4516value_pointer (struct value *value, struct type *type)
4517{
4518 struct gdbarch *gdbarch = get_type_arch (type);
4519 unsigned len = TYPE_LENGTH (type);
224c3ddb 4520 gdb_byte *buf = (gdb_byte *) alloca (len);
438c98a1
JB
4521 CORE_ADDR addr;
4522
4523 addr = value_address (value);
4524 gdbarch_address_to_pointer (gdbarch, type, buf, addr);
34877895 4525 addr = extract_unsigned_integer (buf, len, type_byte_order (type));
438c98a1
JB
4526 return addr;
4527}
4528
14f9c5c9 4529
4c4b4cd2
PH
4530/* Push a descriptor of type TYPE for array value ARR on the stack at
4531 *SP, updating *SP to reflect the new descriptor. Return either
14f9c5c9 4532 an lvalue representing the new descriptor, or (if TYPE is a pointer-
4c4b4cd2
PH
4533 to-descriptor type rather than a descriptor type), a struct value *
4534 representing a pointer to this descriptor. */
14f9c5c9 4535
d2e4a39e 4536static struct value *
40bc484c 4537make_array_descriptor (struct type *type, struct value *arr)
14f9c5c9 4538{
d2e4a39e
AS
4539 struct type *bounds_type = desc_bounds_type (type);
4540 struct type *desc_type = desc_base_type (type);
4541 struct value *descriptor = allocate_value (desc_type);
4542 struct value *bounds = allocate_value (bounds_type);
14f9c5c9 4543 int i;
d2e4a39e 4544
0963b4bd
MS
4545 for (i = ada_array_arity (ada_check_typedef (value_type (arr)));
4546 i > 0; i -= 1)
14f9c5c9 4547 {
19f220c3
JK
4548 modify_field (value_type (bounds), value_contents_writeable (bounds),
4549 ada_array_bound (arr, i, 0),
4550 desc_bound_bitpos (bounds_type, i, 0),
4551 desc_bound_bitsize (bounds_type, i, 0));
4552 modify_field (value_type (bounds), value_contents_writeable (bounds),
4553 ada_array_bound (arr, i, 1),
4554 desc_bound_bitpos (bounds_type, i, 1),
4555 desc_bound_bitsize (bounds_type, i, 1));
14f9c5c9 4556 }
d2e4a39e 4557
40bc484c 4558 bounds = ensure_lval (bounds);
d2e4a39e 4559
19f220c3
JK
4560 modify_field (value_type (descriptor),
4561 value_contents_writeable (descriptor),
4562 value_pointer (ensure_lval (arr),
4563 TYPE_FIELD_TYPE (desc_type, 0)),
4564 fat_pntr_data_bitpos (desc_type),
4565 fat_pntr_data_bitsize (desc_type));
4566
4567 modify_field (value_type (descriptor),
4568 value_contents_writeable (descriptor),
4569 value_pointer (bounds,
4570 TYPE_FIELD_TYPE (desc_type, 1)),
4571 fat_pntr_bounds_bitpos (desc_type),
4572 fat_pntr_bounds_bitsize (desc_type));
14f9c5c9 4573
40bc484c 4574 descriptor = ensure_lval (descriptor);
14f9c5c9 4575
78134374 4576 if (type->code () == TYPE_CODE_PTR)
14f9c5c9
AS
4577 return value_addr (descriptor);
4578 else
4579 return descriptor;
4580}
14f9c5c9 4581\f
3d9434b5
JB
4582 /* Symbol Cache Module */
4583
3d9434b5 4584/* Performance measurements made as of 2010-01-15 indicate that
ee01b665 4585 this cache does bring some noticeable improvements. Depending
3d9434b5
JB
4586 on the type of entity being printed, the cache can make it as much
4587 as an order of magnitude faster than without it.
4588
4589 The descriptive type DWARF extension has significantly reduced
4590 the need for this cache, at least when DWARF is being used. However,
4591 even in this case, some expensive name-based symbol searches are still
4592 sometimes necessary - to find an XVZ variable, mostly. */
4593
ee01b665 4594/* Initialize the contents of SYM_CACHE. */
3d9434b5 4595
ee01b665
JB
4596static void
4597ada_init_symbol_cache (struct ada_symbol_cache *sym_cache)
4598{
4599 obstack_init (&sym_cache->cache_space);
4600 memset (sym_cache->root, '\000', sizeof (sym_cache->root));
4601}
3d9434b5 4602
ee01b665
JB
4603/* Free the memory used by SYM_CACHE. */
4604
4605static void
4606ada_free_symbol_cache (struct ada_symbol_cache *sym_cache)
3d9434b5 4607{
ee01b665
JB
4608 obstack_free (&sym_cache->cache_space, NULL);
4609 xfree (sym_cache);
4610}
3d9434b5 4611
ee01b665
JB
4612/* Return the symbol cache associated to the given program space PSPACE.
4613 If not allocated for this PSPACE yet, allocate and initialize one. */
3d9434b5 4614
ee01b665
JB
4615static struct ada_symbol_cache *
4616ada_get_symbol_cache (struct program_space *pspace)
4617{
4618 struct ada_pspace_data *pspace_data = get_ada_pspace_data (pspace);
ee01b665 4619
66c168ae 4620 if (pspace_data->sym_cache == NULL)
ee01b665 4621 {
66c168ae
JB
4622 pspace_data->sym_cache = XCNEW (struct ada_symbol_cache);
4623 ada_init_symbol_cache (pspace_data->sym_cache);
ee01b665
JB
4624 }
4625
66c168ae 4626 return pspace_data->sym_cache;
ee01b665 4627}
3d9434b5
JB
4628
4629/* Clear all entries from the symbol cache. */
4630
4631static void
4632ada_clear_symbol_cache (void)
4633{
ee01b665
JB
4634 struct ada_symbol_cache *sym_cache
4635 = ada_get_symbol_cache (current_program_space);
4636
4637 obstack_free (&sym_cache->cache_space, NULL);
4638 ada_init_symbol_cache (sym_cache);
3d9434b5
JB
4639}
4640
fe978cb0 4641/* Search our cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4642 Return it if found, or NULL otherwise. */
4643
4644static struct cache_entry **
fe978cb0 4645find_entry (const char *name, domain_enum domain)
3d9434b5 4646{
ee01b665
JB
4647 struct ada_symbol_cache *sym_cache
4648 = ada_get_symbol_cache (current_program_space);
3d9434b5
JB
4649 int h = msymbol_hash (name) % HASH_SIZE;
4650 struct cache_entry **e;
4651
ee01b665 4652 for (e = &sym_cache->root[h]; *e != NULL; e = &(*e)->next)
3d9434b5 4653 {
fe978cb0 4654 if (domain == (*e)->domain && strcmp (name, (*e)->name) == 0)
3d9434b5
JB
4655 return e;
4656 }
4657 return NULL;
4658}
4659
fe978cb0 4660/* Search the symbol cache for an entry matching NAME and DOMAIN.
3d9434b5
JB
4661 Return 1 if found, 0 otherwise.
4662
4663 If an entry was found and SYM is not NULL, set *SYM to the entry's
4664 SYM. Same principle for BLOCK if not NULL. */
96d887e8 4665
96d887e8 4666static int
fe978cb0 4667lookup_cached_symbol (const char *name, domain_enum domain,
f0c5f9b2 4668 struct symbol **sym, const struct block **block)
96d887e8 4669{
fe978cb0 4670 struct cache_entry **e = find_entry (name, domain);
3d9434b5
JB
4671
4672 if (e == NULL)
4673 return 0;
4674 if (sym != NULL)
4675 *sym = (*e)->sym;
4676 if (block != NULL)
4677 *block = (*e)->block;
4678 return 1;
96d887e8
PH
4679}
4680
3d9434b5 4681/* Assuming that (SYM, BLOCK) is the result of the lookup of NAME
fe978cb0 4682 in domain DOMAIN, save this result in our symbol cache. */
3d9434b5 4683
96d887e8 4684static void
fe978cb0 4685cache_symbol (const char *name, domain_enum domain, struct symbol *sym,
270140bd 4686 const struct block *block)
96d887e8 4687{
ee01b665
JB
4688 struct ada_symbol_cache *sym_cache
4689 = ada_get_symbol_cache (current_program_space);
3d9434b5 4690 int h;
3d9434b5
JB
4691 struct cache_entry *e;
4692
1994afbf
DE
4693 /* Symbols for builtin types don't have a block.
4694 For now don't cache such symbols. */
4695 if (sym != NULL && !SYMBOL_OBJFILE_OWNED (sym))
4696 return;
4697
3d9434b5
JB
4698 /* If the symbol is a local symbol, then do not cache it, as a search
4699 for that symbol depends on the context. To determine whether
4700 the symbol is local or not, we check the block where we found it
4701 against the global and static blocks of its associated symtab. */
4702 if (sym
08be3fe3 4703 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4704 GLOBAL_BLOCK) != block
08be3fe3 4705 && BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symbol_symtab (sym)),
439247b6 4706 STATIC_BLOCK) != block)
3d9434b5
JB
4707 return;
4708
4709 h = msymbol_hash (name) % HASH_SIZE;
e39db4db 4710 e = XOBNEW (&sym_cache->cache_space, cache_entry);
ee01b665
JB
4711 e->next = sym_cache->root[h];
4712 sym_cache->root[h] = e;
2ef5453b 4713 e->name = obstack_strdup (&sym_cache->cache_space, name);
3d9434b5 4714 e->sym = sym;
fe978cb0 4715 e->domain = domain;
3d9434b5 4716 e->block = block;
96d887e8 4717}
4c4b4cd2
PH
4718\f
4719 /* Symbol Lookup */
4720
b5ec771e
PA
4721/* Return the symbol name match type that should be used used when
4722 searching for all symbols matching LOOKUP_NAME.
c0431670
JB
4723
4724 LOOKUP_NAME is expected to be a symbol name after transformation
f98b2e33 4725 for Ada lookups. */
c0431670 4726
b5ec771e
PA
4727static symbol_name_match_type
4728name_match_type_from_name (const char *lookup_name)
c0431670 4729{
b5ec771e
PA
4730 return (strstr (lookup_name, "__") == NULL
4731 ? symbol_name_match_type::WILD
4732 : symbol_name_match_type::FULL);
c0431670
JB
4733}
4734
4c4b4cd2
PH
4735/* Return the result of a standard (literal, C-like) lookup of NAME in
4736 given DOMAIN, visible from lexical block BLOCK. */
4737
4738static struct symbol *
4739standard_lookup (const char *name, const struct block *block,
4740 domain_enum domain)
4741{
acbd605d 4742 /* Initialize it just to avoid a GCC false warning. */
6640a367 4743 struct block_symbol sym = {};
4c4b4cd2 4744
d12307c1
PMR
4745 if (lookup_cached_symbol (name, domain, &sym.symbol, NULL))
4746 return sym.symbol;
a2cd4f14 4747 ada_lookup_encoded_symbol (name, block, domain, &sym);
d12307c1
PMR
4748 cache_symbol (name, domain, sym.symbol, sym.block);
4749 return sym.symbol;
4c4b4cd2
PH
4750}
4751
4752
4753/* Non-zero iff there is at least one non-function/non-enumeral symbol
4754 in the symbol fields of SYMS[0..N-1]. We treat enumerals as functions,
4755 since they contend in overloading in the same way. */
4756static int
d12307c1 4757is_nonfunction (struct block_symbol syms[], int n)
4c4b4cd2
PH
4758{
4759 int i;
4760
4761 for (i = 0; i < n; i += 1)
78134374
SM
4762 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_FUNC
4763 && (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM
d12307c1 4764 || SYMBOL_CLASS (syms[i].symbol) != LOC_CONST))
14f9c5c9
AS
4765 return 1;
4766
4767 return 0;
4768}
4769
4770/* If true (non-zero), then TYPE0 and TYPE1 represent equivalent
4c4b4cd2 4771 struct types. Otherwise, they may not. */
14f9c5c9
AS
4772
4773static int
d2e4a39e 4774equiv_types (struct type *type0, struct type *type1)
14f9c5c9 4775{
d2e4a39e 4776 if (type0 == type1)
14f9c5c9 4777 return 1;
d2e4a39e 4778 if (type0 == NULL || type1 == NULL
78134374 4779 || type0->code () != type1->code ())
14f9c5c9 4780 return 0;
78134374
SM
4781 if ((type0->code () == TYPE_CODE_STRUCT
4782 || type0->code () == TYPE_CODE_ENUM)
14f9c5c9 4783 && ada_type_name (type0) != NULL && ada_type_name (type1) != NULL
4c4b4cd2 4784 && strcmp (ada_type_name (type0), ada_type_name (type1)) == 0)
14f9c5c9 4785 return 1;
d2e4a39e 4786
14f9c5c9
AS
4787 return 0;
4788}
4789
4790/* True iff SYM0 represents the same entity as SYM1, or one that is
4c4b4cd2 4791 no more defined than that of SYM1. */
14f9c5c9
AS
4792
4793static int
d2e4a39e 4794lesseq_defined_than (struct symbol *sym0, struct symbol *sym1)
14f9c5c9
AS
4795{
4796 if (sym0 == sym1)
4797 return 1;
176620f1 4798 if (SYMBOL_DOMAIN (sym0) != SYMBOL_DOMAIN (sym1)
14f9c5c9
AS
4799 || SYMBOL_CLASS (sym0) != SYMBOL_CLASS (sym1))
4800 return 0;
4801
d2e4a39e 4802 switch (SYMBOL_CLASS (sym0))
14f9c5c9
AS
4803 {
4804 case LOC_UNDEF:
4805 return 1;
4806 case LOC_TYPEDEF:
4807 {
4c4b4cd2
PH
4808 struct type *type0 = SYMBOL_TYPE (sym0);
4809 struct type *type1 = SYMBOL_TYPE (sym1);
987012b8
CB
4810 const char *name0 = sym0->linkage_name ();
4811 const char *name1 = sym1->linkage_name ();
4c4b4cd2 4812 int len0 = strlen (name0);
5b4ee69b 4813
4c4b4cd2 4814 return
78134374 4815 type0->code () == type1->code ()
4c4b4cd2
PH
4816 && (equiv_types (type0, type1)
4817 || (len0 < strlen (name1) && strncmp (name0, name1, len0) == 0
61012eef 4818 && startswith (name1 + len0, "___XV")));
14f9c5c9
AS
4819 }
4820 case LOC_CONST:
4821 return SYMBOL_VALUE (sym0) == SYMBOL_VALUE (sym1)
4c4b4cd2 4822 && equiv_types (SYMBOL_TYPE (sym0), SYMBOL_TYPE (sym1));
4b610737
TT
4823
4824 case LOC_STATIC:
4825 {
987012b8
CB
4826 const char *name0 = sym0->linkage_name ();
4827 const char *name1 = sym1->linkage_name ();
4b610737
TT
4828 return (strcmp (name0, name1) == 0
4829 && SYMBOL_VALUE_ADDRESS (sym0) == SYMBOL_VALUE_ADDRESS (sym1));
4830 }
4831
d2e4a39e
AS
4832 default:
4833 return 0;
14f9c5c9
AS
4834 }
4835}
4836
d12307c1 4837/* Append (SYM,BLOCK,SYMTAB) to the end of the array of struct block_symbol
4c4b4cd2 4838 records in OBSTACKP. Do nothing if SYM is a duplicate. */
14f9c5c9
AS
4839
4840static void
76a01679
JB
4841add_defn_to_vec (struct obstack *obstackp,
4842 struct symbol *sym,
f0c5f9b2 4843 const struct block *block)
14f9c5c9
AS
4844{
4845 int i;
d12307c1 4846 struct block_symbol *prevDefns = defns_collected (obstackp, 0);
14f9c5c9 4847
529cad9c
PH
4848 /* Do not try to complete stub types, as the debugger is probably
4849 already scanning all symbols matching a certain name at the
4850 time when this function is called. Trying to replace the stub
4851 type by its associated full type will cause us to restart a scan
4852 which may lead to an infinite recursion. Instead, the client
4853 collecting the matching symbols will end up collecting several
4854 matches, with at least one of them complete. It can then filter
4855 out the stub ones if needed. */
4856
4c4b4cd2
PH
4857 for (i = num_defns_collected (obstackp) - 1; i >= 0; i -= 1)
4858 {
d12307c1 4859 if (lesseq_defined_than (sym, prevDefns[i].symbol))
4c4b4cd2 4860 return;
d12307c1 4861 else if (lesseq_defined_than (prevDefns[i].symbol, sym))
4c4b4cd2 4862 {
d12307c1 4863 prevDefns[i].symbol = sym;
4c4b4cd2 4864 prevDefns[i].block = block;
4c4b4cd2 4865 return;
76a01679 4866 }
4c4b4cd2
PH
4867 }
4868
4869 {
d12307c1 4870 struct block_symbol info;
4c4b4cd2 4871
d12307c1 4872 info.symbol = sym;
4c4b4cd2 4873 info.block = block;
d12307c1 4874 obstack_grow (obstackp, &info, sizeof (struct block_symbol));
4c4b4cd2
PH
4875 }
4876}
4877
d12307c1
PMR
4878/* Number of block_symbol structures currently collected in current vector in
4879 OBSTACKP. */
4c4b4cd2 4880
76a01679
JB
4881static int
4882num_defns_collected (struct obstack *obstackp)
4c4b4cd2 4883{
d12307c1 4884 return obstack_object_size (obstackp) / sizeof (struct block_symbol);
4c4b4cd2
PH
4885}
4886
d12307c1
PMR
4887/* Vector of block_symbol structures currently collected in current vector in
4888 OBSTACKP. If FINISH, close off the vector and return its final address. */
4c4b4cd2 4889
d12307c1 4890static struct block_symbol *
4c4b4cd2
PH
4891defns_collected (struct obstack *obstackp, int finish)
4892{
4893 if (finish)
224c3ddb 4894 return (struct block_symbol *) obstack_finish (obstackp);
4c4b4cd2 4895 else
d12307c1 4896 return (struct block_symbol *) obstack_base (obstackp);
4c4b4cd2
PH
4897}
4898
7c7b6655
TT
4899/* Return a bound minimal symbol matching NAME according to Ada
4900 decoding rules. Returns an invalid symbol if there is no such
4901 minimal symbol. Names prefixed with "standard__" are handled
4902 specially: "standard__" is first stripped off, and only static and
4903 global symbols are searched. */
4c4b4cd2 4904
7c7b6655 4905struct bound_minimal_symbol
96d887e8 4906ada_lookup_simple_minsym (const char *name)
4c4b4cd2 4907{
7c7b6655 4908 struct bound_minimal_symbol result;
4c4b4cd2 4909
7c7b6655
TT
4910 memset (&result, 0, sizeof (result));
4911
b5ec771e
PA
4912 symbol_name_match_type match_type = name_match_type_from_name (name);
4913 lookup_name_info lookup_name (name, match_type);
4914
4915 symbol_name_matcher_ftype *match_name
4916 = ada_get_symbol_name_matcher (lookup_name);
4c4b4cd2 4917
2030c079 4918 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 4919 {
7932255d 4920 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf 4921 {
c9d95fa3 4922 if (match_name (msymbol->linkage_name (), lookup_name, NULL)
5325b9bf
TT
4923 && MSYMBOL_TYPE (msymbol) != mst_solib_trampoline)
4924 {
4925 result.minsym = msymbol;
4926 result.objfile = objfile;
4927 break;
4928 }
4929 }
4930 }
4c4b4cd2 4931
7c7b6655 4932 return result;
96d887e8 4933}
4c4b4cd2 4934
96d887e8
PH
4935/* For all subprograms that statically enclose the subprogram of the
4936 selected frame, add symbols matching identifier NAME in DOMAIN
4937 and their blocks to the list of data in OBSTACKP, as for
48b78332
JB
4938 ada_add_block_symbols (q.v.). If WILD_MATCH_P, treat as NAME
4939 with a wildcard prefix. */
4c4b4cd2 4940
96d887e8
PH
4941static void
4942add_symbols_from_enclosing_procs (struct obstack *obstackp,
b5ec771e
PA
4943 const lookup_name_info &lookup_name,
4944 domain_enum domain)
96d887e8 4945{
96d887e8 4946}
14f9c5c9 4947
96d887e8
PH
4948/* True if TYPE is definitely an artificial type supplied to a symbol
4949 for which no debugging information was given in the symbol file. */
14f9c5c9 4950
96d887e8
PH
4951static int
4952is_nondebugging_type (struct type *type)
4953{
0d5cff50 4954 const char *name = ada_type_name (type);
5b4ee69b 4955
96d887e8
PH
4956 return (name != NULL && strcmp (name, "<variable, no debug info>") == 0);
4957}
4c4b4cd2 4958
8f17729f
JB
4959/* Return nonzero if TYPE1 and TYPE2 are two enumeration types
4960 that are deemed "identical" for practical purposes.
4961
4962 This function assumes that TYPE1 and TYPE2 are both TYPE_CODE_ENUM
4963 types and that their number of enumerals is identical (in other
1f704f76 4964 words, type1->num_fields () == type2->num_fields ()). */
8f17729f
JB
4965
4966static int
4967ada_identical_enum_types_p (struct type *type1, struct type *type2)
4968{
4969 int i;
4970
4971 /* The heuristic we use here is fairly conservative. We consider
4972 that 2 enumerate types are identical if they have the same
4973 number of enumerals and that all enumerals have the same
4974 underlying value and name. */
4975
4976 /* All enums in the type should have an identical underlying value. */
1f704f76 4977 for (i = 0; i < type1->num_fields (); i++)
14e75d8e 4978 if (TYPE_FIELD_ENUMVAL (type1, i) != TYPE_FIELD_ENUMVAL (type2, i))
8f17729f
JB
4979 return 0;
4980
4981 /* All enumerals should also have the same name (modulo any numerical
4982 suffix). */
1f704f76 4983 for (i = 0; i < type1->num_fields (); i++)
8f17729f 4984 {
0d5cff50
DE
4985 const char *name_1 = TYPE_FIELD_NAME (type1, i);
4986 const char *name_2 = TYPE_FIELD_NAME (type2, i);
8f17729f
JB
4987 int len_1 = strlen (name_1);
4988 int len_2 = strlen (name_2);
4989
4990 ada_remove_trailing_digits (TYPE_FIELD_NAME (type1, i), &len_1);
4991 ada_remove_trailing_digits (TYPE_FIELD_NAME (type2, i), &len_2);
4992 if (len_1 != len_2
4993 || strncmp (TYPE_FIELD_NAME (type1, i),
4994 TYPE_FIELD_NAME (type2, i),
4995 len_1) != 0)
4996 return 0;
4997 }
4998
4999 return 1;
5000}
5001
5002/* Return nonzero if all the symbols in SYMS are all enumeral symbols
5003 that are deemed "identical" for practical purposes. Sometimes,
5004 enumerals are not strictly identical, but their types are so similar
5005 that they can be considered identical.
5006
5007 For instance, consider the following code:
5008
5009 type Color is (Black, Red, Green, Blue, White);
5010 type RGB_Color is new Color range Red .. Blue;
5011
5012 Type RGB_Color is a subrange of an implicit type which is a copy
5013 of type Color. If we call that implicit type RGB_ColorB ("B" is
5014 for "Base Type"), then type RGB_ColorB is a copy of type Color.
5015 As a result, when an expression references any of the enumeral
5016 by name (Eg. "print green"), the expression is technically
5017 ambiguous and the user should be asked to disambiguate. But
5018 doing so would only hinder the user, since it wouldn't matter
5019 what choice he makes, the outcome would always be the same.
5020 So, for practical purposes, we consider them as the same. */
5021
5022static int
54d343a2 5023symbols_are_identical_enums (const std::vector<struct block_symbol> &syms)
8f17729f
JB
5024{
5025 int i;
5026
5027 /* Before performing a thorough comparison check of each type,
5028 we perform a series of inexpensive checks. We expect that these
5029 checks will quickly fail in the vast majority of cases, and thus
5030 help prevent the unnecessary use of a more expensive comparison.
5031 Said comparison also expects us to make some of these checks
5032 (see ada_identical_enum_types_p). */
5033
5034 /* Quick check: All symbols should have an enum type. */
54d343a2 5035 for (i = 0; i < syms.size (); i++)
78134374 5036 if (SYMBOL_TYPE (syms[i].symbol)->code () != TYPE_CODE_ENUM)
8f17729f
JB
5037 return 0;
5038
5039 /* Quick check: They should all have the same value. */
54d343a2 5040 for (i = 1; i < syms.size (); i++)
d12307c1 5041 if (SYMBOL_VALUE (syms[i].symbol) != SYMBOL_VALUE (syms[0].symbol))
8f17729f
JB
5042 return 0;
5043
5044 /* Quick check: They should all have the same number of enumerals. */
54d343a2 5045 for (i = 1; i < syms.size (); i++)
1f704f76
SM
5046 if (SYMBOL_TYPE (syms[i].symbol)->num_fields ()
5047 != SYMBOL_TYPE (syms[0].symbol)->num_fields ())
8f17729f
JB
5048 return 0;
5049
5050 /* All the sanity checks passed, so we might have a set of
5051 identical enumeration types. Perform a more complete
5052 comparison of the type of each symbol. */
54d343a2 5053 for (i = 1; i < syms.size (); i++)
d12307c1
PMR
5054 if (!ada_identical_enum_types_p (SYMBOL_TYPE (syms[i].symbol),
5055 SYMBOL_TYPE (syms[0].symbol)))
8f17729f
JB
5056 return 0;
5057
5058 return 1;
5059}
5060
54d343a2 5061/* Remove any non-debugging symbols in SYMS that definitely
96d887e8
PH
5062 duplicate other symbols in the list (The only case I know of where
5063 this happens is when object files containing stabs-in-ecoff are
5064 linked with files containing ordinary ecoff debugging symbols (or no
5065 debugging symbols)). Modifies SYMS to squeeze out deleted entries.
5066 Returns the number of items in the modified list. */
4c4b4cd2 5067
96d887e8 5068static int
54d343a2 5069remove_extra_symbols (std::vector<struct block_symbol> *syms)
96d887e8
PH
5070{
5071 int i, j;
4c4b4cd2 5072
8f17729f
JB
5073 /* We should never be called with less than 2 symbols, as there
5074 cannot be any extra symbol in that case. But it's easy to
5075 handle, since we have nothing to do in that case. */
54d343a2
TT
5076 if (syms->size () < 2)
5077 return syms->size ();
8f17729f 5078
96d887e8 5079 i = 0;
54d343a2 5080 while (i < syms->size ())
96d887e8 5081 {
a35ddb44 5082 int remove_p = 0;
339c13b6
JB
5083
5084 /* If two symbols have the same name and one of them is a stub type,
5085 the get rid of the stub. */
5086
54d343a2 5087 if (TYPE_STUB (SYMBOL_TYPE ((*syms)[i].symbol))
987012b8 5088 && (*syms)[i].symbol->linkage_name () != NULL)
339c13b6 5089 {
54d343a2 5090 for (j = 0; j < syms->size (); j++)
339c13b6
JB
5091 {
5092 if (j != i
54d343a2 5093 && !TYPE_STUB (SYMBOL_TYPE ((*syms)[j].symbol))
987012b8
CB
5094 && (*syms)[j].symbol->linkage_name () != NULL
5095 && strcmp ((*syms)[i].symbol->linkage_name (),
5096 (*syms)[j].symbol->linkage_name ()) == 0)
a35ddb44 5097 remove_p = 1;
339c13b6
JB
5098 }
5099 }
5100
5101 /* Two symbols with the same name, same class and same address
5102 should be identical. */
5103
987012b8 5104 else if ((*syms)[i].symbol->linkage_name () != NULL
54d343a2
TT
5105 && SYMBOL_CLASS ((*syms)[i].symbol) == LOC_STATIC
5106 && is_nondebugging_type (SYMBOL_TYPE ((*syms)[i].symbol)))
96d887e8 5107 {
54d343a2 5108 for (j = 0; j < syms->size (); j += 1)
96d887e8
PH
5109 {
5110 if (i != j
987012b8
CB
5111 && (*syms)[j].symbol->linkage_name () != NULL
5112 && strcmp ((*syms)[i].symbol->linkage_name (),
5113 (*syms)[j].symbol->linkage_name ()) == 0
54d343a2
TT
5114 && SYMBOL_CLASS ((*syms)[i].symbol)
5115 == SYMBOL_CLASS ((*syms)[j].symbol)
5116 && SYMBOL_VALUE_ADDRESS ((*syms)[i].symbol)
5117 == SYMBOL_VALUE_ADDRESS ((*syms)[j].symbol))
a35ddb44 5118 remove_p = 1;
4c4b4cd2 5119 }
4c4b4cd2 5120 }
339c13b6 5121
a35ddb44 5122 if (remove_p)
54d343a2 5123 syms->erase (syms->begin () + i);
339c13b6 5124
96d887e8 5125 i += 1;
14f9c5c9 5126 }
8f17729f
JB
5127
5128 /* If all the remaining symbols are identical enumerals, then
5129 just keep the first one and discard the rest.
5130
5131 Unlike what we did previously, we do not discard any entry
5132 unless they are ALL identical. This is because the symbol
5133 comparison is not a strict comparison, but rather a practical
5134 comparison. If all symbols are considered identical, then
5135 we can just go ahead and use the first one and discard the rest.
5136 But if we cannot reduce the list to a single element, we have
5137 to ask the user to disambiguate anyways. And if we have to
5138 present a multiple-choice menu, it's less confusing if the list
5139 isn't missing some choices that were identical and yet distinct. */
54d343a2
TT
5140 if (symbols_are_identical_enums (*syms))
5141 syms->resize (1);
8f17729f 5142
54d343a2 5143 return syms->size ();
14f9c5c9
AS
5144}
5145
96d887e8
PH
5146/* Given a type that corresponds to a renaming entity, use the type name
5147 to extract the scope (package name or function name, fully qualified,
5148 and following the GNAT encoding convention) where this renaming has been
49d83361 5149 defined. */
4c4b4cd2 5150
49d83361 5151static std::string
96d887e8 5152xget_renaming_scope (struct type *renaming_type)
14f9c5c9 5153{
96d887e8 5154 /* The renaming types adhere to the following convention:
0963b4bd 5155 <scope>__<rename>___<XR extension>.
96d887e8
PH
5156 So, to extract the scope, we search for the "___XR" extension,
5157 and then backtrack until we find the first "__". */
76a01679 5158
7d93a1e0 5159 const char *name = renaming_type->name ();
108d56a4
SM
5160 const char *suffix = strstr (name, "___XR");
5161 const char *last;
14f9c5c9 5162
96d887e8
PH
5163 /* Now, backtrack a bit until we find the first "__". Start looking
5164 at suffix - 3, as the <rename> part is at least one character long. */
14f9c5c9 5165
96d887e8
PH
5166 for (last = suffix - 3; last > name; last--)
5167 if (last[0] == '_' && last[1] == '_')
5168 break;
76a01679 5169
96d887e8 5170 /* Make a copy of scope and return it. */
49d83361 5171 return std::string (name, last);
4c4b4cd2
PH
5172}
5173
96d887e8 5174/* Return nonzero if NAME corresponds to a package name. */
4c4b4cd2 5175
96d887e8
PH
5176static int
5177is_package_name (const char *name)
4c4b4cd2 5178{
96d887e8
PH
5179 /* Here, We take advantage of the fact that no symbols are generated
5180 for packages, while symbols are generated for each function.
5181 So the condition for NAME represent a package becomes equivalent
5182 to NAME not existing in our list of symbols. There is only one
5183 small complication with library-level functions (see below). */
4c4b4cd2 5184
96d887e8
PH
5185 /* If it is a function that has not been defined at library level,
5186 then we should be able to look it up in the symbols. */
5187 if (standard_lookup (name, NULL, VAR_DOMAIN) != NULL)
5188 return 0;
14f9c5c9 5189
96d887e8
PH
5190 /* Library-level function names start with "_ada_". See if function
5191 "_ada_" followed by NAME can be found. */
14f9c5c9 5192
96d887e8 5193 /* Do a quick check that NAME does not contain "__", since library-level
e1d5a0d2 5194 functions names cannot contain "__" in them. */
96d887e8
PH
5195 if (strstr (name, "__") != NULL)
5196 return 0;
4c4b4cd2 5197
528e1572 5198 std::string fun_name = string_printf ("_ada_%s", name);
14f9c5c9 5199
528e1572 5200 return (standard_lookup (fun_name.c_str (), NULL, VAR_DOMAIN) == NULL);
96d887e8 5201}
14f9c5c9 5202
96d887e8 5203/* Return nonzero if SYM corresponds to a renaming entity that is
aeb5907d 5204 not visible from FUNCTION_NAME. */
14f9c5c9 5205
96d887e8 5206static int
0d5cff50 5207old_renaming_is_invisible (const struct symbol *sym, const char *function_name)
96d887e8 5208{
aeb5907d
JB
5209 if (SYMBOL_CLASS (sym) != LOC_TYPEDEF)
5210 return 0;
5211
49d83361 5212 std::string scope = xget_renaming_scope (SYMBOL_TYPE (sym));
14f9c5c9 5213
96d887e8 5214 /* If the rename has been defined in a package, then it is visible. */
49d83361
TT
5215 if (is_package_name (scope.c_str ()))
5216 return 0;
14f9c5c9 5217
96d887e8
PH
5218 /* Check that the rename is in the current function scope by checking
5219 that its name starts with SCOPE. */
76a01679 5220
96d887e8
PH
5221 /* If the function name starts with "_ada_", it means that it is
5222 a library-level function. Strip this prefix before doing the
5223 comparison, as the encoding for the renaming does not contain
5224 this prefix. */
61012eef 5225 if (startswith (function_name, "_ada_"))
96d887e8 5226 function_name += 5;
f26caa11 5227
49d83361 5228 return !startswith (function_name, scope.c_str ());
f26caa11
PH
5229}
5230
aeb5907d
JB
5231/* Remove entries from SYMS that corresponds to a renaming entity that
5232 is not visible from the function associated with CURRENT_BLOCK or
5233 that is superfluous due to the presence of more specific renaming
5234 information. Places surviving symbols in the initial entries of
5235 SYMS and returns the number of surviving symbols.
96d887e8
PH
5236
5237 Rationale:
aeb5907d
JB
5238 First, in cases where an object renaming is implemented as a
5239 reference variable, GNAT may produce both the actual reference
5240 variable and the renaming encoding. In this case, we discard the
5241 latter.
5242
5243 Second, GNAT emits a type following a specified encoding for each renaming
96d887e8
PH
5244 entity. Unfortunately, STABS currently does not support the definition
5245 of types that are local to a given lexical block, so all renamings types
5246 are emitted at library level. As a consequence, if an application
5247 contains two renaming entities using the same name, and a user tries to
5248 print the value of one of these entities, the result of the ada symbol
5249 lookup will also contain the wrong renaming type.
f26caa11 5250
96d887e8
PH
5251 This function partially covers for this limitation by attempting to
5252 remove from the SYMS list renaming symbols that should be visible
5253 from CURRENT_BLOCK. However, there does not seem be a 100% reliable
5254 method with the current information available. The implementation
5255 below has a couple of limitations (FIXME: brobecker-2003-05-12):
5256
5257 - When the user tries to print a rename in a function while there
5258 is another rename entity defined in a package: Normally, the
5259 rename in the function has precedence over the rename in the
5260 package, so the latter should be removed from the list. This is
5261 currently not the case.
5262
5263 - This function will incorrectly remove valid renames if
5264 the CURRENT_BLOCK corresponds to a function which symbol name
5265 has been changed by an "Export" pragma. As a consequence,
5266 the user will be unable to print such rename entities. */
4c4b4cd2 5267
14f9c5c9 5268static int
54d343a2
TT
5269remove_irrelevant_renamings (std::vector<struct block_symbol> *syms,
5270 const struct block *current_block)
4c4b4cd2
PH
5271{
5272 struct symbol *current_function;
0d5cff50 5273 const char *current_function_name;
4c4b4cd2 5274 int i;
aeb5907d
JB
5275 int is_new_style_renaming;
5276
5277 /* If there is both a renaming foo___XR... encoded as a variable and
5278 a simple variable foo in the same block, discard the latter.
0963b4bd 5279 First, zero out such symbols, then compress. */
aeb5907d 5280 is_new_style_renaming = 0;
54d343a2 5281 for (i = 0; i < syms->size (); i += 1)
aeb5907d 5282 {
54d343a2
TT
5283 struct symbol *sym = (*syms)[i].symbol;
5284 const struct block *block = (*syms)[i].block;
aeb5907d
JB
5285 const char *name;
5286 const char *suffix;
5287
5288 if (sym == NULL || SYMBOL_CLASS (sym) == LOC_TYPEDEF)
5289 continue;
987012b8 5290 name = sym->linkage_name ();
aeb5907d
JB
5291 suffix = strstr (name, "___XR");
5292
5293 if (suffix != NULL)
5294 {
5295 int name_len = suffix - name;
5296 int j;
5b4ee69b 5297
aeb5907d 5298 is_new_style_renaming = 1;
54d343a2
TT
5299 for (j = 0; j < syms->size (); j += 1)
5300 if (i != j && (*syms)[j].symbol != NULL
987012b8 5301 && strncmp (name, (*syms)[j].symbol->linkage_name (),
aeb5907d 5302 name_len) == 0
54d343a2
TT
5303 && block == (*syms)[j].block)
5304 (*syms)[j].symbol = NULL;
aeb5907d
JB
5305 }
5306 }
5307 if (is_new_style_renaming)
5308 {
5309 int j, k;
5310
54d343a2
TT
5311 for (j = k = 0; j < syms->size (); j += 1)
5312 if ((*syms)[j].symbol != NULL)
aeb5907d 5313 {
54d343a2 5314 (*syms)[k] = (*syms)[j];
aeb5907d
JB
5315 k += 1;
5316 }
5317 return k;
5318 }
4c4b4cd2
PH
5319
5320 /* Extract the function name associated to CURRENT_BLOCK.
5321 Abort if unable to do so. */
76a01679 5322
4c4b4cd2 5323 if (current_block == NULL)
54d343a2 5324 return syms->size ();
76a01679 5325
7f0df278 5326 current_function = block_linkage_function (current_block);
4c4b4cd2 5327 if (current_function == NULL)
54d343a2 5328 return syms->size ();
4c4b4cd2 5329
987012b8 5330 current_function_name = current_function->linkage_name ();
4c4b4cd2 5331 if (current_function_name == NULL)
54d343a2 5332 return syms->size ();
4c4b4cd2
PH
5333
5334 /* Check each of the symbols, and remove it from the list if it is
5335 a type corresponding to a renaming that is out of the scope of
5336 the current block. */
5337
5338 i = 0;
54d343a2 5339 while (i < syms->size ())
4c4b4cd2 5340 {
54d343a2 5341 if (ada_parse_renaming ((*syms)[i].symbol, NULL, NULL, NULL)
aeb5907d 5342 == ADA_OBJECT_RENAMING
54d343a2
TT
5343 && old_renaming_is_invisible ((*syms)[i].symbol,
5344 current_function_name))
5345 syms->erase (syms->begin () + i);
4c4b4cd2
PH
5346 else
5347 i += 1;
5348 }
5349
54d343a2 5350 return syms->size ();
4c4b4cd2
PH
5351}
5352
339c13b6
JB
5353/* Add to OBSTACKP all symbols from BLOCK (and its super-blocks)
5354 whose name and domain match NAME and DOMAIN respectively.
5355 If no match was found, then extend the search to "enclosing"
5356 routines (in other words, if we're inside a nested function,
5357 search the symbols defined inside the enclosing functions).
d0a8ab18
JB
5358 If WILD_MATCH_P is nonzero, perform the naming matching in
5359 "wild" mode (see function "wild_match" for more info).
339c13b6
JB
5360
5361 Note: This function assumes that OBSTACKP has 0 (zero) element in it. */
5362
5363static void
b5ec771e
PA
5364ada_add_local_symbols (struct obstack *obstackp,
5365 const lookup_name_info &lookup_name,
5366 const struct block *block, domain_enum domain)
339c13b6
JB
5367{
5368 int block_depth = 0;
5369
5370 while (block != NULL)
5371 {
5372 block_depth += 1;
b5ec771e 5373 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
339c13b6
JB
5374
5375 /* If we found a non-function match, assume that's the one. */
5376 if (is_nonfunction (defns_collected (obstackp, 0),
5377 num_defns_collected (obstackp)))
5378 return;
5379
5380 block = BLOCK_SUPERBLOCK (block);
5381 }
5382
5383 /* If no luck so far, try to find NAME as a local symbol in some lexically
5384 enclosing subprogram. */
5385 if (num_defns_collected (obstackp) == 0 && block_depth > 2)
b5ec771e 5386 add_symbols_from_enclosing_procs (obstackp, lookup_name, domain);
339c13b6
JB
5387}
5388
ccefe4c4 5389/* An object of this type is used as the user_data argument when
40658b94 5390 calling the map_matching_symbols method. */
ccefe4c4 5391
40658b94 5392struct match_data
ccefe4c4 5393{
40658b94 5394 struct objfile *objfile;
ccefe4c4 5395 struct obstack *obstackp;
40658b94
PH
5396 struct symbol *arg_sym;
5397 int found_sym;
ccefe4c4
TT
5398};
5399
199b4314
TT
5400/* A callback for add_nonlocal_symbols that adds symbol, found in BSYM,
5401 to a list of symbols. DATA is a pointer to a struct match_data *
40658b94
PH
5402 containing the obstack that collects the symbol list, the file that SYM
5403 must come from, a flag indicating whether a non-argument symbol has
5404 been found in the current block, and the last argument symbol
5405 passed in SYM within the current block (if any). When SYM is null,
5406 marking the end of a block, the argument symbol is added if no
5407 other has been found. */
ccefe4c4 5408
199b4314
TT
5409static bool
5410aux_add_nonlocal_symbols (struct block_symbol *bsym,
5411 struct match_data *data)
ccefe4c4 5412{
199b4314
TT
5413 const struct block *block = bsym->block;
5414 struct symbol *sym = bsym->symbol;
5415
40658b94
PH
5416 if (sym == NULL)
5417 {
5418 if (!data->found_sym && data->arg_sym != NULL)
5419 add_defn_to_vec (data->obstackp,
5420 fixup_symbol_section (data->arg_sym, data->objfile),
5421 block);
5422 data->found_sym = 0;
5423 data->arg_sym = NULL;
5424 }
5425 else
5426 {
5427 if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
199b4314 5428 return true;
40658b94
PH
5429 else if (SYMBOL_IS_ARGUMENT (sym))
5430 data->arg_sym = sym;
5431 else
5432 {
5433 data->found_sym = 1;
5434 add_defn_to_vec (data->obstackp,
5435 fixup_symbol_section (sym, data->objfile),
5436 block);
5437 }
5438 }
199b4314 5439 return true;
40658b94
PH
5440}
5441
b5ec771e
PA
5442/* Helper for add_nonlocal_symbols. Find symbols in DOMAIN which are
5443 targeted by renamings matching LOOKUP_NAME in BLOCK. Add these
5444 symbols to OBSTACKP. Return whether we found such symbols. */
22cee43f
PMR
5445
5446static int
5447ada_add_block_renamings (struct obstack *obstackp,
5448 const struct block *block,
b5ec771e
PA
5449 const lookup_name_info &lookup_name,
5450 domain_enum domain)
22cee43f
PMR
5451{
5452 struct using_direct *renaming;
5453 int defns_mark = num_defns_collected (obstackp);
5454
b5ec771e
PA
5455 symbol_name_matcher_ftype *name_match
5456 = ada_get_symbol_name_matcher (lookup_name);
5457
22cee43f
PMR
5458 for (renaming = block_using (block);
5459 renaming != NULL;
5460 renaming = renaming->next)
5461 {
5462 const char *r_name;
22cee43f
PMR
5463
5464 /* Avoid infinite recursions: skip this renaming if we are actually
5465 already traversing it.
5466
5467 Currently, symbol lookup in Ada don't use the namespace machinery from
5468 C++/Fortran support: skip namespace imports that use them. */
5469 if (renaming->searched
5470 || (renaming->import_src != NULL
5471 && renaming->import_src[0] != '\0')
5472 || (renaming->import_dest != NULL
5473 && renaming->import_dest[0] != '\0'))
5474 continue;
5475 renaming->searched = 1;
5476
5477 /* TODO: here, we perform another name-based symbol lookup, which can
5478 pull its own multiple overloads. In theory, we should be able to do
5479 better in this case since, in DWARF, DW_AT_import is a DIE reference,
5480 not a simple name. But in order to do this, we would need to enhance
5481 the DWARF reader to associate a symbol to this renaming, instead of a
5482 name. So, for now, we do something simpler: re-use the C++/Fortran
5483 namespace machinery. */
5484 r_name = (renaming->alias != NULL
5485 ? renaming->alias
5486 : renaming->declaration);
b5ec771e
PA
5487 if (name_match (r_name, lookup_name, NULL))
5488 {
5489 lookup_name_info decl_lookup_name (renaming->declaration,
5490 lookup_name.match_type ());
5491 ada_add_all_symbols (obstackp, block, decl_lookup_name, domain,
5492 1, NULL);
5493 }
22cee43f
PMR
5494 renaming->searched = 0;
5495 }
5496 return num_defns_collected (obstackp) != defns_mark;
5497}
5498
db230ce3
JB
5499/* Implements compare_names, but only applying the comparision using
5500 the given CASING. */
5b4ee69b 5501
40658b94 5502static int
db230ce3
JB
5503compare_names_with_case (const char *string1, const char *string2,
5504 enum case_sensitivity casing)
40658b94
PH
5505{
5506 while (*string1 != '\0' && *string2 != '\0')
5507 {
db230ce3
JB
5508 char c1, c2;
5509
40658b94
PH
5510 if (isspace (*string1) || isspace (*string2))
5511 return strcmp_iw_ordered (string1, string2);
db230ce3
JB
5512
5513 if (casing == case_sensitive_off)
5514 {
5515 c1 = tolower (*string1);
5516 c2 = tolower (*string2);
5517 }
5518 else
5519 {
5520 c1 = *string1;
5521 c2 = *string2;
5522 }
5523 if (c1 != c2)
40658b94 5524 break;
db230ce3 5525
40658b94
PH
5526 string1 += 1;
5527 string2 += 1;
5528 }
db230ce3 5529
40658b94
PH
5530 switch (*string1)
5531 {
5532 case '(':
5533 return strcmp_iw_ordered (string1, string2);
5534 case '_':
5535 if (*string2 == '\0')
5536 {
052874e8 5537 if (is_name_suffix (string1))
40658b94
PH
5538 return 0;
5539 else
1a1d5513 5540 return 1;
40658b94 5541 }
dbb8534f 5542 /* FALLTHROUGH */
40658b94
PH
5543 default:
5544 if (*string2 == '(')
5545 return strcmp_iw_ordered (string1, string2);
5546 else
db230ce3
JB
5547 {
5548 if (casing == case_sensitive_off)
5549 return tolower (*string1) - tolower (*string2);
5550 else
5551 return *string1 - *string2;
5552 }
40658b94 5553 }
ccefe4c4
TT
5554}
5555
db230ce3
JB
5556/* Compare STRING1 to STRING2, with results as for strcmp.
5557 Compatible with strcmp_iw_ordered in that...
5558
5559 strcmp_iw_ordered (STRING1, STRING2) <= 0
5560
5561 ... implies...
5562
5563 compare_names (STRING1, STRING2) <= 0
5564
5565 (they may differ as to what symbols compare equal). */
5566
5567static int
5568compare_names (const char *string1, const char *string2)
5569{
5570 int result;
5571
5572 /* Similar to what strcmp_iw_ordered does, we need to perform
5573 a case-insensitive comparison first, and only resort to
5574 a second, case-sensitive, comparison if the first one was
5575 not sufficient to differentiate the two strings. */
5576
5577 result = compare_names_with_case (string1, string2, case_sensitive_off);
5578 if (result == 0)
5579 result = compare_names_with_case (string1, string2, case_sensitive_on);
5580
5581 return result;
5582}
5583
b5ec771e
PA
5584/* Convenience function to get at the Ada encoded lookup name for
5585 LOOKUP_NAME, as a C string. */
5586
5587static const char *
5588ada_lookup_name (const lookup_name_info &lookup_name)
5589{
5590 return lookup_name.ada ().lookup_name ().c_str ();
5591}
5592
339c13b6 5593/* Add to OBSTACKP all non-local symbols whose name and domain match
b5ec771e
PA
5594 LOOKUP_NAME and DOMAIN respectively. The search is performed on
5595 GLOBAL_BLOCK symbols if GLOBAL is non-zero, or on STATIC_BLOCK
5596 symbols otherwise. */
339c13b6
JB
5597
5598static void
b5ec771e
PA
5599add_nonlocal_symbols (struct obstack *obstackp,
5600 const lookup_name_info &lookup_name,
5601 domain_enum domain, int global)
339c13b6 5602{
40658b94 5603 struct match_data data;
339c13b6 5604
6475f2fe 5605 memset (&data, 0, sizeof data);
ccefe4c4 5606 data.obstackp = obstackp;
339c13b6 5607
b5ec771e
PA
5608 bool is_wild_match = lookup_name.ada ().wild_match_p ();
5609
199b4314
TT
5610 auto callback = [&] (struct block_symbol *bsym)
5611 {
5612 return aux_add_nonlocal_symbols (bsym, &data);
5613 };
5614
2030c079 5615 for (objfile *objfile : current_program_space->objfiles ())
40658b94
PH
5616 {
5617 data.objfile = objfile;
5618
b054970d
TT
5619 objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
5620 domain, global, callback,
5621 (is_wild_match
5622 ? NULL : compare_names));
22cee43f 5623
b669c953 5624 for (compunit_symtab *cu : objfile->compunits ())
22cee43f
PMR
5625 {
5626 const struct block *global_block
5627 = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cu), GLOBAL_BLOCK);
5628
b5ec771e
PA
5629 if (ada_add_block_renamings (obstackp, global_block, lookup_name,
5630 domain))
22cee43f
PMR
5631 data.found_sym = 1;
5632 }
40658b94
PH
5633 }
5634
5635 if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
5636 {
b5ec771e 5637 const char *name = ada_lookup_name (lookup_name);
e0802d59
TT
5638 std::string bracket_name = std::string ("<_ada_") + name + '>';
5639 lookup_name_info name1 (bracket_name, symbol_name_match_type::FULL);
b5ec771e 5640
2030c079 5641 for (objfile *objfile : current_program_space->objfiles ())
40658b94 5642 {
40658b94 5643 data.objfile = objfile;
b054970d 5644 objfile->sf->qf->map_matching_symbols (objfile, name1,
199b4314 5645 domain, global, callback,
b5ec771e 5646 compare_names);
40658b94
PH
5647 }
5648 }
339c13b6
JB
5649}
5650
b5ec771e
PA
5651/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if
5652 FULL_SEARCH is non-zero, enclosing scope and in global scopes,
5653 returning the number of matches. Add these to OBSTACKP.
4eeaa230 5654
22cee43f
PMR
5655 When FULL_SEARCH is non-zero, any non-function/non-enumeral
5656 symbol match within the nest of blocks whose innermost member is BLOCK,
4c4b4cd2 5657 is the one match returned (no other matches in that or
d9680e73 5658 enclosing blocks is returned). If there are any matches in or
22cee43f 5659 surrounding BLOCK, then these alone are returned.
4eeaa230 5660
b5ec771e
PA
5661 Names prefixed with "standard__" are handled specially:
5662 "standard__" is first stripped off (by the lookup_name
5663 constructor), and only static and global symbols are searched.
14f9c5c9 5664
22cee43f
PMR
5665 If MADE_GLOBAL_LOOKUP_P is non-null, set it before return to whether we had
5666 to lookup global symbols. */
5667
5668static void
5669ada_add_all_symbols (struct obstack *obstackp,
5670 const struct block *block,
b5ec771e 5671 const lookup_name_info &lookup_name,
22cee43f
PMR
5672 domain_enum domain,
5673 int full_search,
5674 int *made_global_lookup_p)
14f9c5c9
AS
5675{
5676 struct symbol *sym;
14f9c5c9 5677
22cee43f
PMR
5678 if (made_global_lookup_p)
5679 *made_global_lookup_p = 0;
339c13b6
JB
5680
5681 /* Special case: If the user specifies a symbol name inside package
5682 Standard, do a non-wild matching of the symbol name without
5683 the "standard__" prefix. This was primarily introduced in order
5684 to allow the user to specifically access the standard exceptions
5685 using, for instance, Standard.Constraint_Error when Constraint_Error
5686 is ambiguous (due to the user defining its own Constraint_Error
5687 entity inside its program). */
b5ec771e
PA
5688 if (lookup_name.ada ().standard_p ())
5689 block = NULL;
4c4b4cd2 5690
339c13b6 5691 /* Check the non-global symbols. If we have ANY match, then we're done. */
14f9c5c9 5692
4eeaa230
DE
5693 if (block != NULL)
5694 {
5695 if (full_search)
b5ec771e 5696 ada_add_local_symbols (obstackp, lookup_name, block, domain);
4eeaa230
DE
5697 else
5698 {
5699 /* In the !full_search case we're are being called by
5700 ada_iterate_over_symbols, and we don't want to search
5701 superblocks. */
b5ec771e 5702 ada_add_block_symbols (obstackp, block, lookup_name, domain, NULL);
4eeaa230 5703 }
22cee43f
PMR
5704 if (num_defns_collected (obstackp) > 0 || !full_search)
5705 return;
4eeaa230 5706 }
d2e4a39e 5707
339c13b6
JB
5708 /* No non-global symbols found. Check our cache to see if we have
5709 already performed this search before. If we have, then return
5710 the same result. */
5711
b5ec771e
PA
5712 if (lookup_cached_symbol (ada_lookup_name (lookup_name),
5713 domain, &sym, &block))
4c4b4cd2
PH
5714 {
5715 if (sym != NULL)
b5ec771e 5716 add_defn_to_vec (obstackp, sym, block);
22cee43f 5717 return;
4c4b4cd2 5718 }
14f9c5c9 5719
22cee43f
PMR
5720 if (made_global_lookup_p)
5721 *made_global_lookup_p = 1;
b1eedac9 5722
339c13b6
JB
5723 /* Search symbols from all global blocks. */
5724
b5ec771e 5725 add_nonlocal_symbols (obstackp, lookup_name, domain, 1);
d2e4a39e 5726
4c4b4cd2 5727 /* Now add symbols from all per-file blocks if we've gotten no hits
339c13b6 5728 (not strictly correct, but perhaps better than an error). */
d2e4a39e 5729
22cee43f 5730 if (num_defns_collected (obstackp) == 0)
b5ec771e 5731 add_nonlocal_symbols (obstackp, lookup_name, domain, 0);
22cee43f
PMR
5732}
5733
b5ec771e
PA
5734/* Find symbols in DOMAIN matching LOOKUP_NAME, in BLOCK and, if FULL_SEARCH
5735 is non-zero, enclosing scope and in global scopes, returning the number of
22cee43f 5736 matches.
54d343a2
TT
5737 Fills *RESULTS with (SYM,BLOCK) tuples, indicating the symbols
5738 found and the blocks and symbol tables (if any) in which they were
5739 found.
22cee43f
PMR
5740
5741 When full_search is non-zero, any non-function/non-enumeral
5742 symbol match within the nest of blocks whose innermost member is BLOCK,
5743 is the one match returned (no other matches in that or
5744 enclosing blocks is returned). If there are any matches in or
5745 surrounding BLOCK, then these alone are returned.
5746
5747 Names prefixed with "standard__" are handled specially: "standard__"
5748 is first stripped off, and only static and global symbols are searched. */
5749
5750static int
b5ec771e
PA
5751ada_lookup_symbol_list_worker (const lookup_name_info &lookup_name,
5752 const struct block *block,
22cee43f 5753 domain_enum domain,
54d343a2 5754 std::vector<struct block_symbol> *results,
22cee43f
PMR
5755 int full_search)
5756{
22cee43f
PMR
5757 int syms_from_global_search;
5758 int ndefns;
ec6a20c2 5759 auto_obstack obstack;
22cee43f 5760
ec6a20c2 5761 ada_add_all_symbols (&obstack, block, lookup_name,
b5ec771e 5762 domain, full_search, &syms_from_global_search);
14f9c5c9 5763
ec6a20c2
JB
5764 ndefns = num_defns_collected (&obstack);
5765
54d343a2
TT
5766 struct block_symbol *base = defns_collected (&obstack, 1);
5767 for (int i = 0; i < ndefns; ++i)
5768 results->push_back (base[i]);
4c4b4cd2 5769
54d343a2 5770 ndefns = remove_extra_symbols (results);
4c4b4cd2 5771
b1eedac9 5772 if (ndefns == 0 && full_search && syms_from_global_search)
b5ec771e 5773 cache_symbol (ada_lookup_name (lookup_name), domain, NULL, NULL);
14f9c5c9 5774
b1eedac9 5775 if (ndefns == 1 && full_search && syms_from_global_search)
b5ec771e
PA
5776 cache_symbol (ada_lookup_name (lookup_name), domain,
5777 (*results)[0].symbol, (*results)[0].block);
14f9c5c9 5778
54d343a2 5779 ndefns = remove_irrelevant_renamings (results, block);
ec6a20c2 5780
14f9c5c9
AS
5781 return ndefns;
5782}
5783
b5ec771e 5784/* Find symbols in DOMAIN matching NAME, in BLOCK and enclosing scope and
54d343a2
TT
5785 in global scopes, returning the number of matches, and filling *RESULTS
5786 with (SYM,BLOCK) tuples.
ec6a20c2 5787
4eeaa230
DE
5788 See ada_lookup_symbol_list_worker for further details. */
5789
5790int
b5ec771e 5791ada_lookup_symbol_list (const char *name, const struct block *block,
54d343a2
TT
5792 domain_enum domain,
5793 std::vector<struct block_symbol> *results)
4eeaa230 5794{
b5ec771e
PA
5795 symbol_name_match_type name_match_type = name_match_type_from_name (name);
5796 lookup_name_info lookup_name (name, name_match_type);
5797
5798 return ada_lookup_symbol_list_worker (lookup_name, block, domain, results, 1);
4eeaa230
DE
5799}
5800
5801/* Implementation of the la_iterate_over_symbols method. */
5802
6969f124 5803static bool
14bc53a8 5804ada_iterate_over_symbols
b5ec771e
PA
5805 (const struct block *block, const lookup_name_info &name,
5806 domain_enum domain,
14bc53a8 5807 gdb::function_view<symbol_found_callback_ftype> callback)
4eeaa230
DE
5808{
5809 int ndefs, i;
54d343a2 5810 std::vector<struct block_symbol> results;
4eeaa230
DE
5811
5812 ndefs = ada_lookup_symbol_list_worker (name, block, domain, &results, 0);
ec6a20c2 5813
4eeaa230
DE
5814 for (i = 0; i < ndefs; ++i)
5815 {
7e41c8db 5816 if (!callback (&results[i]))
6969f124 5817 return false;
4eeaa230 5818 }
6969f124
TT
5819
5820 return true;
4eeaa230
DE
5821}
5822
4e5c77fe
JB
5823/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
5824 to 1, but choosing the first symbol found if there are multiple
5825 choices.
5826
5e2336be
JB
5827 The result is stored in *INFO, which must be non-NULL.
5828 If no match is found, INFO->SYM is set to NULL. */
4e5c77fe
JB
5829
5830void
5831ada_lookup_encoded_symbol (const char *name, const struct block *block,
fe978cb0 5832 domain_enum domain,
d12307c1 5833 struct block_symbol *info)
14f9c5c9 5834{
b5ec771e
PA
5835 /* Since we already have an encoded name, wrap it in '<>' to force a
5836 verbatim match. Otherwise, if the name happens to not look like
5837 an encoded name (because it doesn't include a "__"),
5838 ada_lookup_name_info would re-encode/fold it again, and that
5839 would e.g., incorrectly lowercase object renaming names like
5840 "R28b" -> "r28b". */
5841 std::string verbatim = std::string ("<") + name + '>';
5842
5e2336be 5843 gdb_assert (info != NULL);
65392b3e 5844 *info = ada_lookup_symbol (verbatim.c_str (), block, domain);
4e5c77fe 5845}
aeb5907d
JB
5846
5847/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
5848 scope and in global scopes, or NULL if none. NAME is folded and
5849 encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
65392b3e 5850 choosing the first symbol if there are multiple choices. */
4e5c77fe 5851
d12307c1 5852struct block_symbol
aeb5907d 5853ada_lookup_symbol (const char *name, const struct block *block0,
65392b3e 5854 domain_enum domain)
aeb5907d 5855{
54d343a2 5856 std::vector<struct block_symbol> candidates;
f98fc17b 5857 int n_candidates;
f98fc17b
PA
5858
5859 n_candidates = ada_lookup_symbol_list (name, block0, domain, &candidates);
f98fc17b
PA
5860
5861 if (n_candidates == 0)
54d343a2 5862 return {};
f98fc17b
PA
5863
5864 block_symbol info = candidates[0];
5865 info.symbol = fixup_symbol_section (info.symbol, NULL);
d12307c1 5866 return info;
4c4b4cd2 5867}
14f9c5c9 5868
d12307c1 5869static struct block_symbol
f606139a
DE
5870ada_lookup_symbol_nonlocal (const struct language_defn *langdef,
5871 const char *name,
76a01679 5872 const struct block *block,
21b556f4 5873 const domain_enum domain)
4c4b4cd2 5874{
d12307c1 5875 struct block_symbol sym;
04dccad0 5876
65392b3e 5877 sym = ada_lookup_symbol (name, block_static_block (block), domain);
d12307c1 5878 if (sym.symbol != NULL)
04dccad0
JB
5879 return sym;
5880
5881 /* If we haven't found a match at this point, try the primitive
5882 types. In other languages, this search is performed before
5883 searching for global symbols in order to short-circuit that
5884 global-symbol search if it happens that the name corresponds
5885 to a primitive type. But we cannot do the same in Ada, because
5886 it is perfectly legitimate for a program to declare a type which
5887 has the same name as a standard type. If looking up a type in
5888 that situation, we have traditionally ignored the primitive type
5889 in favor of user-defined types. This is why, unlike most other
5890 languages, we search the primitive types this late and only after
5891 having searched the global symbols without success. */
5892
5893 if (domain == VAR_DOMAIN)
5894 {
5895 struct gdbarch *gdbarch;
5896
5897 if (block == NULL)
5898 gdbarch = target_gdbarch ();
5899 else
5900 gdbarch = block_gdbarch (block);
d12307c1
PMR
5901 sym.symbol = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
5902 if (sym.symbol != NULL)
04dccad0
JB
5903 return sym;
5904 }
5905
6640a367 5906 return {};
14f9c5c9
AS
5907}
5908
5909
4c4b4cd2
PH
5910/* True iff STR is a possible encoded suffix of a normal Ada name
5911 that is to be ignored for matching purposes. Suffixes of parallel
5912 names (e.g., XVE) are not included here. Currently, the possible suffixes
5823c3ef 5913 are given by any of the regular expressions:
4c4b4cd2 5914
babe1480
JB
5915 [.$][0-9]+ [nested subprogram suffix, on platforms such as GNU/Linux]
5916 ___[0-9]+ [nested subprogram suffix, on platforms such as HP/UX]
9ac7f98e 5917 TKB [subprogram suffix for task bodies]
babe1480 5918 _E[0-9]+[bs]$ [protected object entry suffixes]
61ee279c 5919 (X[nb]*)?((\$|__)[0-9](_?[0-9]+)|___(JM|LJM|X([FDBUP].*|R[^T]?)))?$
babe1480
JB
5920
5921 Also, any leading "__[0-9]+" sequence is skipped before the suffix
5922 match is performed. This sequence is used to differentiate homonyms,
5923 is an optional part of a valid name suffix. */
4c4b4cd2 5924
14f9c5c9 5925static int
d2e4a39e 5926is_name_suffix (const char *str)
14f9c5c9
AS
5927{
5928 int k;
4c4b4cd2
PH
5929 const char *matching;
5930 const int len = strlen (str);
5931
babe1480
JB
5932 /* Skip optional leading __[0-9]+. */
5933
4c4b4cd2
PH
5934 if (len > 3 && str[0] == '_' && str[1] == '_' && isdigit (str[2]))
5935 {
babe1480
JB
5936 str += 3;
5937 while (isdigit (str[0]))
5938 str += 1;
4c4b4cd2 5939 }
babe1480
JB
5940
5941 /* [.$][0-9]+ */
4c4b4cd2 5942
babe1480 5943 if (str[0] == '.' || str[0] == '$')
4c4b4cd2 5944 {
babe1480 5945 matching = str + 1;
4c4b4cd2
PH
5946 while (isdigit (matching[0]))
5947 matching += 1;
5948 if (matching[0] == '\0')
5949 return 1;
5950 }
5951
5952 /* ___[0-9]+ */
babe1480 5953
4c4b4cd2
PH
5954 if (len > 3 && str[0] == '_' && str[1] == '_' && str[2] == '_')
5955 {
5956 matching = str + 3;
5957 while (isdigit (matching[0]))
5958 matching += 1;
5959 if (matching[0] == '\0')
5960 return 1;
5961 }
5962
9ac7f98e
JB
5963 /* "TKB" suffixes are used for subprograms implementing task bodies. */
5964
5965 if (strcmp (str, "TKB") == 0)
5966 return 1;
5967
529cad9c
PH
5968#if 0
5969 /* FIXME: brobecker/2005-09-23: Protected Object subprograms end
0963b4bd
MS
5970 with a N at the end. Unfortunately, the compiler uses the same
5971 convention for other internal types it creates. So treating
529cad9c 5972 all entity names that end with an "N" as a name suffix causes
0963b4bd
MS
5973 some regressions. For instance, consider the case of an enumerated
5974 type. To support the 'Image attribute, it creates an array whose
529cad9c
PH
5975 name ends with N.
5976 Having a single character like this as a suffix carrying some
0963b4bd 5977 information is a bit risky. Perhaps we should change the encoding
529cad9c
PH
5978 to be something like "_N" instead. In the meantime, do not do
5979 the following check. */
5980 /* Protected Object Subprograms */
5981 if (len == 1 && str [0] == 'N')
5982 return 1;
5983#endif
5984
5985 /* _E[0-9]+[bs]$ */
5986 if (len > 3 && str[0] == '_' && str [1] == 'E' && isdigit (str[2]))
5987 {
5988 matching = str + 3;
5989 while (isdigit (matching[0]))
5990 matching += 1;
5991 if ((matching[0] == 'b' || matching[0] == 's')
5992 && matching [1] == '\0')
5993 return 1;
5994 }
5995
4c4b4cd2
PH
5996 /* ??? We should not modify STR directly, as we are doing below. This
5997 is fine in this case, but may become problematic later if we find
5998 that this alternative did not work, and want to try matching
5999 another one from the begining of STR. Since we modified it, we
6000 won't be able to find the begining of the string anymore! */
14f9c5c9
AS
6001 if (str[0] == 'X')
6002 {
6003 str += 1;
d2e4a39e 6004 while (str[0] != '_' && str[0] != '\0')
4c4b4cd2
PH
6005 {
6006 if (str[0] != 'n' && str[0] != 'b')
6007 return 0;
6008 str += 1;
6009 }
14f9c5c9 6010 }
babe1480 6011
14f9c5c9
AS
6012 if (str[0] == '\000')
6013 return 1;
babe1480 6014
d2e4a39e 6015 if (str[0] == '_')
14f9c5c9
AS
6016 {
6017 if (str[1] != '_' || str[2] == '\000')
4c4b4cd2 6018 return 0;
d2e4a39e 6019 if (str[2] == '_')
4c4b4cd2 6020 {
61ee279c
PH
6021 if (strcmp (str + 3, "JM") == 0)
6022 return 1;
6023 /* FIXME: brobecker/2004-09-30: GNAT will soon stop using
6024 the LJM suffix in favor of the JM one. But we will
6025 still accept LJM as a valid suffix for a reasonable
6026 amount of time, just to allow ourselves to debug programs
6027 compiled using an older version of GNAT. */
4c4b4cd2
PH
6028 if (strcmp (str + 3, "LJM") == 0)
6029 return 1;
6030 if (str[3] != 'X')
6031 return 0;
1265e4aa
JB
6032 if (str[4] == 'F' || str[4] == 'D' || str[4] == 'B'
6033 || str[4] == 'U' || str[4] == 'P')
4c4b4cd2
PH
6034 return 1;
6035 if (str[4] == 'R' && str[5] != 'T')
6036 return 1;
6037 return 0;
6038 }
6039 if (!isdigit (str[2]))
6040 return 0;
6041 for (k = 3; str[k] != '\0'; k += 1)
6042 if (!isdigit (str[k]) && str[k] != '_')
6043 return 0;
14f9c5c9
AS
6044 return 1;
6045 }
4c4b4cd2 6046 if (str[0] == '$' && isdigit (str[1]))
14f9c5c9 6047 {
4c4b4cd2
PH
6048 for (k = 2; str[k] != '\0'; k += 1)
6049 if (!isdigit (str[k]) && str[k] != '_')
6050 return 0;
14f9c5c9
AS
6051 return 1;
6052 }
6053 return 0;
6054}
d2e4a39e 6055
aeb5907d
JB
6056/* Return non-zero if the string starting at NAME and ending before
6057 NAME_END contains no capital letters. */
529cad9c
PH
6058
6059static int
6060is_valid_name_for_wild_match (const char *name0)
6061{
f945dedf 6062 std::string decoded_name = ada_decode (name0);
529cad9c
PH
6063 int i;
6064
5823c3ef
JB
6065 /* If the decoded name starts with an angle bracket, it means that
6066 NAME0 does not follow the GNAT encoding format. It should then
6067 not be allowed as a possible wild match. */
6068 if (decoded_name[0] == '<')
6069 return 0;
6070
529cad9c
PH
6071 for (i=0; decoded_name[i] != '\0'; i++)
6072 if (isalpha (decoded_name[i]) && !islower (decoded_name[i]))
6073 return 0;
6074
6075 return 1;
6076}
6077
73589123
PH
6078/* Advance *NAMEP to next occurrence of TARGET0 in the string NAME0
6079 that could start a simple name. Assumes that *NAMEP points into
6080 the string beginning at NAME0. */
4c4b4cd2 6081
14f9c5c9 6082static int
73589123 6083advance_wild_match (const char **namep, const char *name0, int target0)
14f9c5c9 6084{
73589123 6085 const char *name = *namep;
5b4ee69b 6086
5823c3ef 6087 while (1)
14f9c5c9 6088 {
aa27d0b3 6089 int t0, t1;
73589123
PH
6090
6091 t0 = *name;
6092 if (t0 == '_')
6093 {
6094 t1 = name[1];
6095 if ((t1 >= 'a' && t1 <= 'z') || (t1 >= '0' && t1 <= '9'))
6096 {
6097 name += 1;
61012eef 6098 if (name == name0 + 5 && startswith (name0, "_ada"))
73589123
PH
6099 break;
6100 else
6101 name += 1;
6102 }
aa27d0b3
JB
6103 else if (t1 == '_' && ((name[2] >= 'a' && name[2] <= 'z')
6104 || name[2] == target0))
73589123
PH
6105 {
6106 name += 2;
6107 break;
6108 }
6109 else
6110 return 0;
6111 }
6112 else if ((t0 >= 'a' && t0 <= 'z') || (t0 >= '0' && t0 <= '9'))
6113 name += 1;
6114 else
5823c3ef 6115 return 0;
73589123
PH
6116 }
6117
6118 *namep = name;
6119 return 1;
6120}
6121
b5ec771e
PA
6122/* Return true iff NAME encodes a name of the form prefix.PATN.
6123 Ignores any informational suffixes of NAME (i.e., for which
6124 is_name_suffix is true). Assumes that PATN is a lower-cased Ada
6125 simple name. */
73589123 6126
b5ec771e 6127static bool
73589123
PH
6128wild_match (const char *name, const char *patn)
6129{
22e048c9 6130 const char *p;
73589123
PH
6131 const char *name0 = name;
6132
6133 while (1)
6134 {
6135 const char *match = name;
6136
6137 if (*name == *patn)
6138 {
6139 for (name += 1, p = patn + 1; *p != '\0'; name += 1, p += 1)
6140 if (*p != *name)
6141 break;
6142 if (*p == '\0' && is_name_suffix (name))
b5ec771e 6143 return match == name0 || is_valid_name_for_wild_match (name0);
73589123
PH
6144
6145 if (name[-1] == '_')
6146 name -= 1;
6147 }
6148 if (!advance_wild_match (&name, name0, *patn))
b5ec771e 6149 return false;
96d887e8 6150 }
96d887e8
PH
6151}
6152
b5ec771e
PA
6153/* Returns true iff symbol name SYM_NAME matches SEARCH_NAME, ignoring
6154 any trailing suffixes that encode debugging information or leading
6155 _ada_ on SYM_NAME (see is_name_suffix commentary for the debugging
6156 information that is ignored). */
40658b94 6157
b5ec771e 6158static bool
c4d840bd
PH
6159full_match (const char *sym_name, const char *search_name)
6160{
b5ec771e
PA
6161 size_t search_name_len = strlen (search_name);
6162
6163 if (strncmp (sym_name, search_name, search_name_len) == 0
6164 && is_name_suffix (sym_name + search_name_len))
6165 return true;
6166
6167 if (startswith (sym_name, "_ada_")
6168 && strncmp (sym_name + 5, search_name, search_name_len) == 0
6169 && is_name_suffix (sym_name + search_name_len + 5))
6170 return true;
c4d840bd 6171
b5ec771e
PA
6172 return false;
6173}
c4d840bd 6174
b5ec771e
PA
6175/* Add symbols from BLOCK matching LOOKUP_NAME in DOMAIN to vector
6176 *defn_symbols, updating the list of symbols in OBSTACKP (if
6177 necessary). OBJFILE is the section containing BLOCK. */
96d887e8
PH
6178
6179static void
6180ada_add_block_symbols (struct obstack *obstackp,
b5ec771e
PA
6181 const struct block *block,
6182 const lookup_name_info &lookup_name,
6183 domain_enum domain, struct objfile *objfile)
96d887e8 6184{
8157b174 6185 struct block_iterator iter;
96d887e8
PH
6186 /* A matching argument symbol, if any. */
6187 struct symbol *arg_sym;
6188 /* Set true when we find a matching non-argument symbol. */
6189 int found_sym;
6190 struct symbol *sym;
6191
6192 arg_sym = NULL;
6193 found_sym = 0;
b5ec771e
PA
6194 for (sym = block_iter_match_first (block, lookup_name, &iter);
6195 sym != NULL;
6196 sym = block_iter_match_next (lookup_name, &iter))
96d887e8 6197 {
c1b5c1eb 6198 if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
b5ec771e
PA
6199 {
6200 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6201 {
6202 if (SYMBOL_IS_ARGUMENT (sym))
6203 arg_sym = sym;
6204 else
6205 {
6206 found_sym = 1;
6207 add_defn_to_vec (obstackp,
6208 fixup_symbol_section (sym, objfile),
6209 block);
6210 }
6211 }
6212 }
96d887e8
PH
6213 }
6214
22cee43f
PMR
6215 /* Handle renamings. */
6216
b5ec771e 6217 if (ada_add_block_renamings (obstackp, block, lookup_name, domain))
22cee43f
PMR
6218 found_sym = 1;
6219
96d887e8
PH
6220 if (!found_sym && arg_sym != NULL)
6221 {
76a01679
JB
6222 add_defn_to_vec (obstackp,
6223 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6224 block);
96d887e8
PH
6225 }
6226
b5ec771e 6227 if (!lookup_name.ada ().wild_match_p ())
96d887e8
PH
6228 {
6229 arg_sym = NULL;
6230 found_sym = 0;
b5ec771e
PA
6231 const std::string &ada_lookup_name = lookup_name.ada ().lookup_name ();
6232 const char *name = ada_lookup_name.c_str ();
6233 size_t name_len = ada_lookup_name.size ();
96d887e8
PH
6234
6235 ALL_BLOCK_SYMBOLS (block, iter, sym)
76a01679 6236 {
c1b5c1eb 6237 if (symbol_matches_domain (sym->language (),
4186eb54 6238 SYMBOL_DOMAIN (sym), domain))
76a01679
JB
6239 {
6240 int cmp;
6241
987012b8 6242 cmp = (int) '_' - (int) sym->linkage_name ()[0];
76a01679
JB
6243 if (cmp == 0)
6244 {
987012b8 6245 cmp = !startswith (sym->linkage_name (), "_ada_");
76a01679 6246 if (cmp == 0)
987012b8 6247 cmp = strncmp (name, sym->linkage_name () + 5,
76a01679
JB
6248 name_len);
6249 }
6250
6251 if (cmp == 0
987012b8 6252 && is_name_suffix (sym->linkage_name () + name_len + 5))
76a01679 6253 {
2a2d4dc3
AS
6254 if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
6255 {
6256 if (SYMBOL_IS_ARGUMENT (sym))
6257 arg_sym = sym;
6258 else
6259 {
6260 found_sym = 1;
6261 add_defn_to_vec (obstackp,
6262 fixup_symbol_section (sym, objfile),
6263 block);
6264 }
6265 }
76a01679
JB
6266 }
6267 }
76a01679 6268 }
96d887e8
PH
6269
6270 /* NOTE: This really shouldn't be needed for _ada_ symbols.
6271 They aren't parameters, right? */
6272 if (!found_sym && arg_sym != NULL)
6273 {
6274 add_defn_to_vec (obstackp,
76a01679 6275 fixup_symbol_section (arg_sym, objfile),
2570f2b7 6276 block);
96d887e8
PH
6277 }
6278 }
6279}
6280\f
41d27058
JB
6281
6282 /* Symbol Completion */
6283
b5ec771e 6284/* See symtab.h. */
41d27058 6285
b5ec771e
PA
6286bool
6287ada_lookup_name_info::matches
6288 (const char *sym_name,
6289 symbol_name_match_type match_type,
a207cff2 6290 completion_match_result *comp_match_res) const
41d27058 6291{
b5ec771e
PA
6292 bool match = false;
6293 const char *text = m_encoded_name.c_str ();
6294 size_t text_len = m_encoded_name.size ();
41d27058
JB
6295
6296 /* First, test against the fully qualified name of the symbol. */
6297
6298 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6299 match = true;
41d27058 6300
f945dedf 6301 std::string decoded_name = ada_decode (sym_name);
b5ec771e 6302 if (match && !m_encoded_p)
41d27058
JB
6303 {
6304 /* One needed check before declaring a positive match is to verify
6305 that iff we are doing a verbatim match, the decoded version
6306 of the symbol name starts with '<'. Otherwise, this symbol name
6307 is not a suitable completion. */
41d27058 6308
f945dedf 6309 bool has_angle_bracket = (decoded_name[0] == '<');
b5ec771e 6310 match = (has_angle_bracket == m_verbatim_p);
41d27058
JB
6311 }
6312
b5ec771e 6313 if (match && !m_verbatim_p)
41d27058
JB
6314 {
6315 /* When doing non-verbatim match, another check that needs to
6316 be done is to verify that the potentially matching symbol name
6317 does not include capital letters, because the ada-mode would
6318 not be able to understand these symbol names without the
6319 angle bracket notation. */
6320 const char *tmp;
6321
6322 for (tmp = sym_name; *tmp != '\0' && !isupper (*tmp); tmp++);
6323 if (*tmp != '\0')
b5ec771e 6324 match = false;
41d27058
JB
6325 }
6326
6327 /* Second: Try wild matching... */
6328
b5ec771e 6329 if (!match && m_wild_match_p)
41d27058
JB
6330 {
6331 /* Since we are doing wild matching, this means that TEXT
6332 may represent an unqualified symbol name. We therefore must
6333 also compare TEXT against the unqualified name of the symbol. */
f945dedf 6334 sym_name = ada_unqualified_name (decoded_name.c_str ());
41d27058
JB
6335
6336 if (strncmp (sym_name, text, text_len) == 0)
b5ec771e 6337 match = true;
41d27058
JB
6338 }
6339
b5ec771e 6340 /* Finally: If we found a match, prepare the result to return. */
41d27058
JB
6341
6342 if (!match)
b5ec771e 6343 return false;
41d27058 6344
a207cff2 6345 if (comp_match_res != NULL)
b5ec771e 6346 {
a207cff2 6347 std::string &match_str = comp_match_res->match.storage ();
41d27058 6348
b5ec771e 6349 if (!m_encoded_p)
a207cff2 6350 match_str = ada_decode (sym_name);
b5ec771e
PA
6351 else
6352 {
6353 if (m_verbatim_p)
6354 match_str = add_angle_brackets (sym_name);
6355 else
6356 match_str = sym_name;
41d27058 6357
b5ec771e 6358 }
a207cff2
PA
6359
6360 comp_match_res->set_match (match_str.c_str ());
41d27058
JB
6361 }
6362
b5ec771e 6363 return true;
41d27058
JB
6364}
6365
b5ec771e 6366/* Add the list of possible symbol names completing TEXT to TRACKER.
eb3ff9a5 6367 WORD is the entire command on which completion is made. */
41d27058 6368
eb3ff9a5
PA
6369static void
6370ada_collect_symbol_completion_matches (completion_tracker &tracker,
c6756f62 6371 complete_symbol_mode mode,
b5ec771e
PA
6372 symbol_name_match_type name_match_type,
6373 const char *text, const char *word,
eb3ff9a5 6374 enum type_code code)
41d27058 6375{
41d27058 6376 struct symbol *sym;
3977b71f 6377 const struct block *b, *surrounding_static_block = 0;
8157b174 6378 struct block_iterator iter;
41d27058 6379
2f68a895
TT
6380 gdb_assert (code == TYPE_CODE_UNDEF);
6381
1b026119 6382 lookup_name_info lookup_name (text, name_match_type, true);
41d27058
JB
6383
6384 /* First, look at the partial symtab symbols. */
14bc53a8 6385 expand_symtabs_matching (NULL,
b5ec771e
PA
6386 lookup_name,
6387 NULL,
14bc53a8
PA
6388 NULL,
6389 ALL_DOMAIN);
41d27058
JB
6390
6391 /* At this point scan through the misc symbol vectors and add each
6392 symbol you find to the list. Eventually we want to ignore
6393 anything that isn't a text symbol (everything else will be
6394 handled by the psymtab code above). */
6395
2030c079 6396 for (objfile *objfile : current_program_space->objfiles ())
5325b9bf 6397 {
7932255d 6398 for (minimal_symbol *msymbol : objfile->msymbols ())
5325b9bf
TT
6399 {
6400 QUIT;
6401
6402 if (completion_skip_symbol (mode, msymbol))
6403 continue;
6404
c1b5c1eb 6405 language symbol_language = msymbol->language ();
5325b9bf
TT
6406
6407 /* Ada minimal symbols won't have their language set to Ada. If
6408 we let completion_list_add_name compare using the
6409 default/C-like matcher, then when completing e.g., symbols in a
6410 package named "pck", we'd match internal Ada symbols like
6411 "pckS", which are invalid in an Ada expression, unless you wrap
6412 them in '<' '>' to request a verbatim match.
6413
6414 Unfortunately, some Ada encoded names successfully demangle as
6415 C++ symbols (using an old mangling scheme), such as "name__2Xn"
6416 -> "Xn::name(void)" and thus some Ada minimal symbols end up
6417 with the wrong language set. Paper over that issue here. */
6418 if (symbol_language == language_auto
6419 || symbol_language == language_cplus)
6420 symbol_language = language_ada;
6421
6422 completion_list_add_name (tracker,
6423 symbol_language,
c9d95fa3 6424 msymbol->linkage_name (),
5325b9bf
TT
6425 lookup_name, text, word);
6426 }
6427 }
41d27058
JB
6428
6429 /* Search upwards from currently selected frame (so that we can
6430 complete on local vars. */
6431
6432 for (b = get_selected_block (0); b != NULL; b = BLOCK_SUPERBLOCK (b))
6433 {
6434 if (!BLOCK_SUPERBLOCK (b))
6435 surrounding_static_block = b; /* For elmin of dups */
6436
6437 ALL_BLOCK_SYMBOLS (b, iter, sym)
6438 {
f9d67a22
PA
6439 if (completion_skip_symbol (mode, sym))
6440 continue;
6441
b5ec771e 6442 completion_list_add_name (tracker,
c1b5c1eb 6443 sym->language (),
987012b8 6444 sym->linkage_name (),
1b026119 6445 lookup_name, text, word);
41d27058
JB
6446 }
6447 }
6448
6449 /* Go through the symtabs and check the externs and statics for
43f3e411 6450 symbols which match. */
41d27058 6451
2030c079 6452 for (objfile *objfile : current_program_space->objfiles ())
41d27058 6453 {
b669c953 6454 for (compunit_symtab *s : objfile->compunits ())
d8aeb77f
TT
6455 {
6456 QUIT;
6457 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), GLOBAL_BLOCK);
6458 ALL_BLOCK_SYMBOLS (b, iter, sym)
6459 {
6460 if (completion_skip_symbol (mode, sym))
6461 continue;
f9d67a22 6462
d8aeb77f 6463 completion_list_add_name (tracker,
c1b5c1eb 6464 sym->language (),
987012b8 6465 sym->linkage_name (),
d8aeb77f
TT
6466 lookup_name, text, word);
6467 }
6468 }
41d27058 6469 }
41d27058 6470
2030c079 6471 for (objfile *objfile : current_program_space->objfiles ())
d8aeb77f 6472 {
b669c953 6473 for (compunit_symtab *s : objfile->compunits ())
d8aeb77f
TT
6474 {
6475 QUIT;
6476 b = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (s), STATIC_BLOCK);
6477 /* Don't do this block twice. */
6478 if (b == surrounding_static_block)
6479 continue;
6480 ALL_BLOCK_SYMBOLS (b, iter, sym)
6481 {
6482 if (completion_skip_symbol (mode, sym))
6483 continue;
f9d67a22 6484
d8aeb77f 6485 completion_list_add_name (tracker,
c1b5c1eb 6486 sym->language (),
987012b8 6487 sym->linkage_name (),
d8aeb77f
TT
6488 lookup_name, text, word);
6489 }
6490 }
41d27058 6491 }
41d27058
JB
6492}
6493
963a6417 6494 /* Field Access */
96d887e8 6495
73fb9985
JB
6496/* Return non-zero if TYPE is a pointer to the GNAT dispatch table used
6497 for tagged types. */
6498
6499static int
6500ada_is_dispatch_table_ptr_type (struct type *type)
6501{
0d5cff50 6502 const char *name;
73fb9985 6503
78134374 6504 if (type->code () != TYPE_CODE_PTR)
73fb9985
JB
6505 return 0;
6506
7d93a1e0 6507 name = TYPE_TARGET_TYPE (type)->name ();
73fb9985
JB
6508 if (name == NULL)
6509 return 0;
6510
6511 return (strcmp (name, "ada__tags__dispatch_table") == 0);
6512}
6513
ac4a2da4
JG
6514/* Return non-zero if TYPE is an interface tag. */
6515
6516static int
6517ada_is_interface_tag (struct type *type)
6518{
7d93a1e0 6519 const char *name = type->name ();
ac4a2da4
JG
6520
6521 if (name == NULL)
6522 return 0;
6523
6524 return (strcmp (name, "ada__tags__interface_tag") == 0);
6525}
6526
963a6417
PH
6527/* True if field number FIELD_NUM in struct or union type TYPE is supposed
6528 to be invisible to users. */
96d887e8 6529
963a6417
PH
6530int
6531ada_is_ignored_field (struct type *type, int field_num)
96d887e8 6532{
1f704f76 6533 if (field_num < 0 || field_num > type->num_fields ())
963a6417 6534 return 1;
ffde82bf 6535
73fb9985
JB
6536 /* Check the name of that field. */
6537 {
6538 const char *name = TYPE_FIELD_NAME (type, field_num);
6539
6540 /* Anonymous field names should not be printed.
6541 brobecker/2007-02-20: I don't think this can actually happen
30baf67b 6542 but we don't want to print the value of anonymous fields anyway. */
73fb9985
JB
6543 if (name == NULL)
6544 return 1;
6545
ffde82bf
JB
6546 /* Normally, fields whose name start with an underscore ("_")
6547 are fields that have been internally generated by the compiler,
6548 and thus should not be printed. The "_parent" field is special,
6549 however: This is a field internally generated by the compiler
6550 for tagged types, and it contains the components inherited from
6551 the parent type. This field should not be printed as is, but
6552 should not be ignored either. */
61012eef 6553 if (name[0] == '_' && !startswith (name, "_parent"))
73fb9985
JB
6554 return 1;
6555 }
6556
ac4a2da4
JG
6557 /* If this is the dispatch table of a tagged type or an interface tag,
6558 then ignore. */
73fb9985 6559 if (ada_is_tagged_type (type, 1)
ac4a2da4
JG
6560 && (ada_is_dispatch_table_ptr_type (TYPE_FIELD_TYPE (type, field_num))
6561 || ada_is_interface_tag (TYPE_FIELD_TYPE (type, field_num))))
73fb9985
JB
6562 return 1;
6563
6564 /* Not a special field, so it should not be ignored. */
6565 return 0;
963a6417 6566}
96d887e8 6567
963a6417 6568/* True iff TYPE has a tag field. If REFOK, then TYPE may also be a
0963b4bd 6569 pointer or reference type whose ultimate target has a tag field. */
96d887e8 6570
963a6417
PH
6571int
6572ada_is_tagged_type (struct type *type, int refok)
6573{
988f6b3d 6574 return (ada_lookup_struct_elt_type (type, "_tag", refok, 1) != NULL);
963a6417 6575}
96d887e8 6576
963a6417 6577/* True iff TYPE represents the type of X'Tag */
96d887e8 6578
963a6417
PH
6579int
6580ada_is_tag_type (struct type *type)
6581{
460efde1
JB
6582 type = ada_check_typedef (type);
6583
78134374 6584 if (type == NULL || type->code () != TYPE_CODE_PTR)
963a6417
PH
6585 return 0;
6586 else
96d887e8 6587 {
963a6417 6588 const char *name = ada_type_name (TYPE_TARGET_TYPE (type));
5b4ee69b 6589
963a6417
PH
6590 return (name != NULL
6591 && strcmp (name, "ada__tags__dispatch_table") == 0);
96d887e8 6592 }
96d887e8
PH
6593}
6594
963a6417 6595/* The type of the tag on VAL. */
76a01679 6596
de93309a 6597static struct type *
963a6417 6598ada_tag_type (struct value *val)
96d887e8 6599{
988f6b3d 6600 return ada_lookup_struct_elt_type (value_type (val), "_tag", 1, 0);
963a6417 6601}
96d887e8 6602
b50d69b5
JG
6603/* Return 1 if TAG follows the old scheme for Ada tags (used for Ada 95,
6604 retired at Ada 05). */
6605
6606static int
6607is_ada95_tag (struct value *tag)
6608{
6609 return ada_value_struct_elt (tag, "tsd", 1) != NULL;
6610}
6611
963a6417 6612/* The value of the tag on VAL. */
96d887e8 6613
de93309a 6614static struct value *
963a6417
PH
6615ada_value_tag (struct value *val)
6616{
03ee6b2e 6617 return ada_value_struct_elt (val, "_tag", 0);
96d887e8
PH
6618}
6619
963a6417
PH
6620/* The value of the tag on the object of type TYPE whose contents are
6621 saved at VALADDR, if it is non-null, or is at memory address
0963b4bd 6622 ADDRESS. */
96d887e8 6623
963a6417 6624static struct value *
10a2c479 6625value_tag_from_contents_and_address (struct type *type,
fc1a4b47 6626 const gdb_byte *valaddr,
963a6417 6627 CORE_ADDR address)
96d887e8 6628{
b5385fc0 6629 int tag_byte_offset;
963a6417 6630 struct type *tag_type;
5b4ee69b 6631
963a6417 6632 if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
52ce6436 6633 NULL, NULL, NULL))
96d887e8 6634 {
fc1a4b47 6635 const gdb_byte *valaddr1 = ((valaddr == NULL)
10a2c479
AC
6636 ? NULL
6637 : valaddr + tag_byte_offset);
963a6417 6638 CORE_ADDR address1 = (address == 0) ? 0 : address + tag_byte_offset;
96d887e8 6639
963a6417 6640 return value_from_contents_and_address (tag_type, valaddr1, address1);
96d887e8 6641 }
963a6417
PH
6642 return NULL;
6643}
96d887e8 6644
963a6417
PH
6645static struct type *
6646type_from_tag (struct value *tag)
6647{
6648 const char *type_name = ada_tag_name (tag);
5b4ee69b 6649
963a6417
PH
6650 if (type_name != NULL)
6651 return ada_find_any_type (ada_encode (type_name));
6652 return NULL;
6653}
96d887e8 6654
b50d69b5
JG
6655/* Given a value OBJ of a tagged type, return a value of this
6656 type at the base address of the object. The base address, as
6657 defined in Ada.Tags, it is the address of the primary tag of
6658 the object, and therefore where the field values of its full
6659 view can be fetched. */
6660
6661struct value *
6662ada_tag_value_at_base_address (struct value *obj)
6663{
b50d69b5
JG
6664 struct value *val;
6665 LONGEST offset_to_top = 0;
6666 struct type *ptr_type, *obj_type;
6667 struct value *tag;
6668 CORE_ADDR base_address;
6669
6670 obj_type = value_type (obj);
6671
6672 /* It is the responsability of the caller to deref pointers. */
6673
78134374 6674 if (obj_type->code () == TYPE_CODE_PTR || obj_type->code () == TYPE_CODE_REF)
b50d69b5
JG
6675 return obj;
6676
6677 tag = ada_value_tag (obj);
6678 if (!tag)
6679 return obj;
6680
6681 /* Base addresses only appeared with Ada 05 and multiple inheritance. */
6682
6683 if (is_ada95_tag (tag))
6684 return obj;
6685
08f49010
XR
6686 ptr_type = language_lookup_primitive_type
6687 (language_def (language_ada), target_gdbarch(), "storage_offset");
b50d69b5
JG
6688 ptr_type = lookup_pointer_type (ptr_type);
6689 val = value_cast (ptr_type, tag);
6690 if (!val)
6691 return obj;
6692
6693 /* It is perfectly possible that an exception be raised while
6694 trying to determine the base address, just like for the tag;
6695 see ada_tag_name for more details. We do not print the error
6696 message for the same reason. */
6697
a70b8144 6698 try
b50d69b5
JG
6699 {
6700 offset_to_top = value_as_long (value_ind (value_ptradd (val, -2)));
6701 }
6702
230d2906 6703 catch (const gdb_exception_error &e)
492d29ea
PA
6704 {
6705 return obj;
6706 }
b50d69b5
JG
6707
6708 /* If offset is null, nothing to do. */
6709
6710 if (offset_to_top == 0)
6711 return obj;
6712
6713 /* -1 is a special case in Ada.Tags; however, what should be done
6714 is not quite clear from the documentation. So do nothing for
6715 now. */
6716
6717 if (offset_to_top == -1)
6718 return obj;
6719
08f49010
XR
6720 /* OFFSET_TO_TOP used to be a positive value to be subtracted
6721 from the base address. This was however incompatible with
6722 C++ dispatch table: C++ uses a *negative* value to *add*
6723 to the base address. Ada's convention has therefore been
6724 changed in GNAT 19.0w 20171023: since then, C++ and Ada
6725 use the same convention. Here, we support both cases by
6726 checking the sign of OFFSET_TO_TOP. */
6727
6728 if (offset_to_top > 0)
6729 offset_to_top = -offset_to_top;
6730
6731 base_address = value_address (obj) + offset_to_top;
b50d69b5
JG
6732 tag = value_tag_from_contents_and_address (obj_type, NULL, base_address);
6733
6734 /* Make sure that we have a proper tag at the new address.
6735 Otherwise, offset_to_top is bogus (which can happen when
6736 the object is not initialized yet). */
6737
6738 if (!tag)
6739 return obj;
6740
6741 obj_type = type_from_tag (tag);
6742
6743 if (!obj_type)
6744 return obj;
6745
6746 return value_from_contents_and_address (obj_type, NULL, base_address);
6747}
6748
1b611343
JB
6749/* Return the "ada__tags__type_specific_data" type. */
6750
6751static struct type *
6752ada_get_tsd_type (struct inferior *inf)
963a6417 6753{
1b611343 6754 struct ada_inferior_data *data = get_ada_inferior_data (inf);
4c4b4cd2 6755
1b611343
JB
6756 if (data->tsd_type == 0)
6757 data->tsd_type = ada_find_any_type ("ada__tags__type_specific_data");
6758 return data->tsd_type;
6759}
529cad9c 6760
1b611343
JB
6761/* Return the TSD (type-specific data) associated to the given TAG.
6762 TAG is assumed to be the tag of a tagged-type entity.
529cad9c 6763
1b611343 6764 May return NULL if we are unable to get the TSD. */
4c4b4cd2 6765
1b611343
JB
6766static struct value *
6767ada_get_tsd_from_tag (struct value *tag)
4c4b4cd2 6768{
4c4b4cd2 6769 struct value *val;
1b611343 6770 struct type *type;
5b4ee69b 6771
1b611343
JB
6772 /* First option: The TSD is simply stored as a field of our TAG.
6773 Only older versions of GNAT would use this format, but we have
6774 to test it first, because there are no visible markers for
6775 the current approach except the absence of that field. */
529cad9c 6776
1b611343
JB
6777 val = ada_value_struct_elt (tag, "tsd", 1);
6778 if (val)
6779 return val;
e802dbe0 6780
1b611343
JB
6781 /* Try the second representation for the dispatch table (in which
6782 there is no explicit 'tsd' field in the referent of the tag pointer,
6783 and instead the tsd pointer is stored just before the dispatch
6784 table. */
e802dbe0 6785
1b611343
JB
6786 type = ada_get_tsd_type (current_inferior());
6787 if (type == NULL)
6788 return NULL;
6789 type = lookup_pointer_type (lookup_pointer_type (type));
6790 val = value_cast (type, tag);
6791 if (val == NULL)
6792 return NULL;
6793 return value_ind (value_ptradd (val, -1));
e802dbe0
JB
6794}
6795
1b611343
JB
6796/* Given the TSD of a tag (type-specific data), return a string
6797 containing the name of the associated type.
6798
6799 The returned value is good until the next call. May return NULL
6800 if we are unable to determine the tag name. */
6801
6802static char *
6803ada_tag_name_from_tsd (struct value *tsd)
529cad9c 6804{
529cad9c
PH
6805 static char name[1024];
6806 char *p;
1b611343 6807 struct value *val;
529cad9c 6808
1b611343 6809 val = ada_value_struct_elt (tsd, "expanded_name", 1);
4c4b4cd2 6810 if (val == NULL)
1b611343 6811 return NULL;
4c4b4cd2
PH
6812 read_memory_string (value_as_address (val), name, sizeof (name) - 1);
6813 for (p = name; *p != '\0'; p += 1)
6814 if (isalpha (*p))
6815 *p = tolower (*p);
1b611343 6816 return name;
4c4b4cd2
PH
6817}
6818
6819/* The type name of the dynamic type denoted by the 'tag value TAG, as
1b611343
JB
6820 a C string.
6821
6822 Return NULL if the TAG is not an Ada tag, or if we were unable to
6823 determine the name of that tag. The result is good until the next
6824 call. */
4c4b4cd2
PH
6825
6826const char *
6827ada_tag_name (struct value *tag)
6828{
1b611343 6829 char *name = NULL;
5b4ee69b 6830
df407dfe 6831 if (!ada_is_tag_type (value_type (tag)))
4c4b4cd2 6832 return NULL;
1b611343
JB
6833
6834 /* It is perfectly possible that an exception be raised while trying
6835 to determine the TAG's name, even under normal circumstances:
6836 The associated variable may be uninitialized or corrupted, for
6837 instance. We do not let any exception propagate past this point.
6838 instead we return NULL.
6839
6840 We also do not print the error message either (which often is very
6841 low-level (Eg: "Cannot read memory at 0x[...]"), but instead let
6842 the caller print a more meaningful message if necessary. */
a70b8144 6843 try
1b611343
JB
6844 {
6845 struct value *tsd = ada_get_tsd_from_tag (tag);
6846
6847 if (tsd != NULL)
6848 name = ada_tag_name_from_tsd (tsd);
6849 }
230d2906 6850 catch (const gdb_exception_error &e)
492d29ea
PA
6851 {
6852 }
1b611343
JB
6853
6854 return name;
4c4b4cd2
PH
6855}
6856
6857/* The parent type of TYPE, or NULL if none. */
14f9c5c9 6858
d2e4a39e 6859struct type *
ebf56fd3 6860ada_parent_type (struct type *type)
14f9c5c9
AS
6861{
6862 int i;
6863
61ee279c 6864 type = ada_check_typedef (type);
14f9c5c9 6865
78134374 6866 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
6867 return NULL;
6868
1f704f76 6869 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 6870 if (ada_is_parent_field (type, i))
0c1f74cf
JB
6871 {
6872 struct type *parent_type = TYPE_FIELD_TYPE (type, i);
6873
6874 /* If the _parent field is a pointer, then dereference it. */
78134374 6875 if (parent_type->code () == TYPE_CODE_PTR)
0c1f74cf
JB
6876 parent_type = TYPE_TARGET_TYPE (parent_type);
6877 /* If there is a parallel XVS type, get the actual base type. */
6878 parent_type = ada_get_base_type (parent_type);
6879
6880 return ada_check_typedef (parent_type);
6881 }
14f9c5c9
AS
6882
6883 return NULL;
6884}
6885
4c4b4cd2
PH
6886/* True iff field number FIELD_NUM of structure type TYPE contains the
6887 parent-type (inherited) fields of a derived type. Assumes TYPE is
6888 a structure type with at least FIELD_NUM+1 fields. */
14f9c5c9
AS
6889
6890int
ebf56fd3 6891ada_is_parent_field (struct type *type, int field_num)
14f9c5c9 6892{
61ee279c 6893 const char *name = TYPE_FIELD_NAME (ada_check_typedef (type), field_num);
5b4ee69b 6894
4c4b4cd2 6895 return (name != NULL
61012eef
GB
6896 && (startswith (name, "PARENT")
6897 || startswith (name, "_parent")));
14f9c5c9
AS
6898}
6899
4c4b4cd2 6900/* True iff field number FIELD_NUM of structure type TYPE is a
14f9c5c9 6901 transparent wrapper field (which should be silently traversed when doing
4c4b4cd2 6902 field selection and flattened when printing). Assumes TYPE is a
14f9c5c9 6903 structure type with at least FIELD_NUM+1 fields. Such fields are always
4c4b4cd2 6904 structures. */
14f9c5c9
AS
6905
6906int
ebf56fd3 6907ada_is_wrapper_field (struct type *type, int field_num)
14f9c5c9 6908{
d2e4a39e 6909 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6910
dddc0e16
JB
6911 if (name != NULL && strcmp (name, "RETVAL") == 0)
6912 {
6913 /* This happens in functions with "out" or "in out" parameters
6914 which are passed by copy. For such functions, GNAT describes
6915 the function's return type as being a struct where the return
6916 value is in a field called RETVAL, and where the other "out"
6917 or "in out" parameters are fields of that struct. This is not
6918 a wrapper. */
6919 return 0;
6920 }
6921
d2e4a39e 6922 return (name != NULL
61012eef 6923 && (startswith (name, "PARENT")
4c4b4cd2 6924 || strcmp (name, "REP") == 0
61012eef 6925 || startswith (name, "_parent")
4c4b4cd2 6926 || name[0] == 'S' || name[0] == 'R' || name[0] == 'O'));
14f9c5c9
AS
6927}
6928
4c4b4cd2
PH
6929/* True iff field number FIELD_NUM of structure or union type TYPE
6930 is a variant wrapper. Assumes TYPE is a structure type with at least
6931 FIELD_NUM+1 fields. */
14f9c5c9
AS
6932
6933int
ebf56fd3 6934ada_is_variant_part (struct type *type, int field_num)
14f9c5c9 6935{
8ecb59f8
TT
6936 /* Only Ada types are eligible. */
6937 if (!ADA_TYPE_P (type))
6938 return 0;
6939
d2e4a39e 6940 struct type *field_type = TYPE_FIELD_TYPE (type, field_num);
5b4ee69b 6941
78134374
SM
6942 return (field_type->code () == TYPE_CODE_UNION
6943 || (is_dynamic_field (type, field_num)
6944 && (TYPE_TARGET_TYPE (field_type)->code ()
c3e5cd34 6945 == TYPE_CODE_UNION)));
14f9c5c9
AS
6946}
6947
6948/* Assuming that VAR_TYPE is a variant wrapper (type of the variant part)
4c4b4cd2 6949 whose discriminants are contained in the record type OUTER_TYPE,
7c964f07
UW
6950 returns the type of the controlling discriminant for the variant.
6951 May return NULL if the type could not be found. */
14f9c5c9 6952
d2e4a39e 6953struct type *
ebf56fd3 6954ada_variant_discrim_type (struct type *var_type, struct type *outer_type)
14f9c5c9 6955{
a121b7c1 6956 const char *name = ada_variant_discrim_name (var_type);
5b4ee69b 6957
988f6b3d 6958 return ada_lookup_struct_elt_type (outer_type, name, 1, 1);
14f9c5c9
AS
6959}
6960
4c4b4cd2 6961/* Assuming that TYPE is the type of a variant wrapper, and FIELD_NUM is a
14f9c5c9 6962 valid field number within it, returns 1 iff field FIELD_NUM of TYPE
4c4b4cd2 6963 represents a 'when others' clause; otherwise 0. */
14f9c5c9 6964
de93309a 6965static int
ebf56fd3 6966ada_is_others_clause (struct type *type, int field_num)
14f9c5c9 6967{
d2e4a39e 6968 const char *name = TYPE_FIELD_NAME (type, field_num);
5b4ee69b 6969
14f9c5c9
AS
6970 return (name != NULL && name[0] == 'O');
6971}
6972
6973/* Assuming that TYPE0 is the type of the variant part of a record,
4c4b4cd2
PH
6974 returns the name of the discriminant controlling the variant.
6975 The value is valid until the next call to ada_variant_discrim_name. */
14f9c5c9 6976
a121b7c1 6977const char *
ebf56fd3 6978ada_variant_discrim_name (struct type *type0)
14f9c5c9 6979{
d2e4a39e 6980 static char *result = NULL;
14f9c5c9 6981 static size_t result_len = 0;
d2e4a39e
AS
6982 struct type *type;
6983 const char *name;
6984 const char *discrim_end;
6985 const char *discrim_start;
14f9c5c9 6986
78134374 6987 if (type0->code () == TYPE_CODE_PTR)
14f9c5c9
AS
6988 type = TYPE_TARGET_TYPE (type0);
6989 else
6990 type = type0;
6991
6992 name = ada_type_name (type);
6993
6994 if (name == NULL || name[0] == '\000')
6995 return "";
6996
6997 for (discrim_end = name + strlen (name) - 6; discrim_end != name;
6998 discrim_end -= 1)
6999 {
61012eef 7000 if (startswith (discrim_end, "___XVN"))
4c4b4cd2 7001 break;
14f9c5c9
AS
7002 }
7003 if (discrim_end == name)
7004 return "";
7005
d2e4a39e 7006 for (discrim_start = discrim_end; discrim_start != name + 3;
14f9c5c9
AS
7007 discrim_start -= 1)
7008 {
d2e4a39e 7009 if (discrim_start == name + 1)
4c4b4cd2 7010 return "";
76a01679 7011 if ((discrim_start > name + 3
61012eef 7012 && startswith (discrim_start - 3, "___"))
4c4b4cd2
PH
7013 || discrim_start[-1] == '.')
7014 break;
14f9c5c9
AS
7015 }
7016
7017 GROW_VECT (result, result_len, discrim_end - discrim_start + 1);
7018 strncpy (result, discrim_start, discrim_end - discrim_start);
d2e4a39e 7019 result[discrim_end - discrim_start] = '\0';
14f9c5c9
AS
7020 return result;
7021}
7022
4c4b4cd2
PH
7023/* Scan STR for a subtype-encoded number, beginning at position K.
7024 Put the position of the character just past the number scanned in
7025 *NEW_K, if NEW_K!=NULL. Put the scanned number in *R, if R!=NULL.
7026 Return 1 if there was a valid number at the given position, and 0
7027 otherwise. A "subtype-encoded" number consists of the absolute value
7028 in decimal, followed by the letter 'm' to indicate a negative number.
7029 Assumes 0m does not occur. */
14f9c5c9
AS
7030
7031int
d2e4a39e 7032ada_scan_number (const char str[], int k, LONGEST * R, int *new_k)
14f9c5c9
AS
7033{
7034 ULONGEST RU;
7035
d2e4a39e 7036 if (!isdigit (str[k]))
14f9c5c9
AS
7037 return 0;
7038
4c4b4cd2 7039 /* Do it the hard way so as not to make any assumption about
14f9c5c9 7040 the relationship of unsigned long (%lu scan format code) and
4c4b4cd2 7041 LONGEST. */
14f9c5c9
AS
7042 RU = 0;
7043 while (isdigit (str[k]))
7044 {
d2e4a39e 7045 RU = RU * 10 + (str[k] - '0');
14f9c5c9
AS
7046 k += 1;
7047 }
7048
d2e4a39e 7049 if (str[k] == 'm')
14f9c5c9
AS
7050 {
7051 if (R != NULL)
4c4b4cd2 7052 *R = (-(LONGEST) (RU - 1)) - 1;
14f9c5c9
AS
7053 k += 1;
7054 }
7055 else if (R != NULL)
7056 *R = (LONGEST) RU;
7057
4c4b4cd2 7058 /* NOTE on the above: Technically, C does not say what the results of
14f9c5c9
AS
7059 - (LONGEST) RU or (LONGEST) -RU are for RU == largest positive
7060 number representable as a LONGEST (although either would probably work
7061 in most implementations). When RU>0, the locution in the then branch
4c4b4cd2 7062 above is always equivalent to the negative of RU. */
14f9c5c9
AS
7063
7064 if (new_k != NULL)
7065 *new_k = k;
7066 return 1;
7067}
7068
4c4b4cd2
PH
7069/* Assuming that TYPE is a variant part wrapper type (a VARIANTS field),
7070 and FIELD_NUM is a valid field number within it, returns 1 iff VAL is
7071 in the range encoded by field FIELD_NUM of TYPE; otherwise 0. */
14f9c5c9 7072
de93309a 7073static int
ebf56fd3 7074ada_in_variant (LONGEST val, struct type *type, int field_num)
14f9c5c9 7075{
d2e4a39e 7076 const char *name = TYPE_FIELD_NAME (type, field_num);
14f9c5c9
AS
7077 int p;
7078
7079 p = 0;
7080 while (1)
7081 {
d2e4a39e 7082 switch (name[p])
4c4b4cd2
PH
7083 {
7084 case '\0':
7085 return 0;
7086 case 'S':
7087 {
7088 LONGEST W;
5b4ee69b 7089
4c4b4cd2
PH
7090 if (!ada_scan_number (name, p + 1, &W, &p))
7091 return 0;
7092 if (val == W)
7093 return 1;
7094 break;
7095 }
7096 case 'R':
7097 {
7098 LONGEST L, U;
5b4ee69b 7099
4c4b4cd2
PH
7100 if (!ada_scan_number (name, p + 1, &L, &p)
7101 || name[p] != 'T' || !ada_scan_number (name, p + 1, &U, &p))
7102 return 0;
7103 if (val >= L && val <= U)
7104 return 1;
7105 break;
7106 }
7107 case 'O':
7108 return 1;
7109 default:
7110 return 0;
7111 }
7112 }
7113}
7114
0963b4bd 7115/* FIXME: Lots of redundancy below. Try to consolidate. */
4c4b4cd2
PH
7116
7117/* Given a value ARG1 (offset by OFFSET bytes) of a struct or union type
7118 ARG_TYPE, extract and return the value of one of its (non-static)
7119 fields. FIELDNO says which field. Differs from value_primitive_field
7120 only in that it can handle packed values of arbitrary type. */
14f9c5c9 7121
5eb68a39 7122struct value *
d2e4a39e 7123ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
4c4b4cd2 7124 struct type *arg_type)
14f9c5c9 7125{
14f9c5c9
AS
7126 struct type *type;
7127
61ee279c 7128 arg_type = ada_check_typedef (arg_type);
14f9c5c9
AS
7129 type = TYPE_FIELD_TYPE (arg_type, fieldno);
7130
4504bbde
TT
7131 /* Handle packed fields. It might be that the field is not packed
7132 relative to its containing structure, but the structure itself is
7133 packed; in this case we must take the bit-field path. */
7134 if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0 || value_bitpos (arg1) != 0)
14f9c5c9
AS
7135 {
7136 int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
7137 int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
d2e4a39e 7138
0fd88904 7139 return ada_value_primitive_packed_val (arg1, value_contents (arg1),
4c4b4cd2
PH
7140 offset + bit_pos / 8,
7141 bit_pos % 8, bit_size, type);
14f9c5c9
AS
7142 }
7143 else
7144 return value_primitive_field (arg1, offset, fieldno, arg_type);
7145}
7146
52ce6436
PH
7147/* Find field with name NAME in object of type TYPE. If found,
7148 set the following for each argument that is non-null:
7149 - *FIELD_TYPE_P to the field's type;
7150 - *BYTE_OFFSET_P to OFFSET + the byte offset of the field within
7151 an object of that type;
7152 - *BIT_OFFSET_P to the bit offset modulo byte size of the field;
7153 - *BIT_SIZE_P to its size in bits if the field is packed, and
7154 0 otherwise;
7155 If INDEX_P is non-null, increment *INDEX_P by the number of source-visible
7156 fields up to but not including the desired field, or by the total
7157 number of fields if not found. A NULL value of NAME never
7158 matches; the function just counts visible fields in this case.
7159
828d5846
XR
7160 Notice that we need to handle when a tagged record hierarchy
7161 has some components with the same name, like in this scenario:
7162
7163 type Top_T is tagged record
7164 N : Integer := 1;
7165 U : Integer := 974;
7166 A : Integer := 48;
7167 end record;
7168
7169 type Middle_T is new Top.Top_T with record
7170 N : Character := 'a';
7171 C : Integer := 3;
7172 end record;
7173
7174 type Bottom_T is new Middle.Middle_T with record
7175 N : Float := 4.0;
7176 C : Character := '5';
7177 X : Integer := 6;
7178 A : Character := 'J';
7179 end record;
7180
7181 Let's say we now have a variable declared and initialized as follow:
7182
7183 TC : Top_A := new Bottom_T;
7184
7185 And then we use this variable to call this function
7186
7187 procedure Assign (Obj: in out Top_T; TV : Integer);
7188
7189 as follow:
7190
7191 Assign (Top_T (B), 12);
7192
7193 Now, we're in the debugger, and we're inside that procedure
7194 then and we want to print the value of obj.c:
7195
7196 Usually, the tagged record or one of the parent type owns the
7197 component to print and there's no issue but in this particular
7198 case, what does it mean to ask for Obj.C? Since the actual
7199 type for object is type Bottom_T, it could mean two things: type
7200 component C from the Middle_T view, but also component C from
7201 Bottom_T. So in that "undefined" case, when the component is
7202 not found in the non-resolved type (which includes all the
7203 components of the parent type), then resolve it and see if we
7204 get better luck once expanded.
7205
7206 In the case of homonyms in the derived tagged type, we don't
7207 guaranty anything, and pick the one that's easiest for us
7208 to program.
7209
0963b4bd 7210 Returns 1 if found, 0 otherwise. */
52ce6436 7211
4c4b4cd2 7212static int
0d5cff50 7213find_struct_field (const char *name, struct type *type, int offset,
76a01679 7214 struct type **field_type_p,
52ce6436
PH
7215 int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
7216 int *index_p)
4c4b4cd2
PH
7217{
7218 int i;
828d5846 7219 int parent_offset = -1;
4c4b4cd2 7220
61ee279c 7221 type = ada_check_typedef (type);
76a01679 7222
52ce6436
PH
7223 if (field_type_p != NULL)
7224 *field_type_p = NULL;
7225 if (byte_offset_p != NULL)
d5d6fca5 7226 *byte_offset_p = 0;
52ce6436
PH
7227 if (bit_offset_p != NULL)
7228 *bit_offset_p = 0;
7229 if (bit_size_p != NULL)
7230 *bit_size_p = 0;
7231
1f704f76 7232 for (i = 0; i < type->num_fields (); i += 1)
4c4b4cd2
PH
7233 {
7234 int bit_pos = TYPE_FIELD_BITPOS (type, i);
7235 int fld_offset = offset + bit_pos / 8;
0d5cff50 7236 const char *t_field_name = TYPE_FIELD_NAME (type, i);
76a01679 7237
4c4b4cd2
PH
7238 if (t_field_name == NULL)
7239 continue;
7240
828d5846
XR
7241 else if (ada_is_parent_field (type, i))
7242 {
7243 /* This is a field pointing us to the parent type of a tagged
7244 type. As hinted in this function's documentation, we give
7245 preference to fields in the current record first, so what
7246 we do here is just record the index of this field before
7247 we skip it. If it turns out we couldn't find our field
7248 in the current record, then we'll get back to it and search
7249 inside it whether the field might exist in the parent. */
7250
7251 parent_offset = i;
7252 continue;
7253 }
7254
52ce6436 7255 else if (name != NULL && field_name_match (t_field_name, name))
76a01679
JB
7256 {
7257 int bit_size = TYPE_FIELD_BITSIZE (type, i);
5b4ee69b 7258
52ce6436
PH
7259 if (field_type_p != NULL)
7260 *field_type_p = TYPE_FIELD_TYPE (type, i);
7261 if (byte_offset_p != NULL)
7262 *byte_offset_p = fld_offset;
7263 if (bit_offset_p != NULL)
7264 *bit_offset_p = bit_pos % 8;
7265 if (bit_size_p != NULL)
7266 *bit_size_p = bit_size;
76a01679
JB
7267 return 1;
7268 }
4c4b4cd2
PH
7269 else if (ada_is_wrapper_field (type, i))
7270 {
52ce6436
PH
7271 if (find_struct_field (name, TYPE_FIELD_TYPE (type, i), fld_offset,
7272 field_type_p, byte_offset_p, bit_offset_p,
7273 bit_size_p, index_p))
76a01679
JB
7274 return 1;
7275 }
4c4b4cd2
PH
7276 else if (ada_is_variant_part (type, i))
7277 {
52ce6436
PH
7278 /* PNH: Wait. Do we ever execute this section, or is ARG always of
7279 fixed type?? */
4c4b4cd2 7280 int j;
52ce6436
PH
7281 struct type *field_type
7282 = ada_check_typedef (TYPE_FIELD_TYPE (type, i));
4c4b4cd2 7283
1f704f76 7284 for (j = 0; j < field_type->num_fields (); j += 1)
4c4b4cd2 7285 {
76a01679
JB
7286 if (find_struct_field (name, TYPE_FIELD_TYPE (field_type, j),
7287 fld_offset
7288 + TYPE_FIELD_BITPOS (field_type, j) / 8,
7289 field_type_p, byte_offset_p,
52ce6436 7290 bit_offset_p, bit_size_p, index_p))
76a01679 7291 return 1;
4c4b4cd2
PH
7292 }
7293 }
52ce6436
PH
7294 else if (index_p != NULL)
7295 *index_p += 1;
4c4b4cd2 7296 }
828d5846
XR
7297
7298 /* Field not found so far. If this is a tagged type which
7299 has a parent, try finding that field in the parent now. */
7300
7301 if (parent_offset != -1)
7302 {
7303 int bit_pos = TYPE_FIELD_BITPOS (type, parent_offset);
7304 int fld_offset = offset + bit_pos / 8;
7305
7306 if (find_struct_field (name, TYPE_FIELD_TYPE (type, parent_offset),
7307 fld_offset, field_type_p, byte_offset_p,
7308 bit_offset_p, bit_size_p, index_p))
7309 return 1;
7310 }
7311
4c4b4cd2
PH
7312 return 0;
7313}
7314
0963b4bd 7315/* Number of user-visible fields in record type TYPE. */
4c4b4cd2 7316
52ce6436
PH
7317static int
7318num_visible_fields (struct type *type)
7319{
7320 int n;
5b4ee69b 7321
52ce6436
PH
7322 n = 0;
7323 find_struct_field (NULL, type, 0, NULL, NULL, NULL, NULL, &n);
7324 return n;
7325}
14f9c5c9 7326
4c4b4cd2 7327/* Look for a field NAME in ARG. Adjust the address of ARG by OFFSET bytes,
14f9c5c9
AS
7328 and search in it assuming it has (class) type TYPE.
7329 If found, return value, else return NULL.
7330
828d5846
XR
7331 Searches recursively through wrapper fields (e.g., '_parent').
7332
7333 In the case of homonyms in the tagged types, please refer to the
7334 long explanation in find_struct_field's function documentation. */
14f9c5c9 7335
4c4b4cd2 7336static struct value *
108d56a4 7337ada_search_struct_field (const char *name, struct value *arg, int offset,
4c4b4cd2 7338 struct type *type)
14f9c5c9
AS
7339{
7340 int i;
828d5846 7341 int parent_offset = -1;
14f9c5c9 7342
5b4ee69b 7343 type = ada_check_typedef (type);
1f704f76 7344 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7345 {
0d5cff50 7346 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9
AS
7347
7348 if (t_field_name == NULL)
4c4b4cd2 7349 continue;
14f9c5c9 7350
828d5846
XR
7351 else if (ada_is_parent_field (type, i))
7352 {
7353 /* This is a field pointing us to the parent type of a tagged
7354 type. As hinted in this function's documentation, we give
7355 preference to fields in the current record first, so what
7356 we do here is just record the index of this field before
7357 we skip it. If it turns out we couldn't find our field
7358 in the current record, then we'll get back to it and search
7359 inside it whether the field might exist in the parent. */
7360
7361 parent_offset = i;
7362 continue;
7363 }
7364
14f9c5c9 7365 else if (field_name_match (t_field_name, name))
4c4b4cd2 7366 return ada_value_primitive_field (arg, offset, i, type);
14f9c5c9
AS
7367
7368 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7369 {
0963b4bd 7370 struct value *v = /* Do not let indent join lines here. */
06d5cf63
JB
7371 ada_search_struct_field (name, arg,
7372 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7373 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7374
4c4b4cd2
PH
7375 if (v != NULL)
7376 return v;
7377 }
14f9c5c9
AS
7378
7379 else if (ada_is_variant_part (type, i))
4c4b4cd2 7380 {
0963b4bd 7381 /* PNH: Do we ever get here? See find_struct_field. */
4c4b4cd2 7382 int j;
5b4ee69b
MS
7383 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7384 i));
4c4b4cd2
PH
7385 int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
7386
1f704f76 7387 for (j = 0; j < field_type->num_fields (); j += 1)
4c4b4cd2 7388 {
0963b4bd
MS
7389 struct value *v = ada_search_struct_field /* Force line
7390 break. */
06d5cf63
JB
7391 (name, arg,
7392 var_offset + TYPE_FIELD_BITPOS (field_type, j) / 8,
7393 TYPE_FIELD_TYPE (field_type, j));
5b4ee69b 7394
4c4b4cd2
PH
7395 if (v != NULL)
7396 return v;
7397 }
7398 }
14f9c5c9 7399 }
828d5846
XR
7400
7401 /* Field not found so far. If this is a tagged type which
7402 has a parent, try finding that field in the parent now. */
7403
7404 if (parent_offset != -1)
7405 {
7406 struct value *v = ada_search_struct_field (
7407 name, arg, offset + TYPE_FIELD_BITPOS (type, parent_offset) / 8,
7408 TYPE_FIELD_TYPE (type, parent_offset));
7409
7410 if (v != NULL)
7411 return v;
7412 }
7413
14f9c5c9
AS
7414 return NULL;
7415}
d2e4a39e 7416
52ce6436
PH
7417static struct value *ada_index_struct_field_1 (int *, struct value *,
7418 int, struct type *);
7419
7420
7421/* Return field #INDEX in ARG, where the index is that returned by
7422 * find_struct_field through its INDEX_P argument. Adjust the address
7423 * of ARG by OFFSET bytes, and search in it assuming it has (class) type TYPE.
0963b4bd 7424 * If found, return value, else return NULL. */
52ce6436
PH
7425
7426static struct value *
7427ada_index_struct_field (int index, struct value *arg, int offset,
7428 struct type *type)
7429{
7430 return ada_index_struct_field_1 (&index, arg, offset, type);
7431}
7432
7433
7434/* Auxiliary function for ada_index_struct_field. Like
7435 * ada_index_struct_field, but takes index from *INDEX_P and modifies
0963b4bd 7436 * *INDEX_P. */
52ce6436
PH
7437
7438static struct value *
7439ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
7440 struct type *type)
7441{
7442 int i;
7443 type = ada_check_typedef (type);
7444
1f704f76 7445 for (i = 0; i < type->num_fields (); i += 1)
52ce6436
PH
7446 {
7447 if (TYPE_FIELD_NAME (type, i) == NULL)
7448 continue;
7449 else if (ada_is_wrapper_field (type, i))
7450 {
0963b4bd 7451 struct value *v = /* Do not let indent join lines here. */
52ce6436
PH
7452 ada_index_struct_field_1 (index_p, arg,
7453 offset + TYPE_FIELD_BITPOS (type, i) / 8,
7454 TYPE_FIELD_TYPE (type, i));
5b4ee69b 7455
52ce6436
PH
7456 if (v != NULL)
7457 return v;
7458 }
7459
7460 else if (ada_is_variant_part (type, i))
7461 {
7462 /* PNH: Do we ever get here? See ada_search_struct_field,
0963b4bd 7463 find_struct_field. */
52ce6436
PH
7464 error (_("Cannot assign this kind of variant record"));
7465 }
7466 else if (*index_p == 0)
7467 return ada_value_primitive_field (arg, offset, i, type);
7468 else
7469 *index_p -= 1;
7470 }
7471 return NULL;
7472}
7473
3b4de39c 7474/* Return a string representation of type TYPE. */
99bbb428 7475
3b4de39c 7476static std::string
99bbb428
PA
7477type_as_string (struct type *type)
7478{
d7e74731 7479 string_file tmp_stream;
99bbb428 7480
d7e74731 7481 type_print (type, "", &tmp_stream, -1);
99bbb428 7482
d7e74731 7483 return std::move (tmp_stream.string ());
99bbb428
PA
7484}
7485
14f9c5c9 7486/* Given a type TYPE, look up the type of the component of type named NAME.
4c4b4cd2
PH
7487 If DISPP is non-null, add its byte displacement from the beginning of a
7488 structure (pointed to by a value) of type TYPE to *DISPP (does not
14f9c5c9
AS
7489 work for packed fields).
7490
7491 Matches any field whose name has NAME as a prefix, possibly
4c4b4cd2 7492 followed by "___".
14f9c5c9 7493
0963b4bd 7494 TYPE can be either a struct or union. If REFOK, TYPE may also
4c4b4cd2
PH
7495 be a (pointer or reference)+ to a struct or union, and the
7496 ultimate target type will be searched.
14f9c5c9
AS
7497
7498 Looks recursively into variant clauses and parent types.
7499
828d5846
XR
7500 In the case of homonyms in the tagged types, please refer to the
7501 long explanation in find_struct_field's function documentation.
7502
4c4b4cd2
PH
7503 If NOERR is nonzero, return NULL if NAME is not suitably defined or
7504 TYPE is not a type of the right kind. */
14f9c5c9 7505
4c4b4cd2 7506static struct type *
a121b7c1 7507ada_lookup_struct_elt_type (struct type *type, const char *name, int refok,
988f6b3d 7508 int noerr)
14f9c5c9
AS
7509{
7510 int i;
828d5846 7511 int parent_offset = -1;
14f9c5c9
AS
7512
7513 if (name == NULL)
7514 goto BadName;
7515
76a01679 7516 if (refok && type != NULL)
4c4b4cd2
PH
7517 while (1)
7518 {
61ee279c 7519 type = ada_check_typedef (type);
78134374 7520 if (type->code () != TYPE_CODE_PTR && type->code () != TYPE_CODE_REF)
76a01679
JB
7521 break;
7522 type = TYPE_TARGET_TYPE (type);
4c4b4cd2 7523 }
14f9c5c9 7524
76a01679 7525 if (type == NULL
78134374
SM
7526 || (type->code () != TYPE_CODE_STRUCT
7527 && type->code () != TYPE_CODE_UNION))
14f9c5c9 7528 {
4c4b4cd2 7529 if (noerr)
76a01679 7530 return NULL;
99bbb428 7531
3b4de39c
PA
7532 error (_("Type %s is not a structure or union type"),
7533 type != NULL ? type_as_string (type).c_str () : _("(null)"));
14f9c5c9
AS
7534 }
7535
7536 type = to_static_fixed_type (type);
7537
1f704f76 7538 for (i = 0; i < type->num_fields (); i += 1)
14f9c5c9 7539 {
0d5cff50 7540 const char *t_field_name = TYPE_FIELD_NAME (type, i);
14f9c5c9 7541 struct type *t;
d2e4a39e 7542
14f9c5c9 7543 if (t_field_name == NULL)
4c4b4cd2 7544 continue;
14f9c5c9 7545
828d5846
XR
7546 else if (ada_is_parent_field (type, i))
7547 {
7548 /* This is a field pointing us to the parent type of a tagged
7549 type. As hinted in this function's documentation, we give
7550 preference to fields in the current record first, so what
7551 we do here is just record the index of this field before
7552 we skip it. If it turns out we couldn't find our field
7553 in the current record, then we'll get back to it and search
7554 inside it whether the field might exist in the parent. */
7555
7556 parent_offset = i;
7557 continue;
7558 }
7559
14f9c5c9 7560 else if (field_name_match (t_field_name, name))
988f6b3d 7561 return TYPE_FIELD_TYPE (type, i);
14f9c5c9
AS
7562
7563 else if (ada_is_wrapper_field (type, i))
4c4b4cd2 7564 {
4c4b4cd2 7565 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name,
988f6b3d 7566 0, 1);
4c4b4cd2 7567 if (t != NULL)
988f6b3d 7568 return t;
4c4b4cd2 7569 }
14f9c5c9
AS
7570
7571 else if (ada_is_variant_part (type, i))
4c4b4cd2
PH
7572 {
7573 int j;
5b4ee69b
MS
7574 struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
7575 i));
4c4b4cd2 7576
1f704f76 7577 for (j = field_type->num_fields () - 1; j >= 0; j -= 1)
4c4b4cd2 7578 {
b1f33ddd
JB
7579 /* FIXME pnh 2008/01/26: We check for a field that is
7580 NOT wrapped in a struct, since the compiler sometimes
7581 generates these for unchecked variant types. Revisit
0963b4bd 7582 if the compiler changes this practice. */
0d5cff50 7583 const char *v_field_name = TYPE_FIELD_NAME (field_type, j);
988f6b3d 7584
b1f33ddd
JB
7585 if (v_field_name != NULL
7586 && field_name_match (v_field_name, name))
460efde1 7587 t = TYPE_FIELD_TYPE (field_type, j);
b1f33ddd 7588 else
0963b4bd
MS
7589 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (field_type,
7590 j),
988f6b3d 7591 name, 0, 1);
b1f33ddd 7592
4c4b4cd2 7593 if (t != NULL)
988f6b3d 7594 return t;
4c4b4cd2
PH
7595 }
7596 }
14f9c5c9
AS
7597
7598 }
7599
828d5846
XR
7600 /* Field not found so far. If this is a tagged type which
7601 has a parent, try finding that field in the parent now. */
7602
7603 if (parent_offset != -1)
7604 {
7605 struct type *t;
7606
7607 t = ada_lookup_struct_elt_type (TYPE_FIELD_TYPE (type, parent_offset),
7608 name, 0, 1);
7609 if (t != NULL)
7610 return t;
7611 }
7612
14f9c5c9 7613BadName:
d2e4a39e 7614 if (!noerr)
14f9c5c9 7615 {
2b2798cc 7616 const char *name_str = name != NULL ? name : _("<null>");
99bbb428
PA
7617
7618 error (_("Type %s has no component named %s"),
3b4de39c 7619 type_as_string (type).c_str (), name_str);
14f9c5c9
AS
7620 }
7621
7622 return NULL;
7623}
7624
b1f33ddd
JB
7625/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
7626 within a value of type OUTER_TYPE, return true iff VAR_TYPE
7627 represents an unchecked union (that is, the variant part of a
0963b4bd 7628 record that is named in an Unchecked_Union pragma). */
b1f33ddd
JB
7629
7630static int
7631is_unchecked_variant (struct type *var_type, struct type *outer_type)
7632{
a121b7c1 7633 const char *discrim_name = ada_variant_discrim_name (var_type);
5b4ee69b 7634
988f6b3d 7635 return (ada_lookup_struct_elt_type (outer_type, discrim_name, 0, 1) == NULL);
b1f33ddd
JB
7636}
7637
7638
14f9c5c9 7639/* Assuming that VAR_TYPE is the type of a variant part of a record (a union),
d8af9068 7640 within OUTER, determine which variant clause (field number in VAR_TYPE,
4c4b4cd2 7641 numbering from 0) is applicable. Returns -1 if none are. */
14f9c5c9 7642
d2e4a39e 7643int
d8af9068 7644ada_which_variant_applies (struct type *var_type, struct value *outer)
14f9c5c9
AS
7645{
7646 int others_clause;
7647 int i;
a121b7c1 7648 const char *discrim_name = ada_variant_discrim_name (var_type);
0c281816 7649 struct value *discrim;
14f9c5c9
AS
7650 LONGEST discrim_val;
7651
012370f6
TT
7652 /* Using plain value_from_contents_and_address here causes problems
7653 because we will end up trying to resolve a type that is currently
7654 being constructed. */
0c281816
JB
7655 discrim = ada_value_struct_elt (outer, discrim_name, 1);
7656 if (discrim == NULL)
14f9c5c9 7657 return -1;
0c281816 7658 discrim_val = value_as_long (discrim);
14f9c5c9
AS
7659
7660 others_clause = -1;
1f704f76 7661 for (i = 0; i < var_type->num_fields (); i += 1)
14f9c5c9
AS
7662 {
7663 if (ada_is_others_clause (var_type, i))
4c4b4cd2 7664 others_clause = i;
14f9c5c9 7665 else if (ada_in_variant (discrim_val, var_type, i))
4c4b4cd2 7666 return i;
14f9c5c9
AS
7667 }
7668
7669 return others_clause;
7670}
d2e4a39e 7671\f
14f9c5c9
AS
7672
7673
4c4b4cd2 7674 /* Dynamic-Sized Records */
14f9c5c9
AS
7675
7676/* Strategy: The type ostensibly attached to a value with dynamic size
7677 (i.e., a size that is not statically recorded in the debugging
7678 data) does not accurately reflect the size or layout of the value.
7679 Our strategy is to convert these values to values with accurate,
4c4b4cd2 7680 conventional types that are constructed on the fly. */
14f9c5c9
AS
7681
7682/* There is a subtle and tricky problem here. In general, we cannot
7683 determine the size of dynamic records without its data. However,
7684 the 'struct value' data structure, which GDB uses to represent
7685 quantities in the inferior process (the target), requires the size
7686 of the type at the time of its allocation in order to reserve space
7687 for GDB's internal copy of the data. That's why the
7688 'to_fixed_xxx_type' routines take (target) addresses as parameters,
4c4b4cd2 7689 rather than struct value*s.
14f9c5c9
AS
7690
7691 However, GDB's internal history variables ($1, $2, etc.) are
7692 struct value*s containing internal copies of the data that are not, in
7693 general, the same as the data at their corresponding addresses in
7694 the target. Fortunately, the types we give to these values are all
7695 conventional, fixed-size types (as per the strategy described
7696 above), so that we don't usually have to perform the
7697 'to_fixed_xxx_type' conversions to look at their values.
7698 Unfortunately, there is one exception: if one of the internal
7699 history variables is an array whose elements are unconstrained
7700 records, then we will need to create distinct fixed types for each
7701 element selected. */
7702
7703/* The upshot of all of this is that many routines take a (type, host
7704 address, target address) triple as arguments to represent a value.
7705 The host address, if non-null, is supposed to contain an internal
7706 copy of the relevant data; otherwise, the program is to consult the
4c4b4cd2 7707 target at the target address. */
14f9c5c9
AS
7708
7709/* Assuming that VAL0 represents a pointer value, the result of
7710 dereferencing it. Differs from value_ind in its treatment of
4c4b4cd2 7711 dynamic-sized types. */
14f9c5c9 7712
d2e4a39e
AS
7713struct value *
7714ada_value_ind (struct value *val0)
14f9c5c9 7715{
c48db5ca 7716 struct value *val = value_ind (val0);
5b4ee69b 7717
b50d69b5
JG
7718 if (ada_is_tagged_type (value_type (val), 0))
7719 val = ada_tag_value_at_base_address (val);
7720
4c4b4cd2 7721 return ada_to_fixed_value (val);
14f9c5c9
AS
7722}
7723
7724/* The value resulting from dereferencing any "reference to"
4c4b4cd2
PH
7725 qualifiers on VAL0. */
7726
d2e4a39e
AS
7727static struct value *
7728ada_coerce_ref (struct value *val0)
7729{
78134374 7730 if (value_type (val0)->code () == TYPE_CODE_REF)
d2e4a39e
AS
7731 {
7732 struct value *val = val0;
5b4ee69b 7733
994b9211 7734 val = coerce_ref (val);
b50d69b5
JG
7735
7736 if (ada_is_tagged_type (value_type (val), 0))
7737 val = ada_tag_value_at_base_address (val);
7738
4c4b4cd2 7739 return ada_to_fixed_value (val);
d2e4a39e
AS
7740 }
7741 else
14f9c5c9
AS
7742 return val0;
7743}
7744
4c4b4cd2 7745/* Return the bit alignment required for field #F of template type TYPE. */
14f9c5c9
AS
7746
7747static unsigned int
ebf56fd3 7748field_alignment (struct type *type, int f)
14f9c5c9 7749{
d2e4a39e 7750 const char *name = TYPE_FIELD_NAME (type, f);
64a1bf19 7751 int len;
14f9c5c9
AS
7752 int align_offset;
7753
64a1bf19
JB
7754 /* The field name should never be null, unless the debugging information
7755 is somehow malformed. In this case, we assume the field does not
7756 require any alignment. */
7757 if (name == NULL)
7758 return 1;
7759
7760 len = strlen (name);
7761
4c4b4cd2
PH
7762 if (!isdigit (name[len - 1]))
7763 return 1;
14f9c5c9 7764
d2e4a39e 7765 if (isdigit (name[len - 2]))
14f9c5c9
AS
7766 align_offset = len - 2;
7767 else
7768 align_offset = len - 1;
7769
61012eef 7770 if (align_offset < 7 || !startswith (name + align_offset - 6, "___XV"))
14f9c5c9
AS
7771 return TARGET_CHAR_BIT;
7772
4c4b4cd2
PH
7773 return atoi (name + align_offset) * TARGET_CHAR_BIT;
7774}
7775
852dff6c 7776/* Find a typedef or tag symbol named NAME. Ignores ambiguity. */
4c4b4cd2 7777
852dff6c
JB
7778static struct symbol *
7779ada_find_any_type_symbol (const char *name)
4c4b4cd2
PH
7780{
7781 struct symbol *sym;
7782
7783 sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
4186eb54 7784 if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
4c4b4cd2
PH
7785 return sym;
7786
4186eb54
KS
7787 sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
7788 return sym;
14f9c5c9
AS
7789}
7790
dddfab26
UW
7791/* Find a type named NAME. Ignores ambiguity. This routine will look
7792 solely for types defined by debug info, it will not search the GDB
7793 primitive types. */
4c4b4cd2 7794
852dff6c 7795static struct type *
ebf56fd3 7796ada_find_any_type (const char *name)
14f9c5c9 7797{
852dff6c 7798 struct symbol *sym = ada_find_any_type_symbol (name);
14f9c5c9 7799
14f9c5c9 7800 if (sym != NULL)
dddfab26 7801 return SYMBOL_TYPE (sym);
14f9c5c9 7802
dddfab26 7803 return NULL;
14f9c5c9
AS
7804}
7805
739593e0
JB
7806/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
7807 associated with NAME_SYM's name. NAME_SYM may itself be a renaming
7808 symbol, in which case it is returned. Otherwise, this looks for
7809 symbols whose name is that of NAME_SYM suffixed with "___XR".
7810 Return symbol if found, and NULL otherwise. */
4c4b4cd2 7811
c0e70c62
TT
7812static bool
7813ada_is_renaming_symbol (struct symbol *name_sym)
aeb5907d 7814{
987012b8 7815 const char *name = name_sym->linkage_name ();
c0e70c62 7816 return strstr (name, "___XR") != NULL;
4c4b4cd2
PH
7817}
7818
14f9c5c9 7819/* Because of GNAT encoding conventions, several GDB symbols may match a
4c4b4cd2 7820 given type name. If the type denoted by TYPE0 is to be preferred to
14f9c5c9 7821 that of TYPE1 for purposes of type printing, return non-zero;
4c4b4cd2
PH
7822 otherwise return 0. */
7823
14f9c5c9 7824int
d2e4a39e 7825ada_prefer_type (struct type *type0, struct type *type1)
14f9c5c9
AS
7826{
7827 if (type1 == NULL)
7828 return 1;
7829 else if (type0 == NULL)
7830 return 0;
78134374 7831 else if (type1->code () == TYPE_CODE_VOID)
14f9c5c9 7832 return 1;
78134374 7833 else if (type0->code () == TYPE_CODE_VOID)
14f9c5c9 7834 return 0;
7d93a1e0 7835 else if (type1->name () == NULL && type0->name () != NULL)
4c4b4cd2 7836 return 1;
ad82864c 7837 else if (ada_is_constrained_packed_array_type (type0))
14f9c5c9 7838 return 1;
4c4b4cd2
PH
7839 else if (ada_is_array_descriptor_type (type0)
7840 && !ada_is_array_descriptor_type (type1))
14f9c5c9 7841 return 1;
aeb5907d
JB
7842 else
7843 {
7d93a1e0
SM
7844 const char *type0_name = type0->name ();
7845 const char *type1_name = type1->name ();
aeb5907d
JB
7846
7847 if (type0_name != NULL && strstr (type0_name, "___XR") != NULL
7848 && (type1_name == NULL || strstr (type1_name, "___XR") == NULL))
7849 return 1;
7850 }
14f9c5c9
AS
7851 return 0;
7852}
7853
e86ca25f
TT
7854/* The name of TYPE, which is its TYPE_NAME. Null if TYPE is
7855 null. */
4c4b4cd2 7856
0d5cff50 7857const char *
d2e4a39e 7858ada_type_name (struct type *type)
14f9c5c9 7859{
d2e4a39e 7860 if (type == NULL)
14f9c5c9 7861 return NULL;
7d93a1e0 7862 return type->name ();
14f9c5c9
AS
7863}
7864
b4ba55a1
JB
7865/* Search the list of "descriptive" types associated to TYPE for a type
7866 whose name is NAME. */
7867
7868static struct type *
7869find_parallel_type_by_descriptive_type (struct type *type, const char *name)
7870{
931e5bc3 7871 struct type *result, *tmp;
b4ba55a1 7872
c6044dd1
JB
7873 if (ada_ignore_descriptive_types_p)
7874 return NULL;
7875
b4ba55a1
JB
7876 /* If there no descriptive-type info, then there is no parallel type
7877 to be found. */
7878 if (!HAVE_GNAT_AUX_INFO (type))
7879 return NULL;
7880
7881 result = TYPE_DESCRIPTIVE_TYPE (type);
7882 while (result != NULL)
7883 {
0d5cff50 7884 const char *result_name = ada_type_name (result);
b4ba55a1
JB
7885
7886 if (result_name == NULL)
7887 {
7888 warning (_("unexpected null name on descriptive type"));
7889 return NULL;
7890 }
7891
7892 /* If the names match, stop. */
7893 if (strcmp (result_name, name) == 0)
7894 break;
7895
7896 /* Otherwise, look at the next item on the list, if any. */
7897 if (HAVE_GNAT_AUX_INFO (result))
931e5bc3
JG
7898 tmp = TYPE_DESCRIPTIVE_TYPE (result);
7899 else
7900 tmp = NULL;
7901
7902 /* If not found either, try after having resolved the typedef. */
7903 if (tmp != NULL)
7904 result = tmp;
b4ba55a1 7905 else
931e5bc3 7906 {
f168693b 7907 result = check_typedef (result);
931e5bc3
JG
7908 if (HAVE_GNAT_AUX_INFO (result))
7909 result = TYPE_DESCRIPTIVE_TYPE (result);
7910 else
7911 result = NULL;
7912 }
b4ba55a1
JB
7913 }
7914
7915 /* If we didn't find a match, see whether this is a packed array. With
7916 older compilers, the descriptive type information is either absent or
7917 irrelevant when it comes to packed arrays so the above lookup fails.
7918 Fall back to using a parallel lookup by name in this case. */
12ab9e09 7919 if (result == NULL && ada_is_constrained_packed_array_type (type))
b4ba55a1
JB
7920 return ada_find_any_type (name);
7921
7922 return result;
7923}
7924
7925/* Find a parallel type to TYPE with the specified NAME, using the
7926 descriptive type taken from the debugging information, if available,
7927 and otherwise using the (slower) name-based method. */
7928
7929static struct type *
7930ada_find_parallel_type_with_name (struct type *type, const char *name)
7931{
7932 struct type *result = NULL;
7933
7934 if (HAVE_GNAT_AUX_INFO (type))
7935 result = find_parallel_type_by_descriptive_type (type, name);
7936 else
7937 result = ada_find_any_type (name);
7938
7939 return result;
7940}
7941
7942/* Same as above, but specify the name of the parallel type by appending
4c4b4cd2 7943 SUFFIX to the name of TYPE. */
14f9c5c9 7944
d2e4a39e 7945struct type *
ebf56fd3 7946ada_find_parallel_type (struct type *type, const char *suffix)
14f9c5c9 7947{
0d5cff50 7948 char *name;
fe978cb0 7949 const char *type_name = ada_type_name (type);
14f9c5c9 7950 int len;
d2e4a39e 7951
fe978cb0 7952 if (type_name == NULL)
14f9c5c9
AS
7953 return NULL;
7954
fe978cb0 7955 len = strlen (type_name);
14f9c5c9 7956
b4ba55a1 7957 name = (char *) alloca (len + strlen (suffix) + 1);
14f9c5c9 7958
fe978cb0 7959 strcpy (name, type_name);
14f9c5c9
AS
7960 strcpy (name + len, suffix);
7961
b4ba55a1 7962 return ada_find_parallel_type_with_name (type, name);
14f9c5c9
AS
7963}
7964
14f9c5c9 7965/* If TYPE is a variable-size record type, return the corresponding template
4c4b4cd2 7966 type describing its fields. Otherwise, return NULL. */
14f9c5c9 7967
d2e4a39e
AS
7968static struct type *
7969dynamic_template_type (struct type *type)
14f9c5c9 7970{
61ee279c 7971 type = ada_check_typedef (type);
14f9c5c9 7972
78134374 7973 if (type == NULL || type->code () != TYPE_CODE_STRUCT
d2e4a39e 7974 || ada_type_name (type) == NULL)
14f9c5c9 7975 return NULL;
d2e4a39e 7976 else
14f9c5c9
AS
7977 {
7978 int len = strlen (ada_type_name (type));
5b4ee69b 7979
4c4b4cd2
PH
7980 if (len > 6 && strcmp (ada_type_name (type) + len - 6, "___XVE") == 0)
7981 return type;
14f9c5c9 7982 else
4c4b4cd2 7983 return ada_find_parallel_type (type, "___XVE");
14f9c5c9
AS
7984 }
7985}
7986
7987/* Assuming that TEMPL_TYPE is a union or struct type, returns
4c4b4cd2 7988 non-zero iff field FIELD_NUM of TEMPL_TYPE has dynamic size. */
14f9c5c9 7989
d2e4a39e
AS
7990static int
7991is_dynamic_field (struct type *templ_type, int field_num)
14f9c5c9
AS
7992{
7993 const char *name = TYPE_FIELD_NAME (templ_type, field_num);
5b4ee69b 7994
d2e4a39e 7995 return name != NULL
78134374 7996 && TYPE_FIELD_TYPE (templ_type, field_num)->code () == TYPE_CODE_PTR
14f9c5c9
AS
7997 && strstr (name, "___XVL") != NULL;
7998}
7999
4c4b4cd2
PH
8000/* The index of the variant field of TYPE, or -1 if TYPE does not
8001 represent a variant record type. */
14f9c5c9 8002
d2e4a39e 8003static int
4c4b4cd2 8004variant_field_index (struct type *type)
14f9c5c9
AS
8005{
8006 int f;
8007
78134374 8008 if (type == NULL || type->code () != TYPE_CODE_STRUCT)
4c4b4cd2
PH
8009 return -1;
8010
1f704f76 8011 for (f = 0; f < type->num_fields (); f += 1)
4c4b4cd2
PH
8012 {
8013 if (ada_is_variant_part (type, f))
8014 return f;
8015 }
8016 return -1;
14f9c5c9
AS
8017}
8018
4c4b4cd2
PH
8019/* A record type with no fields. */
8020
d2e4a39e 8021static struct type *
fe978cb0 8022empty_record (struct type *templ)
14f9c5c9 8023{
fe978cb0 8024 struct type *type = alloc_type_copy (templ);
5b4ee69b 8025
67607e24 8026 type->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8027 INIT_NONE_SPECIFIC (type);
d0e39ea2 8028 type->set_name ("<empty>");
14f9c5c9
AS
8029 TYPE_LENGTH (type) = 0;
8030 return type;
8031}
8032
8033/* An ordinary record type (with fixed-length fields) that describes
4c4b4cd2
PH
8034 the value of type TYPE at VALADDR or ADDRESS (see comments at
8035 the beginning of this section) VAL according to GNAT conventions.
8036 DVAL0 should describe the (portion of a) record that contains any
df407dfe 8037 necessary discriminants. It should be NULL if value_type (VAL) is
14f9c5c9
AS
8038 an outer-level type (i.e., as opposed to a branch of a variant.) A
8039 variant field (unless unchecked) is replaced by a particular branch
4c4b4cd2 8040 of the variant.
14f9c5c9 8041
4c4b4cd2
PH
8042 If not KEEP_DYNAMIC_FIELDS, then all fields whose position or
8043 length are not statically known are discarded. As a consequence,
8044 VALADDR, ADDRESS and DVAL0 are ignored.
8045
8046 NOTE: Limitations: For now, we assume that dynamic fields and
8047 variants occupy whole numbers of bytes. However, they need not be
8048 byte-aligned. */
8049
8050struct type *
10a2c479 8051ada_template_to_fixed_record_type_1 (struct type *type,
fc1a4b47 8052 const gdb_byte *valaddr,
4c4b4cd2
PH
8053 CORE_ADDR address, struct value *dval0,
8054 int keep_dynamic_fields)
14f9c5c9 8055{
d2e4a39e
AS
8056 struct value *mark = value_mark ();
8057 struct value *dval;
8058 struct type *rtype;
14f9c5c9 8059 int nfields, bit_len;
4c4b4cd2 8060 int variant_field;
14f9c5c9 8061 long off;
d94e4f4f 8062 int fld_bit_len;
14f9c5c9
AS
8063 int f;
8064
4c4b4cd2
PH
8065 /* Compute the number of fields in this record type that are going
8066 to be processed: unless keep_dynamic_fields, this includes only
8067 fields whose position and length are static will be processed. */
8068 if (keep_dynamic_fields)
1f704f76 8069 nfields = type->num_fields ();
4c4b4cd2
PH
8070 else
8071 {
8072 nfields = 0;
1f704f76 8073 while (nfields < type->num_fields ()
4c4b4cd2
PH
8074 && !ada_is_variant_part (type, nfields)
8075 && !is_dynamic_field (type, nfields))
8076 nfields++;
8077 }
8078
e9bb382b 8079 rtype = alloc_type_copy (type);
67607e24 8080 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8081 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8082 rtype->set_num_fields (nfields);
3cabb6b0
SM
8083 rtype->set_fields
8084 ((struct field *) TYPE_ZALLOC (rtype, nfields * sizeof (struct field)));
d0e39ea2 8085 rtype->set_name (ada_type_name (type));
876cecd0 8086 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9 8087
d2e4a39e
AS
8088 off = 0;
8089 bit_len = 0;
4c4b4cd2
PH
8090 variant_field = -1;
8091
14f9c5c9
AS
8092 for (f = 0; f < nfields; f += 1)
8093 {
a89febbd 8094 off = align_up (off, field_alignment (type, f))
6c038f32 8095 + TYPE_FIELD_BITPOS (type, f);
ceacbf6e 8096 SET_FIELD_BITPOS (rtype->field (f), off);
d2e4a39e 8097 TYPE_FIELD_BITSIZE (rtype, f) = 0;
14f9c5c9 8098
d2e4a39e 8099 if (ada_is_variant_part (type, f))
4c4b4cd2
PH
8100 {
8101 variant_field = f;
d94e4f4f 8102 fld_bit_len = 0;
4c4b4cd2 8103 }
14f9c5c9 8104 else if (is_dynamic_field (type, f))
4c4b4cd2 8105 {
284614f0
JB
8106 const gdb_byte *field_valaddr = valaddr;
8107 CORE_ADDR field_address = address;
8108 struct type *field_type =
8109 TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, f));
8110
4c4b4cd2 8111 if (dval0 == NULL)
b5304971
JG
8112 {
8113 /* rtype's length is computed based on the run-time
8114 value of discriminants. If the discriminants are not
8115 initialized, the type size may be completely bogus and
0963b4bd 8116 GDB may fail to allocate a value for it. So check the
b5304971 8117 size first before creating the value. */
c1b5a1a6 8118 ada_ensure_varsize_limit (rtype);
012370f6
TT
8119 /* Using plain value_from_contents_and_address here
8120 causes problems because we will end up trying to
8121 resolve a type that is currently being
8122 constructed. */
8123 dval = value_from_contents_and_address_unresolved (rtype,
8124 valaddr,
8125 address);
9f1f738a 8126 rtype = value_type (dval);
b5304971 8127 }
4c4b4cd2
PH
8128 else
8129 dval = dval0;
8130
284614f0
JB
8131 /* If the type referenced by this field is an aligner type, we need
8132 to unwrap that aligner type, because its size might not be set.
8133 Keeping the aligner type would cause us to compute the wrong
8134 size for this field, impacting the offset of the all the fields
8135 that follow this one. */
8136 if (ada_is_aligner_type (field_type))
8137 {
8138 long field_offset = TYPE_FIELD_BITPOS (field_type, f);
8139
8140 field_valaddr = cond_offset_host (field_valaddr, field_offset);
8141 field_address = cond_offset_target (field_address, field_offset);
8142 field_type = ada_aligned_type (field_type);
8143 }
8144
8145 field_valaddr = cond_offset_host (field_valaddr,
8146 off / TARGET_CHAR_BIT);
8147 field_address = cond_offset_target (field_address,
8148 off / TARGET_CHAR_BIT);
8149
8150 /* Get the fixed type of the field. Note that, in this case,
8151 we do not want to get the real type out of the tag: if
8152 the current field is the parent part of a tagged record,
8153 we will get the tag of the object. Clearly wrong: the real
8154 type of the parent is not the real type of the child. We
8155 would end up in an infinite loop. */
8156 field_type = ada_get_base_type (field_type);
8157 field_type = ada_to_fixed_type (field_type, field_valaddr,
8158 field_address, dval, 0);
27f2a97b
JB
8159 /* If the field size is already larger than the maximum
8160 object size, then the record itself will necessarily
8161 be larger than the maximum object size. We need to make
8162 this check now, because the size might be so ridiculously
8163 large (due to an uninitialized variable in the inferior)
8164 that it would cause an overflow when adding it to the
8165 record size. */
c1b5a1a6 8166 ada_ensure_varsize_limit (field_type);
284614f0
JB
8167
8168 TYPE_FIELD_TYPE (rtype, f) = field_type;
4c4b4cd2 8169 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
27f2a97b
JB
8170 /* The multiplication can potentially overflow. But because
8171 the field length has been size-checked just above, and
8172 assuming that the maximum size is a reasonable value,
8173 an overflow should not happen in practice. So rather than
8174 adding overflow recovery code to this already complex code,
8175 we just assume that it's not going to happen. */
d94e4f4f 8176 fld_bit_len =
4c4b4cd2
PH
8177 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, f)) * TARGET_CHAR_BIT;
8178 }
14f9c5c9 8179 else
4c4b4cd2 8180 {
5ded5331
JB
8181 /* Note: If this field's type is a typedef, it is important
8182 to preserve the typedef layer.
8183
8184 Otherwise, we might be transforming a typedef to a fat
8185 pointer (encoding a pointer to an unconstrained array),
8186 into a basic fat pointer (encoding an unconstrained
8187 array). As both types are implemented using the same
8188 structure, the typedef is the only clue which allows us
8189 to distinguish between the two options. Stripping it
8190 would prevent us from printing this field appropriately. */
8191 TYPE_FIELD_TYPE (rtype, f) = TYPE_FIELD_TYPE (type, f);
4c4b4cd2
PH
8192 TYPE_FIELD_NAME (rtype, f) = TYPE_FIELD_NAME (type, f);
8193 if (TYPE_FIELD_BITSIZE (type, f) > 0)
d94e4f4f 8194 fld_bit_len =
4c4b4cd2
PH
8195 TYPE_FIELD_BITSIZE (rtype, f) = TYPE_FIELD_BITSIZE (type, f);
8196 else
5ded5331
JB
8197 {
8198 struct type *field_type = TYPE_FIELD_TYPE (type, f);
8199
8200 /* We need to be careful of typedefs when computing
8201 the length of our field. If this is a typedef,
8202 get the length of the target type, not the length
8203 of the typedef. */
78134374 8204 if (field_type->code () == TYPE_CODE_TYPEDEF)
5ded5331
JB
8205 field_type = ada_typedef_target_type (field_type);
8206
8207 fld_bit_len =
8208 TYPE_LENGTH (ada_check_typedef (field_type)) * TARGET_CHAR_BIT;
8209 }
4c4b4cd2 8210 }
14f9c5c9 8211 if (off + fld_bit_len > bit_len)
4c4b4cd2 8212 bit_len = off + fld_bit_len;
d94e4f4f 8213 off += fld_bit_len;
4c4b4cd2 8214 TYPE_LENGTH (rtype) =
a89febbd 8215 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
14f9c5c9 8216 }
4c4b4cd2
PH
8217
8218 /* We handle the variant part, if any, at the end because of certain
b1f33ddd 8219 odd cases in which it is re-ordered so as NOT to be the last field of
4c4b4cd2
PH
8220 the record. This can happen in the presence of representation
8221 clauses. */
8222 if (variant_field >= 0)
8223 {
8224 struct type *branch_type;
8225
8226 off = TYPE_FIELD_BITPOS (rtype, variant_field);
8227
8228 if (dval0 == NULL)
9f1f738a 8229 {
012370f6
TT
8230 /* Using plain value_from_contents_and_address here causes
8231 problems because we will end up trying to resolve a type
8232 that is currently being constructed. */
8233 dval = value_from_contents_and_address_unresolved (rtype, valaddr,
8234 address);
9f1f738a
SA
8235 rtype = value_type (dval);
8236 }
4c4b4cd2
PH
8237 else
8238 dval = dval0;
8239
8240 branch_type =
8241 to_fixed_variant_branch_type
8242 (TYPE_FIELD_TYPE (type, variant_field),
8243 cond_offset_host (valaddr, off / TARGET_CHAR_BIT),
8244 cond_offset_target (address, off / TARGET_CHAR_BIT), dval);
8245 if (branch_type == NULL)
8246 {
1f704f76 8247 for (f = variant_field + 1; f < rtype->num_fields (); f += 1)
80fc5e77 8248 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8249 rtype->set_num_fields (rtype->num_fields () - 1);
4c4b4cd2
PH
8250 }
8251 else
8252 {
8253 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8254 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8255 fld_bit_len =
8256 TYPE_LENGTH (TYPE_FIELD_TYPE (rtype, variant_field)) *
8257 TARGET_CHAR_BIT;
8258 if (off + fld_bit_len > bit_len)
8259 bit_len = off + fld_bit_len;
8260 TYPE_LENGTH (rtype) =
a89febbd 8261 align_up (bit_len, TARGET_CHAR_BIT) / TARGET_CHAR_BIT;
4c4b4cd2
PH
8262 }
8263 }
8264
714e53ab
PH
8265 /* According to exp_dbug.ads, the size of TYPE for variable-size records
8266 should contain the alignment of that record, which should be a strictly
8267 positive value. If null or negative, then something is wrong, most
8268 probably in the debug info. In that case, we don't round up the size
0963b4bd 8269 of the resulting type. If this record is not part of another structure,
714e53ab
PH
8270 the current RTYPE length might be good enough for our purposes. */
8271 if (TYPE_LENGTH (type) <= 0)
8272 {
7d93a1e0 8273 if (rtype->name ())
cc1defb1 8274 warning (_("Invalid type size for `%s' detected: %s."),
7d93a1e0 8275 rtype->name (), pulongest (TYPE_LENGTH (type)));
323e0a4a 8276 else
cc1defb1
KS
8277 warning (_("Invalid type size for <unnamed> detected: %s."),
8278 pulongest (TYPE_LENGTH (type)));
714e53ab
PH
8279 }
8280 else
8281 {
a89febbd
TT
8282 TYPE_LENGTH (rtype) = align_up (TYPE_LENGTH (rtype),
8283 TYPE_LENGTH (type));
714e53ab 8284 }
14f9c5c9
AS
8285
8286 value_free_to_mark (mark);
d2e4a39e 8287 if (TYPE_LENGTH (rtype) > varsize_limit)
323e0a4a 8288 error (_("record type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8289 return rtype;
8290}
8291
4c4b4cd2
PH
8292/* As for ada_template_to_fixed_record_type_1 with KEEP_DYNAMIC_FIELDS
8293 of 1. */
14f9c5c9 8294
d2e4a39e 8295static struct type *
fc1a4b47 8296template_to_fixed_record_type (struct type *type, const gdb_byte *valaddr,
4c4b4cd2
PH
8297 CORE_ADDR address, struct value *dval0)
8298{
8299 return ada_template_to_fixed_record_type_1 (type, valaddr,
8300 address, dval0, 1);
8301}
8302
8303/* An ordinary record type in which ___XVL-convention fields and
8304 ___XVU- and ___XVN-convention field types in TYPE0 are replaced with
8305 static approximations, containing all possible fields. Uses
8306 no runtime values. Useless for use in values, but that's OK,
8307 since the results are used only for type determinations. Works on both
8308 structs and unions. Representation note: to save space, we memorize
8309 the result of this function in the TYPE_TARGET_TYPE of the
8310 template type. */
8311
8312static struct type *
8313template_to_static_fixed_type (struct type *type0)
14f9c5c9
AS
8314{
8315 struct type *type;
8316 int nfields;
8317 int f;
8318
9e195661
PMR
8319 /* No need no do anything if the input type is already fixed. */
8320 if (TYPE_FIXED_INSTANCE (type0))
8321 return type0;
8322
8323 /* Likewise if we already have computed the static approximation. */
4c4b4cd2
PH
8324 if (TYPE_TARGET_TYPE (type0) != NULL)
8325 return TYPE_TARGET_TYPE (type0);
8326
9e195661 8327 /* Don't clone TYPE0 until we are sure we are going to need a copy. */
4c4b4cd2 8328 type = type0;
1f704f76 8329 nfields = type0->num_fields ();
9e195661
PMR
8330
8331 /* Whether or not we cloned TYPE0, cache the result so that we don't do
8332 recompute all over next time. */
8333 TYPE_TARGET_TYPE (type0) = type;
14f9c5c9
AS
8334
8335 for (f = 0; f < nfields; f += 1)
8336 {
460efde1 8337 struct type *field_type = TYPE_FIELD_TYPE (type0, f);
4c4b4cd2 8338 struct type *new_type;
14f9c5c9 8339
4c4b4cd2 8340 if (is_dynamic_field (type0, f))
460efde1
JB
8341 {
8342 field_type = ada_check_typedef (field_type);
8343 new_type = to_static_fixed_type (TYPE_TARGET_TYPE (field_type));
8344 }
14f9c5c9 8345 else
f192137b 8346 new_type = static_unwrap_type (field_type);
9e195661
PMR
8347
8348 if (new_type != field_type)
8349 {
8350 /* Clone TYPE0 only the first time we get a new field type. */
8351 if (type == type0)
8352 {
8353 TYPE_TARGET_TYPE (type0) = type = alloc_type_copy (type0);
78134374 8354 type->set_code (type0->code ());
8ecb59f8 8355 INIT_NONE_SPECIFIC (type);
5e33d5f4 8356 type->set_num_fields (nfields);
3cabb6b0
SM
8357
8358 field *fields =
8359 ((struct field *)
8360 TYPE_ALLOC (type, nfields * sizeof (struct field)));
80fc5e77 8361 memcpy (fields, type0->fields (),
9e195661 8362 sizeof (struct field) * nfields);
3cabb6b0
SM
8363 type->set_fields (fields);
8364
d0e39ea2 8365 type->set_name (ada_type_name (type0));
9e195661
PMR
8366 TYPE_FIXED_INSTANCE (type) = 1;
8367 TYPE_LENGTH (type) = 0;
8368 }
8369 TYPE_FIELD_TYPE (type, f) = new_type;
8370 TYPE_FIELD_NAME (type, f) = TYPE_FIELD_NAME (type0, f);
8371 }
14f9c5c9 8372 }
9e195661 8373
14f9c5c9
AS
8374 return type;
8375}
8376
4c4b4cd2 8377/* Given an object of type TYPE whose contents are at VALADDR and
5823c3ef
JB
8378 whose address in memory is ADDRESS, returns a revision of TYPE,
8379 which should be a non-dynamic-sized record, in which the variant
8380 part, if any, is replaced with the appropriate branch. Looks
4c4b4cd2
PH
8381 for discriminant values in DVAL0, which can be NULL if the record
8382 contains the necessary discriminant values. */
8383
d2e4a39e 8384static struct type *
fc1a4b47 8385to_record_with_fixed_variant_part (struct type *type, const gdb_byte *valaddr,
4c4b4cd2 8386 CORE_ADDR address, struct value *dval0)
14f9c5c9 8387{
d2e4a39e 8388 struct value *mark = value_mark ();
4c4b4cd2 8389 struct value *dval;
d2e4a39e 8390 struct type *rtype;
14f9c5c9 8391 struct type *branch_type;
1f704f76 8392 int nfields = type->num_fields ();
4c4b4cd2 8393 int variant_field = variant_field_index (type);
14f9c5c9 8394
4c4b4cd2 8395 if (variant_field == -1)
14f9c5c9
AS
8396 return type;
8397
4c4b4cd2 8398 if (dval0 == NULL)
9f1f738a
SA
8399 {
8400 dval = value_from_contents_and_address (type, valaddr, address);
8401 type = value_type (dval);
8402 }
4c4b4cd2
PH
8403 else
8404 dval = dval0;
8405
e9bb382b 8406 rtype = alloc_type_copy (type);
67607e24 8407 rtype->set_code (TYPE_CODE_STRUCT);
8ecb59f8 8408 INIT_NONE_SPECIFIC (rtype);
5e33d5f4 8409 rtype->set_num_fields (nfields);
3cabb6b0
SM
8410
8411 field *fields =
d2e4a39e 8412 (struct field *) TYPE_ALLOC (rtype, nfields * sizeof (struct field));
80fc5e77 8413 memcpy (fields, type->fields (), sizeof (struct field) * nfields);
3cabb6b0
SM
8414 rtype->set_fields (fields);
8415
d0e39ea2 8416 rtype->set_name (ada_type_name (type));
876cecd0 8417 TYPE_FIXED_INSTANCE (rtype) = 1;
14f9c5c9
AS
8418 TYPE_LENGTH (rtype) = TYPE_LENGTH (type);
8419
4c4b4cd2
PH
8420 branch_type = to_fixed_variant_branch_type
8421 (TYPE_FIELD_TYPE (type, variant_field),
d2e4a39e 8422 cond_offset_host (valaddr,
4c4b4cd2
PH
8423 TYPE_FIELD_BITPOS (type, variant_field)
8424 / TARGET_CHAR_BIT),
d2e4a39e 8425 cond_offset_target (address,
4c4b4cd2
PH
8426 TYPE_FIELD_BITPOS (type, variant_field)
8427 / TARGET_CHAR_BIT), dval);
d2e4a39e 8428 if (branch_type == NULL)
14f9c5c9 8429 {
4c4b4cd2 8430 int f;
5b4ee69b 8431
4c4b4cd2 8432 for (f = variant_field + 1; f < nfields; f += 1)
80fc5e77 8433 rtype->field (f - 1) = rtype->field (f);
5e33d5f4 8434 rtype->set_num_fields (rtype->num_fields () - 1);
14f9c5c9
AS
8435 }
8436 else
8437 {
4c4b4cd2
PH
8438 TYPE_FIELD_TYPE (rtype, variant_field) = branch_type;
8439 TYPE_FIELD_NAME (rtype, variant_field) = "S";
8440 TYPE_FIELD_BITSIZE (rtype, variant_field) = 0;
14f9c5c9 8441 TYPE_LENGTH (rtype) += TYPE_LENGTH (branch_type);
14f9c5c9 8442 }
4c4b4cd2 8443 TYPE_LENGTH (rtype) -= TYPE_LENGTH (TYPE_FIELD_TYPE (type, variant_field));
d2e4a39e 8444
4c4b4cd2 8445 value_free_to_mark (mark);
14f9c5c9
AS
8446 return rtype;
8447}
8448
8449/* An ordinary record type (with fixed-length fields) that describes
8450 the value at (TYPE0, VALADDR, ADDRESS) [see explanation at
8451 beginning of this section]. Any necessary discriminants' values
4c4b4cd2
PH
8452 should be in DVAL, a record value; it may be NULL if the object
8453 at ADDR itself contains any necessary discriminant values.
8454 Additionally, VALADDR and ADDRESS may also be NULL if no discriminant
8455 values from the record are needed. Except in the case that DVAL,
8456 VALADDR, and ADDRESS are all 0 or NULL, a variant field (unless
8457 unchecked) is replaced by a particular branch of the variant.
8458
8459 NOTE: the case in which DVAL and VALADDR are NULL and ADDRESS is 0
8460 is questionable and may be removed. It can arise during the
8461 processing of an unconstrained-array-of-record type where all the
8462 variant branches have exactly the same size. This is because in
8463 such cases, the compiler does not bother to use the XVS convention
8464 when encoding the record. I am currently dubious of this
8465 shortcut and suspect the compiler should be altered. FIXME. */
14f9c5c9 8466
d2e4a39e 8467static struct type *
fc1a4b47 8468to_fixed_record_type (struct type *type0, const gdb_byte *valaddr,
4c4b4cd2 8469 CORE_ADDR address, struct value *dval)
14f9c5c9 8470{
d2e4a39e 8471 struct type *templ_type;
14f9c5c9 8472
876cecd0 8473 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8474 return type0;
8475
d2e4a39e 8476 templ_type = dynamic_template_type (type0);
14f9c5c9
AS
8477
8478 if (templ_type != NULL)
8479 return template_to_fixed_record_type (templ_type, valaddr, address, dval);
4c4b4cd2
PH
8480 else if (variant_field_index (type0) >= 0)
8481 {
8482 if (dval == NULL && valaddr == NULL && address == 0)
8483 return type0;
8484 return to_record_with_fixed_variant_part (type0, valaddr, address,
8485 dval);
8486 }
14f9c5c9
AS
8487 else
8488 {
876cecd0 8489 TYPE_FIXED_INSTANCE (type0) = 1;
14f9c5c9
AS
8490 return type0;
8491 }
8492
8493}
8494
8495/* An ordinary record type (with fixed-length fields) that describes
8496 the value at (VAR_TYPE0, VALADDR, ADDRESS), where VAR_TYPE0 is a
8497 union type. Any necessary discriminants' values should be in DVAL,
8498 a record value. That is, this routine selects the appropriate
8499 branch of the union at ADDR according to the discriminant value
b1f33ddd 8500 indicated in the union's type name. Returns VAR_TYPE0 itself if
0963b4bd 8501 it represents a variant subject to a pragma Unchecked_Union. */
14f9c5c9 8502
d2e4a39e 8503static struct type *
fc1a4b47 8504to_fixed_variant_branch_type (struct type *var_type0, const gdb_byte *valaddr,
4c4b4cd2 8505 CORE_ADDR address, struct value *dval)
14f9c5c9
AS
8506{
8507 int which;
d2e4a39e
AS
8508 struct type *templ_type;
8509 struct type *var_type;
14f9c5c9 8510
78134374 8511 if (var_type0->code () == TYPE_CODE_PTR)
14f9c5c9 8512 var_type = TYPE_TARGET_TYPE (var_type0);
d2e4a39e 8513 else
14f9c5c9
AS
8514 var_type = var_type0;
8515
8516 templ_type = ada_find_parallel_type (var_type, "___XVU");
8517
8518 if (templ_type != NULL)
8519 var_type = templ_type;
8520
b1f33ddd
JB
8521 if (is_unchecked_variant (var_type, value_type (dval)))
8522 return var_type0;
d8af9068 8523 which = ada_which_variant_applies (var_type, dval);
14f9c5c9
AS
8524
8525 if (which < 0)
e9bb382b 8526 return empty_record (var_type);
14f9c5c9 8527 else if (is_dynamic_field (var_type, which))
4c4b4cd2 8528 return to_fixed_record_type
d2e4a39e
AS
8529 (TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (var_type, which)),
8530 valaddr, address, dval);
4c4b4cd2 8531 else if (variant_field_index (TYPE_FIELD_TYPE (var_type, which)) >= 0)
d2e4a39e
AS
8532 return
8533 to_fixed_record_type
8534 (TYPE_FIELD_TYPE (var_type, which), valaddr, address, dval);
14f9c5c9
AS
8535 else
8536 return TYPE_FIELD_TYPE (var_type, which);
8537}
8538
8908fca5
JB
8539/* Assuming RANGE_TYPE is a TYPE_CODE_RANGE, return nonzero if
8540 ENCODING_TYPE, a type following the GNAT conventions for discrete
8541 type encodings, only carries redundant information. */
8542
8543static int
8544ada_is_redundant_range_encoding (struct type *range_type,
8545 struct type *encoding_type)
8546{
108d56a4 8547 const char *bounds_str;
8908fca5
JB
8548 int n;
8549 LONGEST lo, hi;
8550
78134374 8551 gdb_assert (range_type->code () == TYPE_CODE_RANGE);
8908fca5 8552
78134374
SM
8553 if (get_base_type (range_type)->code ()
8554 != get_base_type (encoding_type)->code ())
005e2509
JB
8555 {
8556 /* The compiler probably used a simple base type to describe
8557 the range type instead of the range's actual base type,
8558 expecting us to get the real base type from the encoding
8559 anyway. In this situation, the encoding cannot be ignored
8560 as redundant. */
8561 return 0;
8562 }
8563
8908fca5
JB
8564 if (is_dynamic_type (range_type))
8565 return 0;
8566
7d93a1e0 8567 if (encoding_type->name () == NULL)
8908fca5
JB
8568 return 0;
8569
7d93a1e0 8570 bounds_str = strstr (encoding_type->name (), "___XDLU_");
8908fca5
JB
8571 if (bounds_str == NULL)
8572 return 0;
8573
8574 n = 8; /* Skip "___XDLU_". */
8575 if (!ada_scan_number (bounds_str, n, &lo, &n))
8576 return 0;
8577 if (TYPE_LOW_BOUND (range_type) != lo)
8578 return 0;
8579
8580 n += 2; /* Skip the "__" separator between the two bounds. */
8581 if (!ada_scan_number (bounds_str, n, &hi, &n))
8582 return 0;
8583 if (TYPE_HIGH_BOUND (range_type) != hi)
8584 return 0;
8585
8586 return 1;
8587}
8588
8589/* Given the array type ARRAY_TYPE, return nonzero if DESC_TYPE,
8590 a type following the GNAT encoding for describing array type
8591 indices, only carries redundant information. */
8592
8593static int
8594ada_is_redundant_index_type_desc (struct type *array_type,
8595 struct type *desc_type)
8596{
8597 struct type *this_layer = check_typedef (array_type);
8598 int i;
8599
1f704f76 8600 for (i = 0; i < desc_type->num_fields (); i++)
8908fca5
JB
8601 {
8602 if (!ada_is_redundant_range_encoding (TYPE_INDEX_TYPE (this_layer),
8603 TYPE_FIELD_TYPE (desc_type, i)))
8604 return 0;
8605 this_layer = check_typedef (TYPE_TARGET_TYPE (this_layer));
8606 }
8607
8608 return 1;
8609}
8610
14f9c5c9
AS
8611/* Assuming that TYPE0 is an array type describing the type of a value
8612 at ADDR, and that DVAL describes a record containing any
8613 discriminants used in TYPE0, returns a type for the value that
8614 contains no dynamic components (that is, no components whose sizes
8615 are determined by run-time quantities). Unless IGNORE_TOO_BIG is
8616 true, gives an error message if the resulting type's size is over
4c4b4cd2 8617 varsize_limit. */
14f9c5c9 8618
d2e4a39e
AS
8619static struct type *
8620to_fixed_array_type (struct type *type0, struct value *dval,
4c4b4cd2 8621 int ignore_too_big)
14f9c5c9 8622{
d2e4a39e
AS
8623 struct type *index_type_desc;
8624 struct type *result;
ad82864c 8625 int constrained_packed_array_p;
931e5bc3 8626 static const char *xa_suffix = "___XA";
14f9c5c9 8627
b0dd7688 8628 type0 = ada_check_typedef (type0);
284614f0 8629 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2 8630 return type0;
14f9c5c9 8631
ad82864c
JB
8632 constrained_packed_array_p = ada_is_constrained_packed_array_type (type0);
8633 if (constrained_packed_array_p)
8634 type0 = decode_constrained_packed_array_type (type0);
284614f0 8635
931e5bc3
JG
8636 index_type_desc = ada_find_parallel_type (type0, xa_suffix);
8637
8638 /* As mentioned in exp_dbug.ads, for non bit-packed arrays an
8639 encoding suffixed with 'P' may still be generated. If so,
8640 it should be used to find the XA type. */
8641
8642 if (index_type_desc == NULL)
8643 {
1da0522e 8644 const char *type_name = ada_type_name (type0);
931e5bc3 8645
1da0522e 8646 if (type_name != NULL)
931e5bc3 8647 {
1da0522e 8648 const int len = strlen (type_name);
931e5bc3
JG
8649 char *name = (char *) alloca (len + strlen (xa_suffix));
8650
1da0522e 8651 if (type_name[len - 1] == 'P')
931e5bc3 8652 {
1da0522e 8653 strcpy (name, type_name);
931e5bc3
JG
8654 strcpy (name + len - 1, xa_suffix);
8655 index_type_desc = ada_find_parallel_type_with_name (type0, name);
8656 }
8657 }
8658 }
8659
28c85d6c 8660 ada_fixup_array_indexes_type (index_type_desc);
8908fca5
JB
8661 if (index_type_desc != NULL
8662 && ada_is_redundant_index_type_desc (type0, index_type_desc))
8663 {
8664 /* Ignore this ___XA parallel type, as it does not bring any
8665 useful information. This allows us to avoid creating fixed
8666 versions of the array's index types, which would be identical
8667 to the original ones. This, in turn, can also help avoid
8668 the creation of fixed versions of the array itself. */
8669 index_type_desc = NULL;
8670 }
8671
14f9c5c9
AS
8672 if (index_type_desc == NULL)
8673 {
61ee279c 8674 struct type *elt_type0 = ada_check_typedef (TYPE_TARGET_TYPE (type0));
5b4ee69b 8675
14f9c5c9 8676 /* NOTE: elt_type---the fixed version of elt_type0---should never
4c4b4cd2
PH
8677 depend on the contents of the array in properly constructed
8678 debugging data. */
529cad9c
PH
8679 /* Create a fixed version of the array element type.
8680 We're not providing the address of an element here,
e1d5a0d2 8681 and thus the actual object value cannot be inspected to do
529cad9c
PH
8682 the conversion. This should not be a problem, since arrays of
8683 unconstrained objects are not allowed. In particular, all
8684 the elements of an array of a tagged type should all be of
8685 the same type specified in the debugging info. No need to
8686 consult the object tag. */
1ed6ede0 8687 struct type *elt_type = ada_to_fixed_type (elt_type0, 0, 0, dval, 1);
14f9c5c9 8688
284614f0
JB
8689 /* Make sure we always create a new array type when dealing with
8690 packed array types, since we're going to fix-up the array
8691 type length and element bitsize a little further down. */
ad82864c 8692 if (elt_type0 == elt_type && !constrained_packed_array_p)
4c4b4cd2 8693 result = type0;
14f9c5c9 8694 else
e9bb382b 8695 result = create_array_type (alloc_type_copy (type0),
4c4b4cd2 8696 elt_type, TYPE_INDEX_TYPE (type0));
14f9c5c9
AS
8697 }
8698 else
8699 {
8700 int i;
8701 struct type *elt_type0;
8702
8703 elt_type0 = type0;
1f704f76 8704 for (i = index_type_desc->num_fields (); i > 0; i -= 1)
4c4b4cd2 8705 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
14f9c5c9
AS
8706
8707 /* NOTE: result---the fixed version of elt_type0---should never
4c4b4cd2
PH
8708 depend on the contents of the array in properly constructed
8709 debugging data. */
529cad9c
PH
8710 /* Create a fixed version of the array element type.
8711 We're not providing the address of an element here,
e1d5a0d2 8712 and thus the actual object value cannot be inspected to do
529cad9c
PH
8713 the conversion. This should not be a problem, since arrays of
8714 unconstrained objects are not allowed. In particular, all
8715 the elements of an array of a tagged type should all be of
8716 the same type specified in the debugging info. No need to
8717 consult the object tag. */
1ed6ede0
JB
8718 result =
8719 ada_to_fixed_type (ada_check_typedef (elt_type0), 0, 0, dval, 1);
1ce677a4
UW
8720
8721 elt_type0 = type0;
1f704f76 8722 for (i = index_type_desc->num_fields () - 1; i >= 0; i -= 1)
4c4b4cd2
PH
8723 {
8724 struct type *range_type =
28c85d6c 8725 to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, i), dval);
5b4ee69b 8726
e9bb382b 8727 result = create_array_type (alloc_type_copy (elt_type0),
4c4b4cd2 8728 result, range_type);
1ce677a4 8729 elt_type0 = TYPE_TARGET_TYPE (elt_type0);
4c4b4cd2 8730 }
d2e4a39e 8731 if (!ignore_too_big && TYPE_LENGTH (result) > varsize_limit)
323e0a4a 8732 error (_("array type with dynamic size is larger than varsize-limit"));
14f9c5c9
AS
8733 }
8734
2e6fda7d
JB
8735 /* We want to preserve the type name. This can be useful when
8736 trying to get the type name of a value that has already been
8737 printed (for instance, if the user did "print VAR; whatis $". */
7d93a1e0 8738 result->set_name (type0->name ());
2e6fda7d 8739
ad82864c 8740 if (constrained_packed_array_p)
284614f0
JB
8741 {
8742 /* So far, the resulting type has been created as if the original
8743 type was a regular (non-packed) array type. As a result, the
8744 bitsize of the array elements needs to be set again, and the array
8745 length needs to be recomputed based on that bitsize. */
8746 int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
8747 int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
8748
8749 TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
8750 TYPE_LENGTH (result) = len * elt_bitsize / HOST_CHAR_BIT;
8751 if (TYPE_LENGTH (result) * HOST_CHAR_BIT < len * elt_bitsize)
8752 TYPE_LENGTH (result)++;
8753 }
8754
876cecd0 8755 TYPE_FIXED_INSTANCE (result) = 1;
14f9c5c9 8756 return result;
d2e4a39e 8757}
14f9c5c9
AS
8758
8759
8760/* A standard type (containing no dynamically sized components)
8761 corresponding to TYPE for the value (TYPE, VALADDR, ADDRESS)
8762 DVAL describes a record containing any discriminants used in TYPE0,
4c4b4cd2 8763 and may be NULL if there are none, or if the object of type TYPE at
529cad9c
PH
8764 ADDRESS or in VALADDR contains these discriminants.
8765
1ed6ede0
JB
8766 If CHECK_TAG is not null, in the case of tagged types, this function
8767 attempts to locate the object's tag and use it to compute the actual
8768 type. However, when ADDRESS is null, we cannot use it to determine the
8769 location of the tag, and therefore compute the tagged type's actual type.
8770 So we return the tagged type without consulting the tag. */
529cad9c 8771
f192137b
JB
8772static struct type *
8773ada_to_fixed_type_1 (struct type *type, const gdb_byte *valaddr,
1ed6ede0 8774 CORE_ADDR address, struct value *dval, int check_tag)
14f9c5c9 8775{
61ee279c 8776 type = ada_check_typedef (type);
8ecb59f8
TT
8777
8778 /* Only un-fixed types need to be handled here. */
8779 if (!HAVE_GNAT_AUX_INFO (type))
8780 return type;
8781
78134374 8782 switch (type->code ())
d2e4a39e
AS
8783 {
8784 default:
14f9c5c9 8785 return type;
d2e4a39e 8786 case TYPE_CODE_STRUCT:
4c4b4cd2 8787 {
76a01679 8788 struct type *static_type = to_static_fixed_type (type);
1ed6ede0
JB
8789 struct type *fixed_record_type =
8790 to_fixed_record_type (type, valaddr, address, NULL);
5b4ee69b 8791
529cad9c
PH
8792 /* If STATIC_TYPE is a tagged type and we know the object's address,
8793 then we can determine its tag, and compute the object's actual
0963b4bd 8794 type from there. Note that we have to use the fixed record
1ed6ede0
JB
8795 type (the parent part of the record may have dynamic fields
8796 and the way the location of _tag is expressed may depend on
8797 them). */
529cad9c 8798
1ed6ede0 8799 if (check_tag && address != 0 && ada_is_tagged_type (static_type, 0))
76a01679 8800 {
b50d69b5
JG
8801 struct value *tag =
8802 value_tag_from_contents_and_address
8803 (fixed_record_type,
8804 valaddr,
8805 address);
8806 struct type *real_type = type_from_tag (tag);
8807 struct value *obj =
8808 value_from_contents_and_address (fixed_record_type,
8809 valaddr,
8810 address);
9f1f738a 8811 fixed_record_type = value_type (obj);
76a01679 8812 if (real_type != NULL)
b50d69b5
JG
8813 return to_fixed_record_type
8814 (real_type, NULL,
8815 value_address (ada_tag_value_at_base_address (obj)), NULL);
76a01679 8816 }
4af88198
JB
8817
8818 /* Check to see if there is a parallel ___XVZ variable.
8819 If there is, then it provides the actual size of our type. */
8820 else if (ada_type_name (fixed_record_type) != NULL)
8821 {
0d5cff50 8822 const char *name = ada_type_name (fixed_record_type);
224c3ddb
SM
8823 char *xvz_name
8824 = (char *) alloca (strlen (name) + 7 /* "___XVZ\0" */);
eccab96d 8825 bool xvz_found = false;
4af88198
JB
8826 LONGEST size;
8827
88c15c34 8828 xsnprintf (xvz_name, strlen (name) + 7, "%s___XVZ", name);
a70b8144 8829 try
eccab96d
JB
8830 {
8831 xvz_found = get_int_var_value (xvz_name, size);
8832 }
230d2906 8833 catch (const gdb_exception_error &except)
eccab96d
JB
8834 {
8835 /* We found the variable, but somehow failed to read
8836 its value. Rethrow the same error, but with a little
8837 bit more information, to help the user understand
8838 what went wrong (Eg: the variable might have been
8839 optimized out). */
8840 throw_error (except.error,
8841 _("unable to read value of %s (%s)"),
3d6e9d23 8842 xvz_name, except.what ());
eccab96d 8843 }
eccab96d
JB
8844
8845 if (xvz_found && TYPE_LENGTH (fixed_record_type) != size)
4af88198
JB
8846 {
8847 fixed_record_type = copy_type (fixed_record_type);
8848 TYPE_LENGTH (fixed_record_type) = size;
8849
8850 /* The FIXED_RECORD_TYPE may have be a stub. We have
8851 observed this when the debugging info is STABS, and
8852 apparently it is something that is hard to fix.
8853
8854 In practice, we don't need the actual type definition
8855 at all, because the presence of the XVZ variable allows us
8856 to assume that there must be a XVS type as well, which we
8857 should be able to use later, when we need the actual type
8858 definition.
8859
8860 In the meantime, pretend that the "fixed" type we are
8861 returning is NOT a stub, because this can cause trouble
8862 when using this type to create new types targeting it.
8863 Indeed, the associated creation routines often check
8864 whether the target type is a stub and will try to replace
0963b4bd 8865 it, thus using a type with the wrong size. This, in turn,
4af88198
JB
8866 might cause the new type to have the wrong size too.
8867 Consider the case of an array, for instance, where the size
8868 of the array is computed from the number of elements in
8869 our array multiplied by the size of its element. */
8870 TYPE_STUB (fixed_record_type) = 0;
8871 }
8872 }
1ed6ede0 8873 return fixed_record_type;
4c4b4cd2 8874 }
d2e4a39e 8875 case TYPE_CODE_ARRAY:
4c4b4cd2 8876 return to_fixed_array_type (type, dval, 1);
d2e4a39e
AS
8877 case TYPE_CODE_UNION:
8878 if (dval == NULL)
4c4b4cd2 8879 return type;
d2e4a39e 8880 else
4c4b4cd2 8881 return to_fixed_variant_branch_type (type, valaddr, address, dval);
d2e4a39e 8882 }
14f9c5c9
AS
8883}
8884
f192137b
JB
8885/* The same as ada_to_fixed_type_1, except that it preserves the type
8886 if it is a TYPE_CODE_TYPEDEF of a type that is already fixed.
96dbd2c1
JB
8887
8888 The typedef layer needs be preserved in order to differentiate between
8889 arrays and array pointers when both types are implemented using the same
8890 fat pointer. In the array pointer case, the pointer is encoded as
8891 a typedef of the pointer type. For instance, considering:
8892
8893 type String_Access is access String;
8894 S1 : String_Access := null;
8895
8896 To the debugger, S1 is defined as a typedef of type String. But
8897 to the user, it is a pointer. So if the user tries to print S1,
8898 we should not dereference the array, but print the array address
8899 instead.
8900
8901 If we didn't preserve the typedef layer, we would lose the fact that
8902 the type is to be presented as a pointer (needs de-reference before
8903 being printed). And we would also use the source-level type name. */
f192137b
JB
8904
8905struct type *
8906ada_to_fixed_type (struct type *type, const gdb_byte *valaddr,
8907 CORE_ADDR address, struct value *dval, int check_tag)
8908
8909{
8910 struct type *fixed_type =
8911 ada_to_fixed_type_1 (type, valaddr, address, dval, check_tag);
8912
96dbd2c1
JB
8913 /* If TYPE is a typedef and its target type is the same as the FIXED_TYPE,
8914 then preserve the typedef layer.
8915
8916 Implementation note: We can only check the main-type portion of
8917 the TYPE and FIXED_TYPE, because eliminating the typedef layer
8918 from TYPE now returns a type that has the same instance flags
8919 as TYPE. For instance, if TYPE is a "typedef const", and its
8920 target type is a "struct", then the typedef elimination will return
8921 a "const" version of the target type. See check_typedef for more
8922 details about how the typedef layer elimination is done.
8923
8924 brobecker/2010-11-19: It seems to me that the only case where it is
8925 useful to preserve the typedef layer is when dealing with fat pointers.
8926 Perhaps, we could add a check for that and preserve the typedef layer
85102364 8927 only in that situation. But this seems unnecessary so far, probably
96dbd2c1
JB
8928 because we call check_typedef/ada_check_typedef pretty much everywhere.
8929 */
78134374 8930 if (type->code () == TYPE_CODE_TYPEDEF
720d1a40 8931 && (TYPE_MAIN_TYPE (ada_typedef_target_type (type))
96dbd2c1 8932 == TYPE_MAIN_TYPE (fixed_type)))
f192137b
JB
8933 return type;
8934
8935 return fixed_type;
8936}
8937
14f9c5c9 8938/* A standard (static-sized) type corresponding as well as possible to
4c4b4cd2 8939 TYPE0, but based on no runtime data. */
14f9c5c9 8940
d2e4a39e
AS
8941static struct type *
8942to_static_fixed_type (struct type *type0)
14f9c5c9 8943{
d2e4a39e 8944 struct type *type;
14f9c5c9
AS
8945
8946 if (type0 == NULL)
8947 return NULL;
8948
876cecd0 8949 if (TYPE_FIXED_INSTANCE (type0))
4c4b4cd2
PH
8950 return type0;
8951
61ee279c 8952 type0 = ada_check_typedef (type0);
d2e4a39e 8953
78134374 8954 switch (type0->code ())
14f9c5c9
AS
8955 {
8956 default:
8957 return type0;
8958 case TYPE_CODE_STRUCT:
8959 type = dynamic_template_type (type0);
d2e4a39e 8960 if (type != NULL)
4c4b4cd2
PH
8961 return template_to_static_fixed_type (type);
8962 else
8963 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8964 case TYPE_CODE_UNION:
8965 type = ada_find_parallel_type (type0, "___XVU");
8966 if (type != NULL)
4c4b4cd2
PH
8967 return template_to_static_fixed_type (type);
8968 else
8969 return template_to_static_fixed_type (type0);
14f9c5c9
AS
8970 }
8971}
8972
4c4b4cd2
PH
8973/* A static approximation of TYPE with all type wrappers removed. */
8974
d2e4a39e
AS
8975static struct type *
8976static_unwrap_type (struct type *type)
14f9c5c9
AS
8977{
8978 if (ada_is_aligner_type (type))
8979 {
61ee279c 8980 struct type *type1 = TYPE_FIELD_TYPE (ada_check_typedef (type), 0);
14f9c5c9 8981 if (ada_type_name (type1) == NULL)
d0e39ea2 8982 type1->set_name (ada_type_name (type));
14f9c5c9
AS
8983
8984 return static_unwrap_type (type1);
8985 }
d2e4a39e 8986 else
14f9c5c9 8987 {
d2e4a39e 8988 struct type *raw_real_type = ada_get_base_type (type);
5b4ee69b 8989
d2e4a39e 8990 if (raw_real_type == type)
4c4b4cd2 8991 return type;
14f9c5c9 8992 else
4c4b4cd2 8993 return to_static_fixed_type (raw_real_type);
14f9c5c9
AS
8994 }
8995}
8996
8997/* In some cases, incomplete and private types require
4c4b4cd2 8998 cross-references that are not resolved as records (for example,
14f9c5c9
AS
8999 type Foo;
9000 type FooP is access Foo;
9001 V: FooP;
9002 type Foo is array ...;
4c4b4cd2 9003 ). In these cases, since there is no mechanism for producing
14f9c5c9
AS
9004 cross-references to such types, we instead substitute for FooP a
9005 stub enumeration type that is nowhere resolved, and whose tag is
4c4b4cd2 9006 the name of the actual type. Call these types "non-record stubs". */
14f9c5c9
AS
9007
9008/* A type equivalent to TYPE that is not a non-record stub, if one
4c4b4cd2
PH
9009 exists, otherwise TYPE. */
9010
d2e4a39e 9011struct type *
61ee279c 9012ada_check_typedef (struct type *type)
14f9c5c9 9013{
727e3d2e
JB
9014 if (type == NULL)
9015 return NULL;
9016
736ade86
XR
9017 /* If our type is an access to an unconstrained array, which is encoded
9018 as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
720d1a40
JB
9019 We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
9020 what allows us to distinguish between fat pointers that represent
9021 array types, and fat pointers that represent array access types
9022 (in both cases, the compiler implements them as fat pointers). */
736ade86 9023 if (ada_is_access_to_unconstrained_array (type))
720d1a40
JB
9024 return type;
9025
f168693b 9026 type = check_typedef (type);
78134374 9027 if (type == NULL || type->code () != TYPE_CODE_ENUM
529cad9c 9028 || !TYPE_STUB (type)
7d93a1e0 9029 || type->name () == NULL)
14f9c5c9 9030 return type;
d2e4a39e 9031 else
14f9c5c9 9032 {
7d93a1e0 9033 const char *name = type->name ();
d2e4a39e 9034 struct type *type1 = ada_find_any_type (name);
5b4ee69b 9035
05e522ef
JB
9036 if (type1 == NULL)
9037 return type;
9038
9039 /* TYPE1 might itself be a TYPE_CODE_TYPEDEF (this can happen with
9040 stubs pointing to arrays, as we don't create symbols for array
3a867c22
JB
9041 types, only for the typedef-to-array types). If that's the case,
9042 strip the typedef layer. */
78134374 9043 if (type1->code () == TYPE_CODE_TYPEDEF)
3a867c22
JB
9044 type1 = ada_check_typedef (type1);
9045
9046 return type1;
14f9c5c9
AS
9047 }
9048}
9049
9050/* A value representing the data at VALADDR/ADDRESS as described by
9051 type TYPE0, but with a standard (static-sized) type that correctly
9052 describes it. If VAL0 is not NULL and TYPE0 already is a standard
9053 type, then return VAL0 [this feature is simply to avoid redundant
4c4b4cd2 9054 creation of struct values]. */
14f9c5c9 9055
4c4b4cd2
PH
9056static struct value *
9057ada_to_fixed_value_create (struct type *type0, CORE_ADDR address,
9058 struct value *val0)
14f9c5c9 9059{
1ed6ede0 9060 struct type *type = ada_to_fixed_type (type0, 0, address, NULL, 1);
5b4ee69b 9061
14f9c5c9
AS
9062 if (type == type0 && val0 != NULL)
9063 return val0;
cc0e770c
JB
9064
9065 if (VALUE_LVAL (val0) != lval_memory)
9066 {
9067 /* Our value does not live in memory; it could be a convenience
9068 variable, for instance. Create a not_lval value using val0's
9069 contents. */
9070 return value_from_contents (type, value_contents (val0));
9071 }
9072
9073 return value_from_contents_and_address (type, 0, address);
4c4b4cd2
PH
9074}
9075
9076/* A value representing VAL, but with a standard (static-sized) type
9077 that correctly describes it. Does not necessarily create a new
9078 value. */
9079
0c3acc09 9080struct value *
4c4b4cd2
PH
9081ada_to_fixed_value (struct value *val)
9082{
c48db5ca 9083 val = unwrap_value (val);
d8ce9127 9084 val = ada_to_fixed_value_create (value_type (val), value_address (val), val);
c48db5ca 9085 return val;
14f9c5c9 9086}
d2e4a39e 9087\f
14f9c5c9 9088
14f9c5c9
AS
9089/* Attributes */
9090
4c4b4cd2
PH
9091/* Table mapping attribute numbers to names.
9092 NOTE: Keep up to date with enum ada_attribute definition in ada-lang.h. */
14f9c5c9 9093
d2e4a39e 9094static const char *attribute_names[] = {
14f9c5c9
AS
9095 "<?>",
9096
d2e4a39e 9097 "first",
14f9c5c9
AS
9098 "last",
9099 "length",
9100 "image",
14f9c5c9
AS
9101 "max",
9102 "min",
4c4b4cd2
PH
9103 "modulus",
9104 "pos",
9105 "size",
9106 "tag",
14f9c5c9 9107 "val",
14f9c5c9
AS
9108 0
9109};
9110
de93309a 9111static const char *
4c4b4cd2 9112ada_attribute_name (enum exp_opcode n)
14f9c5c9 9113{
4c4b4cd2
PH
9114 if (n >= OP_ATR_FIRST && n <= (int) OP_ATR_VAL)
9115 return attribute_names[n - OP_ATR_FIRST + 1];
14f9c5c9
AS
9116 else
9117 return attribute_names[0];
9118}
9119
4c4b4cd2 9120/* Evaluate the 'POS attribute applied to ARG. */
14f9c5c9 9121
4c4b4cd2
PH
9122static LONGEST
9123pos_atr (struct value *arg)
14f9c5c9 9124{
24209737
PH
9125 struct value *val = coerce_ref (arg);
9126 struct type *type = value_type (val);
aa715135 9127 LONGEST result;
14f9c5c9 9128
d2e4a39e 9129 if (!discrete_type_p (type))
323e0a4a 9130 error (_("'POS only defined on discrete types"));
14f9c5c9 9131
aa715135
JG
9132 if (!discrete_position (type, value_as_long (val), &result))
9133 error (_("enumeration value is invalid: can't find 'POS"));
14f9c5c9 9134
aa715135 9135 return result;
4c4b4cd2
PH
9136}
9137
9138static struct value *
3cb382c9 9139value_pos_atr (struct type *type, struct value *arg)
4c4b4cd2 9140{
3cb382c9 9141 return value_from_longest (type, pos_atr (arg));
14f9c5c9
AS
9142}
9143
4c4b4cd2 9144/* Evaluate the TYPE'VAL attribute applied to ARG. */
14f9c5c9 9145
d2e4a39e 9146static struct value *
53a47a3e 9147val_atr (struct type *type, LONGEST val)
14f9c5c9 9148{
53a47a3e 9149 gdb_assert (discrete_type_p (type));
0bc2354b
TT
9150 if (type->code () == TYPE_CODE_RANGE)
9151 type = TYPE_TARGET_TYPE (type);
78134374 9152 if (type->code () == TYPE_CODE_ENUM)
14f9c5c9 9153 {
53a47a3e 9154 if (val < 0 || val >= type->num_fields ())
323e0a4a 9155 error (_("argument to 'VAL out of range"));
53a47a3e 9156 val = TYPE_FIELD_ENUMVAL (type, val);
14f9c5c9 9157 }
53a47a3e
TT
9158 return value_from_longest (type, val);
9159}
9160
9161static struct value *
9162value_val_atr (struct type *type, struct value *arg)
9163{
9164 if (!discrete_type_p (type))
9165 error (_("'VAL only defined on discrete types"));
9166 if (!integer_type_p (value_type (arg)))
9167 error (_("'VAL requires integral argument"));
9168
9169 return val_atr (type, value_as_long (arg));
14f9c5c9 9170}
14f9c5c9 9171\f
d2e4a39e 9172
4c4b4cd2 9173 /* Evaluation */
14f9c5c9 9174
4c4b4cd2
PH
9175/* True if TYPE appears to be an Ada character type.
9176 [At the moment, this is true only for Character and Wide_Character;
9177 It is a heuristic test that could stand improvement]. */
14f9c5c9 9178
fc913e53 9179bool
d2e4a39e 9180ada_is_character_type (struct type *type)
14f9c5c9 9181{
7b9f71f2
JB
9182 const char *name;
9183
9184 /* If the type code says it's a character, then assume it really is,
9185 and don't check any further. */
78134374 9186 if (type->code () == TYPE_CODE_CHAR)
fc913e53 9187 return true;
7b9f71f2
JB
9188
9189 /* Otherwise, assume it's a character type iff it is a discrete type
9190 with a known character type name. */
9191 name = ada_type_name (type);
9192 return (name != NULL
78134374
SM
9193 && (type->code () == TYPE_CODE_INT
9194 || type->code () == TYPE_CODE_RANGE)
7b9f71f2
JB
9195 && (strcmp (name, "character") == 0
9196 || strcmp (name, "wide_character") == 0
5a517ebd 9197 || strcmp (name, "wide_wide_character") == 0
7b9f71f2 9198 || strcmp (name, "unsigned char") == 0));
14f9c5c9
AS
9199}
9200
4c4b4cd2 9201/* True if TYPE appears to be an Ada string type. */
14f9c5c9 9202
fc913e53 9203bool
ebf56fd3 9204ada_is_string_type (struct type *type)
14f9c5c9 9205{
61ee279c 9206 type = ada_check_typedef (type);
d2e4a39e 9207 if (type != NULL
78134374 9208 && type->code () != TYPE_CODE_PTR
76a01679
JB
9209 && (ada_is_simple_array_type (type)
9210 || ada_is_array_descriptor_type (type))
14f9c5c9
AS
9211 && ada_array_arity (type) == 1)
9212 {
9213 struct type *elttype = ada_array_element_type (type, 1);
9214
9215 return ada_is_character_type (elttype);
9216 }
d2e4a39e 9217 else
fc913e53 9218 return false;
14f9c5c9
AS
9219}
9220
5bf03f13
JB
9221/* The compiler sometimes provides a parallel XVS type for a given
9222 PAD type. Normally, it is safe to follow the PAD type directly,
9223 but older versions of the compiler have a bug that causes the offset
9224 of its "F" field to be wrong. Following that field in that case
9225 would lead to incorrect results, but this can be worked around
9226 by ignoring the PAD type and using the associated XVS type instead.
9227
9228 Set to True if the debugger should trust the contents of PAD types.
9229 Otherwise, ignore the PAD type if there is a parallel XVS type. */
491144b5 9230static bool trust_pad_over_xvs = true;
14f9c5c9
AS
9231
9232/* True if TYPE is a struct type introduced by the compiler to force the
9233 alignment of a value. Such types have a single field with a
4c4b4cd2 9234 distinctive name. */
14f9c5c9
AS
9235
9236int
ebf56fd3 9237ada_is_aligner_type (struct type *type)
14f9c5c9 9238{
61ee279c 9239 type = ada_check_typedef (type);
714e53ab 9240
5bf03f13 9241 if (!trust_pad_over_xvs && ada_find_parallel_type (type, "___XVS") != NULL)
714e53ab
PH
9242 return 0;
9243
78134374 9244 return (type->code () == TYPE_CODE_STRUCT
1f704f76 9245 && type->num_fields () == 1
4c4b4cd2 9246 && strcmp (TYPE_FIELD_NAME (type, 0), "F") == 0);
14f9c5c9
AS
9247}
9248
9249/* If there is an ___XVS-convention type parallel to SUBTYPE, return
4c4b4cd2 9250 the parallel type. */
14f9c5c9 9251
d2e4a39e
AS
9252struct type *
9253ada_get_base_type (struct type *raw_type)
14f9c5c9 9254{
d2e4a39e
AS
9255 struct type *real_type_namer;
9256 struct type *raw_real_type;
14f9c5c9 9257
78134374 9258 if (raw_type == NULL || raw_type->code () != TYPE_CODE_STRUCT)
14f9c5c9
AS
9259 return raw_type;
9260
284614f0
JB
9261 if (ada_is_aligner_type (raw_type))
9262 /* The encoding specifies that we should always use the aligner type.
9263 So, even if this aligner type has an associated XVS type, we should
9264 simply ignore it.
9265
9266 According to the compiler gurus, an XVS type parallel to an aligner
9267 type may exist because of a stabs limitation. In stabs, aligner
9268 types are empty because the field has a variable-sized type, and
9269 thus cannot actually be used as an aligner type. As a result,
9270 we need the associated parallel XVS type to decode the type.
9271 Since the policy in the compiler is to not change the internal
9272 representation based on the debugging info format, we sometimes
9273 end up having a redundant XVS type parallel to the aligner type. */
9274 return raw_type;
9275
14f9c5c9 9276 real_type_namer = ada_find_parallel_type (raw_type, "___XVS");
d2e4a39e 9277 if (real_type_namer == NULL
78134374 9278 || real_type_namer->code () != TYPE_CODE_STRUCT
1f704f76 9279 || real_type_namer->num_fields () != 1)
14f9c5c9
AS
9280 return raw_type;
9281
78134374 9282 if (TYPE_FIELD_TYPE (real_type_namer, 0)->code () != TYPE_CODE_REF)
f80d3ff2
JB
9283 {
9284 /* This is an older encoding form where the base type needs to be
85102364 9285 looked up by name. We prefer the newer encoding because it is
f80d3ff2
JB
9286 more efficient. */
9287 raw_real_type = ada_find_any_type (TYPE_FIELD_NAME (real_type_namer, 0));
9288 if (raw_real_type == NULL)
9289 return raw_type;
9290 else
9291 return raw_real_type;
9292 }
9293
9294 /* The field in our XVS type is a reference to the base type. */
9295 return TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (real_type_namer, 0));
d2e4a39e 9296}
14f9c5c9 9297
4c4b4cd2 9298/* The type of value designated by TYPE, with all aligners removed. */
14f9c5c9 9299
d2e4a39e
AS
9300struct type *
9301ada_aligned_type (struct type *type)
14f9c5c9
AS
9302{
9303 if (ada_is_aligner_type (type))
9304 return ada_aligned_type (TYPE_FIELD_TYPE (type, 0));
9305 else
9306 return ada_get_base_type (type);
9307}
9308
9309
9310/* The address of the aligned value in an object at address VALADDR
4c4b4cd2 9311 having type TYPE. Assumes ada_is_aligner_type (TYPE). */
14f9c5c9 9312
fc1a4b47
AC
9313const gdb_byte *
9314ada_aligned_value_addr (struct type *type, const gdb_byte *valaddr)
14f9c5c9 9315{
d2e4a39e 9316 if (ada_is_aligner_type (type))
14f9c5c9 9317 return ada_aligned_value_addr (TYPE_FIELD_TYPE (type, 0),
4c4b4cd2
PH
9318 valaddr +
9319 TYPE_FIELD_BITPOS (type,
9320 0) / TARGET_CHAR_BIT);
14f9c5c9
AS
9321 else
9322 return valaddr;
9323}
9324
4c4b4cd2
PH
9325
9326
14f9c5c9 9327/* The printed representation of an enumeration literal with encoded
4c4b4cd2 9328 name NAME. The value is good to the next call of ada_enum_name. */
d2e4a39e
AS
9329const char *
9330ada_enum_name (const char *name)
14f9c5c9 9331{
4c4b4cd2
PH
9332 static char *result;
9333 static size_t result_len = 0;
e6a959d6 9334 const char *tmp;
14f9c5c9 9335
4c4b4cd2
PH
9336 /* First, unqualify the enumeration name:
9337 1. Search for the last '.' character. If we find one, then skip
177b42fe 9338 all the preceding characters, the unqualified name starts
76a01679 9339 right after that dot.
4c4b4cd2 9340 2. Otherwise, we may be debugging on a target where the compiler
76a01679
JB
9341 translates dots into "__". Search forward for double underscores,
9342 but stop searching when we hit an overloading suffix, which is
9343 of the form "__" followed by digits. */
4c4b4cd2 9344
c3e5cd34
PH
9345 tmp = strrchr (name, '.');
9346 if (tmp != NULL)
4c4b4cd2
PH
9347 name = tmp + 1;
9348 else
14f9c5c9 9349 {
4c4b4cd2
PH
9350 while ((tmp = strstr (name, "__")) != NULL)
9351 {
9352 if (isdigit (tmp[2]))
9353 break;
9354 else
9355 name = tmp + 2;
9356 }
14f9c5c9
AS
9357 }
9358
9359 if (name[0] == 'Q')
9360 {
14f9c5c9 9361 int v;
5b4ee69b 9362
14f9c5c9 9363 if (name[1] == 'U' || name[1] == 'W')
4c4b4cd2
PH
9364 {
9365 if (sscanf (name + 2, "%x", &v) != 1)
9366 return name;
9367 }
272560b5
TT
9368 else if (((name[1] >= '0' && name[1] <= '9')
9369 || (name[1] >= 'a' && name[1] <= 'z'))
9370 && name[2] == '\0')
9371 {
9372 GROW_VECT (result, result_len, 4);
9373 xsnprintf (result, result_len, "'%c'", name[1]);
9374 return result;
9375 }
14f9c5c9 9376 else
4c4b4cd2 9377 return name;
14f9c5c9 9378
4c4b4cd2 9379 GROW_VECT (result, result_len, 16);
14f9c5c9 9380 if (isascii (v) && isprint (v))
88c15c34 9381 xsnprintf (result, result_len, "'%c'", v);
14f9c5c9 9382 else if (name[1] == 'U')
88c15c34 9383 xsnprintf (result, result_len, "[\"%02x\"]", v);
14f9c5c9 9384 else
88c15c34 9385 xsnprintf (result, result_len, "[\"%04x\"]", v);
14f9c5c9
AS
9386
9387 return result;
9388 }
d2e4a39e 9389 else
4c4b4cd2 9390 {
c3e5cd34
PH
9391 tmp = strstr (name, "__");
9392 if (tmp == NULL)
9393 tmp = strstr (name, "$");
9394 if (tmp != NULL)
4c4b4cd2
PH
9395 {
9396 GROW_VECT (result, result_len, tmp - name + 1);
9397 strncpy (result, name, tmp - name);
9398 result[tmp - name] = '\0';
9399 return result;
9400 }
9401
9402 return name;
9403 }
14f9c5c9
AS
9404}
9405
14f9c5c9
AS
9406/* Evaluate the subexpression of EXP starting at *POS as for
9407 evaluate_type, updating *POS to point just past the evaluated
4c4b4cd2 9408 expression. */
14f9c5c9 9409
d2e4a39e
AS
9410static struct value *
9411evaluate_subexp_type (struct expression *exp, int *pos)
14f9c5c9 9412{
4b27a620 9413 return evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
14f9c5c9
AS
9414}
9415
9416/* If VAL is wrapped in an aligner or subtype wrapper, return the
4c4b4cd2 9417 value it wraps. */
14f9c5c9 9418
d2e4a39e
AS
9419static struct value *
9420unwrap_value (struct value *val)
14f9c5c9 9421{
df407dfe 9422 struct type *type = ada_check_typedef (value_type (val));
5b4ee69b 9423
14f9c5c9
AS
9424 if (ada_is_aligner_type (type))
9425 {
de4d072f 9426 struct value *v = ada_value_struct_elt (val, "F", 0);
df407dfe 9427 struct type *val_type = ada_check_typedef (value_type (v));
5b4ee69b 9428
14f9c5c9 9429 if (ada_type_name (val_type) == NULL)
d0e39ea2 9430 val_type->set_name (ada_type_name (type));
14f9c5c9
AS
9431
9432 return unwrap_value (v);
9433 }
d2e4a39e 9434 else
14f9c5c9 9435 {
d2e4a39e 9436 struct type *raw_real_type =
61ee279c 9437 ada_check_typedef (ada_get_base_type (type));
d2e4a39e 9438
5bf03f13
JB
9439 /* If there is no parallel XVS or XVE type, then the value is
9440 already unwrapped. Return it without further modification. */
9441 if ((type == raw_real_type)
9442 && ada_find_parallel_type (type, "___XVE") == NULL)
9443 return val;
14f9c5c9 9444
d2e4a39e 9445 return
4c4b4cd2
PH
9446 coerce_unspec_val_to_type
9447 (val, ada_to_fixed_type (raw_real_type, 0,
42ae5230 9448 value_address (val),
1ed6ede0 9449 NULL, 1));
14f9c5c9
AS
9450 }
9451}
d2e4a39e
AS
9452
9453static struct value *
50eff16b 9454cast_from_fixed (struct type *type, struct value *arg)
14f9c5c9 9455{
50eff16b
UW
9456 struct value *scale = ada_scaling_factor (value_type (arg));
9457 arg = value_cast (value_type (scale), arg);
14f9c5c9 9458
50eff16b
UW
9459 arg = value_binop (arg, scale, BINOP_MUL);
9460 return value_cast (type, arg);
14f9c5c9
AS
9461}
9462
d2e4a39e 9463static struct value *
50eff16b 9464cast_to_fixed (struct type *type, struct value *arg)
14f9c5c9 9465{
50eff16b
UW
9466 if (type == value_type (arg))
9467 return arg;
5b4ee69b 9468
50eff16b 9469 struct value *scale = ada_scaling_factor (type);
b2188a06 9470 if (ada_is_gnat_encoded_fixed_point_type (value_type (arg)))
50eff16b
UW
9471 arg = cast_from_fixed (value_type (scale), arg);
9472 else
9473 arg = value_cast (value_type (scale), arg);
9474
9475 arg = value_binop (arg, scale, BINOP_DIV);
9476 return value_cast (type, arg);
14f9c5c9
AS
9477}
9478
d99dcf51
JB
9479/* Given two array types T1 and T2, return nonzero iff both arrays
9480 contain the same number of elements. */
9481
9482static int
9483ada_same_array_size_p (struct type *t1, struct type *t2)
9484{
9485 LONGEST lo1, hi1, lo2, hi2;
9486
9487 /* Get the array bounds in order to verify that the size of
9488 the two arrays match. */
9489 if (!get_array_bounds (t1, &lo1, &hi1)
9490 || !get_array_bounds (t2, &lo2, &hi2))
9491 error (_("unable to determine array bounds"));
9492
9493 /* To make things easier for size comparison, normalize a bit
9494 the case of empty arrays by making sure that the difference
9495 between upper bound and lower bound is always -1. */
9496 if (lo1 > hi1)
9497 hi1 = lo1 - 1;
9498 if (lo2 > hi2)
9499 hi2 = lo2 - 1;
9500
9501 return (hi1 - lo1 == hi2 - lo2);
9502}
9503
9504/* Assuming that VAL is an array of integrals, and TYPE represents
9505 an array with the same number of elements, but with wider integral
9506 elements, return an array "casted" to TYPE. In practice, this
9507 means that the returned array is built by casting each element
9508 of the original array into TYPE's (wider) element type. */
9509
9510static struct value *
9511ada_promote_array_of_integrals (struct type *type, struct value *val)
9512{
9513 struct type *elt_type = TYPE_TARGET_TYPE (type);
9514 LONGEST lo, hi;
9515 struct value *res;
9516 LONGEST i;
9517
9518 /* Verify that both val and type are arrays of scalars, and
9519 that the size of val's elements is smaller than the size
9520 of type's element. */
78134374 9521 gdb_assert (type->code () == TYPE_CODE_ARRAY);
d99dcf51 9522 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (type)));
78134374 9523 gdb_assert (value_type (val)->code () == TYPE_CODE_ARRAY);
d99dcf51
JB
9524 gdb_assert (is_integral_type (TYPE_TARGET_TYPE (value_type (val))));
9525 gdb_assert (TYPE_LENGTH (TYPE_TARGET_TYPE (type))
9526 > TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (val))));
9527
9528 if (!get_array_bounds (type, &lo, &hi))
9529 error (_("unable to determine array bounds"));
9530
9531 res = allocate_value (type);
9532
9533 /* Promote each array element. */
9534 for (i = 0; i < hi - lo + 1; i++)
9535 {
9536 struct value *elt = value_cast (elt_type, value_subscript (val, lo + i));
9537
9538 memcpy (value_contents_writeable (res) + (i * TYPE_LENGTH (elt_type)),
9539 value_contents_all (elt), TYPE_LENGTH (elt_type));
9540 }
9541
9542 return res;
9543}
9544
4c4b4cd2
PH
9545/* Coerce VAL as necessary for assignment to an lval of type TYPE, and
9546 return the converted value. */
9547
d2e4a39e
AS
9548static struct value *
9549coerce_for_assign (struct type *type, struct value *val)
14f9c5c9 9550{
df407dfe 9551 struct type *type2 = value_type (val);
5b4ee69b 9552
14f9c5c9
AS
9553 if (type == type2)
9554 return val;
9555
61ee279c
PH
9556 type2 = ada_check_typedef (type2);
9557 type = ada_check_typedef (type);
14f9c5c9 9558
78134374
SM
9559 if (type2->code () == TYPE_CODE_PTR
9560 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9
AS
9561 {
9562 val = ada_value_ind (val);
df407dfe 9563 type2 = value_type (val);
14f9c5c9
AS
9564 }
9565
78134374
SM
9566 if (type2->code () == TYPE_CODE_ARRAY
9567 && type->code () == TYPE_CODE_ARRAY)
14f9c5c9 9568 {
d99dcf51
JB
9569 if (!ada_same_array_size_p (type, type2))
9570 error (_("cannot assign arrays of different length"));
9571
9572 if (is_integral_type (TYPE_TARGET_TYPE (type))
9573 && is_integral_type (TYPE_TARGET_TYPE (type2))
9574 && TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9575 < TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
9576 {
9577 /* Allow implicit promotion of the array elements to
9578 a wider type. */
9579 return ada_promote_array_of_integrals (type, val);
9580 }
9581
9582 if (TYPE_LENGTH (TYPE_TARGET_TYPE (type2))
9583 != TYPE_LENGTH (TYPE_TARGET_TYPE (type)))
323e0a4a 9584 error (_("Incompatible types in assignment"));
04624583 9585 deprecated_set_value_type (val, type);
14f9c5c9 9586 }
d2e4a39e 9587 return val;
14f9c5c9
AS
9588}
9589
4c4b4cd2
PH
9590static struct value *
9591ada_value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
9592{
9593 struct value *val;
9594 struct type *type1, *type2;
9595 LONGEST v, v1, v2;
9596
994b9211
AC
9597 arg1 = coerce_ref (arg1);
9598 arg2 = coerce_ref (arg2);
18af8284
JB
9599 type1 = get_base_type (ada_check_typedef (value_type (arg1)));
9600 type2 = get_base_type (ada_check_typedef (value_type (arg2)));
4c4b4cd2 9601
78134374
SM
9602 if (type1->code () != TYPE_CODE_INT
9603 || type2->code () != TYPE_CODE_INT)
4c4b4cd2
PH
9604 return value_binop (arg1, arg2, op);
9605
76a01679 9606 switch (op)
4c4b4cd2
PH
9607 {
9608 case BINOP_MOD:
9609 case BINOP_DIV:
9610 case BINOP_REM:
9611 break;
9612 default:
9613 return value_binop (arg1, arg2, op);
9614 }
9615
9616 v2 = value_as_long (arg2);
9617 if (v2 == 0)
323e0a4a 9618 error (_("second operand of %s must not be zero."), op_string (op));
4c4b4cd2
PH
9619
9620 if (TYPE_UNSIGNED (type1) || op == BINOP_MOD)
9621 return value_binop (arg1, arg2, op);
9622
9623 v1 = value_as_long (arg1);
9624 switch (op)
9625 {
9626 case BINOP_DIV:
9627 v = v1 / v2;
76a01679
JB
9628 if (!TRUNCATION_TOWARDS_ZERO && v1 * (v1 % v2) < 0)
9629 v += v > 0 ? -1 : 1;
4c4b4cd2
PH
9630 break;
9631 case BINOP_REM:
9632 v = v1 % v2;
76a01679
JB
9633 if (v * v1 < 0)
9634 v -= v2;
4c4b4cd2
PH
9635 break;
9636 default:
9637 /* Should not reach this point. */
9638 v = 0;
9639 }
9640
9641 val = allocate_value (type1);
990a07ab 9642 store_unsigned_integer (value_contents_raw (val),
e17a4113 9643 TYPE_LENGTH (value_type (val)),
34877895 9644 type_byte_order (type1), v);
4c4b4cd2
PH
9645 return val;
9646}
9647
9648static int
9649ada_value_equal (struct value *arg1, struct value *arg2)
9650{
df407dfe
AC
9651 if (ada_is_direct_array_type (value_type (arg1))
9652 || ada_is_direct_array_type (value_type (arg2)))
4c4b4cd2 9653 {
79e8fcaa
JB
9654 struct type *arg1_type, *arg2_type;
9655
f58b38bf
JB
9656 /* Automatically dereference any array reference before
9657 we attempt to perform the comparison. */
9658 arg1 = ada_coerce_ref (arg1);
9659 arg2 = ada_coerce_ref (arg2);
79e8fcaa 9660
4c4b4cd2
PH
9661 arg1 = ada_coerce_to_simple_array (arg1);
9662 arg2 = ada_coerce_to_simple_array (arg2);
79e8fcaa
JB
9663
9664 arg1_type = ada_check_typedef (value_type (arg1));
9665 arg2_type = ada_check_typedef (value_type (arg2));
9666
78134374
SM
9667 if (arg1_type->code () != TYPE_CODE_ARRAY
9668 || arg2_type->code () != TYPE_CODE_ARRAY)
323e0a4a 9669 error (_("Attempt to compare array with non-array"));
4c4b4cd2 9670 /* FIXME: The following works only for types whose
76a01679
JB
9671 representations use all bits (no padding or undefined bits)
9672 and do not have user-defined equality. */
79e8fcaa
JB
9673 return (TYPE_LENGTH (arg1_type) == TYPE_LENGTH (arg2_type)
9674 && memcmp (value_contents (arg1), value_contents (arg2),
9675 TYPE_LENGTH (arg1_type)) == 0);
4c4b4cd2
PH
9676 }
9677 return value_equal (arg1, arg2);
9678}
9679
52ce6436
PH
9680/* Total number of component associations in the aggregate starting at
9681 index PC in EXP. Assumes that index PC is the start of an
0963b4bd 9682 OP_AGGREGATE. */
52ce6436
PH
9683
9684static int
9685num_component_specs (struct expression *exp, int pc)
9686{
9687 int n, m, i;
5b4ee69b 9688
52ce6436
PH
9689 m = exp->elts[pc + 1].longconst;
9690 pc += 3;
9691 n = 0;
9692 for (i = 0; i < m; i += 1)
9693 {
9694 switch (exp->elts[pc].opcode)
9695 {
9696 default:
9697 n += 1;
9698 break;
9699 case OP_CHOICES:
9700 n += exp->elts[pc + 1].longconst;
9701 break;
9702 }
9703 ada_evaluate_subexp (NULL, exp, &pc, EVAL_SKIP);
9704 }
9705 return n;
9706}
9707
9708/* Assign the result of evaluating EXP starting at *POS to the INDEXth
9709 component of LHS (a simple array or a record), updating *POS past
9710 the expression, assuming that LHS is contained in CONTAINER. Does
9711 not modify the inferior's memory, nor does it modify LHS (unless
9712 LHS == CONTAINER). */
9713
9714static void
9715assign_component (struct value *container, struct value *lhs, LONGEST index,
9716 struct expression *exp, int *pos)
9717{
9718 struct value *mark = value_mark ();
9719 struct value *elt;
0e2da9f0 9720 struct type *lhs_type = check_typedef (value_type (lhs));
5b4ee69b 9721
78134374 9722 if (lhs_type->code () == TYPE_CODE_ARRAY)
52ce6436 9723 {
22601c15
UW
9724 struct type *index_type = builtin_type (exp->gdbarch)->builtin_int;
9725 struct value *index_val = value_from_longest (index_type, index);
5b4ee69b 9726
52ce6436
PH
9727 elt = unwrap_value (ada_value_subscript (lhs, 1, &index_val));
9728 }
9729 else
9730 {
9731 elt = ada_index_struct_field (index, lhs, 0, value_type (lhs));
c48db5ca 9732 elt = ada_to_fixed_value (elt);
52ce6436
PH
9733 }
9734
9735 if (exp->elts[*pos].opcode == OP_AGGREGATE)
9736 assign_aggregate (container, elt, exp, pos, EVAL_NORMAL);
9737 else
9738 value_assign_to_component (container, elt,
9739 ada_evaluate_subexp (NULL, exp, pos,
9740 EVAL_NORMAL));
9741
9742 value_free_to_mark (mark);
9743}
9744
9745/* Assuming that LHS represents an lvalue having a record or array
9746 type, and EXP->ELTS[*POS] is an OP_AGGREGATE, evaluate an assignment
9747 of that aggregate's value to LHS, advancing *POS past the
9748 aggregate. NOSIDE is as for evaluate_subexp. CONTAINER is an
9749 lvalue containing LHS (possibly LHS itself). Does not modify
9750 the inferior's memory, nor does it modify the contents of
0963b4bd 9751 LHS (unless == CONTAINER). Returns the modified CONTAINER. */
52ce6436
PH
9752
9753static struct value *
9754assign_aggregate (struct value *container,
9755 struct value *lhs, struct expression *exp,
9756 int *pos, enum noside noside)
9757{
9758 struct type *lhs_type;
9759 int n = exp->elts[*pos+1].longconst;
9760 LONGEST low_index, high_index;
9761 int num_specs;
9762 LONGEST *indices;
9763 int max_indices, num_indices;
52ce6436 9764 int i;
52ce6436
PH
9765
9766 *pos += 3;
9767 if (noside != EVAL_NORMAL)
9768 {
52ce6436
PH
9769 for (i = 0; i < n; i += 1)
9770 ada_evaluate_subexp (NULL, exp, pos, noside);
9771 return container;
9772 }
9773
9774 container = ada_coerce_ref (container);
9775 if (ada_is_direct_array_type (value_type (container)))
9776 container = ada_coerce_to_simple_array (container);
9777 lhs = ada_coerce_ref (lhs);
9778 if (!deprecated_value_modifiable (lhs))
9779 error (_("Left operand of assignment is not a modifiable lvalue."));
9780
0e2da9f0 9781 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9782 if (ada_is_direct_array_type (lhs_type))
9783 {
9784 lhs = ada_coerce_to_simple_array (lhs);
0e2da9f0 9785 lhs_type = check_typedef (value_type (lhs));
52ce6436
PH
9786 low_index = TYPE_ARRAY_LOWER_BOUND_VALUE (lhs_type);
9787 high_index = TYPE_ARRAY_UPPER_BOUND_VALUE (lhs_type);
52ce6436 9788 }
78134374 9789 else if (lhs_type->code () == TYPE_CODE_STRUCT)
52ce6436
PH
9790 {
9791 low_index = 0;
9792 high_index = num_visible_fields (lhs_type) - 1;
52ce6436
PH
9793 }
9794 else
9795 error (_("Left-hand side must be array or record."));
9796
9797 num_specs = num_component_specs (exp, *pos - 3);
9798 max_indices = 4 * num_specs + 4;
8d749320 9799 indices = XALLOCAVEC (LONGEST, max_indices);
52ce6436
PH
9800 indices[0] = indices[1] = low_index - 1;
9801 indices[2] = indices[3] = high_index + 1;
9802 num_indices = 4;
9803
9804 for (i = 0; i < n; i += 1)
9805 {
9806 switch (exp->elts[*pos].opcode)
9807 {
1fbf5ada
JB
9808 case OP_CHOICES:
9809 aggregate_assign_from_choices (container, lhs, exp, pos, indices,
9810 &num_indices, max_indices,
9811 low_index, high_index);
9812 break;
9813 case OP_POSITIONAL:
9814 aggregate_assign_positional (container, lhs, exp, pos, indices,
52ce6436
PH
9815 &num_indices, max_indices,
9816 low_index, high_index);
1fbf5ada
JB
9817 break;
9818 case OP_OTHERS:
9819 if (i != n-1)
9820 error (_("Misplaced 'others' clause"));
9821 aggregate_assign_others (container, lhs, exp, pos, indices,
9822 num_indices, low_index, high_index);
9823 break;
9824 default:
9825 error (_("Internal error: bad aggregate clause"));
52ce6436
PH
9826 }
9827 }
9828
9829 return container;
9830}
9831
9832/* Assign into the component of LHS indexed by the OP_POSITIONAL
9833 construct at *POS, updating *POS past the construct, given that
9834 the positions are relative to lower bound LOW, where HIGH is the
9835 upper bound. Record the position in INDICES[0 .. MAX_INDICES-1]
9836 updating *NUM_INDICES as needed. CONTAINER is as for
0963b4bd 9837 assign_aggregate. */
52ce6436
PH
9838static void
9839aggregate_assign_positional (struct value *container,
9840 struct value *lhs, struct expression *exp,
9841 int *pos, LONGEST *indices, int *num_indices,
9842 int max_indices, LONGEST low, LONGEST high)
9843{
9844 LONGEST ind = longest_to_int (exp->elts[*pos + 1].longconst) + low;
9845
9846 if (ind - 1 == high)
e1d5a0d2 9847 warning (_("Extra components in aggregate ignored."));
52ce6436
PH
9848 if (ind <= high)
9849 {
9850 add_component_interval (ind, ind, indices, num_indices, max_indices);
9851 *pos += 3;
9852 assign_component (container, lhs, ind, exp, pos);
9853 }
9854 else
9855 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9856}
9857
9858/* Assign into the components of LHS indexed by the OP_CHOICES
9859 construct at *POS, updating *POS past the construct, given that
9860 the allowable indices are LOW..HIGH. Record the indices assigned
9861 to in INDICES[0 .. MAX_INDICES-1], updating *NUM_INDICES as
0963b4bd 9862 needed. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9863static void
9864aggregate_assign_from_choices (struct value *container,
9865 struct value *lhs, struct expression *exp,
9866 int *pos, LONGEST *indices, int *num_indices,
9867 int max_indices, LONGEST low, LONGEST high)
9868{
9869 int j;
9870 int n_choices = longest_to_int (exp->elts[*pos+1].longconst);
9871 int choice_pos, expr_pc;
9872 int is_array = ada_is_direct_array_type (value_type (lhs));
9873
9874 choice_pos = *pos += 3;
9875
9876 for (j = 0; j < n_choices; j += 1)
9877 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9878 expr_pc = *pos;
9879 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9880
9881 for (j = 0; j < n_choices; j += 1)
9882 {
9883 LONGEST lower, upper;
9884 enum exp_opcode op = exp->elts[choice_pos].opcode;
5b4ee69b 9885
52ce6436
PH
9886 if (op == OP_DISCRETE_RANGE)
9887 {
9888 choice_pos += 1;
9889 lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9890 EVAL_NORMAL));
9891 upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
9892 EVAL_NORMAL));
9893 }
9894 else if (is_array)
9895 {
9896 lower = value_as_long (ada_evaluate_subexp (NULL, exp, &choice_pos,
9897 EVAL_NORMAL));
9898 upper = lower;
9899 }
9900 else
9901 {
9902 int ind;
0d5cff50 9903 const char *name;
5b4ee69b 9904
52ce6436
PH
9905 switch (op)
9906 {
9907 case OP_NAME:
9908 name = &exp->elts[choice_pos + 2].string;
9909 break;
9910 case OP_VAR_VALUE:
987012b8 9911 name = exp->elts[choice_pos + 2].symbol->natural_name ();
52ce6436
PH
9912 break;
9913 default:
9914 error (_("Invalid record component association."));
9915 }
9916 ada_evaluate_subexp (NULL, exp, &choice_pos, EVAL_SKIP);
9917 ind = 0;
9918 if (! find_struct_field (name, value_type (lhs), 0,
9919 NULL, NULL, NULL, NULL, &ind))
9920 error (_("Unknown component name: %s."), name);
9921 lower = upper = ind;
9922 }
9923
9924 if (lower <= upper && (lower < low || upper > high))
9925 error (_("Index in component association out of bounds."));
9926
9927 add_component_interval (lower, upper, indices, num_indices,
9928 max_indices);
9929 while (lower <= upper)
9930 {
9931 int pos1;
5b4ee69b 9932
52ce6436
PH
9933 pos1 = expr_pc;
9934 assign_component (container, lhs, lower, exp, &pos1);
9935 lower += 1;
9936 }
9937 }
9938}
9939
9940/* Assign the value of the expression in the OP_OTHERS construct in
9941 EXP at *POS into the components of LHS indexed from LOW .. HIGH that
9942 have not been previously assigned. The index intervals already assigned
9943 are in INDICES[0 .. NUM_INDICES-1]. Updates *POS to after the
0963b4bd 9944 OP_OTHERS clause. CONTAINER is as for assign_aggregate. */
52ce6436
PH
9945static void
9946aggregate_assign_others (struct value *container,
9947 struct value *lhs, struct expression *exp,
9948 int *pos, LONGEST *indices, int num_indices,
9949 LONGEST low, LONGEST high)
9950{
9951 int i;
5ce64950 9952 int expr_pc = *pos + 1;
52ce6436
PH
9953
9954 for (i = 0; i < num_indices - 2; i += 2)
9955 {
9956 LONGEST ind;
5b4ee69b 9957
52ce6436
PH
9958 for (ind = indices[i + 1] + 1; ind < indices[i + 2]; ind += 1)
9959 {
5ce64950 9960 int localpos;
5b4ee69b 9961
5ce64950
MS
9962 localpos = expr_pc;
9963 assign_component (container, lhs, ind, exp, &localpos);
52ce6436
PH
9964 }
9965 }
9966 ada_evaluate_subexp (NULL, exp, pos, EVAL_SKIP);
9967}
9968
9969/* Add the interval [LOW .. HIGH] to the sorted set of intervals
9970 [ INDICES[0] .. INDICES[1] ],..., [ INDICES[*SIZE-2] .. INDICES[*SIZE-1] ],
9971 modifying *SIZE as needed. It is an error if *SIZE exceeds
9972 MAX_SIZE. The resulting intervals do not overlap. */
9973static void
9974add_component_interval (LONGEST low, LONGEST high,
9975 LONGEST* indices, int *size, int max_size)
9976{
9977 int i, j;
5b4ee69b 9978
52ce6436
PH
9979 for (i = 0; i < *size; i += 2) {
9980 if (high >= indices[i] && low <= indices[i + 1])
9981 {
9982 int kh;
5b4ee69b 9983
52ce6436
PH
9984 for (kh = i + 2; kh < *size; kh += 2)
9985 if (high < indices[kh])
9986 break;
9987 if (low < indices[i])
9988 indices[i] = low;
9989 indices[i + 1] = indices[kh - 1];
9990 if (high > indices[i + 1])
9991 indices[i + 1] = high;
9992 memcpy (indices + i + 2, indices + kh, *size - kh);
9993 *size -= kh - i - 2;
9994 return;
9995 }
9996 else if (high < indices[i])
9997 break;
9998 }
9999
10000 if (*size == max_size)
10001 error (_("Internal error: miscounted aggregate components."));
10002 *size += 2;
10003 for (j = *size-1; j >= i+2; j -= 1)
10004 indices[j] = indices[j - 2];
10005 indices[i] = low;
10006 indices[i + 1] = high;
10007}
10008
6e48bd2c
JB
10009/* Perform and Ada cast of ARG2 to type TYPE if the type of ARG2
10010 is different. */
10011
10012static struct value *
b7e22850 10013ada_value_cast (struct type *type, struct value *arg2)
6e48bd2c
JB
10014{
10015 if (type == ada_check_typedef (value_type (arg2)))
10016 return arg2;
10017
b2188a06 10018 if (ada_is_gnat_encoded_fixed_point_type (type))
95f39a5b 10019 return cast_to_fixed (type, arg2);
6e48bd2c 10020
b2188a06 10021 if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
a53b7a21 10022 return cast_from_fixed (type, arg2);
6e48bd2c
JB
10023
10024 return value_cast (type, arg2);
10025}
10026
284614f0
JB
10027/* Evaluating Ada expressions, and printing their result.
10028 ------------------------------------------------------
10029
21649b50
JB
10030 1. Introduction:
10031 ----------------
10032
284614f0
JB
10033 We usually evaluate an Ada expression in order to print its value.
10034 We also evaluate an expression in order to print its type, which
10035 happens during the EVAL_AVOID_SIDE_EFFECTS phase of the evaluation,
10036 but we'll focus mostly on the EVAL_NORMAL phase. In practice, the
10037 EVAL_AVOID_SIDE_EFFECTS phase allows us to simplify certain aspects of
10038 the evaluation compared to the EVAL_NORMAL, but is otherwise very
10039 similar.
10040
10041 Evaluating expressions is a little more complicated for Ada entities
10042 than it is for entities in languages such as C. The main reason for
10043 this is that Ada provides types whose definition might be dynamic.
10044 One example of such types is variant records. Or another example
10045 would be an array whose bounds can only be known at run time.
10046
10047 The following description is a general guide as to what should be
10048 done (and what should NOT be done) in order to evaluate an expression
10049 involving such types, and when. This does not cover how the semantic
10050 information is encoded by GNAT as this is covered separatly. For the
10051 document used as the reference for the GNAT encoding, see exp_dbug.ads
10052 in the GNAT sources.
10053
10054 Ideally, we should embed each part of this description next to its
10055 associated code. Unfortunately, the amount of code is so vast right
10056 now that it's hard to see whether the code handling a particular
10057 situation might be duplicated or not. One day, when the code is
10058 cleaned up, this guide might become redundant with the comments
10059 inserted in the code, and we might want to remove it.
10060
21649b50
JB
10061 2. ``Fixing'' an Entity, the Simple Case:
10062 -----------------------------------------
10063
284614f0
JB
10064 When evaluating Ada expressions, the tricky issue is that they may
10065 reference entities whose type contents and size are not statically
10066 known. Consider for instance a variant record:
10067
10068 type Rec (Empty : Boolean := True) is record
10069 case Empty is
10070 when True => null;
10071 when False => Value : Integer;
10072 end case;
10073 end record;
10074 Yes : Rec := (Empty => False, Value => 1);
10075 No : Rec := (empty => True);
10076
10077 The size and contents of that record depends on the value of the
10078 descriminant (Rec.Empty). At this point, neither the debugging
10079 information nor the associated type structure in GDB are able to
10080 express such dynamic types. So what the debugger does is to create
10081 "fixed" versions of the type that applies to the specific object.
30baf67b 10082 We also informally refer to this operation as "fixing" an object,
284614f0
JB
10083 which means creating its associated fixed type.
10084
10085 Example: when printing the value of variable "Yes" above, its fixed
10086 type would look like this:
10087
10088 type Rec is record
10089 Empty : Boolean;
10090 Value : Integer;
10091 end record;
10092
10093 On the other hand, if we printed the value of "No", its fixed type
10094 would become:
10095
10096 type Rec is record
10097 Empty : Boolean;
10098 end record;
10099
10100 Things become a little more complicated when trying to fix an entity
10101 with a dynamic type that directly contains another dynamic type,
10102 such as an array of variant records, for instance. There are
10103 two possible cases: Arrays, and records.
10104
21649b50
JB
10105 3. ``Fixing'' Arrays:
10106 ---------------------
10107
10108 The type structure in GDB describes an array in terms of its bounds,
10109 and the type of its elements. By design, all elements in the array
10110 have the same type and we cannot represent an array of variant elements
10111 using the current type structure in GDB. When fixing an array,
10112 we cannot fix the array element, as we would potentially need one
10113 fixed type per element of the array. As a result, the best we can do
10114 when fixing an array is to produce an array whose bounds and size
10115 are correct (allowing us to read it from memory), but without having
10116 touched its element type. Fixing each element will be done later,
10117 when (if) necessary.
10118
10119 Arrays are a little simpler to handle than records, because the same
10120 amount of memory is allocated for each element of the array, even if
1b536f04 10121 the amount of space actually used by each element differs from element
21649b50 10122 to element. Consider for instance the following array of type Rec:
284614f0
JB
10123
10124 type Rec_Array is array (1 .. 2) of Rec;
10125
1b536f04
JB
10126 The actual amount of memory occupied by each element might be different
10127 from element to element, depending on the value of their discriminant.
21649b50 10128 But the amount of space reserved for each element in the array remains
1b536f04 10129 fixed regardless. So we simply need to compute that size using
21649b50
JB
10130 the debugging information available, from which we can then determine
10131 the array size (we multiply the number of elements of the array by
10132 the size of each element).
10133
10134 The simplest case is when we have an array of a constrained element
10135 type. For instance, consider the following type declarations:
10136
10137 type Bounded_String (Max_Size : Integer) is
10138 Length : Integer;
10139 Buffer : String (1 .. Max_Size);
10140 end record;
10141 type Bounded_String_Array is array (1 ..2) of Bounded_String (80);
10142
10143 In this case, the compiler describes the array as an array of
10144 variable-size elements (identified by its XVS suffix) for which
10145 the size can be read in the parallel XVZ variable.
10146
10147 In the case of an array of an unconstrained element type, the compiler
10148 wraps the array element inside a private PAD type. This type should not
10149 be shown to the user, and must be "unwrap"'ed before printing. Note
284614f0
JB
10150 that we also use the adjective "aligner" in our code to designate
10151 these wrapper types.
10152
1b536f04 10153 In some cases, the size allocated for each element is statically
21649b50
JB
10154 known. In that case, the PAD type already has the correct size,
10155 and the array element should remain unfixed.
10156
10157 But there are cases when this size is not statically known.
10158 For instance, assuming that "Five" is an integer variable:
284614f0
JB
10159
10160 type Dynamic is array (1 .. Five) of Integer;
10161 type Wrapper (Has_Length : Boolean := False) is record
10162 Data : Dynamic;
10163 case Has_Length is
10164 when True => Length : Integer;
10165 when False => null;
10166 end case;
10167 end record;
10168 type Wrapper_Array is array (1 .. 2) of Wrapper;
10169
10170 Hello : Wrapper_Array := (others => (Has_Length => True,
10171 Data => (others => 17),
10172 Length => 1));
10173
10174
10175 The debugging info would describe variable Hello as being an
10176 array of a PAD type. The size of that PAD type is not statically
10177 known, but can be determined using a parallel XVZ variable.
10178 In that case, a copy of the PAD type with the correct size should
10179 be used for the fixed array.
10180
21649b50
JB
10181 3. ``Fixing'' record type objects:
10182 ----------------------------------
10183
10184 Things are slightly different from arrays in the case of dynamic
284614f0
JB
10185 record types. In this case, in order to compute the associated
10186 fixed type, we need to determine the size and offset of each of
10187 its components. This, in turn, requires us to compute the fixed
10188 type of each of these components.
10189
10190 Consider for instance the example:
10191
10192 type Bounded_String (Max_Size : Natural) is record
10193 Str : String (1 .. Max_Size);
10194 Length : Natural;
10195 end record;
10196 My_String : Bounded_String (Max_Size => 10);
10197
10198 In that case, the position of field "Length" depends on the size
10199 of field Str, which itself depends on the value of the Max_Size
21649b50 10200 discriminant. In order to fix the type of variable My_String,
284614f0
JB
10201 we need to fix the type of field Str. Therefore, fixing a variant
10202 record requires us to fix each of its components.
10203
10204 However, if a component does not have a dynamic size, the component
10205 should not be fixed. In particular, fields that use a PAD type
10206 should not fixed. Here is an example where this might happen
10207 (assuming type Rec above):
10208
10209 type Container (Big : Boolean) is record
10210 First : Rec;
10211 After : Integer;
10212 case Big is
10213 when True => Another : Integer;
10214 when False => null;
10215 end case;
10216 end record;
10217 My_Container : Container := (Big => False,
10218 First => (Empty => True),
10219 After => 42);
10220
10221 In that example, the compiler creates a PAD type for component First,
10222 whose size is constant, and then positions the component After just
10223 right after it. The offset of component After is therefore constant
10224 in this case.
10225
10226 The debugger computes the position of each field based on an algorithm
10227 that uses, among other things, the actual position and size of the field
21649b50
JB
10228 preceding it. Let's now imagine that the user is trying to print
10229 the value of My_Container. If the type fixing was recursive, we would
284614f0
JB
10230 end up computing the offset of field After based on the size of the
10231 fixed version of field First. And since in our example First has
10232 only one actual field, the size of the fixed type is actually smaller
10233 than the amount of space allocated to that field, and thus we would
10234 compute the wrong offset of field After.
10235
21649b50
JB
10236 To make things more complicated, we need to watch out for dynamic
10237 components of variant records (identified by the ___XVL suffix in
10238 the component name). Even if the target type is a PAD type, the size
10239 of that type might not be statically known. So the PAD type needs
10240 to be unwrapped and the resulting type needs to be fixed. Otherwise,
10241 we might end up with the wrong size for our component. This can be
10242 observed with the following type declarations:
284614f0
JB
10243
10244 type Octal is new Integer range 0 .. 7;
10245 type Octal_Array is array (Positive range <>) of Octal;
10246 pragma Pack (Octal_Array);
10247
10248 type Octal_Buffer (Size : Positive) is record
10249 Buffer : Octal_Array (1 .. Size);
10250 Length : Integer;
10251 end record;
10252
10253 In that case, Buffer is a PAD type whose size is unset and needs
10254 to be computed by fixing the unwrapped type.
10255
21649b50
JB
10256 4. When to ``Fix'' un-``Fixed'' sub-elements of an entity:
10257 ----------------------------------------------------------
10258
10259 Lastly, when should the sub-elements of an entity that remained unfixed
284614f0
JB
10260 thus far, be actually fixed?
10261
10262 The answer is: Only when referencing that element. For instance
10263 when selecting one component of a record, this specific component
10264 should be fixed at that point in time. Or when printing the value
10265 of a record, each component should be fixed before its value gets
10266 printed. Similarly for arrays, the element of the array should be
10267 fixed when printing each element of the array, or when extracting
10268 one element out of that array. On the other hand, fixing should
10269 not be performed on the elements when taking a slice of an array!
10270
31432a67 10271 Note that one of the side effects of miscomputing the offset and
284614f0
JB
10272 size of each field is that we end up also miscomputing the size
10273 of the containing type. This can have adverse results when computing
10274 the value of an entity. GDB fetches the value of an entity based
10275 on the size of its type, and thus a wrong size causes GDB to fetch
10276 the wrong amount of memory. In the case where the computed size is
10277 too small, GDB fetches too little data to print the value of our
31432a67 10278 entity. Results in this case are unpredictable, as we usually read
284614f0
JB
10279 past the buffer containing the data =:-o. */
10280
ced9779b
JB
10281/* Evaluate a subexpression of EXP, at index *POS, and return a value
10282 for that subexpression cast to TO_TYPE. Advance *POS over the
10283 subexpression. */
10284
10285static value *
10286ada_evaluate_subexp_for_cast (expression *exp, int *pos,
10287 enum noside noside, struct type *to_type)
10288{
10289 int pc = *pos;
10290
10291 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE
10292 || exp->elts[pc].opcode == OP_VAR_VALUE)
10293 {
10294 (*pos) += 4;
10295
10296 value *val;
10297 if (exp->elts[pc].opcode == OP_VAR_MSYM_VALUE)
10298 {
10299 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10300 return value_zero (to_type, not_lval);
10301
10302 val = evaluate_var_msym_value (noside,
10303 exp->elts[pc + 1].objfile,
10304 exp->elts[pc + 2].msymbol);
10305 }
10306 else
10307 val = evaluate_var_value (noside,
10308 exp->elts[pc + 1].block,
10309 exp->elts[pc + 2].symbol);
10310
10311 if (noside == EVAL_SKIP)
10312 return eval_skip_value (exp);
10313
10314 val = ada_value_cast (to_type, val);
10315
10316 /* Follow the Ada language semantics that do not allow taking
10317 an address of the result of a cast (view conversion in Ada). */
10318 if (VALUE_LVAL (val) == lval_memory)
10319 {
10320 if (value_lazy (val))
10321 value_fetch_lazy (val);
10322 VALUE_LVAL (val) = not_lval;
10323 }
10324 return val;
10325 }
10326
10327 value *val = evaluate_subexp (to_type, exp, pos, noside);
10328 if (noside == EVAL_SKIP)
10329 return eval_skip_value (exp);
10330 return ada_value_cast (to_type, val);
10331}
10332
284614f0
JB
10333/* Implement the evaluate_exp routine in the exp_descriptor structure
10334 for the Ada language. */
10335
52ce6436 10336static struct value *
ebf56fd3 10337ada_evaluate_subexp (struct type *expect_type, struct expression *exp,
4c4b4cd2 10338 int *pos, enum noside noside)
14f9c5c9
AS
10339{
10340 enum exp_opcode op;
b5385fc0 10341 int tem;
14f9c5c9 10342 int pc;
5ec18f2b 10343 int preeval_pos;
14f9c5c9
AS
10344 struct value *arg1 = NULL, *arg2 = NULL, *arg3;
10345 struct type *type;
52ce6436 10346 int nargs, oplen;
d2e4a39e 10347 struct value **argvec;
14f9c5c9 10348
d2e4a39e
AS
10349 pc = *pos;
10350 *pos += 1;
14f9c5c9
AS
10351 op = exp->elts[pc].opcode;
10352
d2e4a39e 10353 switch (op)
14f9c5c9
AS
10354 {
10355 default:
10356 *pos -= 1;
6e48bd2c 10357 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
ca1f964d
JG
10358
10359 if (noside == EVAL_NORMAL)
10360 arg1 = unwrap_value (arg1);
6e48bd2c 10361
edd079d9 10362 /* If evaluating an OP_FLOAT and an EXPECT_TYPE was provided,
6e48bd2c
JB
10363 then we need to perform the conversion manually, because
10364 evaluate_subexp_standard doesn't do it. This conversion is
10365 necessary in Ada because the different kinds of float/fixed
10366 types in Ada have different representations.
10367
10368 Similarly, we need to perform the conversion from OP_LONG
10369 ourselves. */
edd079d9 10370 if ((op == OP_FLOAT || op == OP_LONG) && expect_type != NULL)
b7e22850 10371 arg1 = ada_value_cast (expect_type, arg1);
6e48bd2c
JB
10372
10373 return arg1;
4c4b4cd2
PH
10374
10375 case OP_STRING:
10376 {
76a01679 10377 struct value *result;
5b4ee69b 10378
76a01679
JB
10379 *pos -= 1;
10380 result = evaluate_subexp_standard (expect_type, exp, pos, noside);
10381 /* The result type will have code OP_STRING, bashed there from
10382 OP_ARRAY. Bash it back. */
78134374 10383 if (value_type (result)->code () == TYPE_CODE_STRING)
67607e24 10384 value_type (result)->set_code (TYPE_CODE_ARRAY);
76a01679 10385 return result;
4c4b4cd2 10386 }
14f9c5c9
AS
10387
10388 case UNOP_CAST:
10389 (*pos) += 2;
10390 type = exp->elts[pc + 1].type;
ced9779b 10391 return ada_evaluate_subexp_for_cast (exp, pos, noside, type);
14f9c5c9 10392
4c4b4cd2
PH
10393 case UNOP_QUAL:
10394 (*pos) += 2;
10395 type = exp->elts[pc + 1].type;
10396 return ada_evaluate_subexp (type, exp, pos, noside);
10397
14f9c5c9
AS
10398 case BINOP_ASSIGN:
10399 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
52ce6436
PH
10400 if (exp->elts[*pos].opcode == OP_AGGREGATE)
10401 {
10402 arg1 = assign_aggregate (arg1, arg1, exp, pos, noside);
10403 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
10404 return arg1;
10405 return ada_value_assign (arg1, arg1);
10406 }
003f3813
JB
10407 /* Force the evaluation of the rhs ARG2 to the type of the lhs ARG1,
10408 except if the lhs of our assignment is a convenience variable.
10409 In the case of assigning to a convenience variable, the lhs
10410 should be exactly the result of the evaluation of the rhs. */
10411 type = value_type (arg1);
10412 if (VALUE_LVAL (arg1) == lval_internalvar)
10413 type = NULL;
10414 arg2 = evaluate_subexp (type, exp, pos, noside);
14f9c5c9 10415 if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10416 return arg1;
f411722c
TT
10417 if (VALUE_LVAL (arg1) == lval_internalvar)
10418 {
10419 /* Nothing. */
10420 }
b2188a06 10421 else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
df407dfe 10422 arg2 = cast_to_fixed (value_type (arg1), arg2);
b2188a06 10423 else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
76a01679 10424 error
323e0a4a 10425 (_("Fixed-point values must be assigned to fixed-point variables"));
d2e4a39e 10426 else
df407dfe 10427 arg2 = coerce_for_assign (value_type (arg1), arg2);
4c4b4cd2 10428 return ada_value_assign (arg1, arg2);
14f9c5c9
AS
10429
10430 case BINOP_ADD:
10431 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10432 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10433 if (noside == EVAL_SKIP)
4c4b4cd2 10434 goto nosideret;
78134374 10435 if (value_type (arg1)->code () == TYPE_CODE_PTR)
2ac8a782
JB
10436 return (value_from_longest
10437 (value_type (arg1),
10438 value_as_long (arg1) + value_as_long (arg2)));
78134374 10439 if (value_type (arg2)->code () == TYPE_CODE_PTR)
c40cc657
JB
10440 return (value_from_longest
10441 (value_type (arg2),
10442 value_as_long (arg1) + value_as_long (arg2)));
b2188a06
JB
10443 if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1))
10444 || ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
df407dfe 10445 && value_type (arg1) != value_type (arg2))
323e0a4a 10446 error (_("Operands of fixed-point addition must have the same type"));
b7789565
JB
10447 /* Do the addition, and cast the result to the type of the first
10448 argument. We cannot cast the result to a reference type, so if
10449 ARG1 is a reference type, find its underlying type. */
10450 type = value_type (arg1);
78134374 10451 while (type->code () == TYPE_CODE_REF)
b7789565 10452 type = TYPE_TARGET_TYPE (type);
f44316fa 10453 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10454 return value_cast (type, value_binop (arg1, arg2, BINOP_ADD));
14f9c5c9
AS
10455
10456 case BINOP_SUB:
10457 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
10458 arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
10459 if (noside == EVAL_SKIP)
4c4b4cd2 10460 goto nosideret;
78134374 10461 if (value_type (arg1)->code () == TYPE_CODE_PTR)
2ac8a782
JB
10462 return (value_from_longest
10463 (value_type (arg1),
10464 value_as_long (arg1) - value_as_long (arg2)));
78134374 10465 if (value_type (arg2)->code () == TYPE_CODE_PTR)
c40cc657
JB
10466 return (value_from_longest
10467 (value_type (arg2),
10468 value_as_long (arg1) - value_as_long (arg2)));
b2188a06
JB
10469 if ((ada_is_gnat_encoded_fixed_point_type (value_type (arg1))
10470 || ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
df407dfe 10471 && value_type (arg1) != value_type (arg2))
0963b4bd
MS
10472 error (_("Operands of fixed-point subtraction "
10473 "must have the same type"));
b7789565
JB
10474 /* Do the substraction, and cast the result to the type of the first
10475 argument. We cannot cast the result to a reference type, so if
10476 ARG1 is a reference type, find its underlying type. */
10477 type = value_type (arg1);
78134374 10478 while (type->code () == TYPE_CODE_REF)
b7789565 10479 type = TYPE_TARGET_TYPE (type);
f44316fa 10480 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
89eef114 10481 return value_cast (type, value_binop (arg1, arg2, BINOP_SUB));
14f9c5c9
AS
10482
10483 case BINOP_MUL:
10484 case BINOP_DIV:
e1578042
JB
10485 case BINOP_REM:
10486 case BINOP_MOD:
14f9c5c9
AS
10487 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10488 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10489 if (noside == EVAL_SKIP)
4c4b4cd2 10490 goto nosideret;
e1578042 10491 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
9c2be529
JB
10492 {
10493 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10494 return value_zero (value_type (arg1), not_lval);
10495 }
14f9c5c9 10496 else
4c4b4cd2 10497 {
a53b7a21 10498 type = builtin_type (exp->gdbarch)->builtin_double;
b2188a06 10499 if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
a53b7a21 10500 arg1 = cast_from_fixed (type, arg1);
b2188a06 10501 if (ada_is_gnat_encoded_fixed_point_type (value_type (arg2)))
a53b7a21 10502 arg2 = cast_from_fixed (type, arg2);
f44316fa 10503 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
4c4b4cd2
PH
10504 return ada_value_binop (arg1, arg2, op);
10505 }
10506
4c4b4cd2
PH
10507 case BINOP_EQUAL:
10508 case BINOP_NOTEQUAL:
14f9c5c9 10509 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
df407dfe 10510 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
14f9c5c9 10511 if (noside == EVAL_SKIP)
76a01679 10512 goto nosideret;
4c4b4cd2 10513 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 10514 tem = 0;
4c4b4cd2 10515 else
f44316fa
UW
10516 {
10517 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10518 tem = ada_value_equal (arg1, arg2);
10519 }
4c4b4cd2 10520 if (op == BINOP_NOTEQUAL)
76a01679 10521 tem = !tem;
fbb06eb1
UW
10522 type = language_bool_type (exp->language_defn, exp->gdbarch);
10523 return value_from_longest (type, (LONGEST) tem);
4c4b4cd2
PH
10524
10525 case UNOP_NEG:
10526 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10527 if (noside == EVAL_SKIP)
10528 goto nosideret;
b2188a06 10529 else if (ada_is_gnat_encoded_fixed_point_type (value_type (arg1)))
df407dfe 10530 return value_cast (value_type (arg1), value_neg (arg1));
14f9c5c9 10531 else
f44316fa
UW
10532 {
10533 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
10534 return value_neg (arg1);
10535 }
4c4b4cd2 10536
2330c6c6
JB
10537 case BINOP_LOGICAL_AND:
10538 case BINOP_LOGICAL_OR:
10539 case UNOP_LOGICAL_NOT:
000d5124
JB
10540 {
10541 struct value *val;
10542
10543 *pos -= 1;
10544 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
fbb06eb1
UW
10545 type = language_bool_type (exp->language_defn, exp->gdbarch);
10546 return value_cast (type, val);
000d5124 10547 }
2330c6c6
JB
10548
10549 case BINOP_BITWISE_AND:
10550 case BINOP_BITWISE_IOR:
10551 case BINOP_BITWISE_XOR:
000d5124
JB
10552 {
10553 struct value *val;
10554
10555 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
10556 *pos = pc;
10557 val = evaluate_subexp_standard (expect_type, exp, pos, noside);
10558
10559 return value_cast (value_type (arg1), val);
10560 }
2330c6c6 10561
14f9c5c9
AS
10562 case OP_VAR_VALUE:
10563 *pos -= 1;
6799def4 10564
14f9c5c9 10565 if (noside == EVAL_SKIP)
4c4b4cd2
PH
10566 {
10567 *pos += 4;
10568 goto nosideret;
10569 }
da5c522f
JB
10570
10571 if (SYMBOL_DOMAIN (exp->elts[pc + 2].symbol) == UNDEF_DOMAIN)
76a01679
JB
10572 /* Only encountered when an unresolved symbol occurs in a
10573 context other than a function call, in which case, it is
52ce6436 10574 invalid. */
323e0a4a 10575 error (_("Unexpected unresolved symbol, %s, during evaluation"),
987012b8 10576 exp->elts[pc + 2].symbol->print_name ());
da5c522f
JB
10577
10578 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2 10579 {
0c1f74cf 10580 type = static_unwrap_type (SYMBOL_TYPE (exp->elts[pc + 2].symbol));
31dbc1c5
JB
10581 /* Check to see if this is a tagged type. We also need to handle
10582 the case where the type is a reference to a tagged type, but
10583 we have to be careful to exclude pointers to tagged types.
10584 The latter should be shown as usual (as a pointer), whereas
10585 a reference should mostly be transparent to the user. */
10586 if (ada_is_tagged_type (type, 0)
78134374 10587 || (type->code () == TYPE_CODE_REF
31dbc1c5 10588 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0)))
0d72a7c3
JB
10589 {
10590 /* Tagged types are a little special in the fact that the real
10591 type is dynamic and can only be determined by inspecting the
10592 object's tag. This means that we need to get the object's
10593 value first (EVAL_NORMAL) and then extract the actual object
10594 type from its tag.
10595
10596 Note that we cannot skip the final step where we extract
10597 the object type from its tag, because the EVAL_NORMAL phase
10598 results in dynamic components being resolved into fixed ones.
10599 This can cause problems when trying to print the type
10600 description of tagged types whose parent has a dynamic size:
10601 We use the type name of the "_parent" component in order
10602 to print the name of the ancestor type in the type description.
10603 If that component had a dynamic size, the resolution into
10604 a fixed type would result in the loss of that type name,
10605 thus preventing us from printing the name of the ancestor
10606 type in the type description. */
10607 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
10608
78134374 10609 if (type->code () != TYPE_CODE_REF)
0d72a7c3
JB
10610 {
10611 struct type *actual_type;
10612
10613 actual_type = type_from_tag (ada_value_tag (arg1));
10614 if (actual_type == NULL)
10615 /* If, for some reason, we were unable to determine
10616 the actual type from the tag, then use the static
10617 approximation that we just computed as a fallback.
10618 This can happen if the debugging information is
10619 incomplete, for instance. */
10620 actual_type = type;
10621 return value_zero (actual_type, not_lval);
10622 }
10623 else
10624 {
10625 /* In the case of a ref, ada_coerce_ref takes care
10626 of determining the actual type. But the evaluation
10627 should return a ref as it should be valid to ask
10628 for its address; so rebuild a ref after coerce. */
10629 arg1 = ada_coerce_ref (arg1);
a65cfae5 10630 return value_ref (arg1, TYPE_CODE_REF);
0d72a7c3
JB
10631 }
10632 }
0c1f74cf 10633
84754697
JB
10634 /* Records and unions for which GNAT encodings have been
10635 generated need to be statically fixed as well.
10636 Otherwise, non-static fixing produces a type where
10637 all dynamic properties are removed, which prevents "ptype"
10638 from being able to completely describe the type.
10639 For instance, a case statement in a variant record would be
10640 replaced by the relevant components based on the actual
10641 value of the discriminants. */
78134374 10642 if ((type->code () == TYPE_CODE_STRUCT
84754697 10643 && dynamic_template_type (type) != NULL)
78134374 10644 || (type->code () == TYPE_CODE_UNION
84754697
JB
10645 && ada_find_parallel_type (type, "___XVU") != NULL))
10646 {
10647 *pos += 4;
10648 return value_zero (to_static_fixed_type (type), not_lval);
10649 }
4c4b4cd2 10650 }
da5c522f
JB
10651
10652 arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
10653 return ada_to_fixed_value (arg1);
4c4b4cd2
PH
10654
10655 case OP_FUNCALL:
10656 (*pos) += 2;
10657
10658 /* Allocate arg vector, including space for the function to be
10659 called in argvec[0] and a terminating NULL. */
10660 nargs = longest_to_int (exp->elts[pc + 1].longconst);
8d749320 10661 argvec = XALLOCAVEC (struct value *, nargs + 2);
4c4b4cd2
PH
10662
10663 if (exp->elts[*pos].opcode == OP_VAR_VALUE
76a01679 10664 && SYMBOL_DOMAIN (exp->elts[pc + 5].symbol) == UNDEF_DOMAIN)
323e0a4a 10665 error (_("Unexpected unresolved symbol, %s, during evaluation"),
987012b8 10666 exp->elts[pc + 5].symbol->print_name ());
4c4b4cd2
PH
10667 else
10668 {
10669 for (tem = 0; tem <= nargs; tem += 1)
10670 argvec[tem] = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10671 argvec[tem] = 0;
10672
10673 if (noside == EVAL_SKIP)
10674 goto nosideret;
10675 }
10676
ad82864c
JB
10677 if (ada_is_constrained_packed_array_type
10678 (desc_base_type (value_type (argvec[0]))))
4c4b4cd2 10679 argvec[0] = ada_coerce_to_simple_array (argvec[0]);
78134374 10680 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
284614f0
JB
10681 && TYPE_FIELD_BITSIZE (value_type (argvec[0]), 0) != 0)
10682 /* This is a packed array that has already been fixed, and
10683 therefore already coerced to a simple array. Nothing further
10684 to do. */
10685 ;
78134374 10686 else if (value_type (argvec[0])->code () == TYPE_CODE_REF)
e6c2c623
PMR
10687 {
10688 /* Make sure we dereference references so that all the code below
10689 feels like it's really handling the referenced value. Wrapping
10690 types (for alignment) may be there, so make sure we strip them as
10691 well. */
10692 argvec[0] = ada_to_fixed_value (coerce_ref (argvec[0]));
10693 }
78134374 10694 else if (value_type (argvec[0])->code () == TYPE_CODE_ARRAY
e6c2c623
PMR
10695 && VALUE_LVAL (argvec[0]) == lval_memory)
10696 argvec[0] = value_addr (argvec[0]);
4c4b4cd2 10697
df407dfe 10698 type = ada_check_typedef (value_type (argvec[0]));
720d1a40
JB
10699
10700 /* Ada allows us to implicitly dereference arrays when subscripting
8f465ea7
JB
10701 them. So, if this is an array typedef (encoding use for array
10702 access types encoded as fat pointers), strip it now. */
78134374 10703 if (type->code () == TYPE_CODE_TYPEDEF)
720d1a40
JB
10704 type = ada_typedef_target_type (type);
10705
78134374 10706 if (type->code () == TYPE_CODE_PTR)
4c4b4cd2 10707 {
78134374 10708 switch (ada_check_typedef (TYPE_TARGET_TYPE (type))->code ())
4c4b4cd2
PH
10709 {
10710 case TYPE_CODE_FUNC:
61ee279c 10711 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10712 break;
10713 case TYPE_CODE_ARRAY:
10714 break;
10715 case TYPE_CODE_STRUCT:
10716 if (noside != EVAL_AVOID_SIDE_EFFECTS)
10717 argvec[0] = ada_value_ind (argvec[0]);
61ee279c 10718 type = ada_check_typedef (TYPE_TARGET_TYPE (type));
4c4b4cd2
PH
10719 break;
10720 default:
323e0a4a 10721 error (_("cannot subscript or call something of type `%s'"),
df407dfe 10722 ada_type_name (value_type (argvec[0])));
4c4b4cd2
PH
10723 break;
10724 }
10725 }
10726
78134374 10727 switch (type->code ())
4c4b4cd2
PH
10728 {
10729 case TYPE_CODE_FUNC:
10730 if (noside == EVAL_AVOID_SIDE_EFFECTS)
c8ea1972 10731 {
7022349d
PA
10732 if (TYPE_TARGET_TYPE (type) == NULL)
10733 error_call_unknown_return_type (NULL);
10734 return allocate_value (TYPE_TARGET_TYPE (type));
c8ea1972 10735 }
e71585ff
PA
10736 return call_function_by_hand (argvec[0], NULL,
10737 gdb::make_array_view (argvec + 1,
10738 nargs));
c8ea1972
PH
10739 case TYPE_CODE_INTERNAL_FUNCTION:
10740 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10741 /* We don't know anything about what the internal
10742 function might return, but we have to return
10743 something. */
10744 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
10745 not_lval);
10746 else
10747 return call_internal_function (exp->gdbarch, exp->language_defn,
10748 argvec[0], nargs, argvec + 1);
10749
4c4b4cd2
PH
10750 case TYPE_CODE_STRUCT:
10751 {
10752 int arity;
10753
4c4b4cd2
PH
10754 arity = ada_array_arity (type);
10755 type = ada_array_element_type (type, nargs);
10756 if (type == NULL)
323e0a4a 10757 error (_("cannot subscript or call a record"));
4c4b4cd2 10758 if (arity != nargs)
323e0a4a 10759 error (_("wrong number of subscripts; expecting %d"), arity);
4c4b4cd2 10760 if (noside == EVAL_AVOID_SIDE_EFFECTS)
0a07e705 10761 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10762 return
10763 unwrap_value (ada_value_subscript
10764 (argvec[0], nargs, argvec + 1));
10765 }
10766 case TYPE_CODE_ARRAY:
10767 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10768 {
10769 type = ada_array_element_type (type, nargs);
10770 if (type == NULL)
323e0a4a 10771 error (_("element type of array unknown"));
4c4b4cd2 10772 else
0a07e705 10773 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10774 }
10775 return
10776 unwrap_value (ada_value_subscript
10777 (ada_coerce_to_simple_array (argvec[0]),
10778 nargs, argvec + 1));
10779 case TYPE_CODE_PTR: /* Pointer to array */
4c4b4cd2
PH
10780 if (noside == EVAL_AVOID_SIDE_EFFECTS)
10781 {
deede10c 10782 type = to_fixed_array_type (TYPE_TARGET_TYPE (type), NULL, 1);
4c4b4cd2
PH
10783 type = ada_array_element_type (type, nargs);
10784 if (type == NULL)
323e0a4a 10785 error (_("element type of array unknown"));
4c4b4cd2 10786 else
0a07e705 10787 return value_zero (ada_aligned_type (type), lval_memory);
4c4b4cd2
PH
10788 }
10789 return
deede10c
JB
10790 unwrap_value (ada_value_ptr_subscript (argvec[0],
10791 nargs, argvec + 1));
4c4b4cd2
PH
10792
10793 default:
e1d5a0d2
PH
10794 error (_("Attempt to index or call something other than an "
10795 "array or function"));
4c4b4cd2
PH
10796 }
10797
10798 case TERNOP_SLICE:
10799 {
10800 struct value *array = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10801 struct value *low_bound_val =
10802 evaluate_subexp (NULL_TYPE, exp, pos, noside);
714e53ab
PH
10803 struct value *high_bound_val =
10804 evaluate_subexp (NULL_TYPE, exp, pos, noside);
10805 LONGEST low_bound;
10806 LONGEST high_bound;
5b4ee69b 10807
994b9211
AC
10808 low_bound_val = coerce_ref (low_bound_val);
10809 high_bound_val = coerce_ref (high_bound_val);
aa715135
JG
10810 low_bound = value_as_long (low_bound_val);
10811 high_bound = value_as_long (high_bound_val);
963a6417 10812
4c4b4cd2
PH
10813 if (noside == EVAL_SKIP)
10814 goto nosideret;
10815
4c4b4cd2
PH
10816 /* If this is a reference to an aligner type, then remove all
10817 the aligners. */
78134374 10818 if (value_type (array)->code () == TYPE_CODE_REF
df407dfe
AC
10819 && ada_is_aligner_type (TYPE_TARGET_TYPE (value_type (array))))
10820 TYPE_TARGET_TYPE (value_type (array)) =
10821 ada_aligned_type (TYPE_TARGET_TYPE (value_type (array)));
4c4b4cd2 10822
ad82864c 10823 if (ada_is_constrained_packed_array_type (value_type (array)))
323e0a4a 10824 error (_("cannot slice a packed array"));
4c4b4cd2
PH
10825
10826 /* If this is a reference to an array or an array lvalue,
10827 convert to a pointer. */
78134374
SM
10828 if (value_type (array)->code () == TYPE_CODE_REF
10829 || (value_type (array)->code () == TYPE_CODE_ARRAY
4c4b4cd2
PH
10830 && VALUE_LVAL (array) == lval_memory))
10831 array = value_addr (array);
10832
1265e4aa 10833 if (noside == EVAL_AVOID_SIDE_EFFECTS
61ee279c 10834 && ada_is_array_descriptor_type (ada_check_typedef
df407dfe 10835 (value_type (array))))
bff8c71f
TT
10836 return empty_array (ada_type_of_array (array, 0), low_bound,
10837 high_bound);
4c4b4cd2
PH
10838
10839 array = ada_coerce_to_simple_array_ptr (array);
10840
714e53ab
PH
10841 /* If we have more than one level of pointer indirection,
10842 dereference the value until we get only one level. */
78134374
SM
10843 while (value_type (array)->code () == TYPE_CODE_PTR
10844 && (TYPE_TARGET_TYPE (value_type (array))->code ()
714e53ab
PH
10845 == TYPE_CODE_PTR))
10846 array = value_ind (array);
10847
10848 /* Make sure we really do have an array type before going further,
10849 to avoid a SEGV when trying to get the index type or the target
10850 type later down the road if the debug info generated by
10851 the compiler is incorrect or incomplete. */
df407dfe 10852 if (!ada_is_simple_array_type (value_type (array)))
323e0a4a 10853 error (_("cannot take slice of non-array"));
714e53ab 10854
78134374 10855 if (ada_check_typedef (value_type (array))->code ()
828292f2 10856 == TYPE_CODE_PTR)
4c4b4cd2 10857 {
828292f2
JB
10858 struct type *type0 = ada_check_typedef (value_type (array));
10859
0b5d8877 10860 if (high_bound < low_bound || noside == EVAL_AVOID_SIDE_EFFECTS)
bff8c71f 10861 return empty_array (TYPE_TARGET_TYPE (type0), low_bound, high_bound);
4c4b4cd2
PH
10862 else
10863 {
10864 struct type *arr_type0 =
828292f2 10865 to_fixed_array_type (TYPE_TARGET_TYPE (type0), NULL, 1);
5b4ee69b 10866
f5938064
JG
10867 return ada_value_slice_from_ptr (array, arr_type0,
10868 longest_to_int (low_bound),
10869 longest_to_int (high_bound));
4c4b4cd2
PH
10870 }
10871 }
10872 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10873 return array;
10874 else if (high_bound < low_bound)
bff8c71f 10875 return empty_array (value_type (array), low_bound, high_bound);
4c4b4cd2 10876 else
529cad9c
PH
10877 return ada_value_slice (array, longest_to_int (low_bound),
10878 longest_to_int (high_bound));
4c4b4cd2 10879 }
14f9c5c9 10880
4c4b4cd2
PH
10881 case UNOP_IN_RANGE:
10882 (*pos) += 2;
10883 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8008e265 10884 type = check_typedef (exp->elts[pc + 1].type);
14f9c5c9 10885
14f9c5c9 10886 if (noside == EVAL_SKIP)
4c4b4cd2 10887 goto nosideret;
14f9c5c9 10888
78134374 10889 switch (type->code ())
4c4b4cd2
PH
10890 {
10891 default:
e1d5a0d2
PH
10892 lim_warning (_("Membership test incompletely implemented; "
10893 "always returns true"));
fbb06eb1
UW
10894 type = language_bool_type (exp->language_defn, exp->gdbarch);
10895 return value_from_longest (type, (LONGEST) 1);
4c4b4cd2
PH
10896
10897 case TYPE_CODE_RANGE:
030b4912
UW
10898 arg2 = value_from_longest (type, TYPE_LOW_BOUND (type));
10899 arg3 = value_from_longest (type, TYPE_HIGH_BOUND (type));
f44316fa
UW
10900 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10901 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1
UW
10902 type = language_bool_type (exp->language_defn, exp->gdbarch);
10903 return
10904 value_from_longest (type,
4c4b4cd2
PH
10905 (value_less (arg1, arg3)
10906 || value_equal (arg1, arg3))
10907 && (value_less (arg2, arg1)
10908 || value_equal (arg2, arg1)));
10909 }
10910
10911 case BINOP_IN_BOUNDS:
14f9c5c9 10912 (*pos) += 2;
4c4b4cd2
PH
10913 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10914 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 10915
4c4b4cd2
PH
10916 if (noside == EVAL_SKIP)
10917 goto nosideret;
14f9c5c9 10918
4c4b4cd2 10919 if (noside == EVAL_AVOID_SIDE_EFFECTS)
fbb06eb1
UW
10920 {
10921 type = language_bool_type (exp->language_defn, exp->gdbarch);
10922 return value_zero (type, not_lval);
10923 }
14f9c5c9 10924
4c4b4cd2 10925 tem = longest_to_int (exp->elts[pc + 1].longconst);
14f9c5c9 10926
1eea4ebd
UW
10927 type = ada_index_type (value_type (arg2), tem, "range");
10928 if (!type)
10929 type = value_type (arg1);
14f9c5c9 10930
1eea4ebd
UW
10931 arg3 = value_from_longest (type, ada_array_bound (arg2, tem, 1));
10932 arg2 = value_from_longest (type, ada_array_bound (arg2, tem, 0));
d2e4a39e 10933
f44316fa
UW
10934 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10935 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10936 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10937 return
fbb06eb1 10938 value_from_longest (type,
4c4b4cd2
PH
10939 (value_less (arg1, arg3)
10940 || value_equal (arg1, arg3))
10941 && (value_less (arg2, arg1)
10942 || value_equal (arg2, arg1)));
10943
10944 case TERNOP_IN_RANGE:
10945 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10946 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10947 arg3 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10948
10949 if (noside == EVAL_SKIP)
10950 goto nosideret;
10951
f44316fa
UW
10952 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
10953 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg3);
fbb06eb1 10954 type = language_bool_type (exp->language_defn, exp->gdbarch);
4c4b4cd2 10955 return
fbb06eb1 10956 value_from_longest (type,
4c4b4cd2
PH
10957 (value_less (arg1, arg3)
10958 || value_equal (arg1, arg3))
10959 && (value_less (arg2, arg1)
10960 || value_equal (arg2, arg1)));
10961
10962 case OP_ATR_FIRST:
10963 case OP_ATR_LAST:
10964 case OP_ATR_LENGTH:
10965 {
76a01679 10966 struct type *type_arg;
5b4ee69b 10967
76a01679
JB
10968 if (exp->elts[*pos].opcode == OP_TYPE)
10969 {
10970 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
10971 arg1 = NULL;
5bc23cb3 10972 type_arg = check_typedef (exp->elts[pc + 2].type);
76a01679
JB
10973 }
10974 else
10975 {
10976 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
10977 type_arg = NULL;
10978 }
10979
10980 if (exp->elts[*pos].opcode != OP_LONG)
323e0a4a 10981 error (_("Invalid operand to '%s"), ada_attribute_name (op));
76a01679
JB
10982 tem = longest_to_int (exp->elts[*pos + 2].longconst);
10983 *pos += 4;
10984
10985 if (noside == EVAL_SKIP)
10986 goto nosideret;
680e1bee
TT
10987 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
10988 {
10989 if (type_arg == NULL)
10990 type_arg = value_type (arg1);
76a01679 10991
680e1bee
TT
10992 if (ada_is_constrained_packed_array_type (type_arg))
10993 type_arg = decode_constrained_packed_array_type (type_arg);
10994
10995 if (!discrete_type_p (type_arg))
10996 {
10997 switch (op)
10998 {
10999 default: /* Should never happen. */
11000 error (_("unexpected attribute encountered"));
11001 case OP_ATR_FIRST:
11002 case OP_ATR_LAST:
11003 type_arg = ada_index_type (type_arg, tem,
11004 ada_attribute_name (op));
11005 break;
11006 case OP_ATR_LENGTH:
11007 type_arg = builtin_type (exp->gdbarch)->builtin_int;
11008 break;
11009 }
11010 }
11011
11012 return value_zero (type_arg, not_lval);
11013 }
11014 else if (type_arg == NULL)
76a01679
JB
11015 {
11016 arg1 = ada_coerce_ref (arg1);
11017
ad82864c 11018 if (ada_is_constrained_packed_array_type (value_type (arg1)))
76a01679
JB
11019 arg1 = ada_coerce_to_simple_array (arg1);
11020
aa4fb036 11021 if (op == OP_ATR_LENGTH)
1eea4ebd 11022 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11023 else
11024 {
11025 type = ada_index_type (value_type (arg1), tem,
11026 ada_attribute_name (op));
11027 if (type == NULL)
11028 type = builtin_type (exp->gdbarch)->builtin_int;
11029 }
76a01679 11030
76a01679
JB
11031 switch (op)
11032 {
11033 default: /* Should never happen. */
323e0a4a 11034 error (_("unexpected attribute encountered"));
76a01679 11035 case OP_ATR_FIRST:
1eea4ebd
UW
11036 return value_from_longest
11037 (type, ada_array_bound (arg1, tem, 0));
76a01679 11038 case OP_ATR_LAST:
1eea4ebd
UW
11039 return value_from_longest
11040 (type, ada_array_bound (arg1, tem, 1));
76a01679 11041 case OP_ATR_LENGTH:
1eea4ebd
UW
11042 return value_from_longest
11043 (type, ada_array_length (arg1, tem));
76a01679
JB
11044 }
11045 }
11046 else if (discrete_type_p (type_arg))
11047 {
11048 struct type *range_type;
0d5cff50 11049 const char *name = ada_type_name (type_arg);
5b4ee69b 11050
76a01679 11051 range_type = NULL;
78134374 11052 if (name != NULL && type_arg->code () != TYPE_CODE_ENUM)
28c85d6c 11053 range_type = to_fixed_range_type (type_arg, NULL);
76a01679
JB
11054 if (range_type == NULL)
11055 range_type = type_arg;
11056 switch (op)
11057 {
11058 default:
323e0a4a 11059 error (_("unexpected attribute encountered"));
76a01679 11060 case OP_ATR_FIRST:
690cc4eb 11061 return value_from_longest
43bbcdc2 11062 (range_type, ada_discrete_type_low_bound (range_type));
76a01679 11063 case OP_ATR_LAST:
690cc4eb 11064 return value_from_longest
43bbcdc2 11065 (range_type, ada_discrete_type_high_bound (range_type));
76a01679 11066 case OP_ATR_LENGTH:
323e0a4a 11067 error (_("the 'length attribute applies only to array types"));
76a01679
JB
11068 }
11069 }
78134374 11070 else if (type_arg->code () == TYPE_CODE_FLT)
323e0a4a 11071 error (_("unimplemented type attribute"));
76a01679
JB
11072 else
11073 {
11074 LONGEST low, high;
11075
ad82864c
JB
11076 if (ada_is_constrained_packed_array_type (type_arg))
11077 type_arg = decode_constrained_packed_array_type (type_arg);
76a01679 11078
aa4fb036 11079 if (op == OP_ATR_LENGTH)
1eea4ebd 11080 type = builtin_type (exp->gdbarch)->builtin_int;
aa4fb036
JB
11081 else
11082 {
11083 type = ada_index_type (type_arg, tem, ada_attribute_name (op));
11084 if (type == NULL)
11085 type = builtin_type (exp->gdbarch)->builtin_int;
11086 }
1eea4ebd 11087
76a01679
JB
11088 switch (op)
11089 {
11090 default:
323e0a4a 11091 error (_("unexpected attribute encountered"));
76a01679 11092 case OP_ATR_FIRST:
1eea4ebd 11093 low = ada_array_bound_from_type (type_arg, tem, 0);
76a01679
JB
11094 return value_from_longest (type, low);
11095 case OP_ATR_LAST:
1eea4ebd 11096 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11097 return value_from_longest (type, high);
11098 case OP_ATR_LENGTH:
1eea4ebd
UW
11099 low = ada_array_bound_from_type (type_arg, tem, 0);
11100 high = ada_array_bound_from_type (type_arg, tem, 1);
76a01679
JB
11101 return value_from_longest (type, high - low + 1);
11102 }
11103 }
14f9c5c9
AS
11104 }
11105
4c4b4cd2
PH
11106 case OP_ATR_TAG:
11107 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11108 if (noside == EVAL_SKIP)
76a01679 11109 goto nosideret;
4c4b4cd2
PH
11110
11111 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11112 return value_zero (ada_tag_type (arg1), not_lval);
4c4b4cd2
PH
11113
11114 return ada_value_tag (arg1);
11115
11116 case OP_ATR_MIN:
11117 case OP_ATR_MAX:
11118 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11119 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11120 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11121 if (noside == EVAL_SKIP)
76a01679 11122 goto nosideret;
d2e4a39e 11123 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11124 return value_zero (value_type (arg1), not_lval);
14f9c5c9 11125 else
f44316fa
UW
11126 {
11127 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11128 return value_binop (arg1, arg2,
11129 op == OP_ATR_MIN ? BINOP_MIN : BINOP_MAX);
11130 }
14f9c5c9 11131
4c4b4cd2
PH
11132 case OP_ATR_MODULUS:
11133 {
31dedfee 11134 struct type *type_arg = check_typedef (exp->elts[pc + 2].type);
4c4b4cd2 11135
5b4ee69b 11136 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
76a01679
JB
11137 if (noside == EVAL_SKIP)
11138 goto nosideret;
4c4b4cd2 11139
76a01679 11140 if (!ada_is_modular_type (type_arg))
323e0a4a 11141 error (_("'modulus must be applied to modular type"));
4c4b4cd2 11142
76a01679
JB
11143 return value_from_longest (TYPE_TARGET_TYPE (type_arg),
11144 ada_modulus (type_arg));
4c4b4cd2
PH
11145 }
11146
11147
11148 case OP_ATR_POS:
11149 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9
AS
11150 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11151 if (noside == EVAL_SKIP)
76a01679 11152 goto nosideret;
3cb382c9
UW
11153 type = builtin_type (exp->gdbarch)->builtin_int;
11154 if (noside == EVAL_AVOID_SIDE_EFFECTS)
11155 return value_zero (type, not_lval);
14f9c5c9 11156 else
3cb382c9 11157 return value_pos_atr (type, arg1);
14f9c5c9 11158
4c4b4cd2
PH
11159 case OP_ATR_SIZE:
11160 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
8c1c099f
JB
11161 type = value_type (arg1);
11162
11163 /* If the argument is a reference, then dereference its type, since
11164 the user is really asking for the size of the actual object,
11165 not the size of the pointer. */
78134374 11166 if (type->code () == TYPE_CODE_REF)
8c1c099f
JB
11167 type = TYPE_TARGET_TYPE (type);
11168
4c4b4cd2 11169 if (noside == EVAL_SKIP)
76a01679 11170 goto nosideret;
4c4b4cd2 11171 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
22601c15 11172 return value_zero (builtin_type (exp->gdbarch)->builtin_int, not_lval);
4c4b4cd2 11173 else
22601c15 11174 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
8c1c099f 11175 TARGET_CHAR_BIT * TYPE_LENGTH (type));
4c4b4cd2
PH
11176
11177 case OP_ATR_VAL:
11178 evaluate_subexp (NULL_TYPE, exp, pos, EVAL_SKIP);
14f9c5c9 11179 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
4c4b4cd2 11180 type = exp->elts[pc + 2].type;
14f9c5c9 11181 if (noside == EVAL_SKIP)
76a01679 11182 goto nosideret;
4c4b4cd2 11183 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11184 return value_zero (type, not_lval);
4c4b4cd2 11185 else
76a01679 11186 return value_val_atr (type, arg1);
4c4b4cd2
PH
11187
11188 case BINOP_EXP:
11189 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11190 arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11191 if (noside == EVAL_SKIP)
11192 goto nosideret;
11193 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
df407dfe 11194 return value_zero (value_type (arg1), not_lval);
4c4b4cd2 11195 else
f44316fa
UW
11196 {
11197 /* For integer exponentiation operations,
11198 only promote the first argument. */
11199 if (is_integral_type (value_type (arg2)))
11200 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
11201 else
11202 binop_promote (exp->language_defn, exp->gdbarch, &arg1, &arg2);
11203
11204 return value_binop (arg1, arg2, op);
11205 }
4c4b4cd2
PH
11206
11207 case UNOP_PLUS:
11208 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11209 if (noside == EVAL_SKIP)
11210 goto nosideret;
11211 else
11212 return arg1;
11213
11214 case UNOP_ABS:
11215 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11216 if (noside == EVAL_SKIP)
11217 goto nosideret;
f44316fa 11218 unop_promote (exp->language_defn, exp->gdbarch, &arg1);
df407dfe 11219 if (value_less (arg1, value_zero (value_type (arg1), not_lval)))
4c4b4cd2 11220 return value_neg (arg1);
14f9c5c9 11221 else
4c4b4cd2 11222 return arg1;
14f9c5c9
AS
11223
11224 case UNOP_IND:
5ec18f2b 11225 preeval_pos = *pos;
6b0d7253 11226 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
14f9c5c9 11227 if (noside == EVAL_SKIP)
4c4b4cd2 11228 goto nosideret;
df407dfe 11229 type = ada_check_typedef (value_type (arg1));
14f9c5c9 11230 if (noside == EVAL_AVOID_SIDE_EFFECTS)
4c4b4cd2
PH
11231 {
11232 if (ada_is_array_descriptor_type (type))
11233 /* GDB allows dereferencing GNAT array descriptors. */
11234 {
11235 struct type *arrType = ada_type_of_array (arg1, 0);
5b4ee69b 11236
4c4b4cd2 11237 if (arrType == NULL)
323e0a4a 11238 error (_("Attempt to dereference null array pointer."));
00a4c844 11239 return value_at_lazy (arrType, 0);
4c4b4cd2 11240 }
78134374
SM
11241 else if (type->code () == TYPE_CODE_PTR
11242 || type->code () == TYPE_CODE_REF
4c4b4cd2 11243 /* In C you can dereference an array to get the 1st elt. */
78134374 11244 || type->code () == TYPE_CODE_ARRAY)
714e53ab 11245 {
5ec18f2b
JG
11246 /* As mentioned in the OP_VAR_VALUE case, tagged types can
11247 only be determined by inspecting the object's tag.
11248 This means that we need to evaluate completely the
11249 expression in order to get its type. */
11250
78134374
SM
11251 if ((type->code () == TYPE_CODE_REF
11252 || type->code () == TYPE_CODE_PTR)
5ec18f2b
JG
11253 && ada_is_tagged_type (TYPE_TARGET_TYPE (type), 0))
11254 {
11255 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11256 EVAL_NORMAL);
11257 type = value_type (ada_value_ind (arg1));
11258 }
11259 else
11260 {
11261 type = to_static_fixed_type
11262 (ada_aligned_type
11263 (ada_check_typedef (TYPE_TARGET_TYPE (type))));
11264 }
c1b5a1a6 11265 ada_ensure_varsize_limit (type);
714e53ab
PH
11266 return value_zero (type, lval_memory);
11267 }
78134374 11268 else if (type->code () == TYPE_CODE_INT)
6b0d7253
JB
11269 {
11270 /* GDB allows dereferencing an int. */
11271 if (expect_type == NULL)
11272 return value_zero (builtin_type (exp->gdbarch)->builtin_int,
11273 lval_memory);
11274 else
11275 {
11276 expect_type =
11277 to_static_fixed_type (ada_aligned_type (expect_type));
11278 return value_zero (expect_type, lval_memory);
11279 }
11280 }
4c4b4cd2 11281 else
323e0a4a 11282 error (_("Attempt to take contents of a non-pointer value."));
4c4b4cd2 11283 }
0963b4bd 11284 arg1 = ada_coerce_ref (arg1); /* FIXME: What is this for?? */
df407dfe 11285 type = ada_check_typedef (value_type (arg1));
d2e4a39e 11286
78134374 11287 if (type->code () == TYPE_CODE_INT)
96967637
JB
11288 /* GDB allows dereferencing an int. If we were given
11289 the expect_type, then use that as the target type.
11290 Otherwise, assume that the target type is an int. */
11291 {
11292 if (expect_type != NULL)
11293 return ada_value_ind (value_cast (lookup_pointer_type (expect_type),
11294 arg1));
11295 else
11296 return value_at_lazy (builtin_type (exp->gdbarch)->builtin_int,
11297 (CORE_ADDR) value_as_address (arg1));
11298 }
6b0d7253 11299
4c4b4cd2
PH
11300 if (ada_is_array_descriptor_type (type))
11301 /* GDB allows dereferencing GNAT array descriptors. */
11302 return ada_coerce_to_simple_array (arg1);
14f9c5c9 11303 else
4c4b4cd2 11304 return ada_value_ind (arg1);
14f9c5c9
AS
11305
11306 case STRUCTOP_STRUCT:
11307 tem = longest_to_int (exp->elts[pc + 1].longconst);
11308 (*pos) += 3 + BYTES_TO_EXP_ELEM (tem + 1);
5ec18f2b 11309 preeval_pos = *pos;
14f9c5c9
AS
11310 arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
11311 if (noside == EVAL_SKIP)
4c4b4cd2 11312 goto nosideret;
14f9c5c9 11313 if (noside == EVAL_AVOID_SIDE_EFFECTS)
76a01679 11314 {
df407dfe 11315 struct type *type1 = value_type (arg1);
5b4ee69b 11316
76a01679
JB
11317 if (ada_is_tagged_type (type1, 1))
11318 {
11319 type = ada_lookup_struct_elt_type (type1,
11320 &exp->elts[pc + 2].string,
988f6b3d 11321 1, 1);
5ec18f2b
JG
11322
11323 /* If the field is not found, check if it exists in the
11324 extension of this object's type. This means that we
11325 need to evaluate completely the expression. */
11326
76a01679 11327 if (type == NULL)
5ec18f2b
JG
11328 {
11329 arg1 = evaluate_subexp (NULL_TYPE, exp, &preeval_pos,
11330 EVAL_NORMAL);
11331 arg1 = ada_value_struct_elt (arg1,
11332 &exp->elts[pc + 2].string,
11333 0);
11334 arg1 = unwrap_value (arg1);
11335 type = value_type (ada_to_fixed_value (arg1));
11336 }
76a01679
JB
11337 }
11338 else
11339 type =
11340 ada_lookup_struct_elt_type (type1, &exp->elts[pc + 2].string, 1,
988f6b3d 11341 0);
76a01679
JB
11342
11343 return value_zero (ada_aligned_type (type), lval_memory);
11344 }
14f9c5c9 11345 else
a579cd9a
MW
11346 {
11347 arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
11348 arg1 = unwrap_value (arg1);
11349 return ada_to_fixed_value (arg1);
11350 }
284614f0 11351
14f9c5c9 11352 case OP_TYPE:
4c4b4cd2
PH
11353 /* The value is not supposed to be used. This is here to make it
11354 easier to accommodate expressions that contain types. */
14f9c5c9
AS
11355 (*pos) += 2;
11356 if (noside == EVAL_SKIP)
4c4b4cd2 11357 goto nosideret;
14f9c5c9 11358 else if (noside == EVAL_AVOID_SIDE_EFFECTS)
a6cfbe68 11359 return allocate_value (exp->elts[pc + 1].type);
14f9c5c9 11360 else
323e0a4a 11361 error (_("Attempt to use a type name as an expression"));
52ce6436
PH
11362
11363 case OP_AGGREGATE:
11364 case OP_CHOICES:
11365 case OP_OTHERS:
11366 case OP_DISCRETE_RANGE:
11367 case OP_POSITIONAL:
11368 case OP_NAME:
11369 if (noside == EVAL_NORMAL)
11370 switch (op)
11371 {
11372 case OP_NAME:
11373 error (_("Undefined name, ambiguous name, or renaming used in "
e1d5a0d2 11374 "component association: %s."), &exp->elts[pc+2].string);
52ce6436
PH
11375 case OP_AGGREGATE:
11376 error (_("Aggregates only allowed on the right of an assignment"));
11377 default:
0963b4bd
MS
11378 internal_error (__FILE__, __LINE__,
11379 _("aggregate apparently mangled"));
52ce6436
PH
11380 }
11381
11382 ada_forward_operator_length (exp, pc, &oplen, &nargs);
11383 *pos += oplen - 1;
11384 for (tem = 0; tem < nargs; tem += 1)
11385 ada_evaluate_subexp (NULL, exp, pos, noside);
11386 goto nosideret;
14f9c5c9
AS
11387 }
11388
11389nosideret:
ced9779b 11390 return eval_skip_value (exp);
14f9c5c9 11391}
14f9c5c9 11392\f
d2e4a39e 11393
4c4b4cd2 11394 /* Fixed point */
14f9c5c9
AS
11395
11396/* If TYPE encodes an Ada fixed-point type, return the suffix of the
11397 type name that encodes the 'small and 'delta information.
4c4b4cd2 11398 Otherwise, return NULL. */
14f9c5c9 11399
d2e4a39e 11400static const char *
b2188a06 11401gnat_encoded_fixed_type_info (struct type *type)
14f9c5c9 11402{
d2e4a39e 11403 const char *name = ada_type_name (type);
78134374 11404 enum type_code code = (type == NULL) ? TYPE_CODE_UNDEF : type->code ();
14f9c5c9 11405
d2e4a39e
AS
11406 if ((code == TYPE_CODE_INT || code == TYPE_CODE_RANGE) && name != NULL)
11407 {
14f9c5c9 11408 const char *tail = strstr (name, "___XF_");
5b4ee69b 11409
14f9c5c9 11410 if (tail == NULL)
4c4b4cd2 11411 return NULL;
d2e4a39e 11412 else
4c4b4cd2 11413 return tail + 5;
14f9c5c9
AS
11414 }
11415 else if (code == TYPE_CODE_RANGE && TYPE_TARGET_TYPE (type) != type)
b2188a06 11416 return gnat_encoded_fixed_type_info (TYPE_TARGET_TYPE (type));
14f9c5c9
AS
11417 else
11418 return NULL;
11419}
11420
4c4b4cd2 11421/* Returns non-zero iff TYPE represents an Ada fixed-point type. */
14f9c5c9
AS
11422
11423int
b2188a06 11424ada_is_gnat_encoded_fixed_point_type (struct type *type)
14f9c5c9 11425{
b2188a06 11426 return gnat_encoded_fixed_type_info (type) != NULL;
14f9c5c9
AS
11427}
11428
4c4b4cd2
PH
11429/* Return non-zero iff TYPE represents a System.Address type. */
11430
11431int
11432ada_is_system_address_type (struct type *type)
11433{
7d93a1e0 11434 return (type->name () && strcmp (type->name (), "system__address") == 0);
4c4b4cd2
PH
11435}
11436
14f9c5c9 11437/* Assuming that TYPE is the representation of an Ada fixed-point
50eff16b
UW
11438 type, return the target floating-point type to be used to represent
11439 of this type during internal computation. */
11440
11441static struct type *
11442ada_scaling_type (struct type *type)
11443{
11444 return builtin_type (get_type_arch (type))->builtin_long_double;
11445}
11446
11447/* Assuming that TYPE is the representation of an Ada fixed-point
11448 type, return its delta, or NULL if the type is malformed and the
4c4b4cd2 11449 delta cannot be determined. */
14f9c5c9 11450
50eff16b 11451struct value *
b2188a06 11452gnat_encoded_fixed_point_delta (struct type *type)
14f9c5c9 11453{
b2188a06 11454 const char *encoding = gnat_encoded_fixed_type_info (type);
50eff16b
UW
11455 struct type *scale_type = ada_scaling_type (type);
11456
11457 long long num, den;
11458
11459 if (sscanf (encoding, "_%lld_%lld", &num, &den) < 2)
11460 return nullptr;
d2e4a39e 11461 else
50eff16b
UW
11462 return value_binop (value_from_longest (scale_type, num),
11463 value_from_longest (scale_type, den), BINOP_DIV);
14f9c5c9
AS
11464}
11465
b2188a06
JB
11466/* Assuming that ada_is_gnat_encoded_fixed_point_type (TYPE), return
11467 the scaling factor ('SMALL value) associated with the type. */
14f9c5c9 11468
50eff16b
UW
11469struct value *
11470ada_scaling_factor (struct type *type)
14f9c5c9 11471{
b2188a06 11472 const char *encoding = gnat_encoded_fixed_type_info (type);
50eff16b
UW
11473 struct type *scale_type = ada_scaling_type (type);
11474
11475 long long num0, den0, num1, den1;
14f9c5c9 11476 int n;
d2e4a39e 11477
50eff16b 11478 n = sscanf (encoding, "_%lld_%lld_%lld_%lld",
facc390f 11479 &num0, &den0, &num1, &den1);
14f9c5c9
AS
11480
11481 if (n < 2)
50eff16b 11482 return value_from_longest (scale_type, 1);
14f9c5c9 11483 else if (n == 4)
50eff16b
UW
11484 return value_binop (value_from_longest (scale_type, num1),
11485 value_from_longest (scale_type, den1), BINOP_DIV);
d2e4a39e 11486 else
50eff16b
UW
11487 return value_binop (value_from_longest (scale_type, num0),
11488 value_from_longest (scale_type, den0), BINOP_DIV);
14f9c5c9
AS
11489}
11490
14f9c5c9 11491\f
d2e4a39e 11492
4c4b4cd2 11493 /* Range types */
14f9c5c9
AS
11494
11495/* Scan STR beginning at position K for a discriminant name, and
11496 return the value of that discriminant field of DVAL in *PX. If
11497 PNEW_K is not null, put the position of the character beyond the
11498 name scanned in *PNEW_K. Return 1 if successful; return 0 and do
4c4b4cd2 11499 not alter *PX and *PNEW_K if unsuccessful. */
14f9c5c9
AS
11500
11501static int
108d56a4 11502scan_discrim_bound (const char *str, int k, struct value *dval, LONGEST * px,
76a01679 11503 int *pnew_k)
14f9c5c9
AS
11504{
11505 static char *bound_buffer = NULL;
11506 static size_t bound_buffer_len = 0;
5da1a4d3 11507 const char *pstart, *pend, *bound;
d2e4a39e 11508 struct value *bound_val;
14f9c5c9
AS
11509
11510 if (dval == NULL || str == NULL || str[k] == '\0')
11511 return 0;
11512
5da1a4d3
SM
11513 pstart = str + k;
11514 pend = strstr (pstart, "__");
14f9c5c9
AS
11515 if (pend == NULL)
11516 {
5da1a4d3 11517 bound = pstart;
14f9c5c9
AS
11518 k += strlen (bound);
11519 }
d2e4a39e 11520 else
14f9c5c9 11521 {
5da1a4d3
SM
11522 int len = pend - pstart;
11523
11524 /* Strip __ and beyond. */
11525 GROW_VECT (bound_buffer, bound_buffer_len, len + 1);
11526 strncpy (bound_buffer, pstart, len);
11527 bound_buffer[len] = '\0';
11528
14f9c5c9 11529 bound = bound_buffer;
d2e4a39e 11530 k = pend - str;
14f9c5c9 11531 }
d2e4a39e 11532
df407dfe 11533 bound_val = ada_search_struct_field (bound, dval, 0, value_type (dval));
14f9c5c9
AS
11534 if (bound_val == NULL)
11535 return 0;
11536
11537 *px = value_as_long (bound_val);
11538 if (pnew_k != NULL)
11539 *pnew_k = k;
11540 return 1;
11541}
11542
11543/* Value of variable named NAME in the current environment. If
11544 no such variable found, then if ERR_MSG is null, returns 0, and
4c4b4cd2
PH
11545 otherwise causes an error with message ERR_MSG. */
11546
d2e4a39e 11547static struct value *
edb0c9cb 11548get_var_value (const char *name, const char *err_msg)
14f9c5c9 11549{
b5ec771e 11550 lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
14f9c5c9 11551
54d343a2 11552 std::vector<struct block_symbol> syms;
b5ec771e
PA
11553 int nsyms = ada_lookup_symbol_list_worker (lookup_name,
11554 get_selected_block (0),
11555 VAR_DOMAIN, &syms, 1);
14f9c5c9
AS
11556
11557 if (nsyms != 1)
11558 {
11559 if (err_msg == NULL)
4c4b4cd2 11560 return 0;
14f9c5c9 11561 else
8a3fe4f8 11562 error (("%s"), err_msg);
14f9c5c9
AS
11563 }
11564
54d343a2 11565 return value_of_variable (syms[0].symbol, syms[0].block);
14f9c5c9 11566}
d2e4a39e 11567
edb0c9cb
PA
11568/* Value of integer variable named NAME in the current environment.
11569 If no such variable is found, returns false. Otherwise, sets VALUE
11570 to the variable's value and returns true. */
4c4b4cd2 11571
edb0c9cb
PA
11572bool
11573get_int_var_value (const char *name, LONGEST &value)
14f9c5c9 11574{
4c4b4cd2 11575 struct value *var_val = get_var_value (name, 0);
d2e4a39e 11576
14f9c5c9 11577 if (var_val == 0)
edb0c9cb
PA
11578 return false;
11579
11580 value = value_as_long (var_val);
11581 return true;
14f9c5c9 11582}
d2e4a39e 11583
14f9c5c9
AS
11584
11585/* Return a range type whose base type is that of the range type named
11586 NAME in the current environment, and whose bounds are calculated
4c4b4cd2 11587 from NAME according to the GNAT range encoding conventions.
1ce677a4
UW
11588 Extract discriminant values, if needed, from DVAL. ORIG_TYPE is the
11589 corresponding range type from debug information; fall back to using it
11590 if symbol lookup fails. If a new type must be created, allocate it
11591 like ORIG_TYPE was. The bounds information, in general, is encoded
11592 in NAME, the base type given in the named range type. */
14f9c5c9 11593
d2e4a39e 11594static struct type *
28c85d6c 11595to_fixed_range_type (struct type *raw_type, struct value *dval)
14f9c5c9 11596{
0d5cff50 11597 const char *name;
14f9c5c9 11598 struct type *base_type;
108d56a4 11599 const char *subtype_info;
14f9c5c9 11600
28c85d6c 11601 gdb_assert (raw_type != NULL);
7d93a1e0 11602 gdb_assert (raw_type->name () != NULL);
dddfab26 11603
78134374 11604 if (raw_type->code () == TYPE_CODE_RANGE)
14f9c5c9
AS
11605 base_type = TYPE_TARGET_TYPE (raw_type);
11606 else
11607 base_type = raw_type;
11608
7d93a1e0 11609 name = raw_type->name ();
14f9c5c9
AS
11610 subtype_info = strstr (name, "___XD");
11611 if (subtype_info == NULL)
690cc4eb 11612 {
43bbcdc2
PH
11613 LONGEST L = ada_discrete_type_low_bound (raw_type);
11614 LONGEST U = ada_discrete_type_high_bound (raw_type);
5b4ee69b 11615
690cc4eb
PH
11616 if (L < INT_MIN || U > INT_MAX)
11617 return raw_type;
11618 else
0c9c3474
SA
11619 return create_static_range_type (alloc_type_copy (raw_type), raw_type,
11620 L, U);
690cc4eb 11621 }
14f9c5c9
AS
11622 else
11623 {
11624 static char *name_buf = NULL;
11625 static size_t name_len = 0;
11626 int prefix_len = subtype_info - name;
11627 LONGEST L, U;
11628 struct type *type;
108d56a4 11629 const char *bounds_str;
14f9c5c9
AS
11630 int n;
11631
11632 GROW_VECT (name_buf, name_len, prefix_len + 5);
11633 strncpy (name_buf, name, prefix_len);
11634 name_buf[prefix_len] = '\0';
11635
11636 subtype_info += 5;
11637 bounds_str = strchr (subtype_info, '_');
11638 n = 1;
11639
d2e4a39e 11640 if (*subtype_info == 'L')
4c4b4cd2
PH
11641 {
11642 if (!ada_scan_number (bounds_str, n, &L, &n)
11643 && !scan_discrim_bound (bounds_str, n, dval, &L, &n))
11644 return raw_type;
11645 if (bounds_str[n] == '_')
11646 n += 2;
0963b4bd 11647 else if (bounds_str[n] == '.') /* FIXME? SGI Workshop kludge. */
4c4b4cd2
PH
11648 n += 1;
11649 subtype_info += 1;
11650 }
d2e4a39e 11651 else
4c4b4cd2 11652 {
4c4b4cd2 11653 strcpy (name_buf + prefix_len, "___L");
edb0c9cb 11654 if (!get_int_var_value (name_buf, L))
4c4b4cd2 11655 {
323e0a4a 11656 lim_warning (_("Unknown lower bound, using 1."));
4c4b4cd2
PH
11657 L = 1;
11658 }
11659 }
14f9c5c9 11660
d2e4a39e 11661 if (*subtype_info == 'U')
4c4b4cd2
PH
11662 {
11663 if (!ada_scan_number (bounds_str, n, &U, &n)
11664 && !scan_discrim_bound (bounds_str, n, dval, &U, &n))
11665 return raw_type;
11666 }
d2e4a39e 11667 else
4c4b4cd2 11668 {
4c4b4cd2 11669 strcpy (name_buf + prefix_len, "___U");
edb0c9cb 11670 if (!get_int_var_value (name_buf, U))
4c4b4cd2 11671 {
323e0a4a 11672 lim_warning (_("Unknown upper bound, using %ld."), (long) L);
4c4b4cd2
PH
11673 U = L;
11674 }
11675 }
14f9c5c9 11676
0c9c3474
SA
11677 type = create_static_range_type (alloc_type_copy (raw_type),
11678 base_type, L, U);
f5a91472
JB
11679 /* create_static_range_type alters the resulting type's length
11680 to match the size of the base_type, which is not what we want.
11681 Set it back to the original range type's length. */
11682 TYPE_LENGTH (type) = TYPE_LENGTH (raw_type);
d0e39ea2 11683 type->set_name (name);
14f9c5c9
AS
11684 return type;
11685 }
11686}
11687
4c4b4cd2
PH
11688/* True iff NAME is the name of a range type. */
11689
14f9c5c9 11690int
d2e4a39e 11691ada_is_range_type_name (const char *name)
14f9c5c9
AS
11692{
11693 return (name != NULL && strstr (name, "___XD"));
d2e4a39e 11694}
14f9c5c9 11695\f
d2e4a39e 11696
4c4b4cd2
PH
11697 /* Modular types */
11698
11699/* True iff TYPE is an Ada modular type. */
14f9c5c9 11700
14f9c5c9 11701int
d2e4a39e 11702ada_is_modular_type (struct type *type)
14f9c5c9 11703{
18af8284 11704 struct type *subranged_type = get_base_type (type);
14f9c5c9 11705
78134374
SM
11706 return (subranged_type != NULL && type->code () == TYPE_CODE_RANGE
11707 && subranged_type->code () == TYPE_CODE_INT
4c4b4cd2 11708 && TYPE_UNSIGNED (subranged_type));
14f9c5c9
AS
11709}
11710
4c4b4cd2
PH
11711/* Assuming ada_is_modular_type (TYPE), the modulus of TYPE. */
11712
61ee279c 11713ULONGEST
0056e4d5 11714ada_modulus (struct type *type)
14f9c5c9 11715{
43bbcdc2 11716 return (ULONGEST) TYPE_HIGH_BOUND (type) + 1;
14f9c5c9 11717}
d2e4a39e 11718\f
f7f9143b
JB
11719
11720/* Ada exception catchpoint support:
11721 ---------------------------------
11722
11723 We support 3 kinds of exception catchpoints:
11724 . catchpoints on Ada exceptions
11725 . catchpoints on unhandled Ada exceptions
11726 . catchpoints on failed assertions
11727
11728 Exceptions raised during failed assertions, or unhandled exceptions
11729 could perfectly be caught with the general catchpoint on Ada exceptions.
11730 However, we can easily differentiate these two special cases, and having
11731 the option to distinguish these two cases from the rest can be useful
11732 to zero-in on certain situations.
11733
11734 Exception catchpoints are a specialized form of breakpoint,
11735 since they rely on inserting breakpoints inside known routines
11736 of the GNAT runtime. The implementation therefore uses a standard
11737 breakpoint structure of the BP_BREAKPOINT type, but with its own set
11738 of breakpoint_ops.
11739
0259addd
JB
11740 Support in the runtime for exception catchpoints have been changed
11741 a few times already, and these changes affect the implementation
11742 of these catchpoints. In order to be able to support several
11743 variants of the runtime, we use a sniffer that will determine
28010a5d 11744 the runtime variant used by the program being debugged. */
f7f9143b 11745
82eacd52
JB
11746/* Ada's standard exceptions.
11747
11748 The Ada 83 standard also defined Numeric_Error. But there so many
11749 situations where it was unclear from the Ada 83 Reference Manual
11750 (RM) whether Constraint_Error or Numeric_Error should be raised,
11751 that the ARG (Ada Rapporteur Group) eventually issued a Binding
11752 Interpretation saying that anytime the RM says that Numeric_Error
11753 should be raised, the implementation may raise Constraint_Error.
11754 Ada 95 went one step further and pretty much removed Numeric_Error
11755 from the list of standard exceptions (it made it a renaming of
11756 Constraint_Error, to help preserve compatibility when compiling
11757 an Ada83 compiler). As such, we do not include Numeric_Error from
11758 this list of standard exceptions. */
3d0b0fa3 11759
a121b7c1 11760static const char *standard_exc[] = {
3d0b0fa3
JB
11761 "constraint_error",
11762 "program_error",
11763 "storage_error",
11764 "tasking_error"
11765};
11766
0259addd
JB
11767typedef CORE_ADDR (ada_unhandled_exception_name_addr_ftype) (void);
11768
11769/* A structure that describes how to support exception catchpoints
11770 for a given executable. */
11771
11772struct exception_support_info
11773{
11774 /* The name of the symbol to break on in order to insert
11775 a catchpoint on exceptions. */
11776 const char *catch_exception_sym;
11777
11778 /* The name of the symbol to break on in order to insert
11779 a catchpoint on unhandled exceptions. */
11780 const char *catch_exception_unhandled_sym;
11781
11782 /* The name of the symbol to break on in order to insert
11783 a catchpoint on failed assertions. */
11784 const char *catch_assert_sym;
11785
9f757bf7
XR
11786 /* The name of the symbol to break on in order to insert
11787 a catchpoint on exception handling. */
11788 const char *catch_handlers_sym;
11789
0259addd
JB
11790 /* Assuming that the inferior just triggered an unhandled exception
11791 catchpoint, this function is responsible for returning the address
11792 in inferior memory where the name of that exception is stored.
11793 Return zero if the address could not be computed. */
11794 ada_unhandled_exception_name_addr_ftype *unhandled_exception_name_addr;
11795};
11796
11797static CORE_ADDR ada_unhandled_exception_name_addr (void);
11798static CORE_ADDR ada_unhandled_exception_name_addr_from_raise (void);
11799
11800/* The following exception support info structure describes how to
11801 implement exception catchpoints with the latest version of the
ca683e3a 11802 Ada runtime (as of 2019-08-??). */
0259addd
JB
11803
11804static const struct exception_support_info default_exception_support_info =
ca683e3a
AO
11805{
11806 "__gnat_debug_raise_exception", /* catch_exception_sym */
11807 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11808 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
11809 "__gnat_begin_handler_v1", /* catch_handlers_sym */
11810 ada_unhandled_exception_name_addr
11811};
11812
11813/* The following exception support info structure describes how to
11814 implement exception catchpoints with an earlier version of the
11815 Ada runtime (as of 2007-03-06) using v0 of the EH ABI. */
11816
11817static const struct exception_support_info exception_support_info_v0 =
0259addd
JB
11818{
11819 "__gnat_debug_raise_exception", /* catch_exception_sym */
11820 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11821 "__gnat_debug_raise_assert_failure", /* catch_assert_sym */
9f757bf7 11822 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11823 ada_unhandled_exception_name_addr
11824};
11825
11826/* The following exception support info structure describes how to
11827 implement exception catchpoints with a slightly older version
11828 of the Ada runtime. */
11829
11830static const struct exception_support_info exception_support_info_fallback =
11831{
11832 "__gnat_raise_nodefer_with_msg", /* catch_exception_sym */
11833 "__gnat_unhandled_exception", /* catch_exception_unhandled_sym */
11834 "system__assertions__raise_assert_failure", /* catch_assert_sym */
9f757bf7 11835 "__gnat_begin_handler", /* catch_handlers_sym */
0259addd
JB
11836 ada_unhandled_exception_name_addr_from_raise
11837};
11838
f17011e0
JB
11839/* Return nonzero if we can detect the exception support routines
11840 described in EINFO.
11841
11842 This function errors out if an abnormal situation is detected
11843 (for instance, if we find the exception support routines, but
11844 that support is found to be incomplete). */
11845
11846static int
11847ada_has_this_exception_support (const struct exception_support_info *einfo)
11848{
11849 struct symbol *sym;
11850
11851 /* The symbol we're looking up is provided by a unit in the GNAT runtime
11852 that should be compiled with debugging information. As a result, we
11853 expect to find that symbol in the symtabs. */
11854
11855 sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
11856 if (sym == NULL)
a6af7abe
JB
11857 {
11858 /* Perhaps we did not find our symbol because the Ada runtime was
11859 compiled without debugging info, or simply stripped of it.
11860 It happens on some GNU/Linux distributions for instance, where
11861 users have to install a separate debug package in order to get
11862 the runtime's debugging info. In that situation, let the user
11863 know why we cannot insert an Ada exception catchpoint.
11864
11865 Note: Just for the purpose of inserting our Ada exception
11866 catchpoint, we could rely purely on the associated minimal symbol.
11867 But we would be operating in degraded mode anyway, since we are
11868 still lacking the debugging info needed later on to extract
11869 the name of the exception being raised (this name is printed in
11870 the catchpoint message, and is also used when trying to catch
11871 a specific exception). We do not handle this case for now. */
3b7344d5 11872 struct bound_minimal_symbol msym
1c8e84b0
JB
11873 = lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL);
11874
3b7344d5 11875 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
a6af7abe
JB
11876 error (_("Your Ada runtime appears to be missing some debugging "
11877 "information.\nCannot insert Ada exception catchpoint "
11878 "in this configuration."));
11879
11880 return 0;
11881 }
f17011e0
JB
11882
11883 /* Make sure that the symbol we found corresponds to a function. */
11884
11885 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
ca683e3a
AO
11886 {
11887 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11888 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11889 return 0;
11890 }
11891
11892 sym = standard_lookup (einfo->catch_handlers_sym, NULL, VAR_DOMAIN);
11893 if (sym == NULL)
11894 {
11895 struct bound_minimal_symbol msym
11896 = lookup_minimal_symbol (einfo->catch_handlers_sym, NULL, NULL);
11897
11898 if (msym.minsym && MSYMBOL_TYPE (msym.minsym) != mst_solib_trampoline)
11899 error (_("Your Ada runtime appears to be missing some debugging "
11900 "information.\nCannot insert Ada exception catchpoint "
11901 "in this configuration."));
11902
11903 return 0;
11904 }
11905
11906 /* Make sure that the symbol we found corresponds to a function. */
11907
11908 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
11909 {
11910 error (_("Symbol \"%s\" is not a function (class = %d)"),
987012b8 11911 sym->linkage_name (), SYMBOL_CLASS (sym));
ca683e3a
AO
11912 return 0;
11913 }
f17011e0
JB
11914
11915 return 1;
11916}
11917
0259addd
JB
11918/* Inspect the Ada runtime and determine which exception info structure
11919 should be used to provide support for exception catchpoints.
11920
3eecfa55
JB
11921 This function will always set the per-inferior exception_info,
11922 or raise an error. */
0259addd
JB
11923
11924static void
11925ada_exception_support_info_sniffer (void)
11926{
3eecfa55 11927 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
0259addd
JB
11928
11929 /* If the exception info is already known, then no need to recompute it. */
3eecfa55 11930 if (data->exception_info != NULL)
0259addd
JB
11931 return;
11932
11933 /* Check the latest (default) exception support info. */
f17011e0 11934 if (ada_has_this_exception_support (&default_exception_support_info))
0259addd 11935 {
3eecfa55 11936 data->exception_info = &default_exception_support_info;
0259addd
JB
11937 return;
11938 }
11939
ca683e3a
AO
11940 /* Try the v0 exception suport info. */
11941 if (ada_has_this_exception_support (&exception_support_info_v0))
11942 {
11943 data->exception_info = &exception_support_info_v0;
11944 return;
11945 }
11946
0259addd 11947 /* Try our fallback exception suport info. */
f17011e0 11948 if (ada_has_this_exception_support (&exception_support_info_fallback))
0259addd 11949 {
3eecfa55 11950 data->exception_info = &exception_support_info_fallback;
0259addd
JB
11951 return;
11952 }
11953
11954 /* Sometimes, it is normal for us to not be able to find the routine
11955 we are looking for. This happens when the program is linked with
11956 the shared version of the GNAT runtime, and the program has not been
11957 started yet. Inform the user of these two possible causes if
11958 applicable. */
11959
ccefe4c4 11960 if (ada_update_initial_language (language_unknown) != language_ada)
0259addd
JB
11961 error (_("Unable to insert catchpoint. Is this an Ada main program?"));
11962
11963 /* If the symbol does not exist, then check that the program is
11964 already started, to make sure that shared libraries have been
11965 loaded. If it is not started, this may mean that the symbol is
11966 in a shared library. */
11967
e99b03dc 11968 if (inferior_ptid.pid () == 0)
0259addd
JB
11969 error (_("Unable to insert catchpoint. Try to start the program first."));
11970
11971 /* At this point, we know that we are debugging an Ada program and
11972 that the inferior has been started, but we still are not able to
0963b4bd 11973 find the run-time symbols. That can mean that we are in
0259addd
JB
11974 configurable run time mode, or that a-except as been optimized
11975 out by the linker... In any case, at this point it is not worth
11976 supporting this feature. */
11977
7dda8cff 11978 error (_("Cannot insert Ada exception catchpoints in this configuration."));
0259addd
JB
11979}
11980
f7f9143b
JB
11981/* True iff FRAME is very likely to be that of a function that is
11982 part of the runtime system. This is all very heuristic, but is
11983 intended to be used as advice as to what frames are uninteresting
11984 to most users. */
11985
11986static int
11987is_known_support_routine (struct frame_info *frame)
11988{
692465f1 11989 enum language func_lang;
f7f9143b 11990 int i;
f35a17b5 11991 const char *fullname;
f7f9143b 11992
4ed6b5be
JB
11993 /* If this code does not have any debugging information (no symtab),
11994 This cannot be any user code. */
f7f9143b 11995
51abb421 11996 symtab_and_line sal = find_frame_sal (frame);
f7f9143b
JB
11997 if (sal.symtab == NULL)
11998 return 1;
11999
4ed6b5be
JB
12000 /* If there is a symtab, but the associated source file cannot be
12001 located, then assume this is not user code: Selecting a frame
12002 for which we cannot display the code would not be very helpful
12003 for the user. This should also take care of case such as VxWorks
12004 where the kernel has some debugging info provided for a few units. */
f7f9143b 12005
f35a17b5
JK
12006 fullname = symtab_to_fullname (sal.symtab);
12007 if (access (fullname, R_OK) != 0)
f7f9143b
JB
12008 return 1;
12009
85102364 12010 /* Check the unit filename against the Ada runtime file naming.
4ed6b5be
JB
12011 We also check the name of the objfile against the name of some
12012 known system libraries that sometimes come with debugging info
12013 too. */
12014
f7f9143b
JB
12015 for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
12016 {
12017 re_comp (known_runtime_file_name_patterns[i]);
f69c91ad 12018 if (re_exec (lbasename (sal.symtab->filename)))
f7f9143b 12019 return 1;
eb822aa6
DE
12020 if (SYMTAB_OBJFILE (sal.symtab) != NULL
12021 && re_exec (objfile_name (SYMTAB_OBJFILE (sal.symtab))))
4ed6b5be 12022 return 1;
f7f9143b
JB
12023 }
12024
4ed6b5be 12025 /* Check whether the function is a GNAT-generated entity. */
f7f9143b 12026
c6dc63a1
TT
12027 gdb::unique_xmalloc_ptr<char> func_name
12028 = find_frame_funname (frame, &func_lang, NULL);
f7f9143b
JB
12029 if (func_name == NULL)
12030 return 1;
12031
12032 for (i = 0; known_auxiliary_function_name_patterns[i] != NULL; i += 1)
12033 {
12034 re_comp (known_auxiliary_function_name_patterns[i]);
c6dc63a1
TT
12035 if (re_exec (func_name.get ()))
12036 return 1;
f7f9143b
JB
12037 }
12038
12039 return 0;
12040}
12041
12042/* Find the first frame that contains debugging information and that is not
12043 part of the Ada run-time, starting from FI and moving upward. */
12044
0ef643c8 12045void
f7f9143b
JB
12046ada_find_printable_frame (struct frame_info *fi)
12047{
12048 for (; fi != NULL; fi = get_prev_frame (fi))
12049 {
12050 if (!is_known_support_routine (fi))
12051 {
12052 select_frame (fi);
12053 break;
12054 }
12055 }
12056
12057}
12058
12059/* Assuming that the inferior just triggered an unhandled exception
12060 catchpoint, return the address in inferior memory where the name
12061 of the exception is stored.
12062
12063 Return zero if the address could not be computed. */
12064
12065static CORE_ADDR
12066ada_unhandled_exception_name_addr (void)
0259addd
JB
12067{
12068 return parse_and_eval_address ("e.full_name");
12069}
12070
12071/* Same as ada_unhandled_exception_name_addr, except that this function
12072 should be used when the inferior uses an older version of the runtime,
12073 where the exception name needs to be extracted from a specific frame
12074 several frames up in the callstack. */
12075
12076static CORE_ADDR
12077ada_unhandled_exception_name_addr_from_raise (void)
f7f9143b
JB
12078{
12079 int frame_level;
12080 struct frame_info *fi;
3eecfa55 12081 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
f7f9143b
JB
12082
12083 /* To determine the name of this exception, we need to select
12084 the frame corresponding to RAISE_SYM_NAME. This frame is
12085 at least 3 levels up, so we simply skip the first 3 frames
12086 without checking the name of their associated function. */
12087 fi = get_current_frame ();
12088 for (frame_level = 0; frame_level < 3; frame_level += 1)
12089 if (fi != NULL)
12090 fi = get_prev_frame (fi);
12091
12092 while (fi != NULL)
12093 {
692465f1
JB
12094 enum language func_lang;
12095
c6dc63a1
TT
12096 gdb::unique_xmalloc_ptr<char> func_name
12097 = find_frame_funname (fi, &func_lang, NULL);
55b87a52
KS
12098 if (func_name != NULL)
12099 {
c6dc63a1 12100 if (strcmp (func_name.get (),
55b87a52
KS
12101 data->exception_info->catch_exception_sym) == 0)
12102 break; /* We found the frame we were looking for... */
55b87a52 12103 }
fb44b1a7 12104 fi = get_prev_frame (fi);
f7f9143b
JB
12105 }
12106
12107 if (fi == NULL)
12108 return 0;
12109
12110 select_frame (fi);
12111 return parse_and_eval_address ("id.full_name");
12112}
12113
12114/* Assuming the inferior just triggered an Ada exception catchpoint
12115 (of any type), return the address in inferior memory where the name
12116 of the exception is stored, if applicable.
12117
45db7c09
PA
12118 Assumes the selected frame is the current frame.
12119
f7f9143b
JB
12120 Return zero if the address could not be computed, or if not relevant. */
12121
12122static CORE_ADDR
761269c8 12123ada_exception_name_addr_1 (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12124 struct breakpoint *b)
12125{
3eecfa55
JB
12126 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12127
f7f9143b
JB
12128 switch (ex)
12129 {
761269c8 12130 case ada_catch_exception:
f7f9143b
JB
12131 return (parse_and_eval_address ("e.full_name"));
12132 break;
12133
761269c8 12134 case ada_catch_exception_unhandled:
3eecfa55 12135 return data->exception_info->unhandled_exception_name_addr ();
f7f9143b 12136 break;
9f757bf7
XR
12137
12138 case ada_catch_handlers:
12139 return 0; /* The runtimes does not provide access to the exception
12140 name. */
12141 break;
12142
761269c8 12143 case ada_catch_assert:
f7f9143b
JB
12144 return 0; /* Exception name is not relevant in this case. */
12145 break;
12146
12147 default:
12148 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12149 break;
12150 }
12151
12152 return 0; /* Should never be reached. */
12153}
12154
e547c119
JB
12155/* Assuming the inferior is stopped at an exception catchpoint,
12156 return the message which was associated to the exception, if
12157 available. Return NULL if the message could not be retrieved.
12158
e547c119
JB
12159 Note: The exception message can be associated to an exception
12160 either through the use of the Raise_Exception function, or
12161 more simply (Ada 2005 and later), via:
12162
12163 raise Exception_Name with "exception message";
12164
12165 */
12166
6f46ac85 12167static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12168ada_exception_message_1 (void)
12169{
12170 struct value *e_msg_val;
e547c119 12171 int e_msg_len;
e547c119
JB
12172
12173 /* For runtimes that support this feature, the exception message
12174 is passed as an unbounded string argument called "message". */
12175 e_msg_val = parse_and_eval ("message");
12176 if (e_msg_val == NULL)
12177 return NULL; /* Exception message not supported. */
12178
12179 e_msg_val = ada_coerce_to_simple_array (e_msg_val);
12180 gdb_assert (e_msg_val != NULL);
12181 e_msg_len = TYPE_LENGTH (value_type (e_msg_val));
12182
12183 /* If the message string is empty, then treat it as if there was
12184 no exception message. */
12185 if (e_msg_len <= 0)
12186 return NULL;
12187
6f46ac85
TT
12188 gdb::unique_xmalloc_ptr<char> e_msg ((char *) xmalloc (e_msg_len + 1));
12189 read_memory_string (value_address (e_msg_val), e_msg.get (), e_msg_len + 1);
12190 e_msg.get ()[e_msg_len] = '\0';
e547c119 12191
e547c119
JB
12192 return e_msg;
12193}
12194
12195/* Same as ada_exception_message_1, except that all exceptions are
12196 contained here (returning NULL instead). */
12197
6f46ac85 12198static gdb::unique_xmalloc_ptr<char>
e547c119
JB
12199ada_exception_message (void)
12200{
6f46ac85 12201 gdb::unique_xmalloc_ptr<char> e_msg;
e547c119 12202
a70b8144 12203 try
e547c119
JB
12204 {
12205 e_msg = ada_exception_message_1 ();
12206 }
230d2906 12207 catch (const gdb_exception_error &e)
e547c119 12208 {
6f46ac85 12209 e_msg.reset (nullptr);
e547c119 12210 }
e547c119
JB
12211
12212 return e_msg;
12213}
12214
f7f9143b
JB
12215/* Same as ada_exception_name_addr_1, except that it intercepts and contains
12216 any error that ada_exception_name_addr_1 might cause to be thrown.
12217 When an error is intercepted, a warning with the error message is printed,
12218 and zero is returned. */
12219
12220static CORE_ADDR
761269c8 12221ada_exception_name_addr (enum ada_exception_catchpoint_kind ex,
f7f9143b
JB
12222 struct breakpoint *b)
12223{
f7f9143b
JB
12224 CORE_ADDR result = 0;
12225
a70b8144 12226 try
f7f9143b
JB
12227 {
12228 result = ada_exception_name_addr_1 (ex, b);
12229 }
12230
230d2906 12231 catch (const gdb_exception_error &e)
f7f9143b 12232 {
3d6e9d23 12233 warning (_("failed to get exception name: %s"), e.what ());
f7f9143b
JB
12234 return 0;
12235 }
12236
12237 return result;
12238}
12239
cb7de75e 12240static std::string ada_exception_catchpoint_cond_string
9f757bf7
XR
12241 (const char *excep_string,
12242 enum ada_exception_catchpoint_kind ex);
28010a5d
PA
12243
12244/* Ada catchpoints.
12245
12246 In the case of catchpoints on Ada exceptions, the catchpoint will
12247 stop the target on every exception the program throws. When a user
12248 specifies the name of a specific exception, we translate this
12249 request into a condition expression (in text form), and then parse
12250 it into an expression stored in each of the catchpoint's locations.
12251 We then use this condition to check whether the exception that was
12252 raised is the one the user is interested in. If not, then the
12253 target is resumed again. We store the name of the requested
12254 exception, in order to be able to re-set the condition expression
12255 when symbols change. */
12256
12257/* An instance of this type is used to represent an Ada catchpoint
5625a286 12258 breakpoint location. */
28010a5d 12259
5625a286 12260class ada_catchpoint_location : public bp_location
28010a5d 12261{
5625a286 12262public:
5f486660 12263 ada_catchpoint_location (breakpoint *owner)
f06f1252 12264 : bp_location (owner, bp_loc_software_breakpoint)
5625a286 12265 {}
28010a5d
PA
12266
12267 /* The condition that checks whether the exception that was raised
12268 is the specific exception the user specified on catchpoint
12269 creation. */
4d01a485 12270 expression_up excep_cond_expr;
28010a5d
PA
12271};
12272
c1fc2657 12273/* An instance of this type is used to represent an Ada catchpoint. */
28010a5d 12274
c1fc2657 12275struct ada_catchpoint : public breakpoint
28010a5d 12276{
37f6a7f4
TT
12277 explicit ada_catchpoint (enum ada_exception_catchpoint_kind kind)
12278 : m_kind (kind)
12279 {
12280 }
12281
28010a5d 12282 /* The name of the specific exception the user specified. */
bc18fbb5 12283 std::string excep_string;
37f6a7f4
TT
12284
12285 /* What kind of catchpoint this is. */
12286 enum ada_exception_catchpoint_kind m_kind;
28010a5d
PA
12287};
12288
12289/* Parse the exception condition string in the context of each of the
12290 catchpoint's locations, and store them for later evaluation. */
12291
12292static void
9f757bf7
XR
12293create_excep_cond_exprs (struct ada_catchpoint *c,
12294 enum ada_exception_catchpoint_kind ex)
28010a5d 12295{
fccf9de1
TT
12296 struct bp_location *bl;
12297
28010a5d 12298 /* Nothing to do if there's no specific exception to catch. */
bc18fbb5 12299 if (c->excep_string.empty ())
28010a5d
PA
12300 return;
12301
12302 /* Same if there are no locations... */
c1fc2657 12303 if (c->loc == NULL)
28010a5d
PA
12304 return;
12305
fccf9de1
TT
12306 /* Compute the condition expression in text form, from the specific
12307 expection we want to catch. */
12308 std::string cond_string
12309 = ada_exception_catchpoint_cond_string (c->excep_string.c_str (), ex);
28010a5d 12310
fccf9de1
TT
12311 /* Iterate over all the catchpoint's locations, and parse an
12312 expression for each. */
12313 for (bl = c->loc; bl != NULL; bl = bl->next)
28010a5d
PA
12314 {
12315 struct ada_catchpoint_location *ada_loc
fccf9de1 12316 = (struct ada_catchpoint_location *) bl;
4d01a485 12317 expression_up exp;
28010a5d 12318
fccf9de1 12319 if (!bl->shlib_disabled)
28010a5d 12320 {
bbc13ae3 12321 const char *s;
28010a5d 12322
cb7de75e 12323 s = cond_string.c_str ();
a70b8144 12324 try
28010a5d 12325 {
fccf9de1
TT
12326 exp = parse_exp_1 (&s, bl->address,
12327 block_for_pc (bl->address),
036e657b 12328 0);
28010a5d 12329 }
230d2906 12330 catch (const gdb_exception_error &e)
849f2b52
JB
12331 {
12332 warning (_("failed to reevaluate internal exception condition "
12333 "for catchpoint %d: %s"),
3d6e9d23 12334 c->number, e.what ());
849f2b52 12335 }
28010a5d
PA
12336 }
12337
b22e99fd 12338 ada_loc->excep_cond_expr = std::move (exp);
28010a5d 12339 }
28010a5d
PA
12340}
12341
28010a5d
PA
12342/* Implement the ALLOCATE_LOCATION method in the breakpoint_ops
12343 structure for all exception catchpoint kinds. */
12344
12345static struct bp_location *
37f6a7f4 12346allocate_location_exception (struct breakpoint *self)
28010a5d 12347{
5f486660 12348 return new ada_catchpoint_location (self);
28010a5d
PA
12349}
12350
12351/* Implement the RE_SET method in the breakpoint_ops structure for all
12352 exception catchpoint kinds. */
12353
12354static void
37f6a7f4 12355re_set_exception (struct breakpoint *b)
28010a5d
PA
12356{
12357 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12358
12359 /* Call the base class's method. This updates the catchpoint's
12360 locations. */
2060206e 12361 bkpt_breakpoint_ops.re_set (b);
28010a5d
PA
12362
12363 /* Reparse the exception conditional expressions. One for each
12364 location. */
37f6a7f4 12365 create_excep_cond_exprs (c, c->m_kind);
28010a5d
PA
12366}
12367
12368/* Returns true if we should stop for this breakpoint hit. If the
12369 user specified a specific exception, we only want to cause a stop
12370 if the program thrown that exception. */
12371
12372static int
12373should_stop_exception (const struct bp_location *bl)
12374{
12375 struct ada_catchpoint *c = (struct ada_catchpoint *) bl->owner;
12376 const struct ada_catchpoint_location *ada_loc
12377 = (const struct ada_catchpoint_location *) bl;
28010a5d
PA
12378 int stop;
12379
37f6a7f4
TT
12380 struct internalvar *var = lookup_internalvar ("_ada_exception");
12381 if (c->m_kind == ada_catch_assert)
12382 clear_internalvar (var);
12383 else
12384 {
12385 try
12386 {
12387 const char *expr;
12388
12389 if (c->m_kind == ada_catch_handlers)
12390 expr = ("GNAT_GCC_exception_Access(gcc_exception)"
12391 ".all.occurrence.id");
12392 else
12393 expr = "e";
12394
12395 struct value *exc = parse_and_eval (expr);
12396 set_internalvar (var, exc);
12397 }
12398 catch (const gdb_exception_error &ex)
12399 {
12400 clear_internalvar (var);
12401 }
12402 }
12403
28010a5d 12404 /* With no specific exception, should always stop. */
bc18fbb5 12405 if (c->excep_string.empty ())
28010a5d
PA
12406 return 1;
12407
12408 if (ada_loc->excep_cond_expr == NULL)
12409 {
12410 /* We will have a NULL expression if back when we were creating
12411 the expressions, this location's had failed to parse. */
12412 return 1;
12413 }
12414
12415 stop = 1;
a70b8144 12416 try
28010a5d
PA
12417 {
12418 struct value *mark;
12419
12420 mark = value_mark ();
4d01a485 12421 stop = value_true (evaluate_expression (ada_loc->excep_cond_expr.get ()));
28010a5d
PA
12422 value_free_to_mark (mark);
12423 }
230d2906 12424 catch (const gdb_exception &ex)
492d29ea
PA
12425 {
12426 exception_fprintf (gdb_stderr, ex,
12427 _("Error in testing exception condition:\n"));
12428 }
492d29ea 12429
28010a5d
PA
12430 return stop;
12431}
12432
12433/* Implement the CHECK_STATUS method in the breakpoint_ops structure
12434 for all exception catchpoint kinds. */
12435
12436static void
37f6a7f4 12437check_status_exception (bpstat bs)
28010a5d
PA
12438{
12439 bs->stop = should_stop_exception (bs->bp_location_at);
12440}
12441
f7f9143b
JB
12442/* Implement the PRINT_IT method in the breakpoint_ops structure
12443 for all exception catchpoint kinds. */
12444
12445static enum print_stop_action
37f6a7f4 12446print_it_exception (bpstat bs)
f7f9143b 12447{
79a45e25 12448 struct ui_out *uiout = current_uiout;
348d480f
PA
12449 struct breakpoint *b = bs->breakpoint_at;
12450
956a9fb9 12451 annotate_catchpoint (b->number);
f7f9143b 12452
112e8700 12453 if (uiout->is_mi_like_p ())
f7f9143b 12454 {
112e8700 12455 uiout->field_string ("reason",
956a9fb9 12456 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
112e8700 12457 uiout->field_string ("disp", bpdisp_text (b->disposition));
f7f9143b
JB
12458 }
12459
112e8700
SM
12460 uiout->text (b->disposition == disp_del
12461 ? "\nTemporary catchpoint " : "\nCatchpoint ");
381befee 12462 uiout->field_signed ("bkptno", b->number);
112e8700 12463 uiout->text (", ");
f7f9143b 12464
45db7c09
PA
12465 /* ada_exception_name_addr relies on the selected frame being the
12466 current frame. Need to do this here because this function may be
12467 called more than once when printing a stop, and below, we'll
12468 select the first frame past the Ada run-time (see
12469 ada_find_printable_frame). */
12470 select_frame (get_current_frame ());
12471
37f6a7f4
TT
12472 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12473 switch (c->m_kind)
f7f9143b 12474 {
761269c8
JB
12475 case ada_catch_exception:
12476 case ada_catch_exception_unhandled:
9f757bf7 12477 case ada_catch_handlers:
956a9fb9 12478 {
37f6a7f4 12479 const CORE_ADDR addr = ada_exception_name_addr (c->m_kind, b);
956a9fb9
JB
12480 char exception_name[256];
12481
12482 if (addr != 0)
12483 {
c714b426
PA
12484 read_memory (addr, (gdb_byte *) exception_name,
12485 sizeof (exception_name) - 1);
956a9fb9
JB
12486 exception_name [sizeof (exception_name) - 1] = '\0';
12487 }
12488 else
12489 {
12490 /* For some reason, we were unable to read the exception
12491 name. This could happen if the Runtime was compiled
12492 without debugging info, for instance. In that case,
12493 just replace the exception name by the generic string
12494 "exception" - it will read as "an exception" in the
12495 notification we are about to print. */
967cff16 12496 memcpy (exception_name, "exception", sizeof ("exception"));
956a9fb9
JB
12497 }
12498 /* In the case of unhandled exception breakpoints, we print
12499 the exception name as "unhandled EXCEPTION_NAME", to make
12500 it clearer to the user which kind of catchpoint just got
12501 hit. We used ui_out_text to make sure that this extra
12502 info does not pollute the exception name in the MI case. */
37f6a7f4 12503 if (c->m_kind == ada_catch_exception_unhandled)
112e8700
SM
12504 uiout->text ("unhandled ");
12505 uiout->field_string ("exception-name", exception_name);
956a9fb9
JB
12506 }
12507 break;
761269c8 12508 case ada_catch_assert:
956a9fb9
JB
12509 /* In this case, the name of the exception is not really
12510 important. Just print "failed assertion" to make it clearer
12511 that his program just hit an assertion-failure catchpoint.
12512 We used ui_out_text because this info does not belong in
12513 the MI output. */
112e8700 12514 uiout->text ("failed assertion");
956a9fb9 12515 break;
f7f9143b 12516 }
e547c119 12517
6f46ac85 12518 gdb::unique_xmalloc_ptr<char> exception_message = ada_exception_message ();
e547c119
JB
12519 if (exception_message != NULL)
12520 {
e547c119 12521 uiout->text (" (");
6f46ac85 12522 uiout->field_string ("exception-message", exception_message.get ());
e547c119 12523 uiout->text (")");
e547c119
JB
12524 }
12525
112e8700 12526 uiout->text (" at ");
956a9fb9 12527 ada_find_printable_frame (get_current_frame ());
f7f9143b
JB
12528
12529 return PRINT_SRC_AND_LOC;
12530}
12531
12532/* Implement the PRINT_ONE method in the breakpoint_ops structure
12533 for all exception catchpoint kinds. */
12534
12535static void
37f6a7f4 12536print_one_exception (struct breakpoint *b, struct bp_location **last_loc)
f7f9143b 12537{
79a45e25 12538 struct ui_out *uiout = current_uiout;
28010a5d 12539 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45b7d
TT
12540 struct value_print_options opts;
12541
12542 get_user_print_options (&opts);
f06f1252 12543
79a45b7d 12544 if (opts.addressprint)
f06f1252 12545 uiout->field_skip ("addr");
f7f9143b
JB
12546
12547 annotate_field (5);
37f6a7f4 12548 switch (c->m_kind)
f7f9143b 12549 {
761269c8 12550 case ada_catch_exception:
bc18fbb5 12551 if (!c->excep_string.empty ())
f7f9143b 12552 {
bc18fbb5
TT
12553 std::string msg = string_printf (_("`%s' Ada exception"),
12554 c->excep_string.c_str ());
28010a5d 12555
112e8700 12556 uiout->field_string ("what", msg);
f7f9143b
JB
12557 }
12558 else
112e8700 12559 uiout->field_string ("what", "all Ada exceptions");
f7f9143b
JB
12560
12561 break;
12562
761269c8 12563 case ada_catch_exception_unhandled:
112e8700 12564 uiout->field_string ("what", "unhandled Ada exceptions");
f7f9143b
JB
12565 break;
12566
9f757bf7 12567 case ada_catch_handlers:
bc18fbb5 12568 if (!c->excep_string.empty ())
9f757bf7
XR
12569 {
12570 uiout->field_fmt ("what",
12571 _("`%s' Ada exception handlers"),
bc18fbb5 12572 c->excep_string.c_str ());
9f757bf7
XR
12573 }
12574 else
12575 uiout->field_string ("what", "all Ada exceptions handlers");
12576 break;
12577
761269c8 12578 case ada_catch_assert:
112e8700 12579 uiout->field_string ("what", "failed Ada assertions");
f7f9143b
JB
12580 break;
12581
12582 default:
12583 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12584 break;
12585 }
12586}
12587
12588/* Implement the PRINT_MENTION method in the breakpoint_ops structure
12589 for all exception catchpoint kinds. */
12590
12591static void
37f6a7f4 12592print_mention_exception (struct breakpoint *b)
f7f9143b 12593{
28010a5d 12594 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
79a45e25 12595 struct ui_out *uiout = current_uiout;
28010a5d 12596
112e8700 12597 uiout->text (b->disposition == disp_del ? _("Temporary catchpoint ")
00eb2c4a 12598 : _("Catchpoint "));
381befee 12599 uiout->field_signed ("bkptno", b->number);
112e8700 12600 uiout->text (": ");
00eb2c4a 12601
37f6a7f4 12602 switch (c->m_kind)
f7f9143b 12603 {
761269c8 12604 case ada_catch_exception:
bc18fbb5 12605 if (!c->excep_string.empty ())
00eb2c4a 12606 {
862d101a 12607 std::string info = string_printf (_("`%s' Ada exception"),
bc18fbb5 12608 c->excep_string.c_str ());
862d101a 12609 uiout->text (info.c_str ());
00eb2c4a 12610 }
f7f9143b 12611 else
112e8700 12612 uiout->text (_("all Ada exceptions"));
f7f9143b
JB
12613 break;
12614
761269c8 12615 case ada_catch_exception_unhandled:
112e8700 12616 uiout->text (_("unhandled Ada exceptions"));
f7f9143b 12617 break;
9f757bf7
XR
12618
12619 case ada_catch_handlers:
bc18fbb5 12620 if (!c->excep_string.empty ())
9f757bf7
XR
12621 {
12622 std::string info
12623 = string_printf (_("`%s' Ada exception handlers"),
bc18fbb5 12624 c->excep_string.c_str ());
9f757bf7
XR
12625 uiout->text (info.c_str ());
12626 }
12627 else
12628 uiout->text (_("all Ada exceptions handlers"));
12629 break;
12630
761269c8 12631 case ada_catch_assert:
112e8700 12632 uiout->text (_("failed Ada assertions"));
f7f9143b
JB
12633 break;
12634
12635 default:
12636 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12637 break;
12638 }
12639}
12640
6149aea9
PA
12641/* Implement the PRINT_RECREATE method in the breakpoint_ops structure
12642 for all exception catchpoint kinds. */
12643
12644static void
37f6a7f4 12645print_recreate_exception (struct breakpoint *b, struct ui_file *fp)
6149aea9 12646{
28010a5d
PA
12647 struct ada_catchpoint *c = (struct ada_catchpoint *) b;
12648
37f6a7f4 12649 switch (c->m_kind)
6149aea9 12650 {
761269c8 12651 case ada_catch_exception:
6149aea9 12652 fprintf_filtered (fp, "catch exception");
bc18fbb5
TT
12653 if (!c->excep_string.empty ())
12654 fprintf_filtered (fp, " %s", c->excep_string.c_str ());
6149aea9
PA
12655 break;
12656
761269c8 12657 case ada_catch_exception_unhandled:
78076abc 12658 fprintf_filtered (fp, "catch exception unhandled");
6149aea9
PA
12659 break;
12660
9f757bf7
XR
12661 case ada_catch_handlers:
12662 fprintf_filtered (fp, "catch handlers");
12663 break;
12664
761269c8 12665 case ada_catch_assert:
6149aea9
PA
12666 fprintf_filtered (fp, "catch assert");
12667 break;
12668
12669 default:
12670 internal_error (__FILE__, __LINE__, _("unexpected catchpoint type"));
12671 }
d9b3f62e 12672 print_recreate_thread (b, fp);
6149aea9
PA
12673}
12674
37f6a7f4 12675/* Virtual tables for various breakpoint types. */
2060206e 12676static struct breakpoint_ops catch_exception_breakpoint_ops;
2060206e 12677static struct breakpoint_ops catch_exception_unhandled_breakpoint_ops;
2060206e 12678static struct breakpoint_ops catch_assert_breakpoint_ops;
9f757bf7
XR
12679static struct breakpoint_ops catch_handlers_breakpoint_ops;
12680
f06f1252
TT
12681/* See ada-lang.h. */
12682
12683bool
12684is_ada_exception_catchpoint (breakpoint *bp)
12685{
12686 return (bp->ops == &catch_exception_breakpoint_ops
12687 || bp->ops == &catch_exception_unhandled_breakpoint_ops
12688 || bp->ops == &catch_assert_breakpoint_ops
12689 || bp->ops == &catch_handlers_breakpoint_ops);
12690}
12691
f7f9143b
JB
12692/* Split the arguments specified in a "catch exception" command.
12693 Set EX to the appropriate catchpoint type.
28010a5d 12694 Set EXCEP_STRING to the name of the specific exception if
5845583d 12695 specified by the user.
9f757bf7
XR
12696 IS_CATCH_HANDLERS_CMD: True if the arguments are for a
12697 "catch handlers" command. False otherwise.
5845583d
JB
12698 If a condition is found at the end of the arguments, the condition
12699 expression is stored in COND_STRING (memory must be deallocated
12700 after use). Otherwise COND_STRING is set to NULL. */
f7f9143b
JB
12701
12702static void
a121b7c1 12703catch_ada_exception_command_split (const char *args,
9f757bf7 12704 bool is_catch_handlers_cmd,
761269c8 12705 enum ada_exception_catchpoint_kind *ex,
bc18fbb5
TT
12706 std::string *excep_string,
12707 std::string *cond_string)
f7f9143b 12708{
bc18fbb5 12709 std::string exception_name;
f7f9143b 12710
bc18fbb5
TT
12711 exception_name = extract_arg (&args);
12712 if (exception_name == "if")
5845583d
JB
12713 {
12714 /* This is not an exception name; this is the start of a condition
12715 expression for a catchpoint on all exceptions. So, "un-get"
12716 this token, and set exception_name to NULL. */
bc18fbb5 12717 exception_name.clear ();
5845583d
JB
12718 args -= 2;
12719 }
f7f9143b 12720
5845583d 12721 /* Check to see if we have a condition. */
f7f9143b 12722
f1735a53 12723 args = skip_spaces (args);
61012eef 12724 if (startswith (args, "if")
5845583d
JB
12725 && (isspace (args[2]) || args[2] == '\0'))
12726 {
12727 args += 2;
f1735a53 12728 args = skip_spaces (args);
5845583d
JB
12729
12730 if (args[0] == '\0')
12731 error (_("Condition missing after `if' keyword"));
bc18fbb5 12732 *cond_string = args;
5845583d
JB
12733
12734 args += strlen (args);
12735 }
12736
12737 /* Check that we do not have any more arguments. Anything else
12738 is unexpected. */
f7f9143b
JB
12739
12740 if (args[0] != '\0')
12741 error (_("Junk at end of expression"));
12742
9f757bf7
XR
12743 if (is_catch_handlers_cmd)
12744 {
12745 /* Catch handling of exceptions. */
12746 *ex = ada_catch_handlers;
12747 *excep_string = exception_name;
12748 }
bc18fbb5 12749 else if (exception_name.empty ())
f7f9143b
JB
12750 {
12751 /* Catch all exceptions. */
761269c8 12752 *ex = ada_catch_exception;
bc18fbb5 12753 excep_string->clear ();
f7f9143b 12754 }
bc18fbb5 12755 else if (exception_name == "unhandled")
f7f9143b
JB
12756 {
12757 /* Catch unhandled exceptions. */
761269c8 12758 *ex = ada_catch_exception_unhandled;
bc18fbb5 12759 excep_string->clear ();
f7f9143b
JB
12760 }
12761 else
12762 {
12763 /* Catch a specific exception. */
761269c8 12764 *ex = ada_catch_exception;
28010a5d 12765 *excep_string = exception_name;
f7f9143b
JB
12766 }
12767}
12768
12769/* Return the name of the symbol on which we should break in order to
12770 implement a catchpoint of the EX kind. */
12771
12772static const char *
761269c8 12773ada_exception_sym_name (enum ada_exception_catchpoint_kind ex)
f7f9143b 12774{
3eecfa55
JB
12775 struct ada_inferior_data *data = get_ada_inferior_data (current_inferior ());
12776
12777 gdb_assert (data->exception_info != NULL);
0259addd 12778
f7f9143b
JB
12779 switch (ex)
12780 {
761269c8 12781 case ada_catch_exception:
3eecfa55 12782 return (data->exception_info->catch_exception_sym);
f7f9143b 12783 break;
761269c8 12784 case ada_catch_exception_unhandled:
3eecfa55 12785 return (data->exception_info->catch_exception_unhandled_sym);
f7f9143b 12786 break;
761269c8 12787 case ada_catch_assert:
3eecfa55 12788 return (data->exception_info->catch_assert_sym);
f7f9143b 12789 break;
9f757bf7
XR
12790 case ada_catch_handlers:
12791 return (data->exception_info->catch_handlers_sym);
12792 break;
f7f9143b
JB
12793 default:
12794 internal_error (__FILE__, __LINE__,
12795 _("unexpected catchpoint kind (%d)"), ex);
12796 }
12797}
12798
12799/* Return the breakpoint ops "virtual table" used for catchpoints
12800 of the EX kind. */
12801
c0a91b2b 12802static const struct breakpoint_ops *
761269c8 12803ada_exception_breakpoint_ops (enum ada_exception_catchpoint_kind ex)
f7f9143b
JB
12804{
12805 switch (ex)
12806 {
761269c8 12807 case ada_catch_exception:
f7f9143b
JB
12808 return (&catch_exception_breakpoint_ops);
12809 break;
761269c8 12810 case ada_catch_exception_unhandled:
f7f9143b
JB
12811 return (&catch_exception_unhandled_breakpoint_ops);
12812 break;
761269c8 12813 case ada_catch_assert:
f7f9143b
JB
12814 return (&catch_assert_breakpoint_ops);
12815 break;
9f757bf7
XR
12816 case ada_catch_handlers:
12817 return (&catch_handlers_breakpoint_ops);
12818 break;
f7f9143b
JB
12819 default:
12820 internal_error (__FILE__, __LINE__,
12821 _("unexpected catchpoint kind (%d)"), ex);
12822 }
12823}
12824
12825/* Return the condition that will be used to match the current exception
12826 being raised with the exception that the user wants to catch. This
12827 assumes that this condition is used when the inferior just triggered
12828 an exception catchpoint.
cb7de75e 12829 EX: the type of catchpoints used for catching Ada exceptions. */
f7f9143b 12830
cb7de75e 12831static std::string
9f757bf7
XR
12832ada_exception_catchpoint_cond_string (const char *excep_string,
12833 enum ada_exception_catchpoint_kind ex)
f7f9143b 12834{
3d0b0fa3 12835 int i;
fccf9de1 12836 bool is_standard_exc = false;
cb7de75e 12837 std::string result;
9f757bf7
XR
12838
12839 if (ex == ada_catch_handlers)
12840 {
12841 /* For exception handlers catchpoints, the condition string does
12842 not use the same parameter as for the other exceptions. */
fccf9de1
TT
12843 result = ("long_integer (GNAT_GCC_exception_Access"
12844 "(gcc_exception).all.occurrence.id)");
9f757bf7
XR
12845 }
12846 else
fccf9de1 12847 result = "long_integer (e)";
3d0b0fa3 12848
0963b4bd 12849 /* The standard exceptions are a special case. They are defined in
3d0b0fa3 12850 runtime units that have been compiled without debugging info; if
28010a5d 12851 EXCEP_STRING is the not-fully-qualified name of a standard
3d0b0fa3
JB
12852 exception (e.g. "constraint_error") then, during the evaluation
12853 of the condition expression, the symbol lookup on this name would
0963b4bd 12854 *not* return this standard exception. The catchpoint condition
3d0b0fa3
JB
12855 may then be set only on user-defined exceptions which have the
12856 same not-fully-qualified name (e.g. my_package.constraint_error).
12857
12858 To avoid this unexcepted behavior, these standard exceptions are
0963b4bd 12859 systematically prefixed by "standard". This means that "catch
3d0b0fa3
JB
12860 exception constraint_error" is rewritten into "catch exception
12861 standard.constraint_error".
12862
85102364 12863 If an exception named constraint_error is defined in another package of
3d0b0fa3
JB
12864 the inferior program, then the only way to specify this exception as a
12865 breakpoint condition is to use its fully-qualified named:
fccf9de1 12866 e.g. my_package.constraint_error. */
3d0b0fa3
JB
12867
12868 for (i = 0; i < sizeof (standard_exc) / sizeof (char *); i++)
12869 {
28010a5d 12870 if (strcmp (standard_exc [i], excep_string) == 0)
3d0b0fa3 12871 {
fccf9de1 12872 is_standard_exc = true;
9f757bf7 12873 break;
3d0b0fa3
JB
12874 }
12875 }
9f757bf7 12876
fccf9de1
TT
12877 result += " = ";
12878
12879 if (is_standard_exc)
12880 string_appendf (result, "long_integer (&standard.%s)", excep_string);
12881 else
12882 string_appendf (result, "long_integer (&%s)", excep_string);
9f757bf7 12883
9f757bf7 12884 return result;
f7f9143b
JB
12885}
12886
12887/* Return the symtab_and_line that should be used to insert an exception
12888 catchpoint of the TYPE kind.
12889
28010a5d
PA
12890 ADDR_STRING returns the name of the function where the real
12891 breakpoint that implements the catchpoints is set, depending on the
12892 type of catchpoint we need to create. */
f7f9143b
JB
12893
12894static struct symtab_and_line
bc18fbb5 12895ada_exception_sal (enum ada_exception_catchpoint_kind ex,
cc12f4a8 12896 std::string *addr_string, const struct breakpoint_ops **ops)
f7f9143b
JB
12897{
12898 const char *sym_name;
12899 struct symbol *sym;
f7f9143b 12900
0259addd
JB
12901 /* First, find out which exception support info to use. */
12902 ada_exception_support_info_sniffer ();
12903
12904 /* Then lookup the function on which we will break in order to catch
f7f9143b 12905 the Ada exceptions requested by the user. */
f7f9143b
JB
12906 sym_name = ada_exception_sym_name (ex);
12907 sym = standard_lookup (sym_name, NULL, VAR_DOMAIN);
12908
57aff202
JB
12909 if (sym == NULL)
12910 error (_("Catchpoint symbol not found: %s"), sym_name);
12911
12912 if (SYMBOL_CLASS (sym) != LOC_BLOCK)
12913 error (_("Unable to insert catchpoint. %s is not a function."), sym_name);
f7f9143b
JB
12914
12915 /* Set ADDR_STRING. */
cc12f4a8 12916 *addr_string = sym_name;
f7f9143b 12917
f7f9143b 12918 /* Set OPS. */
4b9eee8c 12919 *ops = ada_exception_breakpoint_ops (ex);
f7f9143b 12920
f17011e0 12921 return find_function_start_sal (sym, 1);
f7f9143b
JB
12922}
12923
b4a5b78b 12924/* Create an Ada exception catchpoint.
f7f9143b 12925
b4a5b78b 12926 EX_KIND is the kind of exception catchpoint to be created.
5845583d 12927
bc18fbb5 12928 If EXCEPT_STRING is empty, this catchpoint is expected to trigger
2df4d1d5 12929 for all exceptions. Otherwise, EXCEPT_STRING indicates the name
bc18fbb5 12930 of the exception to which this catchpoint applies.
2df4d1d5 12931
bc18fbb5 12932 COND_STRING, if not empty, is the catchpoint condition.
f7f9143b 12933
b4a5b78b
JB
12934 TEMPFLAG, if nonzero, means that the underlying breakpoint
12935 should be temporary.
28010a5d 12936
b4a5b78b 12937 FROM_TTY is the usual argument passed to all commands implementations. */
28010a5d 12938
349774ef 12939void
28010a5d 12940create_ada_exception_catchpoint (struct gdbarch *gdbarch,
761269c8 12941 enum ada_exception_catchpoint_kind ex_kind,
bc18fbb5 12942 const std::string &excep_string,
56ecd069 12943 const std::string &cond_string,
28010a5d 12944 int tempflag,
349774ef 12945 int disabled,
28010a5d
PA
12946 int from_tty)
12947{
cc12f4a8 12948 std::string addr_string;
b4a5b78b 12949 const struct breakpoint_ops *ops = NULL;
bc18fbb5 12950 struct symtab_and_line sal = ada_exception_sal (ex_kind, &addr_string, &ops);
28010a5d 12951
37f6a7f4 12952 std::unique_ptr<ada_catchpoint> c (new ada_catchpoint (ex_kind));
cc12f4a8 12953 init_ada_exception_breakpoint (c.get (), gdbarch, sal, addr_string.c_str (),
349774ef 12954 ops, tempflag, disabled, from_tty);
28010a5d 12955 c->excep_string = excep_string;
9f757bf7 12956 create_excep_cond_exprs (c.get (), ex_kind);
56ecd069
XR
12957 if (!cond_string.empty ())
12958 set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty);
b270e6f9 12959 install_breakpoint (0, std::move (c), 1);
f7f9143b
JB
12960}
12961
9ac4176b
PA
12962/* Implement the "catch exception" command. */
12963
12964static void
eb4c3f4a 12965catch_ada_exception_command (const char *arg_entry, int from_tty,
9ac4176b
PA
12966 struct cmd_list_element *command)
12967{
a121b7c1 12968 const char *arg = arg_entry;
9ac4176b
PA
12969 struct gdbarch *gdbarch = get_current_arch ();
12970 int tempflag;
761269c8 12971 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12972 std::string excep_string;
56ecd069 12973 std::string cond_string;
9ac4176b
PA
12974
12975 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
12976
12977 if (!arg)
12978 arg = "";
9f757bf7 12979 catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
bc18fbb5 12980 &cond_string);
9f757bf7
XR
12981 create_ada_exception_catchpoint (gdbarch, ex_kind,
12982 excep_string, cond_string,
12983 tempflag, 1 /* enabled */,
12984 from_tty);
12985}
12986
12987/* Implement the "catch handlers" command. */
12988
12989static void
12990catch_ada_handlers_command (const char *arg_entry, int from_tty,
12991 struct cmd_list_element *command)
12992{
12993 const char *arg = arg_entry;
12994 struct gdbarch *gdbarch = get_current_arch ();
12995 int tempflag;
12996 enum ada_exception_catchpoint_kind ex_kind;
bc18fbb5 12997 std::string excep_string;
56ecd069 12998 std::string cond_string;
9f757bf7
XR
12999
13000 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13001
13002 if (!arg)
13003 arg = "";
13004 catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
bc18fbb5 13005 &cond_string);
b4a5b78b
JB
13006 create_ada_exception_catchpoint (gdbarch, ex_kind,
13007 excep_string, cond_string,
349774ef
JB
13008 tempflag, 1 /* enabled */,
13009 from_tty);
9ac4176b
PA
13010}
13011
71bed2db
TT
13012/* Completion function for the Ada "catch" commands. */
13013
13014static void
13015catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
13016 const char *text, const char *word)
13017{
13018 std::vector<ada_exc_info> exceptions = ada_exceptions_list (NULL);
13019
13020 for (const ada_exc_info &info : exceptions)
13021 {
13022 if (startswith (info.name, word))
b02f78f9 13023 tracker.add_completion (make_unique_xstrdup (info.name));
71bed2db
TT
13024 }
13025}
13026
b4a5b78b 13027/* Split the arguments specified in a "catch assert" command.
5845583d 13028
b4a5b78b
JB
13029 ARGS contains the command's arguments (or the empty string if
13030 no arguments were passed).
5845583d
JB
13031
13032 If ARGS contains a condition, set COND_STRING to that condition
b4a5b78b 13033 (the memory needs to be deallocated after use). */
5845583d 13034
b4a5b78b 13035static void
56ecd069 13036catch_ada_assert_command_split (const char *args, std::string &cond_string)
f7f9143b 13037{
f1735a53 13038 args = skip_spaces (args);
f7f9143b 13039
5845583d 13040 /* Check whether a condition was provided. */
61012eef 13041 if (startswith (args, "if")
5845583d 13042 && (isspace (args[2]) || args[2] == '\0'))
f7f9143b 13043 {
5845583d 13044 args += 2;
f1735a53 13045 args = skip_spaces (args);
5845583d
JB
13046 if (args[0] == '\0')
13047 error (_("condition missing after `if' keyword"));
56ecd069 13048 cond_string.assign (args);
f7f9143b
JB
13049 }
13050
5845583d
JB
13051 /* Otherwise, there should be no other argument at the end of
13052 the command. */
13053 else if (args[0] != '\0')
13054 error (_("Junk at end of arguments."));
f7f9143b
JB
13055}
13056
9ac4176b
PA
13057/* Implement the "catch assert" command. */
13058
13059static void
eb4c3f4a 13060catch_assert_command (const char *arg_entry, int from_tty,
9ac4176b
PA
13061 struct cmd_list_element *command)
13062{
a121b7c1 13063 const char *arg = arg_entry;
9ac4176b
PA
13064 struct gdbarch *gdbarch = get_current_arch ();
13065 int tempflag;
56ecd069 13066 std::string cond_string;
9ac4176b
PA
13067
13068 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
13069
13070 if (!arg)
13071 arg = "";
56ecd069 13072 catch_ada_assert_command_split (arg, cond_string);
761269c8 13073 create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
241db429 13074 "", cond_string,
349774ef
JB
13075 tempflag, 1 /* enabled */,
13076 from_tty);
9ac4176b 13077}
778865d3
JB
13078
13079/* Return non-zero if the symbol SYM is an Ada exception object. */
13080
13081static int
13082ada_is_exception_sym (struct symbol *sym)
13083{
7d93a1e0 13084 const char *type_name = SYMBOL_TYPE (sym)->name ();
778865d3
JB
13085
13086 return (SYMBOL_CLASS (sym) != LOC_TYPEDEF
13087 && SYMBOL_CLASS (sym) != LOC_BLOCK
13088 && SYMBOL_CLASS (sym) != LOC_CONST
13089 && SYMBOL_CLASS (sym) != LOC_UNRESOLVED
13090 && type_name != NULL && strcmp (type_name, "exception") == 0);
13091}
13092
13093/* Given a global symbol SYM, return non-zero iff SYM is a non-standard
13094 Ada exception object. This matches all exceptions except the ones
13095 defined by the Ada language. */
13096
13097static int
13098ada_is_non_standard_exception_sym (struct symbol *sym)
13099{
13100 int i;
13101
13102 if (!ada_is_exception_sym (sym))
13103 return 0;
13104
13105 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
987012b8 13106 if (strcmp (sym->linkage_name (), standard_exc[i]) == 0)
778865d3
JB
13107 return 0; /* A standard exception. */
13108
13109 /* Numeric_Error is also a standard exception, so exclude it.
13110 See the STANDARD_EXC description for more details as to why
13111 this exception is not listed in that array. */
987012b8 13112 if (strcmp (sym->linkage_name (), "numeric_error") == 0)
778865d3
JB
13113 return 0;
13114
13115 return 1;
13116}
13117
ab816a27 13118/* A helper function for std::sort, comparing two struct ada_exc_info
778865d3
JB
13119 objects.
13120
13121 The comparison is determined first by exception name, and then
13122 by exception address. */
13123
ab816a27 13124bool
cc536b21 13125ada_exc_info::operator< (const ada_exc_info &other) const
778865d3 13126{
778865d3
JB
13127 int result;
13128
ab816a27
TT
13129 result = strcmp (name, other.name);
13130 if (result < 0)
13131 return true;
13132 if (result == 0 && addr < other.addr)
13133 return true;
13134 return false;
13135}
778865d3 13136
ab816a27 13137bool
cc536b21 13138ada_exc_info::operator== (const ada_exc_info &other) const
ab816a27
TT
13139{
13140 return addr == other.addr && strcmp (name, other.name) == 0;
778865d3
JB
13141}
13142
13143/* Sort EXCEPTIONS using compare_ada_exception_info as the comparison
13144 routine, but keeping the first SKIP elements untouched.
13145
13146 All duplicates are also removed. */
13147
13148static void
ab816a27 13149sort_remove_dups_ada_exceptions_list (std::vector<ada_exc_info> *exceptions,
778865d3
JB
13150 int skip)
13151{
ab816a27
TT
13152 std::sort (exceptions->begin () + skip, exceptions->end ());
13153 exceptions->erase (std::unique (exceptions->begin () + skip, exceptions->end ()),
13154 exceptions->end ());
778865d3
JB
13155}
13156
778865d3
JB
13157/* Add all exceptions defined by the Ada standard whose name match
13158 a regular expression.
13159
13160 If PREG is not NULL, then this regexp_t object is used to
13161 perform the symbol name matching. Otherwise, no name-based
13162 filtering is performed.
13163
13164 EXCEPTIONS is a vector of exceptions to which matching exceptions
13165 gets pushed. */
13166
13167static void
2d7cc5c7 13168ada_add_standard_exceptions (compiled_regex *preg,
ab816a27 13169 std::vector<ada_exc_info> *exceptions)
778865d3
JB
13170{
13171 int i;
13172
13173 for (i = 0; i < ARRAY_SIZE (standard_exc); i++)
13174 {
13175 if (preg == NULL
2d7cc5c7 13176 || preg->exec (standard_exc[i], 0, NULL, 0) == 0)
778865d3
JB
13177 {
13178 struct bound_minimal_symbol msymbol
13179 = ada_lookup_simple_minsym (standard_exc[i]);
13180
13181 if (msymbol.minsym != NULL)
13182 {
13183 struct ada_exc_info info
77e371c0 13184 = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
778865d3 13185
ab816a27 13186 exceptions->push_back (info);
778865d3
JB
13187 }
13188 }
13189 }
13190}
13191
13192/* Add all Ada exceptions defined locally and accessible from the given
13193 FRAME.
13194
13195 If PREG is not NULL, then this regexp_t object is used to
13196 perform the symbol name matching. Otherwise, no name-based
13197 filtering is performed.
13198
13199 EXCEPTIONS is a vector of exceptions to which matching exceptions
13200 gets pushed. */
13201
13202static void
2d7cc5c7
PA
13203ada_add_exceptions_from_frame (compiled_regex *preg,
13204 struct frame_info *frame,
ab816a27 13205 std::vector<ada_exc_info> *exceptions)
778865d3 13206{
3977b71f 13207 const struct block *block = get_frame_block (frame, 0);
778865d3
JB
13208
13209 while (block != 0)
13210 {
13211 struct block_iterator iter;
13212 struct symbol *sym;
13213
13214 ALL_BLOCK_SYMBOLS (block, iter, sym)
13215 {
13216 switch (SYMBOL_CLASS (sym))
13217 {
13218 case LOC_TYPEDEF:
13219 case LOC_BLOCK:
13220 case LOC_CONST:
13221 break;
13222 default:
13223 if (ada_is_exception_sym (sym))
13224 {
987012b8 13225 struct ada_exc_info info = {sym->print_name (),
778865d3
JB
13226 SYMBOL_VALUE_ADDRESS (sym)};
13227
ab816a27 13228 exceptions->push_back (info);
778865d3
JB
13229 }
13230 }
13231 }
13232 if (BLOCK_FUNCTION (block) != NULL)
13233 break;
13234 block = BLOCK_SUPERBLOCK (block);
13235 }
13236}
13237
14bc53a8
PA
13238/* Return true if NAME matches PREG or if PREG is NULL. */
13239
13240static bool
2d7cc5c7 13241name_matches_regex (const char *name, compiled_regex *preg)
14bc53a8
PA
13242{
13243 return (preg == NULL
f945dedf 13244 || preg->exec (ada_decode (name).c_str (), 0, NULL, 0) == 0);
14bc53a8
PA
13245}
13246
778865d3
JB
13247/* Add all exceptions defined globally whose name name match
13248 a regular expression, excluding standard exceptions.
13249
13250 The reason we exclude standard exceptions is that they need
13251 to be handled separately: Standard exceptions are defined inside
13252 a runtime unit which is normally not compiled with debugging info,
13253 and thus usually do not show up in our symbol search. However,
13254 if the unit was in fact built with debugging info, we need to
13255 exclude them because they would duplicate the entry we found
13256 during the special loop that specifically searches for those
13257 standard exceptions.
13258
13259 If PREG is not NULL, then this regexp_t object is used to
13260 perform the symbol name matching. Otherwise, no name-based
13261 filtering is performed.
13262
13263 EXCEPTIONS is a vector of exceptions to which matching exceptions
13264 gets pushed. */
13265
13266static void
2d7cc5c7 13267ada_add_global_exceptions (compiled_regex *preg,
ab816a27 13268 std::vector<ada_exc_info> *exceptions)
778865d3 13269{
14bc53a8
PA
13270 /* In Ada, the symbol "search name" is a linkage name, whereas the
13271 regular expression used to do the matching refers to the natural
13272 name. So match against the decoded name. */
13273 expand_symtabs_matching (NULL,
b5ec771e 13274 lookup_name_info::match_any (),
14bc53a8
PA
13275 [&] (const char *search_name)
13276 {
f945dedf
CB
13277 std::string decoded = ada_decode (search_name);
13278 return name_matches_regex (decoded.c_str (), preg);
14bc53a8
PA
13279 },
13280 NULL,
13281 VARIABLES_DOMAIN);
778865d3 13282
2030c079 13283 for (objfile *objfile : current_program_space->objfiles ())
778865d3 13284 {
b669c953 13285 for (compunit_symtab *s : objfile->compunits ())
778865d3 13286 {
d8aeb77f
TT
13287 const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (s);
13288 int i;
778865d3 13289
d8aeb77f
TT
13290 for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
13291 {
582942f4 13292 const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
d8aeb77f
TT
13293 struct block_iterator iter;
13294 struct symbol *sym;
778865d3 13295
d8aeb77f
TT
13296 ALL_BLOCK_SYMBOLS (b, iter, sym)
13297 if (ada_is_non_standard_exception_sym (sym)
987012b8 13298 && name_matches_regex (sym->natural_name (), preg))
d8aeb77f
TT
13299 {
13300 struct ada_exc_info info
987012b8 13301 = {sym->print_name (), SYMBOL_VALUE_ADDRESS (sym)};
d8aeb77f
TT
13302
13303 exceptions->push_back (info);
13304 }
13305 }
778865d3
JB
13306 }
13307 }
13308}
13309
13310/* Implements ada_exceptions_list with the regular expression passed
13311 as a regex_t, rather than a string.
13312
13313 If not NULL, PREG is used to filter out exceptions whose names
13314 do not match. Otherwise, all exceptions are listed. */
13315
ab816a27 13316static std::vector<ada_exc_info>
2d7cc5c7 13317ada_exceptions_list_1 (compiled_regex *preg)
778865d3 13318{
ab816a27 13319 std::vector<ada_exc_info> result;
778865d3
JB
13320 int prev_len;
13321
13322 /* First, list the known standard exceptions. These exceptions
13323 need to be handled separately, as they are usually defined in
13324 runtime units that have been compiled without debugging info. */
13325
13326 ada_add_standard_exceptions (preg, &result);
13327
13328 /* Next, find all exceptions whose scope is local and accessible
13329 from the currently selected frame. */
13330
13331 if (has_stack_frames ())
13332 {
ab816a27 13333 prev_len = result.size ();
778865d3
JB
13334 ada_add_exceptions_from_frame (preg, get_selected_frame (NULL),
13335 &result);
ab816a27 13336 if (result.size () > prev_len)
778865d3
JB
13337 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13338 }
13339
13340 /* Add all exceptions whose scope is global. */
13341
ab816a27 13342 prev_len = result.size ();
778865d3 13343 ada_add_global_exceptions (preg, &result);
ab816a27 13344 if (result.size () > prev_len)
778865d3
JB
13345 sort_remove_dups_ada_exceptions_list (&result, prev_len);
13346
778865d3
JB
13347 return result;
13348}
13349
13350/* Return a vector of ada_exc_info.
13351
13352 If REGEXP is NULL, all exceptions are included in the result.
13353 Otherwise, it should contain a valid regular expression,
13354 and only the exceptions whose names match that regular expression
13355 are included in the result.
13356
13357 The exceptions are sorted in the following order:
13358 - Standard exceptions (defined by the Ada language), in
13359 alphabetical order;
13360 - Exceptions only visible from the current frame, in
13361 alphabetical order;
13362 - Exceptions whose scope is global, in alphabetical order. */
13363
ab816a27 13364std::vector<ada_exc_info>
778865d3
JB
13365ada_exceptions_list (const char *regexp)
13366{
2d7cc5c7
PA
13367 if (regexp == NULL)
13368 return ada_exceptions_list_1 (NULL);
778865d3 13369
2d7cc5c7
PA
13370 compiled_regex reg (regexp, REG_NOSUB, _("invalid regular expression"));
13371 return ada_exceptions_list_1 (&reg);
778865d3
JB
13372}
13373
13374/* Implement the "info exceptions" command. */
13375
13376static void
1d12d88f 13377info_exceptions_command (const char *regexp, int from_tty)
778865d3 13378{
778865d3 13379 struct gdbarch *gdbarch = get_current_arch ();
778865d3 13380
ab816a27 13381 std::vector<ada_exc_info> exceptions = ada_exceptions_list (regexp);
778865d3
JB
13382
13383 if (regexp != NULL)
13384 printf_filtered
13385 (_("All Ada exceptions matching regular expression \"%s\":\n"), regexp);
13386 else
13387 printf_filtered (_("All defined Ada exceptions:\n"));
13388
ab816a27
TT
13389 for (const ada_exc_info &info : exceptions)
13390 printf_filtered ("%s: %s\n", info.name, paddress (gdbarch, info.addr));
778865d3
JB
13391}
13392
4c4b4cd2
PH
13393 /* Operators */
13394/* Information about operators given special treatment in functions
13395 below. */
13396/* Format: OP_DEFN (<operator>, <operator length>, <# args>, <binop>). */
13397
13398#define ADA_OPERATORS \
13399 OP_DEFN (OP_VAR_VALUE, 4, 0, 0) \
13400 OP_DEFN (BINOP_IN_BOUNDS, 3, 2, 0) \
13401 OP_DEFN (TERNOP_IN_RANGE, 1, 3, 0) \
13402 OP_DEFN (OP_ATR_FIRST, 1, 2, 0) \
13403 OP_DEFN (OP_ATR_LAST, 1, 2, 0) \
13404 OP_DEFN (OP_ATR_LENGTH, 1, 2, 0) \
13405 OP_DEFN (OP_ATR_IMAGE, 1, 2, 0) \
13406 OP_DEFN (OP_ATR_MAX, 1, 3, 0) \
13407 OP_DEFN (OP_ATR_MIN, 1, 3, 0) \
13408 OP_DEFN (OP_ATR_MODULUS, 1, 1, 0) \
13409 OP_DEFN (OP_ATR_POS, 1, 2, 0) \
13410 OP_DEFN (OP_ATR_SIZE, 1, 1, 0) \
13411 OP_DEFN (OP_ATR_TAG, 1, 1, 0) \
13412 OP_DEFN (OP_ATR_VAL, 1, 2, 0) \
13413 OP_DEFN (UNOP_QUAL, 3, 1, 0) \
52ce6436
PH
13414 OP_DEFN (UNOP_IN_RANGE, 3, 1, 0) \
13415 OP_DEFN (OP_OTHERS, 1, 1, 0) \
13416 OP_DEFN (OP_POSITIONAL, 3, 1, 0) \
13417 OP_DEFN (OP_DISCRETE_RANGE, 1, 2, 0)
4c4b4cd2
PH
13418
13419static void
554794dc
SDJ
13420ada_operator_length (const struct expression *exp, int pc, int *oplenp,
13421 int *argsp)
4c4b4cd2
PH
13422{
13423 switch (exp->elts[pc - 1].opcode)
13424 {
76a01679 13425 default:
4c4b4cd2
PH
13426 operator_length_standard (exp, pc, oplenp, argsp);
13427 break;
13428
13429#define OP_DEFN(op, len, args, binop) \
13430 case op: *oplenp = len; *argsp = args; break;
13431 ADA_OPERATORS;
13432#undef OP_DEFN
52ce6436
PH
13433
13434 case OP_AGGREGATE:
13435 *oplenp = 3;
13436 *argsp = longest_to_int (exp->elts[pc - 2].longconst);
13437 break;
13438
13439 case OP_CHOICES:
13440 *oplenp = 3;
13441 *argsp = longest_to_int (exp->elts[pc - 2].longconst) + 1;
13442 break;
4c4b4cd2
PH
13443 }
13444}
13445
c0201579
JK
13446/* Implementation of the exp_descriptor method operator_check. */
13447
13448static int
13449ada_operator_check (struct expression *exp, int pos,
13450 int (*objfile_func) (struct objfile *objfile, void *data),
13451 void *data)
13452{
13453 const union exp_element *const elts = exp->elts;
13454 struct type *type = NULL;
13455
13456 switch (elts[pos].opcode)
13457 {
13458 case UNOP_IN_RANGE:
13459 case UNOP_QUAL:
13460 type = elts[pos + 1].type;
13461 break;
13462
13463 default:
13464 return operator_check_standard (exp, pos, objfile_func, data);
13465 }
13466
13467 /* Invoke callbacks for TYPE and OBJFILE if they were set as non-NULL. */
13468
13469 if (type && TYPE_OBJFILE (type)
13470 && (*objfile_func) (TYPE_OBJFILE (type), data))
13471 return 1;
13472
13473 return 0;
13474}
13475
a121b7c1 13476static const char *
4c4b4cd2
PH
13477ada_op_name (enum exp_opcode opcode)
13478{
13479 switch (opcode)
13480 {
76a01679 13481 default:
4c4b4cd2 13482 return op_name_standard (opcode);
52ce6436 13483
4c4b4cd2
PH
13484#define OP_DEFN(op, len, args, binop) case op: return #op;
13485 ADA_OPERATORS;
13486#undef OP_DEFN
52ce6436
PH
13487
13488 case OP_AGGREGATE:
13489 return "OP_AGGREGATE";
13490 case OP_CHOICES:
13491 return "OP_CHOICES";
13492 case OP_NAME:
13493 return "OP_NAME";
4c4b4cd2
PH
13494 }
13495}
13496
13497/* As for operator_length, but assumes PC is pointing at the first
13498 element of the operator, and gives meaningful results only for the
52ce6436 13499 Ada-specific operators, returning 0 for *OPLENP and *ARGSP otherwise. */
4c4b4cd2
PH
13500
13501static void
76a01679
JB
13502ada_forward_operator_length (struct expression *exp, int pc,
13503 int *oplenp, int *argsp)
4c4b4cd2 13504{
76a01679 13505 switch (exp->elts[pc].opcode)
4c4b4cd2
PH
13506 {
13507 default:
13508 *oplenp = *argsp = 0;
13509 break;
52ce6436 13510
4c4b4cd2
PH
13511#define OP_DEFN(op, len, args, binop) \
13512 case op: *oplenp = len; *argsp = args; break;
13513 ADA_OPERATORS;
13514#undef OP_DEFN
52ce6436
PH
13515
13516 case OP_AGGREGATE:
13517 *oplenp = 3;
13518 *argsp = longest_to_int (exp->elts[pc + 1].longconst);
13519 break;
13520
13521 case OP_CHOICES:
13522 *oplenp = 3;
13523 *argsp = longest_to_int (exp->elts[pc + 1].longconst) + 1;
13524 break;
13525
13526 case OP_STRING:
13527 case OP_NAME:
13528 {
13529 int len = longest_to_int (exp->elts[pc + 1].longconst);
5b4ee69b 13530
52ce6436
PH
13531 *oplenp = 4 + BYTES_TO_EXP_ELEM (len + 1);
13532 *argsp = 0;
13533 break;
13534 }
4c4b4cd2
PH
13535 }
13536}
13537
13538static int
13539ada_dump_subexp_body (struct expression *exp, struct ui_file *stream, int elt)
13540{
13541 enum exp_opcode op = exp->elts[elt].opcode;
13542 int oplen, nargs;
13543 int pc = elt;
13544 int i;
76a01679 13545
4c4b4cd2
PH
13546 ada_forward_operator_length (exp, elt, &oplen, &nargs);
13547
76a01679 13548 switch (op)
4c4b4cd2 13549 {
76a01679 13550 /* Ada attributes ('Foo). */
4c4b4cd2
PH
13551 case OP_ATR_FIRST:
13552 case OP_ATR_LAST:
13553 case OP_ATR_LENGTH:
13554 case OP_ATR_IMAGE:
13555 case OP_ATR_MAX:
13556 case OP_ATR_MIN:
13557 case OP_ATR_MODULUS:
13558 case OP_ATR_POS:
13559 case OP_ATR_SIZE:
13560 case OP_ATR_TAG:
13561 case OP_ATR_VAL:
13562 break;
13563
13564 case UNOP_IN_RANGE:
13565 case UNOP_QUAL:
323e0a4a
AC
13566 /* XXX: gdb_sprint_host_address, type_sprint */
13567 fprintf_filtered (stream, _("Type @"));
4c4b4cd2
PH
13568 gdb_print_host_address (exp->elts[pc + 1].type, stream);
13569 fprintf_filtered (stream, " (");
13570 type_print (exp->elts[pc + 1].type, NULL, stream, 0);
13571 fprintf_filtered (stream, ")");
13572 break;
13573 case BINOP_IN_BOUNDS:
52ce6436
PH
13574 fprintf_filtered (stream, " (%d)",
13575 longest_to_int (exp->elts[pc + 2].longconst));
4c4b4cd2
PH
13576 break;
13577 case TERNOP_IN_RANGE:
13578 break;
13579
52ce6436
PH
13580 case OP_AGGREGATE:
13581 case OP_OTHERS:
13582 case OP_DISCRETE_RANGE:
13583 case OP_POSITIONAL:
13584 case OP_CHOICES:
13585 break;
13586
13587 case OP_NAME:
13588 case OP_STRING:
13589 {
13590 char *name = &exp->elts[elt + 2].string;
13591 int len = longest_to_int (exp->elts[elt + 1].longconst);
5b4ee69b 13592
52ce6436
PH
13593 fprintf_filtered (stream, "Text: `%.*s'", len, name);
13594 break;
13595 }
13596
4c4b4cd2
PH
13597 default:
13598 return dump_subexp_body_standard (exp, stream, elt);
13599 }
13600
13601 elt += oplen;
13602 for (i = 0; i < nargs; i += 1)
13603 elt = dump_subexp (exp, stream, elt);
13604
13605 return elt;
13606}
13607
13608/* The Ada extension of print_subexp (q.v.). */
13609
76a01679
JB
13610static void
13611ada_print_subexp (struct expression *exp, int *pos,
13612 struct ui_file *stream, enum precedence prec)
4c4b4cd2 13613{
52ce6436 13614 int oplen, nargs, i;
4c4b4cd2
PH
13615 int pc = *pos;
13616 enum exp_opcode op = exp->elts[pc].opcode;
13617
13618 ada_forward_operator_length (exp, pc, &oplen, &nargs);
13619
52ce6436 13620 *pos += oplen;
4c4b4cd2
PH
13621 switch (op)
13622 {
13623 default:
52ce6436 13624 *pos -= oplen;
4c4b4cd2
PH
13625 print_subexp_standard (exp, pos, stream, prec);
13626 return;
13627
13628 case OP_VAR_VALUE:
987012b8 13629 fputs_filtered (exp->elts[pc + 2].symbol->natural_name (), stream);
4c4b4cd2
PH
13630 return;
13631
13632 case BINOP_IN_BOUNDS:
323e0a4a 13633 /* XXX: sprint_subexp */
4c4b4cd2 13634 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13635 fputs_filtered (" in ", stream);
4c4b4cd2 13636 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13637 fputs_filtered ("'range", stream);
4c4b4cd2 13638 if (exp->elts[pc + 1].longconst > 1)
76a01679
JB
13639 fprintf_filtered (stream, "(%ld)",
13640 (long) exp->elts[pc + 1].longconst);
4c4b4cd2
PH
13641 return;
13642
13643 case TERNOP_IN_RANGE:
4c4b4cd2 13644 if (prec >= PREC_EQUAL)
76a01679 13645 fputs_filtered ("(", stream);
323e0a4a 13646 /* XXX: sprint_subexp */
4c4b4cd2 13647 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13648 fputs_filtered (" in ", stream);
4c4b4cd2
PH
13649 print_subexp (exp, pos, stream, PREC_EQUAL);
13650 fputs_filtered (" .. ", stream);
13651 print_subexp (exp, pos, stream, PREC_EQUAL);
13652 if (prec >= PREC_EQUAL)
76a01679
JB
13653 fputs_filtered (")", stream);
13654 return;
4c4b4cd2
PH
13655
13656 case OP_ATR_FIRST:
13657 case OP_ATR_LAST:
13658 case OP_ATR_LENGTH:
13659 case OP_ATR_IMAGE:
13660 case OP_ATR_MAX:
13661 case OP_ATR_MIN:
13662 case OP_ATR_MODULUS:
13663 case OP_ATR_POS:
13664 case OP_ATR_SIZE:
13665 case OP_ATR_TAG:
13666 case OP_ATR_VAL:
4c4b4cd2 13667 if (exp->elts[*pos].opcode == OP_TYPE)
76a01679 13668 {
78134374 13669 if (exp->elts[*pos + 1].type->code () != TYPE_CODE_VOID)
79d43c61
TT
13670 LA_PRINT_TYPE (exp->elts[*pos + 1].type, "", stream, 0, 0,
13671 &type_print_raw_options);
76a01679
JB
13672 *pos += 3;
13673 }
4c4b4cd2 13674 else
76a01679 13675 print_subexp (exp, pos, stream, PREC_SUFFIX);
4c4b4cd2
PH
13676 fprintf_filtered (stream, "'%s", ada_attribute_name (op));
13677 if (nargs > 1)
76a01679
JB
13678 {
13679 int tem;
5b4ee69b 13680
76a01679
JB
13681 for (tem = 1; tem < nargs; tem += 1)
13682 {
13683 fputs_filtered ((tem == 1) ? " (" : ", ", stream);
13684 print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
13685 }
13686 fputs_filtered (")", stream);
13687 }
4c4b4cd2 13688 return;
14f9c5c9 13689
4c4b4cd2 13690 case UNOP_QUAL:
4c4b4cd2
PH
13691 type_print (exp->elts[pc + 1].type, "", stream, 0);
13692 fputs_filtered ("'(", stream);
13693 print_subexp (exp, pos, stream, PREC_PREFIX);
13694 fputs_filtered (")", stream);
13695 return;
14f9c5c9 13696
4c4b4cd2 13697 case UNOP_IN_RANGE:
323e0a4a 13698 /* XXX: sprint_subexp */
4c4b4cd2 13699 print_subexp (exp, pos, stream, PREC_SUFFIX);
0b48a291 13700 fputs_filtered (" in ", stream);
79d43c61
TT
13701 LA_PRINT_TYPE (exp->elts[pc + 1].type, "", stream, 1, 0,
13702 &type_print_raw_options);
4c4b4cd2 13703 return;
52ce6436
PH
13704
13705 case OP_DISCRETE_RANGE:
13706 print_subexp (exp, pos, stream, PREC_SUFFIX);
13707 fputs_filtered ("..", stream);
13708 print_subexp (exp, pos, stream, PREC_SUFFIX);
13709 return;
13710
13711 case OP_OTHERS:
13712 fputs_filtered ("others => ", stream);
13713 print_subexp (exp, pos, stream, PREC_SUFFIX);
13714 return;
13715
13716 case OP_CHOICES:
13717 for (i = 0; i < nargs-1; i += 1)
13718 {
13719 if (i > 0)
13720 fputs_filtered ("|", stream);
13721 print_subexp (exp, pos, stream, PREC_SUFFIX);
13722 }
13723 fputs_filtered (" => ", stream);
13724 print_subexp (exp, pos, stream, PREC_SUFFIX);
13725 return;
13726
13727 case OP_POSITIONAL:
13728 print_subexp (exp, pos, stream, PREC_SUFFIX);
13729 return;
13730
13731 case OP_AGGREGATE:
13732 fputs_filtered ("(", stream);
13733 for (i = 0; i < nargs; i += 1)
13734 {
13735 if (i > 0)
13736 fputs_filtered (", ", stream);
13737 print_subexp (exp, pos, stream, PREC_SUFFIX);
13738 }
13739 fputs_filtered (")", stream);
13740 return;
4c4b4cd2
PH
13741 }
13742}
14f9c5c9
AS
13743
13744/* Table mapping opcodes into strings for printing operators
13745 and precedences of the operators. */
13746
d2e4a39e
AS
13747static const struct op_print ada_op_print_tab[] = {
13748 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
13749 {"or else", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
13750 {"and then", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
13751 {"or", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
13752 {"xor", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
13753 {"and", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
13754 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
13755 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
13756 {"<=", BINOP_LEQ, PREC_ORDER, 0},
13757 {">=", BINOP_GEQ, PREC_ORDER, 0},
13758 {">", BINOP_GTR, PREC_ORDER, 0},
13759 {"<", BINOP_LESS, PREC_ORDER, 0},
13760 {">>", BINOP_RSH, PREC_SHIFT, 0},
13761 {"<<", BINOP_LSH, PREC_SHIFT, 0},
13762 {"+", BINOP_ADD, PREC_ADD, 0},
13763 {"-", BINOP_SUB, PREC_ADD, 0},
13764 {"&", BINOP_CONCAT, PREC_ADD, 0},
13765 {"*", BINOP_MUL, PREC_MUL, 0},
13766 {"/", BINOP_DIV, PREC_MUL, 0},
13767 {"rem", BINOP_REM, PREC_MUL, 0},
13768 {"mod", BINOP_MOD, PREC_MUL, 0},
13769 {"**", BINOP_EXP, PREC_REPEAT, 0},
13770 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
13771 {"-", UNOP_NEG, PREC_PREFIX, 0},
13772 {"+", UNOP_PLUS, PREC_PREFIX, 0},
13773 {"not ", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
13774 {"not ", UNOP_COMPLEMENT, PREC_PREFIX, 0},
13775 {"abs ", UNOP_ABS, PREC_PREFIX, 0},
4c4b4cd2
PH
13776 {".all", UNOP_IND, PREC_SUFFIX, 1},
13777 {"'access", UNOP_ADDR, PREC_SUFFIX, 1},
13778 {"'size", OP_ATR_SIZE, PREC_SUFFIX, 1},
f486487f 13779 {NULL, OP_NULL, PREC_SUFFIX, 0}
14f9c5c9
AS
13780};
13781\f
72d5681a
PH
13782enum ada_primitive_types {
13783 ada_primitive_type_int,
13784 ada_primitive_type_long,
13785 ada_primitive_type_short,
13786 ada_primitive_type_char,
13787 ada_primitive_type_float,
13788 ada_primitive_type_double,
13789 ada_primitive_type_void,
13790 ada_primitive_type_long_long,
13791 ada_primitive_type_long_double,
13792 ada_primitive_type_natural,
13793 ada_primitive_type_positive,
13794 ada_primitive_type_system_address,
08f49010 13795 ada_primitive_type_storage_offset,
72d5681a
PH
13796 nr_ada_primitive_types
13797};
6c038f32
PH
13798
13799static void
d4a9a881 13800ada_language_arch_info (struct gdbarch *gdbarch,
72d5681a
PH
13801 struct language_arch_info *lai)
13802{
d4a9a881 13803 const struct builtin_type *builtin = builtin_type (gdbarch);
5b4ee69b 13804
72d5681a 13805 lai->primitive_type_vector
d4a9a881 13806 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_ada_primitive_types + 1,
72d5681a 13807 struct type *);
e9bb382b
UW
13808
13809 lai->primitive_type_vector [ada_primitive_type_int]
13810 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13811 0, "integer");
13812 lai->primitive_type_vector [ada_primitive_type_long]
13813 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
13814 0, "long_integer");
13815 lai->primitive_type_vector [ada_primitive_type_short]
13816 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch),
13817 0, "short_integer");
13818 lai->string_char_type
13819 = lai->primitive_type_vector [ada_primitive_type_char]
cd7c1778 13820 = arch_character_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
e9bb382b
UW
13821 lai->primitive_type_vector [ada_primitive_type_float]
13822 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
49f190bc 13823 "float", gdbarch_float_format (gdbarch));
e9bb382b
UW
13824 lai->primitive_type_vector [ada_primitive_type_double]
13825 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
49f190bc 13826 "long_float", gdbarch_double_format (gdbarch));
e9bb382b
UW
13827 lai->primitive_type_vector [ada_primitive_type_long_long]
13828 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch),
13829 0, "long_long_integer");
13830 lai->primitive_type_vector [ada_primitive_type_long_double]
5f3bceb6 13831 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
49f190bc 13832 "long_long_float", gdbarch_long_double_format (gdbarch));
e9bb382b
UW
13833 lai->primitive_type_vector [ada_primitive_type_natural]
13834 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13835 0, "natural");
13836 lai->primitive_type_vector [ada_primitive_type_positive]
13837 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
13838 0, "positive");
13839 lai->primitive_type_vector [ada_primitive_type_void]
13840 = builtin->builtin_void;
13841
13842 lai->primitive_type_vector [ada_primitive_type_system_address]
77b7c781
UW
13843 = lookup_pointer_type (arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT,
13844 "void"));
d0e39ea2
SM
13845 lai->primitive_type_vector [ada_primitive_type_system_address]
13846 ->set_name ("system__address");
fbb06eb1 13847
08f49010
XR
13848 /* Create the equivalent of the System.Storage_Elements.Storage_Offset
13849 type. This is a signed integral type whose size is the same as
13850 the size of addresses. */
13851 {
13852 unsigned int addr_length = TYPE_LENGTH
13853 (lai->primitive_type_vector [ada_primitive_type_system_address]);
13854
13855 lai->primitive_type_vector [ada_primitive_type_storage_offset]
13856 = arch_integer_type (gdbarch, addr_length * HOST_CHAR_BIT, 0,
13857 "storage_offset");
13858 }
13859
47e729a8 13860 lai->bool_type_symbol = NULL;
fbb06eb1 13861 lai->bool_type_default = builtin->builtin_bool;
6c038f32 13862}
6c038f32
PH
13863\f
13864 /* Language vector */
13865
13866/* Not really used, but needed in the ada_language_defn. */
13867
13868static void
6c7a06a3 13869emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
6c038f32 13870{
6c7a06a3 13871 ada_emit_char (c, type, stream, quoter, 1);
6c038f32
PH
13872}
13873
13874static int
410a0ff2 13875parse (struct parser_state *ps)
6c038f32
PH
13876{
13877 warnings_issued = 0;
410a0ff2 13878 return ada_parse (ps);
6c038f32
PH
13879}
13880
13881static const struct exp_descriptor ada_exp_descriptor = {
13882 ada_print_subexp,
13883 ada_operator_length,
c0201579 13884 ada_operator_check,
6c038f32
PH
13885 ada_op_name,
13886 ada_dump_subexp_body,
13887 ada_evaluate_subexp
13888};
13889
b5ec771e
PA
13890/* symbol_name_matcher_ftype adapter for wild_match. */
13891
13892static bool
13893do_wild_match (const char *symbol_search_name,
13894 const lookup_name_info &lookup_name,
a207cff2 13895 completion_match_result *comp_match_res)
b5ec771e
PA
13896{
13897 return wild_match (symbol_search_name, ada_lookup_name (lookup_name));
13898}
13899
13900/* symbol_name_matcher_ftype adapter for full_match. */
13901
13902static bool
13903do_full_match (const char *symbol_search_name,
13904 const lookup_name_info &lookup_name,
a207cff2 13905 completion_match_result *comp_match_res)
b5ec771e
PA
13906{
13907 return full_match (symbol_search_name, ada_lookup_name (lookup_name));
13908}
13909
a2cd4f14
JB
13910/* symbol_name_matcher_ftype for exact (verbatim) matches. */
13911
13912static bool
13913do_exact_match (const char *symbol_search_name,
13914 const lookup_name_info &lookup_name,
13915 completion_match_result *comp_match_res)
13916{
13917 return strcmp (symbol_search_name, ada_lookup_name (lookup_name)) == 0;
13918}
13919
b5ec771e
PA
13920/* Build the Ada lookup name for LOOKUP_NAME. */
13921
13922ada_lookup_name_info::ada_lookup_name_info (const lookup_name_info &lookup_name)
13923{
e0802d59 13924 gdb::string_view user_name = lookup_name.name ();
b5ec771e
PA
13925
13926 if (user_name[0] == '<')
13927 {
13928 if (user_name.back () == '>')
e0802d59
TT
13929 m_encoded_name
13930 = user_name.substr (1, user_name.size () - 2).to_string ();
b5ec771e 13931 else
e0802d59
TT
13932 m_encoded_name
13933 = user_name.substr (1, user_name.size () - 1).to_string ();
b5ec771e
PA
13934 m_encoded_p = true;
13935 m_verbatim_p = true;
13936 m_wild_match_p = false;
13937 m_standard_p = false;
13938 }
13939 else
13940 {
13941 m_verbatim_p = false;
13942
e0802d59 13943 m_encoded_p = user_name.find ("__") != gdb::string_view::npos;
b5ec771e
PA
13944
13945 if (!m_encoded_p)
13946 {
e0802d59 13947 const char *folded = ada_fold_name (user_name);
b5ec771e
PA
13948 const char *encoded = ada_encode_1 (folded, false);
13949 if (encoded != NULL)
13950 m_encoded_name = encoded;
13951 else
e0802d59 13952 m_encoded_name = user_name.to_string ();
b5ec771e
PA
13953 }
13954 else
e0802d59 13955 m_encoded_name = user_name.to_string ();
b5ec771e
PA
13956
13957 /* Handle the 'package Standard' special case. See description
13958 of m_standard_p. */
13959 if (startswith (m_encoded_name.c_str (), "standard__"))
13960 {
13961 m_encoded_name = m_encoded_name.substr (sizeof ("standard__") - 1);
13962 m_standard_p = true;
13963 }
13964 else
13965 m_standard_p = false;
74ccd7f5 13966
b5ec771e
PA
13967 /* If the name contains a ".", then the user is entering a fully
13968 qualified entity name, and the match must not be done in wild
13969 mode. Similarly, if the user wants to complete what looks
13970 like an encoded name, the match must not be done in wild
13971 mode. Also, in the standard__ special case always do
13972 non-wild matching. */
13973 m_wild_match_p
13974 = (lookup_name.match_type () != symbol_name_match_type::FULL
13975 && !m_encoded_p
13976 && !m_standard_p
13977 && user_name.find ('.') == std::string::npos);
13978 }
13979}
13980
13981/* symbol_name_matcher_ftype method for Ada. This only handles
13982 completion mode. */
13983
13984static bool
13985ada_symbol_name_matches (const char *symbol_search_name,
13986 const lookup_name_info &lookup_name,
a207cff2 13987 completion_match_result *comp_match_res)
74ccd7f5 13988{
b5ec771e
PA
13989 return lookup_name.ada ().matches (symbol_search_name,
13990 lookup_name.match_type (),
a207cff2 13991 comp_match_res);
b5ec771e
PA
13992}
13993
de63c46b
PA
13994/* A name matcher that matches the symbol name exactly, with
13995 strcmp. */
13996
13997static bool
13998literal_symbol_name_matcher (const char *symbol_search_name,
13999 const lookup_name_info &lookup_name,
14000 completion_match_result *comp_match_res)
14001{
e0802d59 14002 gdb::string_view name_view = lookup_name.name ();
de63c46b 14003
e0802d59
TT
14004 if (lookup_name.completion_mode ()
14005 ? (strncmp (symbol_search_name, name_view.data (),
14006 name_view.size ()) == 0)
14007 : symbol_search_name == name_view)
de63c46b
PA
14008 {
14009 if (comp_match_res != NULL)
14010 comp_match_res->set_match (symbol_search_name);
14011 return true;
14012 }
14013 else
14014 return false;
14015}
14016
b5ec771e
PA
14017/* Implement the "la_get_symbol_name_matcher" language_defn method for
14018 Ada. */
14019
14020static symbol_name_matcher_ftype *
14021ada_get_symbol_name_matcher (const lookup_name_info &lookup_name)
14022{
de63c46b
PA
14023 if (lookup_name.match_type () == symbol_name_match_type::SEARCH_NAME)
14024 return literal_symbol_name_matcher;
14025
b5ec771e
PA
14026 if (lookup_name.completion_mode ())
14027 return ada_symbol_name_matches;
74ccd7f5 14028 else
b5ec771e
PA
14029 {
14030 if (lookup_name.ada ().wild_match_p ())
14031 return do_wild_match;
a2cd4f14
JB
14032 else if (lookup_name.ada ().verbatim_p ())
14033 return do_exact_match;
b5ec771e
PA
14034 else
14035 return do_full_match;
14036 }
74ccd7f5
JB
14037}
14038
a5ee536b
JB
14039/* Implement the "la_read_var_value" language_defn method for Ada. */
14040
14041static struct value *
63e43d3a
PMR
14042ada_read_var_value (struct symbol *var, const struct block *var_block,
14043 struct frame_info *frame)
a5ee536b 14044{
a5ee536b
JB
14045 /* The only case where default_read_var_value is not sufficient
14046 is when VAR is a renaming... */
c0e70c62
TT
14047 if (frame != nullptr)
14048 {
14049 const struct block *frame_block = get_frame_block (frame, NULL);
14050 if (frame_block != nullptr && ada_is_renaming_symbol (var))
14051 return ada_read_renaming_var_value (var, frame_block);
14052 }
a5ee536b
JB
14053
14054 /* This is a typical case where we expect the default_read_var_value
14055 function to work. */
63e43d3a 14056 return default_read_var_value (var, var_block, frame);
a5ee536b
JB
14057}
14058
56618e20
TT
14059static const char *ada_extensions[] =
14060{
14061 ".adb", ".ads", ".a", ".ada", ".dg", NULL
14062};
14063
47e77640 14064extern const struct language_defn ada_language_defn = {
6c038f32 14065 "ada", /* Language name */
6abde28f 14066 "Ada",
6c038f32 14067 language_ada,
6c038f32 14068 range_check_off,
6c038f32
PH
14069 case_sensitive_on, /* Yes, Ada is case-insensitive, but
14070 that's not quite what this means. */
6c038f32 14071 array_row_major,
9a044a89 14072 macro_expansion_no,
56618e20 14073 ada_extensions,
6c038f32
PH
14074 &ada_exp_descriptor,
14075 parse,
6c038f32
PH
14076 resolve,
14077 ada_printchar, /* Print a character constant */
14078 ada_printstr, /* Function to print string constant */
14079 emit_char, /* Function to print single char (not used) */
6c038f32 14080 ada_print_type, /* Print a type using appropriate syntax */
be942545 14081 ada_print_typedef, /* Print a typedef using appropriate syntax */
26792ee0 14082 ada_value_print_inner, /* la_value_print_inner */
6c038f32 14083 ada_value_print, /* Print a top-level value */
a5ee536b 14084 ada_read_var_value, /* la_read_var_value */
6c038f32 14085 NULL, /* Language specific skip_trampoline */
2b2d9e11 14086 NULL, /* name_of_this */
59cc4834 14087 true, /* la_store_sym_names_in_linkage_form_p */
6c038f32
PH
14088 ada_lookup_symbol_nonlocal, /* Looking up non-local symbols. */
14089 basic_lookup_transparent_type, /* lookup_transparent_type */
14090 ada_la_decode, /* Language specific symbol demangler */
8b302db8 14091 ada_sniff_from_mangled_name,
0963b4bd
MS
14092 NULL, /* Language specific
14093 class_name_from_physname */
6c038f32
PH
14094 ada_op_print_tab, /* expression operators for printing */
14095 0, /* c-style arrays */
14096 1, /* String lower bound */
6c038f32 14097 ada_get_gdb_completer_word_break_characters,
eb3ff9a5 14098 ada_collect_symbol_completion_matches,
72d5681a 14099 ada_language_arch_info,
e79af960 14100 ada_print_array_index,
41f1b697 14101 default_pass_by_reference,
e2b7af72 14102 ada_watch_location_expression,
b5ec771e 14103 ada_get_symbol_name_matcher, /* la_get_symbol_name_matcher */
f8eba3c6 14104 ada_iterate_over_symbols,
5ffa0793 14105 default_search_name_hash,
a53b64ea 14106 &ada_varobj_ops,
bb2ec1b3 14107 NULL,
721b08c6 14108 NULL,
4be290b2 14109 ada_is_string_type,
721b08c6 14110 "(...)" /* la_struct_too_deep_ellipsis */
6c038f32
PH
14111};
14112
5bf03f13
JB
14113/* Command-list for the "set/show ada" prefix command. */
14114static struct cmd_list_element *set_ada_list;
14115static struct cmd_list_element *show_ada_list;
14116
2060206e
PA
14117static void
14118initialize_ada_catchpoint_ops (void)
14119{
14120 struct breakpoint_ops *ops;
14121
14122 initialize_breakpoint_ops ();
14123
14124 ops = &catch_exception_breakpoint_ops;
14125 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14126 ops->allocate_location = allocate_location_exception;
14127 ops->re_set = re_set_exception;
14128 ops->check_status = check_status_exception;
14129 ops->print_it = print_it_exception;
14130 ops->print_one = print_one_exception;
14131 ops->print_mention = print_mention_exception;
14132 ops->print_recreate = print_recreate_exception;
2060206e
PA
14133
14134 ops = &catch_exception_unhandled_breakpoint_ops;
14135 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14136 ops->allocate_location = allocate_location_exception;
14137 ops->re_set = re_set_exception;
14138 ops->check_status = check_status_exception;
14139 ops->print_it = print_it_exception;
14140 ops->print_one = print_one_exception;
14141 ops->print_mention = print_mention_exception;
14142 ops->print_recreate = print_recreate_exception;
2060206e
PA
14143
14144 ops = &catch_assert_breakpoint_ops;
14145 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14146 ops->allocate_location = allocate_location_exception;
14147 ops->re_set = re_set_exception;
14148 ops->check_status = check_status_exception;
14149 ops->print_it = print_it_exception;
14150 ops->print_one = print_one_exception;
14151 ops->print_mention = print_mention_exception;
14152 ops->print_recreate = print_recreate_exception;
9f757bf7
XR
14153
14154 ops = &catch_handlers_breakpoint_ops;
14155 *ops = bkpt_breakpoint_ops;
37f6a7f4
TT
14156 ops->allocate_location = allocate_location_exception;
14157 ops->re_set = re_set_exception;
14158 ops->check_status = check_status_exception;
14159 ops->print_it = print_it_exception;
14160 ops->print_one = print_one_exception;
14161 ops->print_mention = print_mention_exception;
14162 ops->print_recreate = print_recreate_exception;
2060206e
PA
14163}
14164
3d9434b5
JB
14165/* This module's 'new_objfile' observer. */
14166
14167static void
14168ada_new_objfile_observer (struct objfile *objfile)
14169{
14170 ada_clear_symbol_cache ();
14171}
14172
14173/* This module's 'free_objfile' observer. */
14174
14175static void
14176ada_free_objfile_observer (struct objfile *objfile)
14177{
14178 ada_clear_symbol_cache ();
14179}
14180
6c265988 14181void _initialize_ada_language ();
d2e4a39e 14182void
6c265988 14183_initialize_ada_language ()
14f9c5c9 14184{
2060206e
PA
14185 initialize_ada_catchpoint_ops ();
14186
0743fc83
TT
14187 add_basic_prefix_cmd ("ada", no_class,
14188 _("Prefix command for changing Ada-specific settings."),
14189 &set_ada_list, "set ada ", 0, &setlist);
5bf03f13 14190
0743fc83
TT
14191 add_show_prefix_cmd ("ada", no_class,
14192 _("Generic command for showing Ada-specific settings."),
14193 &show_ada_list, "show ada ", 0, &showlist);
5bf03f13
JB
14194
14195 add_setshow_boolean_cmd ("trust-PAD-over-XVS", class_obscure,
14196 &trust_pad_over_xvs, _("\
590042fc
PW
14197Enable or disable an optimization trusting PAD types over XVS types."), _("\
14198Show whether an optimization trusting PAD types over XVS types is activated."),
5bf03f13
JB
14199 _("\
14200This is related to the encoding used by the GNAT compiler. The debugger\n\
14201should normally trust the contents of PAD types, but certain older versions\n\
14202of GNAT have a bug that sometimes causes the information in the PAD type\n\
14203to be incorrect. Turning this setting \"off\" allows the debugger to\n\
14204work around this bug. It is always safe to turn this option \"off\", but\n\
14205this incurs a slight performance penalty, so it is recommended to NOT change\n\
14206this option to \"off\" unless necessary."),
14207 NULL, NULL, &set_ada_list, &show_ada_list);
14208
d72413e6
PMR
14209 add_setshow_boolean_cmd ("print-signatures", class_vars,
14210 &print_signatures, _("\
14211Enable or disable the output of formal and return types for functions in the \
590042fc 14212overloads selection menu."), _("\
d72413e6 14213Show whether the output of formal and return types for functions in the \
590042fc 14214overloads selection menu is activated."),
d72413e6
PMR
14215 NULL, NULL, NULL, &set_ada_list, &show_ada_list);
14216
9ac4176b
PA
14217 add_catch_command ("exception", _("\
14218Catch Ada exceptions, when raised.\n\
9bf7038b 14219Usage: catch exception [ARG] [if CONDITION]\n\
60a90376
JB
14220Without any argument, stop when any Ada exception is raised.\n\
14221If ARG is \"unhandled\" (without the quotes), only stop when the exception\n\
14222being raised does not have a handler (and will therefore lead to the task's\n\
14223termination).\n\
14224Otherwise, the catchpoint only stops when the name of the exception being\n\
9bf7038b
TT
14225raised is the same as ARG.\n\
14226CONDITION is a boolean expression that is evaluated to see whether the\n\
14227exception should cause a stop."),
9ac4176b 14228 catch_ada_exception_command,
71bed2db 14229 catch_ada_completer,
9ac4176b
PA
14230 CATCH_PERMANENT,
14231 CATCH_TEMPORARY);
9f757bf7
XR
14232
14233 add_catch_command ("handlers", _("\
14234Catch Ada exceptions, when handled.\n\
9bf7038b
TT
14235Usage: catch handlers [ARG] [if CONDITION]\n\
14236Without any argument, stop when any Ada exception is handled.\n\
14237With an argument, catch only exceptions with the given name.\n\
14238CONDITION is a boolean expression that is evaluated to see whether the\n\
14239exception should cause a stop."),
9f757bf7 14240 catch_ada_handlers_command,
71bed2db 14241 catch_ada_completer,
9f757bf7
XR
14242 CATCH_PERMANENT,
14243 CATCH_TEMPORARY);
9ac4176b
PA
14244 add_catch_command ("assert", _("\
14245Catch failed Ada assertions, when raised.\n\
9bf7038b
TT
14246Usage: catch assert [if CONDITION]\n\
14247CONDITION is a boolean expression that is evaluated to see whether the\n\
14248exception should cause a stop."),
9ac4176b
PA
14249 catch_assert_command,
14250 NULL,
14251 CATCH_PERMANENT,
14252 CATCH_TEMPORARY);
14253
6c038f32 14254 varsize_limit = 65536;
3fcded8f
JB
14255 add_setshow_uinteger_cmd ("varsize-limit", class_support,
14256 &varsize_limit, _("\
14257Set the maximum number of bytes allowed in a variable-size object."), _("\
14258Show the maximum number of bytes allowed in a variable-size object."), _("\
14259Attempts to access an object whose size is not a compile-time constant\n\
14260and exceeds this limit will cause an error."),
14261 NULL, NULL, &setlist, &showlist);
6c038f32 14262
778865d3
JB
14263 add_info ("exceptions", info_exceptions_command,
14264 _("\
14265List all Ada exception names.\n\
9bf7038b 14266Usage: info exceptions [REGEXP]\n\
778865d3
JB
14267If a regular expression is passed as an argument, only those matching\n\
14268the regular expression are listed."));
14269
0743fc83
TT
14270 add_basic_prefix_cmd ("ada", class_maintenance,
14271 _("Set Ada maintenance-related variables."),
14272 &maint_set_ada_cmdlist, "maintenance set ada ",
14273 0/*allow-unknown*/, &maintenance_set_cmdlist);
c6044dd1 14274
0743fc83
TT
14275 add_show_prefix_cmd ("ada", class_maintenance,
14276 _("Show Ada maintenance-related variables."),
14277 &maint_show_ada_cmdlist, "maintenance show ada ",
14278 0/*allow-unknown*/, &maintenance_show_cmdlist);
c6044dd1
JB
14279
14280 add_setshow_boolean_cmd
14281 ("ignore-descriptive-types", class_maintenance,
14282 &ada_ignore_descriptive_types_p,
14283 _("Set whether descriptive types generated by GNAT should be ignored."),
14284 _("Show whether descriptive types generated by GNAT should be ignored."),
14285 _("\
14286When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
14287DWARF attribute."),
14288 NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
14289
459a2e4c
TT
14290 decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
14291 NULL, xcalloc, xfree);
6b69afc4 14292
3d9434b5 14293 /* The ada-lang observers. */
76727919
TT
14294 gdb::observers::new_objfile.attach (ada_new_objfile_observer);
14295 gdb::observers::free_objfile.attach (ada_free_objfile_observer);
14296 gdb::observers::inferior_exit.attach (ada_inferior_exit);
14f9c5c9 14297}
This page took 2.707438 seconds and 4 git commands to generate.